Name: series-workflowcskww Phase: Succeeded StartedAt: 2026-08-02 11:00:30 +0000 UTC FinishedAt: 2026-08-02 15:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[0] Phase: Succeeded StartedAt: 2026-08-02 11:00:30 +0000 UTC FinishedAt: 2026-08-02 11:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 11:00:30 +0000 UTC FinishedAt: 2026-08-02 11:19:09 +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": "fdeba03fea78407a8c52faa99177c9f7f29f90eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "fdeba03fea78407a8c52faa99177c9f7f29f90eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER" ], "series_id": "2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sk_psock_init_strp", "sk_psock_start_strp", "sk_psock_start_verdict", "sk_msg_recvmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tfcHNvY2tfaW5pdF9zdHJwJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0YXJ0X3N0cnAmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RhcnRfdmVyZGljdCYjMzQ7LAogICAgJiMzNDtza19tc2dfcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgYW5kIGBza19wc29ja19za2JfaW5ncmVzc2AgdG8gaGFuZGxlIGBza19mb3J3YXJkX2FsbG9jYCBkZWZpY2l0IHdoZW4gYXNzaWduaW5nIHJlY2VpdmUgb3duZXJzaGlwIHRvIGEgZGlyZWN0IHN0cnBhcnNlciBTS19QQVNTIGNsb25lLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHNvY2ttYXAvc2ttc2cgQlBGIGluZnJhc3RydWN0dXJlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIEJQRiBzb2NrbWFwIHdpdGggYSBzdHJlYW0gcGFyc2VyIGFuZCB2ZXJkaWN0IHByb2dyYW0gYXR0YWNoZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZmFjOTFiYjMzOTNlZGVmZjkwMmJlMjRlNjVjYWE2MmY2NzNlYmMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxMToxNzoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuY1xuaW5kZXggMjUyMWI2NDNmYTA1ZC4uY2U1YWQ4MTYwMjgyOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrbXNnLmNcbkBAIC01ODYsNyAmIzQzOzU4Niw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIH1cbiBcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZik7XG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuJiM0MztcdFx0XHRcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKTtcbiBcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHR1MzIgb2ZmLCB1MzIgbGVuKVxuQEAgLTU5NSwxMiAmIzQzOzU5Niw5IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBza19tc2cgKm1zZztcbiBcdGludCBlcnI7XG4gXG4tXHQvKiBJZiB3ZSBhcmUgcmVjZWl2aW5nIG9uIHRoZSBzYW1lIHNvY2sgc2tiLVx1MDAzZXNrIGlzIGFscmVhZHkgYXNzaWduZWQsXG4tXHQgKiBza2lwIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBvd25lciB0cmFuc2l0aW9uIHNlZWluZyBpdCBhbHJlYWR5IHNldFxuLVx0ICogY29ycmVjdGx5LlxuLVx0ICovXG4gXHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZXNrID09IHNrKSlcbi1cdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUpO1xuJiM0MztcdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUsXG4mIzQzO1x0XHRcdFx0XHRcdCBza2JfYnBmX3N0cnBhcnNlcihza2IpKTtcbiBcdG1zZyA9IHNrX3Bzb2NrX2NyZWF0ZV9pbmdyZXNzX21zZyhzaywgc2tiKTtcbiBcdGlmICghbXNnKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbkBAIC02MTgsMTIgJiM0Mzs2MTYsMTQgQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgb2YgdGhlIHNvY2tldCBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZVxuLSAqIHNrYi4gSW4gdGhpcyBjYXNlIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIG1lbW9yeSBsaW1pdHMgb3Igc2tiX3NldF9vd25lcl9yXG4tICogYmVjYXVzZSB0aGUgc2tiIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBoZXJlLlxuJiM0MzsvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stXHUwMDNlc2suXG4mIzQzOyAqXG4mIzQzOyAqIEJlZm9yZSBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXAgdG8gYSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgY2xvbmUsXG4mIzQzOyAqIHNldHRsZSBhbnkgZXhpc3Rpbmcgc2tfZm9yd2FyZF9hbGxvYyBkZWZpY2l0IGZyb20gZWFybGllciBjbG9uZSBjaGFyZ2VzLlxuICAqL1xuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKVxuJiM0MztcdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcbiYjNDM7XHRcdFx0XHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcbiB7XG4gXHRzdHJ1Y3Qgc2tfbXNnICptc2cgPSBhbGxvY19za19tc2coR0ZQX0FUT01JQyk7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cdTAwM2VzaztcbkBAIC02MzEsNiAmIzQzOzYzMSwxMyBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYlxuIFxuIFx0aWYgKHVubGlrZWx5KCFtc2cpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldHRsZV9md2RfYWxsb2MgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApKSB7XG4mIzQzO1x0XHRrZnJlZShtc2cpO1xuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0fVxuJiM0MztcbiBcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbiBcbiBcdC8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG5AQCAtMTAxNyw2ICYjNDM7MTAyNCw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgKiByZXRyeWluZyBsYXRlciBmcm9tIHdvcmtxdWV1ZS5cbiBcdFx0ICovXG4gXHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19za2IpKSB7XG4mIzQzO1x0XHRcdGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyA9IGZhbHNlO1xuJiM0MztcbiBcdFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRcdG9mZiA9IDA7XG4gXHRcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbkBAIC0xMDI0LDggJiM0MzsxMDMzLDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0XHRcdFx0b2ZmID0gc3RtLVx1MDAzZW9mZnNldDtcbiBcdFx0XHRcdGxlbiA9IHN0bS1cdTAwM2VmdWxsX2xlbjtcbiYjNDM7XHRcdFx0XHRzZXR0bGVfZndkX2FsbG9jID0gdHJ1ZTtcbiBcdFx0XHR9XG4tXHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgZmFsc2UpO1xuJiM0MztcdFx0XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLFxuJiM0MztcdFx0XHRcdFx0XHRcdGZhbHNlLCBzZXR0bGVfZndkX2FsbG9jKTtcbiBcdFx0fVxuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuaW5kZXggMWQ3MjMxNzI4ZWFmZC4uYzdhZDIxZDBiYmY0OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuQEAgLTEsNSAmIzQzOzEsOSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc29ja19kaWFnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7c29ja21hcF9oZWxwZXJzLmhcJiMzNDtcbkBAIC00NjAsNiAmIzQzOzQ2NCwxNzEgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCh2b2lkKVxuIFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4gfVxuIFxuJiM0MzsvKiBSZWFkIHNrX2ZvcndhcmRfYWxsb2MgdGhyb3VnaCBpbmV0X2RpYWcgbWVtaW5mby4gKi9cbiYjNDM7c3RhdGljIGludCBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhpbnQgc29jaywgaW50ICpmd2RfYWxsb2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsb2NhbCA9IHt9LCBwZWVyID0ge307XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luICpsb2NhbF9pbiwgKnBlZXJfaW47XG4mIzQzO1x0c29ja2xlbl90IGFkZHJfbGVuID0gc2l6ZW9mKGxvY2FsKTtcbiYjNDM7XHRjaGFyIGJ1ZlsxMDI0XTtcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0c3RydWN0IG5sbXNnaGRyIG5saDtcbiYjNDM7XHRcdHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyIHJlcTtcbiYjNDM7XHR9IHJlcSA9IHtcbiYjNDM7XHRcdC5ubGggPSB7XG4mIzQzO1x0XHRcdC5ubG1zZ19sZW4gPSBzaXplb2YocmVxKSxcbiYjNDM7XHRcdFx0Lm5sbXNnX3R5cGUgPSBTT0NLX0RJQUdfQllfRkFNSUxZLFxuJiM0MztcdFx0XHQubmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNULFxuJiM0MztcdFx0XHQubmxtc2dfc2VxID0gMSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHQucmVxID0ge1xuJiM0MztcdFx0XHQuc2RpYWdfZmFtaWx5ID0gQUZfSU5FVCxcbiYjNDM7XHRcdFx0LnNkaWFnX3Byb3RvY29sID0gSVBQUk9UT19UQ1AsXG4mIzQzO1x0XHRcdC5pZGlhZ19leHQgPSAxIFx1MDAzY1x1MDAzYyAoSU5FVF9ESUFHX01FTUlORk8gLSAxKSxcbiYjNDM7XHRcdFx0LmlkaWFnX3N0YXRlcyA9IH4wVSxcbiYjNDM7XHRcdFx0LmlkLmlkaWFnX2Nvb2tpZSA9IHtcbiYjNDM7XHRcdFx0XHRJTkVUX0RJQUdfTk9DT09LSUUsXG4mIzQzO1x0XHRcdFx0SU5FVF9ESUFHX05PQ09PS0lFLFxuJiM0MztcdFx0XHR9LFxuJiM0MztcdFx0fSxcbiYjNDM7XHR9O1xuJiM0MztcdGludCBkaWFnX2ZkLCByZXQsIGVyciA9IC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRzb2NrbmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2bG9jYWwsIFx1MDAyNmFkZHJfbGVuKSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1x0YWRkcl9sZW4gPSBzaXplb2YocGVlcik7XG4mIzQzO1x0aWYgKGdldHBlZXJuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZwZWVyLCBcdTAwMjZhZGRyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRsb2NhbF9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcdTAwMjZsb2NhbDtcbiYjNDM7XHRwZWVyX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNnBlZXI7XG4mIzQzO1x0cmVxLnJlcS5pZC5pZGlhZ19zcG9ydCA9IGxvY2FsX2luLVx1MDAzZXNpbl9wb3J0O1xuJiM0MztcdHJlcS5yZXEuaWQuaWRpYWdfZHBvcnQgPSBwZWVyX2luLVx1MDAzZXNpbl9wb3J0O1xuJiM0MztcdHJlcS5yZXEuaWQuaWRpYWdfc3JjWzBdID0gbG9jYWxfaW4tXHUwMDNlc2luX2FkZHIuc19hZGRyO1xuJiM0MztcdHJlcS5yZXEuaWQuaWRpYWdfZHN0WzBdID0gcGVlcl9pbi1cdTAwM2VzaW5fYWRkci5zX2FkZHI7XG4mIzQzO1xuJiM0MztcdGRpYWdfZmQgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcgfCBTT0NLX0NMT0VYRUMsXG4mIzQzO1x0XHRcdCBORVRMSU5LX1NPQ0tfRElBRyk7XG4mIzQzO1x0aWYgKGRpYWdfZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzZW5kKGRpYWdfZmQsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGVyciA9IC1lcnJubztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocmV0ICE9IHNpemVvZihyZXEpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUlPO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSByZWN2KGRpYWdfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGVyciA9IC1lcnJubztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilidWY7XG4mIzQzO1x0ICAgICBOTE1TR19PSyhubGgsIHJldCk7IG5saCA9IE5MTVNHX05FWFQobmxoLCByZXQpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqbXNnID0gTkxNU0dfREFUQShubGgpO1xuJiM0MztcdFx0c3RydWN0IHJ0YXR0ciAqYXR0cjtcbiYjNDM7XHRcdGludCBsZW47XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5saC1cdTAwM2VubG1zZ190eXBlID09IE5MTVNHX0VSUk9SKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKG5saC1cdTAwM2VubG1zZ190eXBlID09IE5MTVNHX0RPTkUpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGxlbiA9IG5saC1cdTAwM2VubG1zZ19sZW4gLSBOTE1TR19MRU5HVEgoc2l6ZW9mKCptc2cpKTtcbiYjNDM7XHRcdGZvciAoYXR0ciA9IChzdHJ1Y3QgcnRhdHRyICopKG1zZyAmIzQzOyAxKTsgUlRBX09LKGF0dHIsIGxlbik7XG4mIzQzO1x0XHQgICAgIGF0dHIgPSBSVEFfTkVYVChhdHRyLCBsZW4pKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBpbmV0X2RpYWdfbWVtaW5mbyAqbWluZm87XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoYXR0ci1cdTAwM2VydGFfdHlwZSAhPSBJTkVUX0RJQUdfTUVNSU5GTylcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0bWluZm8gPSBSVEFfREFUQShhdHRyKTtcbiYjNDM7XHRcdFx0KmZ3ZF9hbGxvYyA9IChfX3MzMiltaW5mby1cdTAwM2VpZGlhZ19mbWVtO1xuJiM0MztcdFx0XHRlcnIgPSAwO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y2xvc2UoZGlhZ19mZCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGVzdCBzdHJwYXJzZXIgU0tfUEFTUyBkZWxpdmVyeSB0byB0aGUgc2FtZSBzb2NrZXQuICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2Modm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfc3RycCAqc3RycCA9IE5VTEw7XG4mIzQzO1x0Y2hhciBzbmRbNCAqIDEwMjRdO1xuJiM0MztcdGludCBjID0gLTEsIHAgPSAtMTtcbiYjNDM7XHRpbnQgZndkX2FsbG9jO1xuJiM0MztcdGludCBzbmRidWYgPSBzaXplb2Yoc25kKTtcbiYjNDM7XHRpbnQgemVybyA9IDA7XG4mIzQzO1x0Y2hhciByY3Y7XG4mIzQzO1x0aW50IHNlbnQsIHJlY3ZkO1xuJiM0MztcdGludCBtYXA7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KHNuZCwgMHhhNSwgc2l6ZW9mKHNuZCkpO1xuJiM0MztcbiYjNDM7XHRzdHJwID0gdGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc3RycCwgXCYjMzQ7dGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtYXAgPSBicGZfbWFwX19mZChzdHJwLVx1MDAzZW1hcHMuc29ja19tYXApO1xuJiM0MztcdGVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtXHUwMDNlcHJvZ3MucHJvZ19za2JfcGFyc2VyX29uZSksXG4mIzQzO1x0XHRcdCAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdGVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtXHUwMDNlcHJvZ3MucHJvZ19za2JfdmVyZGljdF9wYXNzKSxcbiYjNDM7XHRcdFx0ICAgICAgIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVCwgMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdGVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBcdTAwMjZjLCBcdTAwMjZwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2NyZWF0ZV9wYWlyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdGVyciA9IHhzZXRzb2Nrb3B0KGMsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgXHUwMDI2c25kYnVmLCBzaXplb2Yoc25kYnVmKSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdGVyciA9IHhzZXRzb2Nrb3B0KHAsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgXHUwMDI2c25kYnVmLCBzaXplb2Yoc25kYnVmKSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdGVyciA9IHhicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcCwgXHUwMDI2emVybywgXHUwMDI2cCwgQlBGX05PRVhJU1QpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRzZW50ID0gc2VuZChjLCBzbmQsIHNpemVvZihzbmQpLCBNU0dfRE9OVFdBSVQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNlbnQsIHNpemVvZihzbmQpLCBcJiMzNDtzZW5kXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdHJlY3ZkID0gcmVjdl90aW1lb3V0KHAsIFx1MDAyNnJjdiwgc2l6ZW9mKHJjdiksIE1TR19ET05UV0FJVCxcbiYjNDM7XHRcdFx0ICAgICBJT19USU1FT1VUX1NFQyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocmVjdmQsIHNpemVvZihyY3YpLCBcJiMzNDtyZWN2X3RpbWVvdXRcJiMzNDspIHx8XG4mIzQzO1x0ICAgICFBU1NFUlRfRVEocmN2LCBzbmRbMF0sIFwmIzM0O2RhdGEgbWlzbWF0Y2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGVzdHJveTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MocCwgXHUwMDI2ZndkX2FsbG9jKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX0dFKGZ3ZF9hbGxvYywgMCwgXCYjMzQ7c2tfZm9yd2FyZF9hbGxvY1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztvdXRfZGVzdHJveTpcbiYjNDM7XHR0ZXN0X3NvY2ttYXBfc3RycF9fZGVzdHJveShzdHJwKTtcbiYjNDM7XHRpZiAoYyBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShjKTtcbiYjNDM7XHRpZiAocCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShwKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c29ja21hcCBzdHJwIHRjcCBwYXNzXCYjMzQ7KSlcbkBAIC00ODIsNCAmIzQzOzY1MSw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcbiBcdFx0dGVzdF9zb2NrbWFwX3N0cnBfZGlzcGF0Y2hfcGt0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2RcJiMzNDspKVxuIFx0XHR0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c29ja21hcCBzdHJwIHNlbGYgcGFzcyBmd2QgYWxsb2NcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYygpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG5pbmRleCBmZTg4ZmE2ZDQwYmM1Li42ODJlNTNkNDA3NTFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG5AQCAtNTAsNiAmIzQzOzUwLDEyIEBAIGludCBwcm9nX3NrYl9wYXJzZXJfcGFydGlhbChzdHJ1Y3QgX19za19idWZmICpza2IpXG4gXHRyZXR1cm4gMTA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7c2tfc2tiL3N0cmVhbV9wYXJzZXJcJiMzNDspXG4mIzQzO2ludCBwcm9nX3NrYl9wYXJzZXJfb25lKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDtza19za2Ivc3RyZWFtX3BhcnNlclwmIzM0OylcbiBpbnQgcHJvZ19za2JfcGFyc2VyX3Jlc2l6ZShzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3Bzb2NrX2luaXRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF9zdHJwJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3QmIzM0OywKICAgICYjMzQ7c2tfbXNnX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgIHRvIGhhbmRsZSBgc2tfZm9yd2FyZF9hbGxvY2AgZGVmaWNpdCB3aGVuIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byBhIGRpcmVjdCBzdHJwYXJzZXIgU0tfUEFTUyBjbG9uZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzb2NrbWFwL3NrbXNnIEJQRiBpbmZyYXN0cnVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBCUEYgc29ja21hcCB3aXRoIGEgc3RyZWFtIHBhcnNlciBhbmQgdmVyZGljdCBwcm9ncmFtIGF0dGFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWZhYzkxYmIzMzkzZWRlZmY5MDJiZTI0ZTY1Y2FhNjJmNjczZWJjMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMTE6MTc6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuYwppbmRleCAyNTIxYjY0M2ZhMDVkLi5jZTVhZDgxNjAyODI4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9za21zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrbXNnLmMKQEAgLTU4Niw3ICYjNDM7NTg2LDggQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsCiB9CiAKIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZik7CiYjNDM7CQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZiwKJiM0MzsJCQkJICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpOwogCiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJdTMyIG9mZiwgdTMyIGxlbikKQEAgLTU5NSwxMiAmIzQzOzU5Niw5IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3Qgc2tfbXNnICptc2c7CiAJaW50IGVycjsKIAotCS8qIElmIHdlIGFyZSByZWNlaXZpbmcgb24gdGhlIHNhbWUgc29jayBza2ItJmd0O3NrIGlzIGFscmVhZHkgYXNzaWduZWQsCi0JICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXQKLQkgKiBjb3JyZWN0bHkuCi0JICovCiAJaWYgKHVubGlrZWx5KHNrYi0mZ3Q7c2sgPT0gc2spKQotCQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSk7CiYjNDM7CQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSwKJiM0MzsJCQkJCQkgc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSk7CiAJbXNnID0gc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHNrLCBza2IpOwogCWlmICghbXNnKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTYxOCwxMiAmIzQzOzYxNiwxNCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIGVycjsKIH0KIAotLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgb2YgdGhlIHNvY2tldCBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZQotICogc2tiLiBJbiB0aGlzIGNhc2Ugd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgbWVtb3J5IGxpbWl0cyBvciBza2Jfc2V0X293bmVyX3IKLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS4KJiM0MzsvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stJmd0O3NrLgomIzQzOyAqCiYjNDM7ICogQmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byBhIGRpcmVjdCBzdHJwYXJzZXIgU0tfUEFTUyBjbG9uZSwKJiM0MzsgKiBzZXR0bGUgYW55IGV4aXN0aW5nIHNrX2ZvcndhcmRfYWxsb2MgZGVmaWNpdCBmcm9tIGVhcmxpZXIgY2xvbmUgY2hhcmdlcy4KICAqLwogc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKQomIzQzOwkJCQkgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsCiYjNDM7CQkJCSAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKQogewogCXN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay0mZ3Q7c2s7CkBAIC02MzEsNiAmIzQzOzYzMSwxMyBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYgogCiAJaWYgKHVubGlrZWx5KCFtc2cpKQogCQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsKJiM0MzsJaWYgKHNldHRsZV9md2RfYWxsb2MgJmFtcDsmYW1wOwomIzQzOwkgICAgIXNrX3JtZW1fc2NoZWR1bGUoc2ssIHNrYiwgMCkpIHsKJiM0MzsJCWtmcmVlKG1zZyk7CiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJfQomIzQzOwogCXNrYl9zZXRfb3duZXJfcihza2IsIHNrKTsKIAogCS8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlCkBAIC0xMDE3LDYgJiM0MzsxMDI0LDggQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLgogCQkgKi8KIAkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmYW1wO3Bzb2NrLSZndDtpbmdyZXNzX3NrYikpIHsKJiM0MzsJCQlib29sIHNldHRsZV9md2RfYWxsb2MgPSBmYWxzZTsKJiM0MzsKIAkJCWxlbiA9IHNrYi0mZ3Q7bGVuOwogCQkJb2ZmID0gMDsKIAkJCWlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7CkBAIC0xMDI0LDggJiM0MzsxMDMzLDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJCQkJb2ZmID0gc3RtLSZndDtvZmZzZXQ7CiAJCQkJbGVuID0gc3RtLSZndDtmdWxsX2xlbjsKJiM0MzsJCQkJc2V0dGxlX2Z3ZF9hbGxvYyA9IHRydWU7CiAJCQl9Ci0JCQllcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7CiYjNDM7CQkJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwKJiM0MzsJCQkJCQkJZmFsc2UsIHNldHRsZV9md2RfYWxsb2MpOwogCQl9CiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlzcGluX2xvY2tfYmgoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19sb2NrKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKaW5kZXggMWQ3MjMxNzI4ZWFmZC4uYzdhZDIxZDBiYmY0OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKQEAgLTEsNSAmIzQzOzEsOSBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKICNpbmNsdWRlICZsdDtlcnJvci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbmV0X2RpYWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc29ja19kaWFnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0aW5ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3NvY2ttYXBfaGVscGVycy5oJiMzNDsKQEAgLTQ2MCw2ICYjNDM7NDY0LDE3MSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpCiAJdGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7CiB9CiAKJiM0MzsvKiBSZWFkIHNrX2ZvcndhcmRfYWxsb2MgdGhyb3VnaCBpbmV0X2RpYWcgbWVtaW5mby4gKi8KJiM0MztzdGF0aWMgaW50IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKGludCBzb2NrLCBpbnQgKmZ3ZF9hbGxvYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGxvY2FsID0ge30sIHBlZXIgPSB7fTsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luICpsb2NhbF9pbiwgKnBlZXJfaW47CiYjNDM7CXNvY2tsZW5fdCBhZGRyX2xlbiA9IHNpemVvZihsb2NhbCk7CiYjNDM7CWNoYXIgYnVmWzEwMjRdOwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJc3RydWN0IG5sbXNnaGRyIG5saDsKJiM0MzsJCXN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyIHJlcTsKJiM0MzsJfSByZXEgPSB7CiYjNDM7CQkubmxoID0gewomIzQzOwkJCS5ubG1zZ19sZW4gPSBzaXplb2YocmVxKSwKJiM0MzsJCQkubmxtc2dfdHlwZSA9IFNPQ0tfRElBR19CWV9GQU1JTFksCiYjNDM7CQkJLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCwKJiM0MzsJCQkubmxtc2dfc2VxID0gMSwKJiM0MzsJCX0sCiYjNDM7CQkucmVxID0gewomIzQzOwkJCS5zZGlhZ19mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJCS5zZGlhZ19wcm90b2NvbCA9IElQUFJPVE9fVENQLAomIzQzOwkJCS5pZGlhZ19leHQgPSAxICZsdDsmbHQ7IChJTkVUX0RJQUdfTUVNSU5GTyAtIDEpLAomIzQzOwkJCS5pZGlhZ19zdGF0ZXMgPSB+MFUsCiYjNDM7CQkJLmlkLmlkaWFnX2Nvb2tpZSA9IHsKJiM0MzsJCQkJSU5FVF9ESUFHX05PQ09PS0lFLAomIzQzOwkJCQlJTkVUX0RJQUdfTk9DT09LSUUsCiYjNDM7CQkJfSwKJiM0MzsJCX0sCiYjNDM7CX07CiYjNDM7CWludCBkaWFnX2ZkLCByZXQsIGVyciA9IC1FTk9FTlQ7CiYjNDM7CiYjNDM7CWlmIChnZXRzb2NrbmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtsb2NhbCwgJmFtcDthZGRyX2xlbikpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwlhZGRyX2xlbiA9IHNpemVvZihwZWVyKTsKJiM0MzsJaWYgKGdldHBlZXJuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO3BlZXIsICZhbXA7YWRkcl9sZW4pKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJbG9jYWxfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmFtcDtsb2NhbDsKJiM0MzsJcGVlcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYW1wO3BlZXI7CiYjNDM7CXJlcS5yZXEuaWQuaWRpYWdfc3BvcnQgPSBsb2NhbF9pbi0mZ3Q7c2luX3BvcnQ7CiYjNDM7CXJlcS5yZXEuaWQuaWRpYWdfZHBvcnQgPSBwZWVyX2luLSZndDtzaW5fcG9ydDsKJiM0MzsJcmVxLnJlcS5pZC5pZGlhZ19zcmNbMF0gPSBsb2NhbF9pbi0mZ3Q7c2luX2FkZHIuc19hZGRyOwomIzQzOwlyZXEucmVxLmlkLmlkaWFnX2RzdFswXSA9IHBlZXJfaW4tJmd0O3Npbl9hZGRyLnNfYWRkcjsKJiM0MzsKJiM0MzsJZGlhZ19mZCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVyB8IFNPQ0tfQ0xPRVhFQywKJiM0MzsJCQkgTkVUTElOS19TT0NLX0RJQUcpOwomIzQzOwlpZiAoZGlhZ19mZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwlyZXQgPSBzZW5kKGRpYWdfZmQsICZhbXA7cmVxLCBzaXplb2YocmVxKSwgMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSAtZXJybm87CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlpZiAocmV0ICE9IHNpemVvZihyZXEpKSB7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcmVjdihkaWFnX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCWVyciA9IC1lcnJubzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopYnVmOwomIzQzOwkgICAgIE5MTVNHX09LKG5saCwgcmV0KTsgbmxoID0gTkxNU0dfTkVYVChubGgsIHJldCkpIHsKJiM0MzsJCXN0cnVjdCBpbmV0X2RpYWdfbXNnICptc2cgPSBOTE1TR19EQVRBKG5saCk7CiYjNDM7CQlzdHJ1Y3QgcnRhdHRyICphdHRyOwomIzQzOwkJaW50IGxlbjsKJiM0MzsKJiM0MzsJCWlmIChubGgtJmd0O25sbXNnX3R5cGUgPT0gTkxNU0dfRVJST1IpIHsKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwkJaWYgKG5saC0mZ3Q7bmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJbGVuID0gbmxoLSZndDtubG1zZ19sZW4gLSBOTE1TR19MRU5HVEgoc2l6ZW9mKCptc2cpKTsKJiM0MzsJCWZvciAoYXR0ciA9IChzdHJ1Y3QgcnRhdHRyICopKG1zZyAmIzQzOyAxKTsgUlRBX09LKGF0dHIsIGxlbik7CiYjNDM7CQkgICAgIGF0dHIgPSBSVEFfTkVYVChhdHRyLCBsZW4pKSB7CiYjNDM7CQkJc3RydWN0IGluZXRfZGlhZ19tZW1pbmZvICptaW5mbzsKJiM0MzsKJiM0MzsJCQlpZiAoYXR0ci0mZ3Q7cnRhX3R5cGUgIT0gSU5FVF9ESUFHX01FTUlORk8pCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCW1pbmZvID0gUlRBX0RBVEEoYXR0cik7CiYjNDM7CQkJKmZ3ZF9hbGxvYyA9IChfX3MzMiltaW5mby0mZ3Q7aWRpYWdfZm1lbTsKJiM0MzsJCQllcnIgPSAwOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShkaWFnX2ZkKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGVzdCBzdHJwYXJzZXIgU0tfUEFTUyBkZWxpdmVyeSB0byB0aGUgc2FtZSBzb2NrZXQuICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3Rfc29ja21hcF9zdHJwICpzdHJwID0gTlVMTDsKJiM0MzsJY2hhciBzbmRbNCAqIDEwMjRdOwomIzQzOwlpbnQgYyA9IC0xLCBwID0gLTE7CiYjNDM7CWludCBmd2RfYWxsb2M7CiYjNDM7CWludCBzbmRidWYgPSBzaXplb2Yoc25kKTsKJiM0MzsJaW50IHplcm8gPSAwOwomIzQzOwljaGFyIHJjdjsKJiM0MzsJaW50IHNlbnQsIHJlY3ZkOwomIzQzOwlpbnQgbWFwOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwltZW1zZXQoc25kLCAweGE1LCBzaXplb2Yoc25kKSk7CiYjNDM7CiYjNDM7CXN0cnAgPSB0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc3RycCwgJiMzNDt0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbWFwID0gYnBmX21hcF9fZmQoc3RycC0mZ3Q7bWFwcy5zb2NrX21hcCk7CiYjNDM7CWVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtJmd0O3Byb2dzLnByb2dfc2tiX3BhcnNlcl9vbmUpLAomIzQzOwkJCSAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzOwomIzQzOwllcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLSZndDtwcm9ncy5wcm9nX3NrYl92ZXJkaWN0X3Bhc3MpLAomIzQzOwkJCSAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0gY3JlYXRlX3BhaXIoQUZfSU5FVCwgU09DS19TVFJFQU0sICZhbXA7YywgJmFtcDtwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2NyZWF0ZV9wYWlyJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geHNldHNvY2tvcHQoYywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmYW1wO3NuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geHNldHNvY2tvcHQocCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmYW1wO3NuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCAmYW1wO3plcm8sICZhbXA7cCwgQlBGX05PRVhJU1QpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJc2VudCA9IHNlbmQoYywgc25kLCBzaXplb2Yoc25kKSwgTVNHX0RPTlRXQUlUKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2VudCwgc2l6ZW9mKHNuZCksICYjMzQ7c2VuZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CXJlY3ZkID0gcmVjdl90aW1lb3V0KHAsICZhbXA7cmN2LCBzaXplb2YocmN2KSwgTVNHX0RPTlRXQUlULAomIzQzOwkJCSAgICAgSU9fVElNRU9VVF9TRUMpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZWN2ZCwgc2l6ZW9mKHJjdiksICYjMzQ7cmVjdl90aW1lb3V0JiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX0VRKHJjdiwgc25kWzBdLCAmIzM0O2RhdGEgbWlzbWF0Y2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzOwomIzQzOwllcnIgPSBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhwLCAmYW1wO2Z3ZF9hbGxvYyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9HRShmd2RfYWxsb2MsIDAsICYjMzQ7c2tfZm9yd2FyZF9hbGxvYyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7b3V0X2Rlc3Ryb3k6CiYjNDM7CXRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApOwomIzQzOwlpZiAoYyAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoYyk7CiYjNDM7CWlmIChwICZndDs9IDApCiYjNDM7CQljbG9zZShwKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpCiB7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHN0cnAgdGNwIHBhc3MmIzM0OykpCkBAIC00ODIsNCAmIzQzOzY1MSw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZCkKIAkJdGVzdF9zb2NrbWFwX3N0cnBfZGlzcGF0Y2hfcGt0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2QmIzM0OykpCiAJCXRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3QoKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHN0cnAgc2VsZiBwYXNzIGZ3ZCBhbGxvYyYjMzQ7KSkKJiM0MzsJCXRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2MoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMKaW5kZXggZmU4OGZhNmQ0MGJjNS4uNjgyZTUzZDQwNzUxYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMKQEAgLTUwLDYgJiM0Mzs1MCwxMiBAQCBpbnQgcHJvZ19za2JfcGFyc2VyX3BhcnRpYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogCXJldHVybiAxMDsKIH0KIAomIzQzO1NFQygmIzM0O3NrX3NrYi9zdHJlYW1fcGFyc2VyJiMzNDspCiYjNDM7aW50IHByb2dfc2tiX3BhcnNlcl9vbmUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7c2tfc2tiL3N0cmVhbV9wYXJzZXImIzM0OykKIGludCBwcm9nX3NrYl9wYXJzZXJfcmVzaXplKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc2MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBuZXQvY29yZS9za21zZy5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIHNwZWNpZmljIGZpeCBpbnZvbHZpbmcgYG5ldC9jb3JlL3NrbXNnLmNgIGFuZCBhIG5ldyB0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhhbmRsaW5nIHRoZSBgc2tfZm9yd2FyZF9hbGxvY2AgZGVmaWNpdCB3aGVuIGRlYWxpbmcgd2l0aCBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgY2xvbmVzIGR1cmluZyByZWNlaXZlIG93bmVyc2hpcCBhc3NpZ25tZW50LiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGFkZGVkIGEgYHNldHRsZV9md2RfYWxsb2NgIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCBhbmQgYXJlIGNhbGxpbmcgYHNrX3JtZW1fc2NoZWR1bGUoc2ssIHNrYiwgMClgIGlmIGl0JiMzOTtzIHNldCB0byB0cnVlLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgYWJvdXQgcmVhY2hhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgd2hpY2ggYXJlIGNyaXRpY2FsIGNvbXBvbmVudHMgb2YgdGhlIHNvY2ttYXAvc2ttc2cgQlBGIGluZnJhc3RydWN0dXJlLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCB0aGVzZSBmdW5jdGlvbnMgKmFyZSogcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBUaGV5JiMzOTtyZSBmdW5kYW1lbnRhbCB0byB0aGUgd2hvbGUgcHJvY2Vzcy4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHBsYWNlcyB0byBmb2N1cyBmdXp6aW5nIGVmZm9ydHMuIGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBhcmUgdGhlIG9idmlvdXMgY2FuZGlkYXRlcy4gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBleHBvc3VyZSwgc28gdGhlIGZvcm1lciB0d28gYXJlIGxpa2VseSB0aGUgbW9yZSBjcml0aWNhbCB0YXJnZXRzLgoKVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhvc2UgdHdvIGZ1bmN0aW9ucywgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCB3aXRoaW4gYG5ldC9jb3JlL3NrbXNnLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Bzb2NrX3NrYl9pbmdyZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTUzMz1zdGF0aWMgc3RydWN0IHNrX21zZyAqc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9za21zZy5jLTU0NC1cbm5ldC9jb3JlL3NrbXNnLmM6NTQ1OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy01NDYtXHRcdFx0XHRcdHUzMiBvZmYsIHUzMiBsZW4sXG4tLVxubmV0L2NvcmUvc2ttc2cuYy01ODctXG5uZXQvY29yZS9za21zZy5jOjU4ODpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrbXNnLmMtNTg5LVx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTkxLVxubmV0L2NvcmUvc2ttc2cuYzo1OTI6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy01OTMtXHRcdFx0XHR1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTk5LVx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VzayA9PSBzaykpXG5uZXQvY29yZS9za21zZy5jOjYwMDpcdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUsXG5uZXQvY29yZS9za21zZy5jLTYwMS1cdFx0XHRcdFx0XHQgc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSk7XG4tLVxubmV0L2NvcmUvc2ttc2cuYy02MTItXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XG5uZXQvY29yZS9za21zZy5jOjYxMzpcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc2tiLCBvZmYsIGxlbiwgcHNvY2ssIHNrLCBtc2csIHRydWUpO1xubmV0L2NvcmUvc2ttc2cuYy02MTQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNjIzLSAqL1xubmV0L2NvcmUvc2ttc2cuYzo2MjQ6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za21zZy5jLTYyNS1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcbi0tXG5uZXQvY29yZS9za21zZy5jLTY0Ny1cdG1zZy1cdTAwM2VzayA9IHNrO1xubmV0L2NvcmUvc2ttc2cuYzo2NDg6XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLCB0YWtlX3JlZik7XG5uZXQvY29yZS9za21zZy5jLTY0OS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2NvcmUvc2ttc2cuYz02NTQ9c3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy02NjItXG5uZXQvY29yZS9za21zZy5jOjY2MzpcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzcyhwc29jaywgc2tiLCBvZmYsIGxlbik7XG5uZXQvY29yZS9za21zZy5jLTY2NC19XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMDAzPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTAyMi1cdFx0ICogcXVldWUgd29yayBvdGhlcndpc2Ugd2UgbWF5IGdldCBPT08gZGF0YS4gT3RoZXJ3aXNlLFxubmV0L2NvcmUvc2ttc2cuYzoxMDIzOlx0XHQgKiBpZiBza19wc29ja19za2JfaW5ncmVzcyBlcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5XG5uZXQvY29yZS9za21zZy5jLTEwMjQtXHRcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTAzNy1cdFx0XHR9XG5uZXQvY29yZS9za21zZy5jOjEwMzg6XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcbm5ldC9jb3JlL3NrbXNnLmMtMTAzOS1cdFx0XHRcdFx0XHRcdGZhbHNlLCBzZXR0bGVfZndkX2FsbG9jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipBbmFseXppbmcgUGFja2V0IFNvY2tldCBWZXJkaWN0IEFwcGxpY2F0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBhcmUgYm90aCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIGdvb2QgaW5pdGlhbCBjbHVlIOKAkyBpdCB0ZWxscyBtZSB0aGVzZSBmdW5jdGlvbnMgaGF2ZSAqaW50ZXJuYWwgbGlua2FnZSogd2l0aGluIHRoZWlyIGNvbXBpbGF0aW9uIHVuaXQuIFRoZXkmIzM5O3JlIG5vdCBtZWFudCB0byBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgbW9kdWxlIG9yIGZpbGUuCgpHaXZlbiB0aGF0LCBteSBuZXh0IHRob3VnaHQgaXM6ICpXaG8qIGlzIGNhbGxpbmcgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgPyBTaW5jZSBpdCYjMzk7cyBzdGF0aWMsIHRoZSBjYWxsIGhhcyB0byBvcmlnaW5hdGUgd2l0aGluIHRoZSBzYW1lIHNvdXJjZSBmaWxlLCBzbyBJIG5lZWQgdG8gZmluZCBpdHMgY2FsbGVycyB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyBwYWNrZXQgc29ja2V0IHZlcmRpY3RpbmcgcHJvY2VzcyB3b3JrcyBhbmQgd2hhdCB0aGUgY29uc3RyYWludHMgYXJlLiBUaGUgZmFjdCB0aGF0IGl0IGlzIGEgKnZlcmRpY3QgYXBwbGljYXRpb24qIG1lYW5zIHRoYXQgaXQgaXMgYXBwbHlpbmcgc29tZSBkZWNpc2lvbiBhYm91dCB0aGUgcGFja2V0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRob3NlIGRlY2lzaW9ucyBhcmUgYW5kIHdoYXQgdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIGRlcGVuZHMgb24uIFRoaXMgc2VlbXMgbGlrZSBhIGNvcmUgcGFydCBvZiB3aGF0ZXZlciBzeXN0ZW0gdGhpcyBjb2RlIGlzIGltcGxlbWVudGluZywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzICppbmdyZXNzKiBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgdmVyZGljdCBhcHBsaWNhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNhbGwgc2l0ZXMgcmV2ZWFsLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9hcHBseSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz05NjU9c3RhdGljIGludCBza19wc29ja19za2JfcmVkaXJlY3Qoc3RydWN0IHNrX3Bzb2NrICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTAwMi1cbm5ldC9jb3JlL3NrbXNnLmM6MTAwMzpzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrbXNnLmMtMTAwNC1cdFx0XHRcdCAgaW50IHZlcmRpY3QpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMDg2PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTEwOS1cdH1cbm5ldC9jb3JlL3NrbXNnLmM6MTExMDpcdHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkocHNvY2ssIHNrYiwgcmV0KTtcbm5ldC9jb3JlL3NrbXNnLmMtMTExMS1vdXQ6XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjA5PXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMzItXHR9XG5uZXQvY29yZS9za21zZy5jOjEyMzM6XHRyZXQgPSBza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XG5uZXQvY29yZS9za21zZy5jLTEyMzQtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgdGhlIEludGVycGxheSBvZiBwc29jayBGdW5jdGlvbiBDYWxscyoqCgpBbHJpZ2h0LCBzbyBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgYm90aCwgaXQgc2VlbXMsIGVuZCB1cCBjYWxsaW5nIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludCBmb3IgbWUuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoYXQgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93IGFuZCBmdW5jdGlvbmFsaXR5IG9mIHBhY2tldCBzb2NrZXQgKHBzb2NrKSBvcGVyYXRpb25zLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzIGhvdyBpcyBpdCB1c2VkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcC4KClRoZSBpbW1lZGlhdGUgdGhpbmcgSSYjMzk7bSBmb2N1c2VkIG9uIGlzIHdoZXRoZXIgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBoYXMgcmVhbCBpbXBsaWNhdGlvbnMgZm9yIHNjb3BpbmcsIHZpc2liaWxpdHksIGFuZCBwb3RlbnRpYWxseSwgb3B0aW1pemF0aW9uLiBBIHN0YXRpYyBmdW5jdGlvbiB3b3VsZCBiZSBzY29wZWQgb25seSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIG1lYW5pbmcgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdGhlciBtb2R1bGVzLCBidXQgcmF0aGVyIGFjdHMgYXMgYSBwcml2YXRlIGhlbHBlci4gS25vd2luZyBpZiBpdCYjMzk7cyBzdGF0aWMgZ2l2ZXMgbWUgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUgaW4gdGVybXMgb2YgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgYW5kIGRlc2lnbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Bzb2NrX3N0cnBfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz0xMDY4PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEwODUtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2NvcmUvc2ttc2cuYzoxMDg2OnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2ttc2cuYy0xMDg3LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTExMTQtXG5uZXQvY29yZS9za21zZy5jOjExMTU6c3RhdGljIGludCBza19wc29ja19zdHJwX3JlYWRfZG9uZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxubmV0L2NvcmUvc2ttc2cuYy0xMTE2LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTExNTQ9aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTU4LVx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdHJwX2NhbGxiYWNrcyBjYiA9IHtcbm5ldC9jb3JlL3NrbXNnLmM6MTE1OTpcdFx0LnJjdl9tc2dcdD0gc2tfcHNvY2tfc3RycF9yZWFkLFxubmV0L2NvcmUvc2ttc2cuYzoxMTYwOlx0XHQucmVhZF9zb2NrX2RvbmVcdD0gc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUsXG5uZXQvY29yZS9za21zZy5jLTExNjEtXHRcdC5wYXJzZV9tc2dcdD0gc2tfcHNvY2tfc3RycF9wYXJzZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTM2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYHNrX3Bzb2NrX2luaXRfc3RycGAgYW5kIGBza19wc29ja192ZXJkaWN0X3JlY3ZgKioKClJpZ2h0LCBzbyBgc2tfcHNvY2tfaW5pdF9zdHJwYCBpc24mIzM5O3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIGV4cG9zZWQgYW5kIGNhbGxlZCBmcm9tIG91dHNpZGUgaXRzIHByaW1hcnkgY29tcGlsYXRpb24gdW5pdC4gTWFrZXMgbWUgd29uZGVyIHdoZXJlIGFuZCB3aHkuIElzIGl0IHBhcnQgb2YgYSBwdWJsaWMgQVBJPyBJcyBpdCB1c2VkIGluIHNvbWUga2luZCBvZiBoZWxwZXIgbW9kdWxlPyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsZXJzLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YC4gVGhhdCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBhY2tldCBzb2NrZXRzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBraW5kIG9mIGZpbHRlcmluZyBvciB2ZXJkaWN0IG1lY2hhbmlzbSBvbiB0aGUgcmVjZWl2ZWQgcGFja2V0cy4gVGhlIG5hbWUgaXMgcHJldHR5IGNsZWFyLCBidXQgdGhlIGNvbnRleHQgbWF0dGVycy4gSXMgdGhpcyByZWxhdGVkIHRvIHNvbWUga2luZCBvZiBwYWNrZXQgZmlsdGVyIGxpa2UgQlBGPyBPciBwZXJoYXBzIGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBjb250cm9sbGluZyB0aGUgYmVoYXZpb3VyIG9mIHJhdyBzb2NrZXRzPyBJdCBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgaW50ZWdyYXRpb24gYW5kIGZ1bmN0aW9uYWxpdHksIHNvIEkmIzM5O2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoYXQgb25lIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfcmVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz0xMjA0PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTIwOC1cbm5ldC9jb3JlL3NrbXNnLmM6MTIwOTpzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za21zZy5jLTEyMTAte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTI0MT1zdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI1Ny1cbm5ldC9jb3JlL3NrbXNnLmM6MTI1ODpcdGNvcGllZCA9IG9wcy1cdTAwM2VyZWFkX3NrYihzaywgc2tfcHNvY2tfdmVyZGljdF9yZWN2KTtcbm5ldC9jb3JlL3NrbXNnLmMtMTI1OS1cdGlmIChjb3BpZWQgXHUwMDNlPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YCoqCgpSaWdodCwgYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAgaXMgZmxhZ2dlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFN0YXRpYyBmdW5jdGlvbnMsIHdpdGhpbiBhIGtlcm5lbCBjb250ZXh0IGxpa2UgdGhpcywgdXN1YWxseSBtZWFuIGl0JiMzOTtzIGFuIGludGVybmFsIGZ1bmN0aW9uLCBwcm9iYWJseSBmb3IgYSB2ZXJ5IHNwZWNpZmljIG1vZHVsZSBvciBzdWJzeXN0ZW0uIEl0JiMzOTtzIGxpa2VseSBub3QgbWVhbnQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gb3V0c2lkZSBpdHMgY29tcGlsYXRpb24gdW5pdC4KClNvLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAuIFVuZGVyc3RhbmRpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20gaXMgY3J1Y2lhbCB0byBncmFzcGluZyBpdHMgZnVuY3Rpb24gYW5kIHRoZSBjb250ZXh0IGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTEyMDk9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI0MC1cbm5ldC9jb3JlL3NrbXNnLmM6MTI0MTpzdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjQyLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEyNjg9dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNzMtXHRwc29jay1cdTAwM2VzYXZlZF9kYXRhX3JlYWR5ID0gc2stXHUwMDNlc2tfZGF0YV9yZWFkeTtcbm5ldC9jb3JlL3NrbXNnLmM6MTI3NDpcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfZGF0YV9yZWFkeSwgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KTtcbm5ldC9jb3JlL3NrbXNnLmMtMTI3NS1cdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfd3JpdGVfc3BhY2UsIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMDcKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWNrZXQgU29ja2V0IERhdGEgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGFja2V0IHNvY2tldCBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGlzbiYjMzk7dCBkZWNsYXJlZCBzdGF0aWMuIFRoYXQmIzM5O3MgbXkgaW5pdGlhbCBwb2ludCBvZiBmb2N1cy4gSXQgbG9va3MgbGlrZSBgc2tfcHNvY2tfaW5pdF9zdHJwYCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc29ja2V0IHN0YXJ0cy4gQnV0LCBoYW5nIG9uLi4uIHRoZXNlIGFwcGVhciB0byBiZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMsIG5vdCB0aGUgYWN0dWFsIGRhdGEgcGF0aC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGRhdGEgYWN0dWFsbHkgZmxvd3MuCgpBbHJpZ2h0LCB0aGUgZGF0YSBwcm9jZXNzaW5nIGZ1bmN0aW9ucyBhcmUgcHJvYmFibHkgYHNrX3Bzb2NrX3N0cnBfcmVhZGAgYW5kIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLiBPaCwgYnV0IHRoZXkmIzM5O3JlICpzdGF0aWMqLiBUaGF04oCZcyBhIHBvdGVudGlhbCByb2FkYmxvY2suIFNvLCBteSBnb2FsIG5vdyBpcyB0byBmaW5kIG91dCBpZiB0aGVyZSBhcmUgYW55ICpub24qLXN0YXRpYyBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBkYXRhIHBhdGguIEkgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LgoKTGV0JiMzOTtzIGNoZWNrIGBza19wc29ja19za2JfaW5ncmVzc2AgYXMgYSBwb3NzaWJsZSBwYXRoLiBIbW0sIHN0YXRpYy4gT2theSwgdGhhdCYjMzk7cyBub3QgaXQuIEkgbmVlZCB0byB3aWRlbiB0aGUgc2VhcmNoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBuZXQvY29yZS9za21zZy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXSYjNDM7IFthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTEyPXN0YXRpYyBib29sIHNrX21zZ190cnlfY29hbGVzY2Vfb2soc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgZWxlbV9maXJzdF9jb2FsZXNjZSlcbi0tXG5uZXQvY29yZS9za21zZy5jLTI1LVxubmV0L2NvcmUvc2ttc2cuYzoyNjppbnQgc2tfbXNnX2FsbG9jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuLFxubmV0L2NvcmUvc2ttc2cuYy0yNy1cdFx0IGludCBlbGVtX2ZpcnN0X2NvYWxlc2NlKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9ODU9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2FsbG9jKTtcbm5ldC9jb3JlL3NrbXNnLmMtODYtXG5uZXQvY29yZS9za21zZy5jOjg3OmludCBza19tc2dfY2xvbmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICpkc3QsIHN0cnVjdCBza19tc2cgKnNyYyxcbm5ldC9jb3JlL3NrbXNnLmMtODgtXHRcdCB1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTM2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19jbG9uZSk7XG5uZXQvY29yZS9za21zZy5jLTEzNy1cbm5ldC9jb3JlL3NrbXNnLmM6MTM4OnZvaWQgc2tfbXNnX3JldHVybl96ZXJvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgYnl0ZXMpXG5uZXQvY29yZS9za21zZy5jLTEzOS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xNjA9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3JldHVybl96ZXJvKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTYxLVxubmV0L2NvcmUvc2ttc2cuYzoxNjI6dm9pZCBza19tc2dfcmV0dXJuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgYnl0ZXMpXG5uZXQvY29yZS9za21zZy5jLTE2My17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xOTQ9c3RhdGljIGludCBfX3NrX21zZ19mcmVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgaSxcbi0tXG5uZXQvY29yZS9za21zZy5jLTIxMS1cbm5ldC9jb3JlL3NrbXNnLmM6MjEyOmludCBza19tc2dfZnJlZV9ub2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcbm5ldC9jb3JlL3NrbXNnLmMtMjEzLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTIxNj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9ub2NoYXJnZSk7XG5uZXQvY29yZS9za21zZy5jLTIxNy1cbm5ldC9jb3JlL3NrbXNnLmM6MjE4OmludCBza19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcbm5ldC9jb3JlL3NrbXNnLmMtMjE5LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTIyND1zdGF0aWMgdm9pZCBfX3NrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yNTEtXG5uZXQvY29yZS9za21zZy5jOjI1Mjp2b2lkIHNrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcbm5ldC9jb3JlL3NrbXNnLmMtMjUzLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTI1Nj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9wYXJ0aWFsKTtcbm5ldC9jb3JlL3NrbXNnLmMtMjU3LVxubmV0L2NvcmUvc2ttc2cuYzoyNTg6dm9pZCBza19tc2dfZnJlZV9wYXJ0aWFsX25vY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxubmV0L2NvcmUvc2ttc2cuYy0yNTktXHRcdFx0XHQgIHUzMiBieXRlcylcbi0tXG5uZXQvY29yZS9za21zZy5jLTI2My1cbm5ldC9jb3JlL3NrbXNnLmM6MjY0OnZvaWQgc2tfbXNnX3RyaW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBsZW4pXG5uZXQvY29yZS9za21zZy5jLTI2NS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0zMTA9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3RyaW0pO1xubmV0L2NvcmUvc2ttc2cuYy0zMTEtXG5uZXQvY29yZS9za21zZy5jOjMxMjppbnQgc2tfbXNnX3plcm9jb3B5X2Zyb21faXRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbm5ldC9jb3JlL3NrbXNnLmMtMzEzLVx0XHRcdCAgICAgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MzY3PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ196ZXJvY29weV9mcm9tX2l0ZXIpO1xubmV0L2NvcmUvc2ttc2cuYy0zNjgtXG5uZXQvY29yZS9za21zZy5jOjM2OTppbnQgc2tfbXNnX21lbWNvcHlfZnJvbV9pdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxubmV0L2NvcmUvc2ttc2cuYy0zNzAtXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcbi0tXG5uZXQvY29yZS9za21zZy5jPTQxMT1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfbWVtY29weV9mcm9tX2l0ZXIpO1xubmV0L2NvcmUvc2ttc2cuYy00MTItXG5uZXQvY29yZS9za21zZy5jOjQxMzppbnQgX19za19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtNDE0LVx0XHQgICAgIGludCBsZW4sIGludCBmbGFncywgaW50ICpjb3BpZWRfZnJvbV9zZWxmKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTAwLS8qIFJlY2VpdmUgc2tfbXNnIGZyb20gcHNvY2stXHUwMDNlaW5ncmVzc19tc2cgdG8gQG1zZy4gKi9cbm5ldC9jb3JlL3NrbXNnLmM6NTAxOmludCBza19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtNTAyLVx0XHQgICBpbnQgbGVuLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz01MDY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3JlY3Ztc2cpO1xubmV0L2NvcmUvc2ttc2cuYy01MDctXG5uZXQvY29yZS9za21zZy5jOjUwODpib29sIHNrX21zZ19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9za21zZy5jLTUwOS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz04NTE9c3RhdGljIHZvaWQgc2tfcHNvY2tfbGlua19kZXN0cm95KHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy04NjAtXG5uZXQvY29yZS9za21zZy5jOjg2MTp2b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtODYyLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTg3MT1zdGF0aWMgdm9pZCBza19wc29ja19kZXN0cm95KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTg5NS1cbm5ldC9jb3JlL3NrbXNnLmM6ODk2OnZvaWQgc2tfcHNvY2tfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTg5Ny17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05MTQ9c3RhdGljIGludCBza19wc29ja19tYXBfdmVyZChpbnQgdmVyZGljdCwgYm9vbCByZWRpcilcbi0tXG5uZXQvY29yZS9za21zZy5jLTkyNi1cbm5ldC9jb3JlL3NrbXNnLmM6OTI3OmludCBza19wc29ja19tc2dfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG5uZXQvY29yZS9za21zZy5jLTkyOC1cdFx0XHQgc3RydWN0IHNrX21zZyAqbXNnKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTEzOD1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE1My1cbm5ldC9jb3JlL3NrbXNnLmM6MTE1NDppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtMTE1NS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTc0LVxubmV0L2NvcmUvc2ttc2cuYzoxMTc1OnZvaWQgc2tfcHNvY2tfc3RhcnRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExNzYte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE4NC1cbm5ldC9jb3JlL3NrbXNnLmM6MTE4NTp2b2lkIHNrX3Bzb2NrX3N0b3Bfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExODYte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTI0MT1zdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI2Ny1cbm5ldC9jb3JlL3NrbXNnLmM6MTI2ODp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjY5LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNzctXG5uZXQvY29yZS9za21zZy5jOjEyNzg6dm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjc5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBwc29jayBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmb3IgdGhlc2UgcGFja2V0IHNvY2tldCBmdW5jdGlvbnMuIEkmIzM5O3ZlIGdvdCBhIGZldyBzdHJvbmcgY29udGVuZGVycyByaWdodCBvZmYgdGhlIGJhdDogYHNrX3Bzb2NrX2luaXRfc3RycGAsIGBza19wc29ja19zdGFydF9zdHJwYCwgYW5kIGBza19wc29ja19zdGFydF92ZXJkaWN0YC4gVGhvc2UgbG9vayBsaWtlIHByb21pc2luZyBzdGFydGluZyBwb2ludHMuIEJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIFRoZXkgYXJlIGNhbGxlZCBieSBgc2tfcHNvY2tfaGFuZGxlX3NrYmAgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gTm93LCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaXMgdHJpZ2dlcmVkIGZyb20gYHNrX3Bzb2NrX3N0cnBfcmVhZGAgYW5kIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLiAgYHNrX3Bzb2NrX3N0cnBfcmVhZGAgaXMgcmVnaXN0ZXJlZCBhcyBgLnJjdl9tc2dgIHdpdGhpbiBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gRnVydGhlcm1vcmUsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgIGlzIGNhbGxlZCBieSBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBhcyBgLnNrX2RhdGFfcmVhZHlgIGluIGBza19wc29ja19zdGFydF92ZXJkaWN0YC4KCkFscmlnaHQsIEkgdGhpbmsgSSYjMzk7bSBnZXR0aW5nIGEgY2xlYXJlciBwaWN0dXJlLiAgYHNrX3Bzb2NrX2luaXRfc3RycGAgYW5kIGBza19wc29ja19zdGFydF92ZXJkaWN0YCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3Igc2V0dGluZyB1cCB0aGUgZW50aXJlIHByb2Nlc3NpbmcgZmxvdy4gVGhleSYjMzk7cmUgd2hlcmUgdGhlIGNoYWluIGxpa2VseSBiZWdpbnMuCgpOb3csIHdoYXQgYWJvdXQgYHNrX3Bzb2NrX21zZ192ZXJkaWN0YD8gSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgcmVsZXZhbnQgdG8gdGhlIGBza19idWZmYCBwYXRoLiBBaCwgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBzcGVjaWZpYyB0byBgc2tfbXNnYCBzbyBpdCBwcm9iYWJseSB3b24mIzM5O3QgYmUgYXMgaW1wb3J0YW50IGZvciB3aGF0IEkmIzM5O20gbG9va2luZyBhdC4KClRpbWUgdG8gc3dpdGNoIGdlYXJzIGFuZCBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCYjMzk7cyBlbmFibGVkLiBBbHNvLCB0aGUgY29kZSBmb3IgdGhlIHJlbGF0ZWQgYHNrX21zZ2Agb3BlcmF0aW9ucyBzaG91bGQgYmUgaW4gYG5ldC9jb3JlL3NrbXNnLmNgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBNYWtlZmlsZWAgaW4gYG5ldC9jb3JlL2AgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYnVpbHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDM9b2JqLSQoQ09ORklHX0ZBSUxPVkVSKSAmIzQzOz0gZmFpbG92ZXIub1xubmV0L2NvcmUvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1OTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQ6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBTb2NrZXQgTWVzc2FnaW5nIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gVGhhdCBtdWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgICptaWdodCogYWxzbyBiZSBhIHJlcXVpcmVtZW50LCBiZWNhdXNlIHRoYXQgYHNrX3Bzb2NrX3N0cnBfcmVhZGAgZnVuY3Rpb24gaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCwgd3JhcHBlZCBpbiBhbiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKWAgYmxvY2suIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhhdCYjMzk7cyBhY3R1YWxseSB0aGUgY2FzZS4gQmVzdCBiZXQgaXMgdG8ganVtcCBpbnRvIGBuZXQvY29yZS9za21zZy5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHNlZSBob3cgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgaXMgdXNlZCBhbmQgaWYgaXQmIzM5O3MgdHJ1bHkgZXNzZW50aWFsIGluIHRoaXMgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz01NDU9c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy01NzMtXG5uZXQvY29yZS9za21zZy5jOjU3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9za21zZy5jLTU3NS1cdHBzb2NrLVx1MDAzZWluZ3Jlc3NfYnl0ZXMgJiM0Mzs9IGxlbjtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEwNjg9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA4NC1cbm5ldC9jb3JlL3NrbXNnLmM6MTA4NTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9za21zZy5jLTEwODYtc3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjA0PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTIwNi19XG5uZXQvY29yZS9za21zZy5jOjEyMDc6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xubmV0L2NvcmUvc2ttc2cuYy0xMjA4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIzMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgQlBGIFN0cmVhbSBQYXJzZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIHN0cmVhbSBwYXJzZXIgc3R1ZmYuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgaXMgYSBtdXN0LWhhdmUgZm9yIHRoZSBzdHJwYXJzZXIgcGF0aCwgbm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gTm93LCBhIHF1ZXN0aW9uIHBvcHMgaW50byBteSBoZWFkOiB3aGF0JiMzOTtzIHRoZSBkZWFsIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGA/IEl0ICp1c3VhbGx5KiBnb2VzIGhhbmQtaW4taGFuZCB3aXRoIEJQRiBmdW5jdGlvbmFsaXR5IGluIGdlbmVyYWwsIHJpZ2h0PyBJIG5lZWQgdG8gY2xhcmlmeSBpZiBpdCYjMzk7cyBzdHJpY3RseSAqcmVxdWlyZWQqIGhlcmUgb3IganVzdCBnZW5lcmFsbHkgcmVjb21tZW5kZWQuIExldCYjMzk7cyBzZWUuLi5JIHNob3VsZCBjaGVjayB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMgdG8gc2VlIGhvdyBgTkVUX1NPQ0tfTVNHYCBhbmQgYEJQRl9TVFJFQU1fUEFSU0VSYCBhcmUgdGllZCB0b2dldGhlci4gRWl0aGVyIGBuZXQvY29yZS9LY29uZmlnYCBvciBqdXN0IHRoZSBtYWluIGBuZXQvS2NvbmZpZ2AgZmlsZSBzaG91bGQgaGF2ZSB0aGUgYW5zd2VycyBJIG5lZWQuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TT0NLX01TRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xuLS1cbm5ldC9LY29uZmlnLTQ3OC1cbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy00ODAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjMyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSGlkZGVuIEJvb2wgSW52ZXN0aWdhdGlvbjogTkVUXF9TT0NLXF9NU0cqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgdGhpcyBgTkVUX1NPQ0tfTVNHYCB2YXJpYWJsZSwgYW5kIGl0JiMzOTtzIGEgaGlkZGVuIGJvb2xlYW4uIE1lYW5pbmcgaXQmIzM5O3MgYmVpbmcgdXNlZCBpbnRlcm5hbGx5LCBwcm9iYWJseSBub3QgZGlyZWN0bHkgZXhwb3NlZCBmb3IgY29uZmlndXJhdGlvbiBvciB1c2VyIGlucHV0LiBNeSBndXQgc2F5cyB0aGlzIHdhc24mIzM5O3QgZGVjbGFyZWQgb24gYSB3aGltLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGhpZGRlbiBpbXBsaWVzIGl0JiMzOTtzIGJlaW5nIHNldCBvciB1bnNldCBiYXNlZCBvbiAqc29tZSogY29uZGl0aW9uLCAqc29tZSogb3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtIGlzIGRlY2lkaW5nIHdoZW4gdGhpcyBmbGFnIGlzIGFjdGl2ZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IHRyaWdnZXJpbmcgbWVjaGFuaXNtIGlzLiBXaGF0IGFyZSB0aGUgbG9naWNhbCBwYXRod2F5cyB0aGF0IGxlYWQgdG8gdGhpcyBib29sIGJlaW5nIG1vZGlmaWVkPyBJdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgbmV0IHNvY2tldCBtZXNzYWdlIGhhbmRsaW5nIGFjdHVhbGx5IHdvcmtzLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE5FVF9TT0NLX01TRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTMzLVx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbmtlcm5lbC9icGYvS2NvbmZpZzozNDpcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbi0tXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG4tLVxubmV0L0tjb25maWctMzY2LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnOjM2NzpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTM2OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg1LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY0L0tjb25maWc6Mzg2Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZy0zODctXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05My1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvaXB2Ni9LY29uZmlnOjk0Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjYvS2NvbmZpZy05NS1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xuLS1cbm5ldC90bHMvS2NvbmZpZy0xMC1cdHNlbGVjdCBDUllQVE9fR0NNXG5uZXQvdGxzL0tjb25maWc6MTE6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvdGxzL0tjb25maWctMTItXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgYXVkaWVuY2UgaXMgYW5vdGhlciBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5FVF9TT0NLX01TRyBQYXRod2F5KioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IEkgc2VlIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyB0cmlnZ2VyaW5nIGBORVRfU09DS19NU0dgLCBhbmQgYWxzbywgc3RyYW5nZWx5LCB0aGF0IGBCUEZfU1RSRUFNX1BBUlNFUmAgaXMgc2VsZWN0aW5nIGBORVRfU09DS19NU0dgIHRvby4gVGhhdOKAmXMgd29ydGggZGlnZ2luZyBpbnRvLiBHaXZlbiB0aGUgb3ZlcmxhcCwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgc2hhcmVkIGJlaGF2aW9yLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBgQlBGX1NUUkVBTV9QQVJTRVJgIGJlY2F1c2UgaXQgaXMgbGVzcyBjb252ZW50aW9uYWwgYW5kIGxpa2VseSB0aGUgc291cmNlIG9mIHRoZSBvdmVybGFwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgYm90aCBzZWVtIHRvIGJlIHBvaW50aW5nIHRvd2FyZCB0aGUgc2FtZSBuZXQgc29ja2V0IG1lc3NhZ2UgaGFuZGxpbmcuIFRoZXJlIGNvdWxkIGJlIHNvbWUgaW50ZXJlc3RpbmcgYXJjaGl0ZWN0dXJlIGNob2ljZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcbi0tXG5uZXQvS2NvbmZpZy0zNjAtXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkVuYWJsaW5nIEJQRiBTdHJlYW0gUGFyc2luZyBhbmQgU3lzY2FsbCBJbnRlZ3JhdGlvbioqCgpBbHJpZ2h0LCBzbyBpdCYjMzk7cyBsb29raW5nIGxpa2UgYEJQRl9TVFJFQU1fUEFSU0VSYCBpcyBleHBvc2VkIGFzIGEgYm9vbGVhbiBzZXR0aW5nLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuYWJsZSBib3RoIGBCUEZfU1RSRUFNX1BBUlNFUmAgYW5kIGBCUEZfU1lTQ0FMTGAgZnVuY3Rpb25hbGl0eS4gVGhlIGNvbWJpbmVkIHBvd2VyIGhlcmUgaXMgc2lnbmlmaWNhbnQgZm9yIHdoYXQgSSYjMzk7bSBhaW1pbmcgdG8gYWNoaWV2ZS4KCk5vdywgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgQlBGX1NZU0NBTExgIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgY3VycmVudCBzdGF0ZSBhbmQgYW55IHJlY2VudCBjaGFuZ2VzLiBJIG5lZWQgdG8gYXNzZXNzIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgb2YgdGhpcyBjb3VwbGluZywgYW5kIHdoYXQgaW1wYWN0IGl0IHdpbGwgaGF2ZSBvbiBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTIwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBTdHJlYW0gUGFyc2VyIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBCUEYgc3RyZWFtIHBhcnNlciBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgaW4gdGhlIGNvbnRleHQgb2YgZGlyZWN0IHN0cnBhcnNlciBTS19QQVNTIGNsb25lcy4gRnJvbSB0aGUgY29kZSwgSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cywgY29uZmlnLXdpc2UsIGludm9sdmVzIGVuYWJsaW5nIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAuCgpGdW5jdGlvbmFsbHksIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpbiB0aGUgZml4LiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gYSBnb29kIGZ1enppbmcgc3RyYXRlZ3kuCgpNeSBpbml0aWFsIHRob3VnaHRzIG9uIHdvcnRoZnV6emluZyBhcmUgcG9zaXRpdmUuIFdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCBzb21lIGdvb2QgdGVzdGluZyBvdXQgb2YgdGhpcy4KClJlZ2FyZGluZyBmb2N1cyBzeW1ib2xzLCBJIGluaXRpYWxseSBoYWQgYSBsaXN0OiBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAsIGFuZCBwb3RlbnRpYWxseSBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgICh0aG91Z2ggdGhhdCYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIGxpa2VseSBub3QgZ29pbmcgdG8gYmUgZmVhc2libGUpLiBXYWl0LCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaXMgYWxzbyBzdGF0aWMuIFNvLCBJIG5lZWQgdG8gYWRqdXN0IHRoaXMgbGlzdCBhbmQga2VlcCB0aGluZ3MgcHJhY3RpY2FsLgoKV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIGBza19wc29ja19pbml0X3N0cnBgLCBgc2tfcHNvY2tfc3RhcnRfc3RycGAsIGFuZCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAuCgpUaGlua2luZyBhYm91dCB0aGUgY29ubmVjdGlvbiBvZiBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYCBhbmQgYHNrX3Bzb2NrX2luaXRfc3RycGAgKHRoYXQgbG9va3MgcHJvbWlzaW5nIHNpbmNlIGl0JiMzOTtzIGFuIGF0dGFjaCBjYWxsKS4gQWxzbywgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGlzIGNhbGxlZCBieSBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULgoKVGhlc2UgYXJlIGdvb2QgZW50cnkgcG9pbnRzIHRvIHRoZSBjb2RlLgoKQ2hlY2tpbmcgYWdhaW4sIGBza19wc29ja19pbml0X3N0cnBgIGFuZCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAgYXJlIGluZGVlZCB0aGUgYmVzdCBlbnRyeSBwb2ludHMgdG8gdGhlIG1vZGlmaWVkIGNvZGUgcGF0aC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSByaWdodCBzeW1ib2xzIHRvIHByaW9yaXRpemUuCgpBbHNvLCBgc2tfbXNnX3JlY3Ztc2dgIGlzIGxpa2VseSByZWxldmFudCBzaW5jZSBpdCByZWFkcyB0aG9zZSBxdWV1ZWQgbWVzc2FnZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX21zZ19yZWN2bXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTQxMT1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfbWVtY29weV9mcm9tX2l0ZXIpO1xubmV0L2NvcmUvc2ttc2cuYy00MTItXG5uZXQvY29yZS9za21zZy5jOjQxMzppbnQgX19za19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtNDE0LVx0XHQgICAgIGludCBsZW4sIGludCBmbGFncywgaW50ICpjb3BpZWRfZnJvbV9zZWxmKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTAwLS8qIFJlY2VpdmUgc2tfbXNnIGZyb20gcHNvY2stXHUwMDNlaW5ncmVzc19tc2cgdG8gQG1zZy4gKi9cbm5ldC9jb3JlL3NrbXNnLmM6NTAxOmludCBza19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtNTAyLVx0XHQgICBpbnQgbGVuLCBpbnQgZmxhZ3MpXG5uZXQvY29yZS9za21zZy5jLTUwMy17XG5uZXQvY29yZS9za21zZy5jOjUwNDpcdHJldHVybiBfX3NrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzLCBOVUxMKTtcbm5ldC9jb3JlL3NrbXNnLmMtNTA1LX1cbm5ldC9jb3JlL3NrbXNnLmM6NTA2OkVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19yZWN2bXNnKTtcbm5ldC9jb3JlL3NrbXNnLmMtNTA3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA4NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBmb3IgTmV0d29yayBTb2NrZXQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBgc2tfbXNnX3JlY3Ztc2dgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHRoYXQmIzM5O3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVsc2UgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIGlzIHJlbGV2YW50LCBzcGVjaWZpY2FsbHkgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFzIHRob3NlIGFyZSB0aGUgb25lcyB3ZSBjYW4gdXNlLiBJIHF1aWNrbHkgcnVsZSBvdXQgYHNrX3Bzb2NrX21zZ192ZXJkaWN0YCBiZWNhdXNlIHRoYXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byB0aGUgKnNlbmQqIHBhdGggKGBza19tc2dgKSwgbm90IHRoZSByZWNlaXZlIHBhdGggKGBza19idWZmYCkgd2hpY2ggaXMgd2hhdCBJJiMzOTttIG1vcmUgaW50ZXJlc3RlZCBpbiBoZXJlLgoKVGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBmb2N1c2VzIG9uIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYnV0IHRoYXQmIzM5O3MgY2FsbGVkIGluZGlyZWN0bHkuIExldCBtZSB0cmFjZSB0aGUgY2FsbHM6IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBpcyBmdXJ0aGVyIGNhbGxlZCBieSBgc2tfcHNvY2tfaGFuZGxlX3NrYmAsIHdoaWNoIGl0c2VsZiBpcyBpbnZva2VkIGJ5IGBza19wc29ja19iYWNrbG9nYCB3aGljaCBpcywgb2YgY291cnNlLCBhIHdvcmtxdWV1ZS4gVGhlbiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgZ2V0cyBjYWxsZWQgZnJvbSBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAuCgpTbywgdGhhdCB0ZWxscyBtZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIGVzc2VudGlhbGx5OiBgc2tfcHNvY2tfc3RycF9yZWFkYCAod2hpY2ggaXMgc3RhdGljLCBhbmQgcmVnaXN0ZXJlZCB0aHJvdWdoIGBza19wc29ja19pbml0X3N0cnBgKSwgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgKGFsc28gc3RhdGljLCByZWdpc3RlcmVkIHRocm91Z2ggYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgKSwgYW5kIGZpbmFsbHksIHRoZSB3b3JrcXVldWUgYHNrX3Bzb2NrX2JhY2tsb2dgLgoKR2l2ZW4gdGhlIGNvbnN0cmFpbnQgb24gbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGl0IHNlZW1zIHRoYXQgYHNrX3Bzb2NrX2luaXRfc3RycGAgYW5kIGBza19wc29ja19zdGFydF92ZXJkaWN0YCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIHRoZSBiZXN0IG9wdGlvbnMgZm9yIG91ciB1c2UtY2FzZSwgYXMgdGhleSByZWdpc3RlciB0aGUgc3RhdGljIGZ1bmN0aW9ucy4gQWRkaW5nIGBza19tc2dfcmVjdm1zZ2AgbWFrZXMgc2Vuc2UgdG9vLCBzaW5jZSBpdCBhY3R1YWxseSBjb25zdW1lcyB0aGUgbWVzc2FnZXMuIExldCBtZSBnbyBiYWNrIGFuZCBnaXZlIHRob3NlIHR3byBmdW5jdGlvbnMgYSBjbG9zZXIgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfaW5pdF9zdHJwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTExMzg9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTExNTMtXG5uZXQvY29yZS9za21zZy5jOjExNTQ6aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExNTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA1OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgc2tfcHNvY2tfaW5pdF9zdHJwYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHNrX3Bzb2NrX2luaXRfc3RycGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgZXZlcnkgc2luZ2xlIGxvY2F0aW9uIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhpcyBwcm9qZWN0LiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBhbmQgdGhlIGNyaXRpY2FsIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiB0aGF0IEkmIzM5O2xsIG5lZWQgdG8ga25vdy4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gVW5kZXJzdGFuZGluZyAqd2h5KiBpdCBpcyBiZWluZyBjYWxsZWQgd2lsbCBjb21lIGFmdGVyIHRoYXQuIFRoZW4gSSBjYW4gc3RhcnQgdG8gZm9ybSBhbiBpZGVhIG9mIHdoeSB0aGlzIGZ1bmN0aW9uIGV4aXN0cyBhbmQgd2hhdCByb2xlIGl0IHBsYXlzIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRpbWUgdG8gZ2V0IHNlYXJjaGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfaW5pdF9zdHJwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTIxNz1zdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzA2LVx0XHRpZiAoc2tfaXNfdGNwKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzA3Olx0XHRcdHJldCA9IHNrX3Bzb2NrX2luaXRfc3RycChzaywgcHNvY2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0zMDgtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzOTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgU29ja2V0IE1hcCBMaW5raW5nIFByb2Nlc3MqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aGlzIGV4ZWN1dGlvbiBwYXRoLCBhbmQgaXQgbG9va3MgbGlrZSBgc29ja19tYXBfbGlua2AgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUsIGJlaW5nIGNhbGxlZCBieSBgc29ja19tYXBfdXBkYXRlX2VsZW1gLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgc29ja19tYXBfbGlua2AgYmVjYXVzZSBJJiMzOTttIHNlZWluZyB0aGlzIGNhbGwgdG8gYHNrX3Bzb2NrX2luaXRfc3RycGAgY29uZGl0aW9uYWwgb24gdGhlcmUgYmVpbmcgYSBwYXJzZXIgcHJvZ3JhbSBhc3NvY2lhdGVkIHdpdGggdGhlIG1hcC4gVGhhdCBzdWdnZXN0cyBhIHBvdGVudGlhbGx5IGltcG9ydGFudCBpbnRlcmFjdGlvbiB3aXRoIHByb2dyYW0gbG9hZGluZyBvciBzb21lIHNvcnQgb2YgcHJlLXByb2Nlc3NpbmcuIFRoZSBmYWN0IHRoYXQgYHNrX3Bzb2NrX2luaXRfc3RycGAgaXMgY2FsbGVkLCBsaWtlbHkgbWVhbnMgd2UgbmVlZCB0byBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXJzZXIgcHJvZ3JhbSBhdCBtYXAgbGluayB0aW1lLiBMZXQmIzM5O3MgaGVhZCBzdHJhaWdodCBpbnRvIGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgc29ja19tYXBfbGlua2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGFuZCBwcmVjaXNlbHkgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhhdCBgc2tfcHNvY2tfaW5pdF9zdHJwYCBjYWxsLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBfbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0xOTc9c3RhdGljIHN0cnVjdCBza19wc29jayAqc29ja19tYXBfcHNvY2tfZ2V0X2NoZWNrZWQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE2LVxubmV0L2NvcmUvc29ja19tYXAuYzoyMTc6c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE4LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTQ3MD1zdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ4OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDg5Olx0cmV0ID0gc29ja19tYXBfbGluayhtYXAsIHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDkwLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTk5Mz1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMTEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEwMTI6XHRyZXQgPSBzb2NrX21hcF9saW5rKG1hcCwgc2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMDEzLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE3Mzc9c3RydWN0IHNvY2ttYXBfbGluayB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzQxLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNzQyOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDMte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc1OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc1OTpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfZGV0YWNoKHN0cnVjdCBicGZfbGluayAqbGluaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc2MC17XG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NjE6XHRzb2NrX21hcF9saW5rX3JlbGVhc2UobGluayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NjItXHRyZXR1cm4gMDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NjQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NjU6c3RhdGljIHZvaWQgc29ja19tYXBfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc2Ni17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzczLSAqL1xubmV0L2NvcmUvc29ja19tYXAuYzoxNzc0OnN0YXRpYyBpbnQgc29ja19tYXBfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NzUtXHRcdFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4MzMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4MzQ6c3RhdGljIHUzMiBzb2NrX21hcF9saW5rX2dldF9tYXBfaWQoY29uc3Qgc3RydWN0IHNvY2ttYXBfbGluayAqc29ja21hcF9saW5rKVxubmV0L2NvcmUvc29ja19tYXAuYy0xODM1LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NDQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NDU6c3RhdGljIGludCBzb2NrX21hcF9saW5rX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NDYtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NDgtXHRjb25zdCBzdHJ1Y3Qgc29ja21hcF9saW5rICpzb2NrbWFwX2xpbmsgPSBjb250YWluZXJfb2YobGluaywgc3RydWN0IHNvY2ttYXBfbGluaywgbGluayk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NDk6XHR1MzIgbWFwX2lkID0gc29ja19tYXBfbGlua19nZXRfbWFwX2lkKHNvY2ttYXBfbGluayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NTAtXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xODU1LVxubmV0L2NvcmUvc29ja19tYXAuYzoxODU2OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2xpbmtfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxubmV0L2NvcmUvc29ja19tYXAuYy0xODU3LVx0XHRcdFx0ICAgICAgc3RydWN0IHNlcV9maWxlICpzZXEpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xODU5LVx0Y29uc3Qgc3RydWN0IHNvY2ttYXBfbGluayAqc29ja21hcF9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBzb2NrbWFwX2xpbmssIGxpbmspO1xubmV0L2NvcmUvc29ja19tYXAuYzoxODYwOlx0dTMyIG1hcF9pZCA9IHNvY2tfbWFwX2xpbmtfZ2V0X21hcF9pZChzb2NrbWFwX2xpbmspO1xubmV0L2NvcmUvc29ja19tYXAuYy0xODYxLVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg2NS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg2NjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBzb2NrX21hcF9saW5rX29wcyA9IHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg2NzpcdC5yZWxlYXNlID0gc29ja19tYXBfbGlua19yZWxlYXNlLFxubmV0L2NvcmUvc29ja19tYXAuYzoxODY4Olx0LmRlYWxsb2MgPSBzb2NrX21hcF9saW5rX2RlYWxsb2MsXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4Njk6XHQuZGV0YWNoID0gc29ja19tYXBfbGlua19kZXRhY2gsXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NzA6XHQudXBkYXRlX3Byb2cgPSBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nLFxubmV0L2NvcmUvc29ja19tYXAuYzoxODcxOlx0LmZpbGxfbGlua19pbmZvID0gc29ja19tYXBfbGlua19maWxsX2luZm8sXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NzI6XHQuc2hvd19mZGluZm8gPSBzb2NrX21hcF9saW5rX3Nob3dfZmRpbmZvLFxubmV0L2NvcmUvc29ja19tYXAuYy0xODczLX07XG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NzU6aW50IHNvY2tfbWFwX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzYte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTkwMC1cdGF0dGFjaF90eXBlID0gYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkwMTpcdGJwZl9saW5rX2luaXQoXHUwMDI2c29ja21hcF9saW5rLVx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfU09DS01BUCwgXHUwMDI2c29ja19tYXBfbGlua19vcHMsIHByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MDItXHRcdCAgICAgIGF0dGFjaF90eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMTQKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgRnV6emluZyBFZmZvcnRzKioKCk9rYXksIHNvIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgdGhpcyBCUEYgY29kZS4gSXQgbG9va3MgbGlrZSBgc29ja19tYXBfdXBkYXRlX2VsZW1gIGFuZCBgc29ja19oYXNoX3VwZGF0ZV9lbGVtYCBhcmUgdGhlIHRvcC1sZXZlbCBjYWxscy4gSG93ZXZlciwgdGhleSBhcmUgZnVuZGFtZW50YWxseSBtYXAgb3BlcmF0aW9ucy4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgZnV6emluZyBzaG91bGQgY29uY2VudHJhdGUgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIEJQRiBtYXAgdXBkYXRlcyBhbmQgdGhlIHNvY2tldCBvcGVyYXRpb25zIHRoZW1zZWx2ZXMuCgpTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBgc2tfcHNvY2tfaW5pdF9zdHJwYCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLiBUaG9zZSBsb29rIGxpa2UgcHJvbWlzaW5nIHRhcmdldHMuIEFsc28sIGBza19tc2dfcmVjdm1zZ2AgaXMgZGVmaW5pdGVseSB3b3J0aCBzb21lIGF0dGVudGlvbi4KCkp1c3QgdG8gYmUgc3VyZSwgbGV0IG1lIGRvdWJsZS1jaGVjayBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLiBOb3BlLCB0aGF0JiMzOTtzIHN0YXRpYy4gU2FtZSB3aXRoIGBza19wc29ja19oYW5kbGVfc2tiYCBhbmQgYHNrX3Bzb2NrX2JhY2tsb2dgLiBUaG9zZSB3b24mIzM5O3Qgd29yayBhcyBkaXJlY3QgZW50cnkgcG9pbnRzLgoKQWxyaWdodCwgSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG5ldC9jb3JlL3NrbXNnLmNgLiBUaGF0IGZpbGUgc2hvdWxkIGNvbnRhaW4gc29tZSB1c2VmdWwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgU0tNU0cgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOyBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz0xMj1zdGF0aWMgYm9vbCBza19tc2dfdHJ5X2NvYWxlc2NlX29rKHN0cnVjdCBza19tc2cgKm1zZywgaW50IGVsZW1fZmlyc3RfY29hbGVzY2UpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yNS1cbm5ldC9jb3JlL3NrbXNnLmM6MjY6aW50IHNrX21zZ19hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGxlbixcbm5ldC9jb3JlL3NrbXNnLmMtMjctXHRcdCBpbnQgZWxlbV9maXJzdF9jb2FsZXNjZSlcbi0tXG5uZXQvY29yZS9za21zZy5jPTg1PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19hbGxvYyk7XG5uZXQvY29yZS9za21zZy5jLTg2LVxubmV0L2NvcmUvc2ttc2cuYzo4NzppbnQgc2tfbXNnX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqZHN0LCBzdHJ1Y3Qgc2tfbXNnICpzcmMsXG5uZXQvY29yZS9za21zZy5jLTg4LVx0XHQgdTMyIG9mZiwgdTMyIGxlbilcbi0tXG5uZXQvY29yZS9za21zZy5jPTEzNj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfY2xvbmUpO1xubmV0L2NvcmUvc2ttc2cuYy0xMzctXG5uZXQvY29yZS9za21zZy5jOjEzODp2b2lkIHNrX21zZ19yZXR1cm5femVybyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxubmV0L2NvcmUvc2ttc2cuYy0xMzkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTYwPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19yZXR1cm5femVybyk7XG5uZXQvY29yZS9za21zZy5jLTE2MS1cbm5ldC9jb3JlL3NrbXNnLmM6MTYyOnZvaWQgc2tfbXNnX3JldHVybihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxubmV0L2NvcmUvc2ttc2cuYy0xNjMte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTk0PXN0YXRpYyBpbnQgX19za19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGksXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yMTEtXG5uZXQvY29yZS9za21zZy5jOjIxMjppbnQgc2tfbXNnX2ZyZWVfbm9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2cpXG5uZXQvY29yZS9za21zZy5jLTIxMy17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0yMTY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2ZyZWVfbm9jaGFyZ2UpO1xubmV0L2NvcmUvc2ttc2cuYy0yMTctXG5uZXQvY29yZS9za21zZy5jOjIxODppbnQgc2tfbXNnX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2cpXG5uZXQvY29yZS9za21zZy5jLTIxOS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0yMjQ9c3RhdGljIHZvaWQgX19za19tc2dfZnJlZV9wYXJ0aWFsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMjUxLVxubmV0L2NvcmUvc2ttc2cuYzoyNTI6dm9pZCBza19tc2dfZnJlZV9wYXJ0aWFsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYnl0ZXMpXG5uZXQvY29yZS9za21zZy5jLTI1My17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0yNTY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2ZyZWVfcGFydGlhbCk7XG5uZXQvY29yZS9za21zZy5jLTI1Ny1cbm5ldC9jb3JlL3NrbXNnLmM6MjU4OnZvaWQgc2tfbXNnX2ZyZWVfcGFydGlhbF9ub2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtMjU5LVx0XHRcdFx0ICB1MzIgYnl0ZXMpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yNjMtXG5uZXQvY29yZS9za21zZy5jOjI2NDp2b2lkIHNrX21zZ190cmltKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuKVxubmV0L2NvcmUvc2ttc2cuYy0yNjUte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MzEwPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ190cmltKTtcbm5ldC9jb3JlL3NrbXNnLmMtMzExLVxubmV0L2NvcmUvc2ttc2cuYzozMTI6aW50IHNrX21zZ196ZXJvY29weV9mcm9tX2l0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG5uZXQvY29yZS9za21zZy5jLTMxMy1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcbi0tXG5uZXQvY29yZS9za21zZy5jPTM2Nz1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfemVyb2NvcHlfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL3NrbXNnLmMtMzY4LVxubmV0L2NvcmUvc2ttc2cuYzozNjk6aW50IHNrX21zZ19tZW1jb3B5X2Zyb21faXRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbm5ldC9jb3JlL3NrbXNnLmMtMzcwLVx0XHRcdCAgICAgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYnl0ZXMpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz00MTE9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX21lbWNvcHlfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL3NrbXNnLmMtNDEyLVxubmV0L2NvcmUvc2ttc2cuYzo0MTM6aW50IF9fc2tfbXNnX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvY29yZS9za21zZy5jLTQxNC1cdFx0ICAgICBpbnQgbGVuLCBpbnQgZmxhZ3MsIGludCAqY29waWVkX2Zyb21fc2VsZilcbi0tXG5uZXQvY29yZS9za21zZy5jLTUwMC0vKiBSZWNlaXZlIHNrX21zZyBmcm9tIHBzb2NrLVx1MDAzZWluZ3Jlc3NfbXNnIHRvIEBtc2cuICovXG5uZXQvY29yZS9za21zZy5jOjUwMTppbnQgc2tfbXNnX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvY29yZS9za21zZy5jLTUwMi1cdFx0ICAgaW50IGxlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9NTA2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19yZWN2bXNnKTtcbm5ldC9jb3JlL3NrbXNnLmMtNTA3LVxubmV0L2NvcmUvc2ttc2cuYzo1MDg6Ym9vbCBza19tc2dfaXNfcmVhZGFibGUoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc2ttc2cuYy01MDkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9ODUxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2xpbmtfZGVzdHJveShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtODYwLVxubmV0L2NvcmUvc2ttc2cuYzo4NjE6dm9pZCBza19wc29ja19zdG9wKHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTg2Mi17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz04NzE9c3RhdGljIHZvaWQgc2tfcHNvY2tfZGVzdHJveShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L2NvcmUvc2ttc2cuYy04OTUtXG5uZXQvY29yZS9za21zZy5jOjg5Njp2b2lkIHNrX3Bzb2NrX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy04OTcte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9OTE0PXN0YXRpYyBpbnQgc2tfcHNvY2tfbWFwX3ZlcmQoaW50IHZlcmRpY3QsIGJvb2wgcmVkaXIpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy05MjYtXG5uZXQvY29yZS9za21zZy5jOjkyNzppbnQgc2tfcHNvY2tfbXNnX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2NvcmUvc2ttc2cuYy05MjgtXHRcdFx0IHN0cnVjdCBza19tc2cgKm1zZylcbi0tXG5uZXQvY29yZS9za21zZy5jPTExMzg9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTExNTMtXG5uZXQvY29yZS9za21zZy5jOjExNTQ6aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExNTUte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE3NC1cbm5ldC9jb3JlL3NrbXNnLmM6MTE3NTp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMTc2LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTExODQtXG5uZXQvY29yZS9za21zZy5jOjExODU6dm9pZCBza19wc29ja19zdG9wX3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMTg2LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEyNDE9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNjctXG5uZXQvY29yZS9za21zZy5jOjEyNjg6dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtMTI2OS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjc3LVxubmV0L2NvcmUvc2ttc2cuYzoxMjc4OnZvaWQgc2tfcHNvY2tfc3RvcF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtMTI3OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBTb2NrZXQgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAsIGFuZCBgc2tfbXNnX3JlY3Ztc2dgIGxvb2sgcHJvbWlzaW5nLiBUaGVzZSBzZWVtIGxpa2UgdGhleSYjMzk7cmUgaW4gdGhlIHJpZ2h0IGJhbGxwYXJrIGZvciB3aGF0IEkmIzM5O20gdHJ5aW5nIHRvIGFjaGlldmUuIFRoZXkgYWxpZ24gd2l0aCB0aGUgZ2VuZXJhbCBmbG93IEkgd2FzIGV4cGVjdGluZy4KCk5vdywgYSBzbGlnaHQgcGF1c2UgZm9yIHRob3VnaHQuIFdhc24mIzM5O3QgaXQgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgIHRoYXQgd2FzIGFsc28gY2FsbGVkIGZyb20gYHNvY2tfbWFwX2xpbmtgPyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgdGhhdC4gSXQgd291bGQgYmUgZ29vZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNhbGwgZ3JhcGggdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLiBMZXQmIzM5O3MgZGlnIGEgbGl0dGxlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfc3RhcnRfc3RycCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0yMTc9c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTMxNC1cdFx0fVxubmV0L2NvcmUvc29ja19tYXAuYzozMTU6XHRcdHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc2ssIHBzb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzE2LVx0fSBlbHNlIGlmICghc3RyZWFtX3BhcnNlciBcdTAwMjZcdTAwMjYgc3RyZWFtX3ZlcmRpY3QgXHUwMDI2XHUwMDI2ICFwc29jay1cdTAwM2VzYXZlZF9kYXRhX3JlYWR5KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzg3CgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU29ja2V0IFByb2Nlc3NpbmcgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0cmFjZWQgdGhlIGV4ZWN1dGlvbiBmbG93IHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC4gSSBzZWUgdGhhdCBgc2tfcHNvY2tfc3RhcnRfc3RycGAgaXMgaW5kZWVkIGNhbGxlZCBmcm9tIGBzb2NrX21hcF9saW5rYCwgYXMgSSBzdXNwZWN0ZWQuIFRoYXQgbWVhbnMgdGhlIGtleSBzZXR1cCBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLiBUaGUgYWN0dWFsIGRhdGEgcGF0aCBpcyB0cmlnZ2VyZWQgYnkgdGhlIHNvY2tldCYjMzk7cyByZWNlaXZlIG1lY2hhbmlzbSwgd2hpY2ggdGhlbiBnb2VzIHRocm91Z2ggZWl0aGVyIGBzdHJwYXJzZXJgIG9yIGBza19kYXRhX3JlYWR5YC4gU2luY2Ugd2UgY2FuJiMzOTt0IHplcm8gaW4gZGlyZWN0bHkgb24gdGhlIHN0YXRpYyBkYXRhIHBhdGggZnVuY3Rpb25zLCBJIHRoaW5rIHRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaCBpcyB0byBmb2N1cyBvbiB0aG9zZSBzZXR1cCBmdW5jdGlvbnMgSSBtZW50aW9uZWQsIHBsdXMgYHNrX21zZ19yZWN2bXNnYC4gQWRkaW5nIGluIGBzb2NrX21hcF91cGRhdGVfZWxlbWAgYW5kIGBzb2NrX2hhc2hfdXBkYXRlX2VsZW1gIGlzIHRlbXB0aW5nLCBidXQgdGhleSYjMzk7cmUgbWFwIG9wZXJhdGlvbnMgYW5kIG1pZ2h0IGludHJvZHVjZSB1bm5lY2Vzc2FyeSBub2lzZS4gSSYjMzk7bGwgc3RpY2sgdG8gdGhlIGNvcmUgc2V0dXAgZnVuY3Rpb25zIGFuZCBgc2tfbXNnX3JlY3Ztc2dgIHRvIGtlZXAgaXQgY29uY2lzZSBhbmQgZm9jdXNlZC4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCB3ZSBoYXZlIGBCUEZfU1lTQ0FMTGAsIGBCUEZfU1RSRUFNX1BBUlNFUmAsIGFuZCBgTkVUX1NPQ0tfTVNHYCwgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgYm90aCBvZiB0aGUgZmlyc3QgdHdvLiBTbywgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9TVFJFQU1fUEFSU0VSYCBhcmUgc3VmZmljaWVudCB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLgoKVGhlIHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIGFsdGVycyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgYW5kIGBza19wc29ja19za2JfaW5ncmVzc2AgdG8gaGFuZGxlIHNpdHVhdGlvbnMgd2hlcmUgYHNrX2ZvcndhcmRfYWxsb2NgIGlzIGluc3VmZmljaWVudCBkdXJpbmcgcmVjZWl2ZSBvd25lcnNoaXAgYXNzaWdubWVudCB3aGVuIGEgZGlyZWN0IGBzdHJwYXJzZXJgIFNLX1BBU1MgY2xvbmUgaXMgaW52b2x2ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIHNvY2ttYXAvc2ttc2cgQlBGIGluZnJhc3RydWN0dXJlLiBTbyB0aGUgY29kZSBiZWluZyBjaGFuZ2VkIGlzIHJlYWNoZWQgd2hlbiBhIEJQRiBzb2NrbWFwIHdpdGggYSBzdHJlYW0gcGFyc2VyIGFuZCB2ZXJkaWN0IHByb2dyYW0gYXJlIGF0dGFjaGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza19wc29ja19pbml0X3N0cnAmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RhcnRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF92ZXJkaWN0JiMzNDssCiAgICAmIzM0O3NrX21zZ19yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCB0byBoYW5kbGUgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgd2hlbiBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXAgdG8gYSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgY2xvbmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc29ja21hcC9za21zZyBCUEYgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHNvY2ttYXAgd2l0aCBhIHN0cmVhbSBwYXJzZXIgYW5kIHZlcmRpY3QgcHJvZ3JhbSBhdHRhY2hlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza19wc29ja19pbml0X3N0cnAmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RhcnRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF92ZXJkaWN0JiMzNDssCiAgICAmIzM0O3NrX21zZ19yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCB0byBoYW5kbGUgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgd2hlbiBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXAgdG8gYSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgY2xvbmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc29ja21hcC9za21zZyBCUEYgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHNvY2ttYXAgd2l0aCBhIHN0cmVhbSBwYXJzZXIgYW5kIHZlcmRpY3QgcHJvZ3JhbSBhdHRhY2hlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE3OjI4LjA4MjIzNDEwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTA4MzgyMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX3Bzb2NrX2luaXRfc3RycFwiLFxuICAgIFwic2tfcHNvY2tfc3RhcnRfc3RycFwiLFxuICAgIFwic2tfcHNvY2tfc3RhcnRfdmVyZGljdFwiLFxuICAgIFwic2tfbXNnX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgYW5kIGBza19wc29ja19za2JfaW5ncmVzc2AgdG8gaGFuZGxlIGBza19mb3J3YXJkX2FsbG9jYCBkZWZpY2l0IHdoZW4gYXNzaWduaW5nIHJlY2VpdmUgb3duZXJzaGlwIHRvIGEgZGlyZWN0IHN0cnBhcnNlciBTS19QQVNTIGNsb25lLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHNvY2ttYXAvc2ttc2cgQlBGIGluZnJhc3RydWN0dXJlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIEJQRiBzb2NrbWFwIHdpdGggYSBzdHJlYW0gcGFyc2VyIGFuZCB2ZXJkaWN0IHByb2dyYW0gYXR0YWNoZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE3OjI4LjA4MjIzOTQ2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMjQ5NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWZhYzkxYmIzMzkzZWRlZmY5MDJiZTI0ZTY1Y2FhNjJmNjczZWJjM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyIDExOjE3OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXFxuaW5kZXggMjUyMWI2NDNmYTA1ZC4uY2U1YWQ4MTYwMjgyOCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9za21zZy5jXFxuKysrIGIvbmV0L2NvcmUvc2ttc2cuY1xcbkBAIC01ODYsNyArNTg2LDggQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpO1xcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKTtcXG4gXFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0dTMyIG9mZiwgdTMyIGxlbilcXG5AQCAtNTk1LDEyICs1OTYsOSBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBza19tc2cgKm1zZztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdC8qIElmIHdlIGFyZSByZWNlaXZpbmcgb24gdGhlIHNhbWUgc29jayBza2ItXFx1MDAzZXNrIGlzIGFscmVhZHkgYXNzaWduZWQsXFxuLVxcdCAqIHNraXAgbWVtb3J5IGFjY291bnRpbmcgYW5kIG93bmVyIHRyYW5zaXRpb24gc2VlaW5nIGl0IGFscmVhZHkgc2V0XFxuLVxcdCAqIGNvcnJlY3RseS5cXG4tXFx0ICovXFxuIFxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZXNrID09IHNrKSlcXG4tXFx0XFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUpO1xcbitcXHRcXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHNrYl9icGZfc3RycGFyc2VyKHNrYikpO1xcbiBcXHRtc2cgPSBza19wc29ja19jcmVhdGVfaW5ncmVzc19tc2coc2ssIHNrYik7XFxuIFxcdGlmICghbXNnKVxcbiBcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG5AQCAtNjE4LDEyICs2MTYsMTQgQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi0vKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBvZiB0aGUgc29ja2V0IGFscmVhZHkgYXNzaWduZWQgdG8gdGhlXFxuLSAqIHNrYi4gSW4gdGhpcyBjYXNlIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIG1lbW9yeSBsaW1pdHMgb3Igc2tiX3NldF9vd25lcl9yXFxuLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS5cXG4rLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgZm9yIHBzb2NrLVxcdTAwM2Vzay5cXG4rICpcXG4rICogQmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byBhIGRpcmVjdCBzdHJwYXJzZXIgU0tfUEFTUyBjbG9uZSxcXG4rICogc2V0dGxlIGFueSBleGlzdGluZyBza19mb3J3YXJkX2FsbG9jIGRlZmljaXQgZnJvbSBlYXJsaWVyIGNsb25lIGNoYXJnZXMuXFxuICAqL1xcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKVxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKVxcbiB7XFxuIFxcdHN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gcHNvY2stXFx1MDAzZXNrO1xcbkBAIC02MzEsNiArNjMxLDEzIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiXFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIW1zZykpXFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXG4rXFx0aWYgKHNldHRsZV9md2RfYWxsb2MgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApKSB7XFxuK1xcdFxcdGtmcmVlKG1zZyk7XFxuK1xcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXHR9XFxuK1xcbiBcXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XFxuIFxcbiBcXHQvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxcbkBAIC0xMDE3LDYgKzEwMjQsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSB7XFxuK1xcdFxcdFxcdGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyA9IGZhbHNlO1xcbitcXG4gXFx0XFx0XFx0bGVuID0gc2tiLVxcdTAwM2VsZW47XFxuIFxcdFxcdFxcdG9mZiA9IDA7XFxuIFxcdFxcdFxcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7XFxuQEAgLTEwMjQsOCArMTAzMywxMCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdFxcdFxcdFxcdG9mZiA9IHN0bS1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRcXHRcXHRcXHRsZW4gPSBzdG0tXFx1MDAzZWZ1bGxfbGVuO1xcbitcXHRcXHRcXHRcXHRzZXR0bGVfZndkX2FsbG9jID0gdHJ1ZTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XFxuK1xcdFxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlLCBzZXR0bGVfZndkX2FsbG9jKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXFxuaW5kZXggMWQ3MjMxNzI4ZWFmZC4uYzdhZDIxZDBiYmY0OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXFxuQEAgLTEsNSArMSw5IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICNpbmNsdWRlIFxcdTAwM2NlcnJvci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5ldF9kaWFnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRsaW5rLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvY2tfZGlhZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0aW5ldC90Y3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInNvY2ttYXBfaGVscGVycy5oXFxcIlxcbkBAIC00NjAsNiArNDY0LDE3MSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpXFxuIFxcdHRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApO1xcbiB9XFxuIFxcbisvKiBSZWFkIHNrX2ZvcndhcmRfYWxsb2MgdGhyb3VnaCBpbmV0X2RpYWcgbWVtaW5mby4gKi9cXG4rc3RhdGljIGludCBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhpbnQgc29jaywgaW50ICpmd2RfYWxsb2MpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgbG9jYWwgPSB7fSwgcGVlciA9IHt9O1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gKmxvY2FsX2luLCAqcGVlcl9pbjtcXG4rXFx0c29ja2xlbl90IGFkZHJfbGVuID0gc2l6ZW9mKGxvY2FsKTtcXG4rXFx0Y2hhciBidWZbMTAyNF07XFxuK1xcdHN0cnVjdCB7XFxuK1xcdFxcdHN0cnVjdCBubG1zZ2hkciBubGg7XFxuK1xcdFxcdHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyIHJlcTtcXG4rXFx0fSByZXEgPSB7XFxuK1xcdFxcdC5ubGggPSB7XFxuK1xcdFxcdFxcdC5ubG1zZ19sZW4gPSBzaXplb2YocmVxKSxcXG4rXFx0XFx0XFx0Lm5sbXNnX3R5cGUgPSBTT0NLX0RJQUdfQllfRkFNSUxZLFxcbitcXHRcXHRcXHQubmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNULFxcbitcXHRcXHRcXHQubmxtc2dfc2VxID0gMSxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0LnJlcSA9IHtcXG4rXFx0XFx0XFx0LnNkaWFnX2ZhbWlseSA9IEFGX0lORVQsXFxuK1xcdFxcdFxcdC5zZGlhZ19wcm90b2NvbCA9IElQUFJPVE9fVENQLFxcbitcXHRcXHRcXHQuaWRpYWdfZXh0ID0gMSBcXHUwMDNjXFx1MDAzYyAoSU5FVF9ESUFHX01FTUlORk8gLSAxKSxcXG4rXFx0XFx0XFx0LmlkaWFnX3N0YXRlcyA9IH4wVSxcXG4rXFx0XFx0XFx0LmlkLmlkaWFnX2Nvb2tpZSA9IHtcXG4rXFx0XFx0XFx0XFx0SU5FVF9ESUFHX05PQ09PS0lFLFxcbitcXHRcXHRcXHRcXHRJTkVUX0RJQUdfTk9DT09LSUUsXFxuK1xcdFxcdFxcdH0sXFxuK1xcdFxcdH0sXFxuK1xcdH07XFxuK1xcdGludCBkaWFnX2ZkLCByZXQsIGVyciA9IC1FTk9FTlQ7XFxuK1xcbitcXHRpZiAoZ2V0c29ja25hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZsb2NhbCwgXFx1MDAyNmFkZHJfbGVuKSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFx0YWRkcl9sZW4gPSBzaXplb2YocGVlcik7XFxuK1xcdGlmIChnZXRwZWVybmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNnBlZXIsIFxcdTAwMjZhZGRyX2xlbikpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRsb2NhbF9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcXHUwMDI2bG9jYWw7XFxuK1xcdHBlZXJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopXFx1MDAyNnBlZXI7XFxuK1xcdHJlcS5yZXEuaWQuaWRpYWdfc3BvcnQgPSBsb2NhbF9pbi1cXHUwMDNlc2luX3BvcnQ7XFxuK1xcdHJlcS5yZXEuaWQuaWRpYWdfZHBvcnQgPSBwZWVyX2luLVxcdTAwM2VzaW5fcG9ydDtcXG4rXFx0cmVxLnJlcS5pZC5pZGlhZ19zcmNbMF0gPSBsb2NhbF9pbi1cXHUwMDNlc2luX2FkZHIuc19hZGRyO1xcbitcXHRyZXEucmVxLmlkLmlkaWFnX2RzdFswXSA9IHBlZXJfaW4tXFx1MDAzZXNpbl9hZGRyLnNfYWRkcjtcXG4rXFxuK1xcdGRpYWdfZmQgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcgfCBTT0NLX0NMT0VYRUMsXFxuK1xcdFxcdFxcdCBORVRMSU5LX1NPQ0tfRElBRyk7XFxuK1xcdGlmIChkaWFnX2ZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdHJldCA9IHNlbmQoZGlhZ19mZCwgXFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRlcnIgPSAtZXJybm87XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGlmIChyZXQgIT0gc2l6ZW9mKHJlcSkpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTztcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHJlY3YoZGlhZ19mZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGVyciA9IC1lcnJubztcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopYnVmO1xcbitcXHQgICAgIE5MTVNHX09LKG5saCwgcmV0KTsgbmxoID0gTkxNU0dfTkVYVChubGgsIHJldCkpIHtcXG4rXFx0XFx0c3RydWN0IGluZXRfZGlhZ19tc2cgKm1zZyA9IE5MTVNHX0RBVEEobmxoKTtcXG4rXFx0XFx0c3RydWN0IHJ0YXR0ciAqYXR0cjtcXG4rXFx0XFx0aW50IGxlbjtcXG4rXFxuK1xcdFxcdGlmIChubGgtXFx1MDAzZW5sbXNnX3R5cGUgPT0gTkxNU0dfRVJST1IpIHtcXG4rXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKG5saC1cXHUwMDNlbmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGxlbiA9IG5saC1cXHUwMDNlbmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqbXNnKSk7XFxuK1xcdFxcdGZvciAoYXR0ciA9IChzdHJ1Y3QgcnRhdHRyICopKG1zZyArIDEpOyBSVEFfT0soYXR0ciwgbGVuKTtcXG4rXFx0XFx0ICAgICBhdHRyID0gUlRBX05FWFQoYXR0ciwgbGVuKSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9kaWFnX21lbWluZm8gKm1pbmZvO1xcbitcXG4rXFx0XFx0XFx0aWYgKGF0dHItXFx1MDAzZXJ0YV90eXBlICE9IElORVRfRElBR19NRU1JTkZPKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0bWluZm8gPSBSVEFfREFUQShhdHRyKTtcXG4rXFx0XFx0XFx0KmZ3ZF9hbGxvYyA9IChfX3MzMiltaW5mby1cXHUwMDNlaWRpYWdfZm1lbTtcXG4rXFx0XFx0XFx0ZXJyID0gMDtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRjbG9zZShkaWFnX2ZkKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLyogVGVzdCBzdHJwYXJzZXIgU0tfUEFTUyBkZWxpdmVyeSB0byB0aGUgc2FtZSBzb2NrZXQuICovXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2Modm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3N0cnAgKnN0cnAgPSBOVUxMO1xcbitcXHRjaGFyIHNuZFs0ICogMTAyNF07XFxuK1xcdGludCBjID0gLTEsIHAgPSAtMTtcXG4rXFx0aW50IGZ3ZF9hbGxvYztcXG4rXFx0aW50IHNuZGJ1ZiA9IHNpemVvZihzbmQpO1xcbitcXHRpbnQgemVybyA9IDA7XFxuK1xcdGNoYXIgcmN2O1xcbitcXHRpbnQgc2VudCwgcmVjdmQ7XFxuK1xcdGludCBtYXA7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRtZW1zZXQoc25kLCAweGE1LCBzaXplb2Yoc25kKSk7XFxuK1xcbitcXHRzdHJwID0gdGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHN0cnAsIFxcXCJ0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtYXAgPSBicGZfbWFwX19mZChzdHJwLVxcdTAwM2VtYXBzLnNvY2tfbWFwKTtcXG4rXFx0ZXJyID0geGJwZl9wcm9nX2F0dGFjaChicGZfcHJvZ3JhbV9fZmQoc3RycC1cXHUwMDNlcHJvZ3MucHJvZ19za2JfcGFyc2VyX29uZSksXFxuK1xcdFxcdFxcdCAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0X2Rlc3Ryb3k7XFxuK1xcbitcXHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLVxcdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0X3Bhc3MpLFxcbitcXHRcXHRcXHQgICAgICAgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULCAwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdGVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBcXHUwMDI2YywgXFx1MDAyNnApO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJjcmVhdGVfcGFpclxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitcXG4rXFx0ZXJyID0geHNldHNvY2tvcHQoYywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCBcXHUwMDI2c25kYnVmLCBzaXplb2Yoc25kYnVmKSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0X2Rlc3Ryb3k7XFxuK1xcbitcXHRlcnIgPSB4c2V0c29ja29wdChwLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIFxcdTAwMjZzbmRidWYsIHNpemVvZihzbmRidWYpKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdGVyciA9IHhicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcCwgXFx1MDAyNnplcm8sIFxcdTAwMjZwLCBCUEZfTk9FWElTVCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0X2Rlc3Ryb3k7XFxuK1xcbitcXHRzZW50ID0gc2VuZChjLCBzbmQsIHNpemVvZihzbmQpLCBNU0dfRE9OVFdBSVQpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShzZW50LCBzaXplb2Yoc25kKSwgXFxcInNlbmRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdHJlY3ZkID0gcmVjdl90aW1lb3V0KHAsIFxcdTAwMjZyY3YsIHNpemVvZihyY3YpLCBNU0dfRE9OVFdBSVQsXFxuK1xcdFxcdFxcdCAgICAgSU9fVElNRU9VVF9TRUMpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShyZWN2ZCwgc2l6ZW9mKHJjdiksIFxcXCJyZWN2X3RpbWVvdXRcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShyY3YsIHNuZFswXSwgXFxcImRhdGEgbWlzbWF0Y2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdGVyciA9IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKHAsIFxcdTAwMjZmd2RfYWxsb2MpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvY1xcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0dFKGZ3ZF9hbGxvYywgMCwgXFxcInNrX2ZvcndhcmRfYWxsb2NcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rb3V0X2Rlc3Ryb3k6XFxuK1xcdHRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApO1xcbitcXHRpZiAoYyBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShjKTtcXG4rXFx0aWYgKHAgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UocCk7XFxuK31cXG4rXFxuIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCBzdHJwIHRjcCBwYXNzXFxcIikpXFxuQEAgLTQ4Miw0ICs2NTEsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXFxuIFxcdFxcdHRlc3Rfc29ja21hcF9zdHJwX2Rpc3BhdGNoX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHN0cnAgcGFyc2VyIHJlamVjdCBwa3QgbW9kXFxcIikpXFxuIFxcdFxcdHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3QoKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNvY2ttYXAgc3RycCBzZWxmIHBhc3MgZndkIGFsbG9jXFxcIikpXFxuK1xcdFxcdHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2MoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXFxuaW5kZXggZmU4OGZhNmQ0MGJjNS4uNjgyZTUzZDQwNzUxYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXFxuQEAgLTUwLDYgKzUwLDEyIEBAIGludCBwcm9nX3NrYl9wYXJzZXJfcGFydGlhbChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIFxcdHJldHVybiAxMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJza19za2Ivc3RyZWFtX3BhcnNlclxcXCIpXFxuK2ludCBwcm9nX3NrYl9wYXJzZXJfb25lKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4gU0VDKFxcXCJza19za2Ivc3RyZWFtX3BhcnNlclxcXCIpXFxuIGludCBwcm9nX3NrYl9wYXJzZXJfcmVzaXplKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxNzoyOC41MzYzNzY1NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4OTQ1NDIzMDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19wc29ja19pbml0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0YXJ0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RcIixcbiAgICBcInNrX21zZ19yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgIHRvIGhhbmRsZSBgc2tfZm9yd2FyZF9hbGxvY2AgZGVmaWNpdCB3aGVuIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byBhIGRpcmVjdCBzdHJwYXJzZXIgU0tfUEFTUyBjbG9uZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzb2NrbWFwL3NrbXNnIEJQRiBpbmZyYXN0cnVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBCUEYgc29ja21hcCB3aXRoIGEgc3RyZWFtIHBhcnNlciBhbmQgdmVyZGljdCBwcm9ncmFtIGF0dGFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZmFjOTFiYjMzOTNlZGVmZjkwMmJlMjRlNjVjYWE2MmY2NzNlYmMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxMToxNzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi5jZTVhZDgxNjAyODI4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuKysrIGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTU4Niw3ICs1ODYsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB9XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpO1xuK1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0ICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpO1xuIFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHUzMiBvZmYsIHUzMiBsZW4pXG5AQCAtNTk1LDEyICs1OTYsOSBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3Qgc2tfbXNnICptc2c7XG4gXHRpbnQgZXJyO1xuIFxuLVx0LyogSWYgd2UgYXJlIHJlY2VpdmluZyBvbiB0aGUgc2FtZSBzb2NrIHNrYi1cdTAwM2VzayBpcyBhbHJlYWR5IGFzc2lnbmVkLFxuLVx0ICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXRcbi1cdCAqIGNvcnJlY3RseS5cbi1cdCAqL1xuIFx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VzayA9PSBzaykpXG4tXHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlKTtcbitcdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUsXG4rXHRcdFx0XHRcdFx0IHNrYl9icGZfc3RycGFyc2VyKHNrYikpO1xuIFx0bXNnID0gc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHNrLCBza2IpO1xuIFx0aWYgKCFtc2cpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuQEAgLTYxOCwxMiArNjE2LDE0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIG9mIHRoZSBzb2NrZXQgYWxyZWFkeSBhc3NpZ25lZCB0byB0aGVcbi0gKiBza2IuIEluIHRoaXMgY2FzZSB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBtZW1vcnkgbGltaXRzIG9yIHNrYl9zZXRfb3duZXJfclxuLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS5cbisvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stXHUwMDNlc2suXG4rICpcbisgKiBCZWZvcmUgYXNzaWduaW5nIHJlY2VpdmUgb3duZXJzaGlwIHRvIGEgZGlyZWN0IHN0cnBhcnNlciBTS19QQVNTIGNsb25lLFxuKyAqIHNldHRsZSBhbnkgZXhpc3Rpbmcgc2tfZm9yd2FyZF9hbGxvYyBkZWZpY2l0IGZyb20gZWFybGllciBjbG9uZSBjaGFyZ2VzLlxuICAqL1xuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKVxuK1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0ICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpXG4ge1xuIFx0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gcHNvY2stXHUwMDNlc2s7XG5AQCAtNjMxLDYgKzYzMSwxMyBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYlxuIFxuIFx0aWYgKHVubGlrZWx5KCFtc2cpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbitcbitcdGlmIChzZXR0bGVfZndkX2FsbG9jIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApKSB7XG4rXHRcdGtmcmVlKG1zZyk7XG4rXHRcdHJldHVybiAtRUFHQUlOO1xuK1x0fVxuK1xuIFx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xuIFxuIFx0LyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbkBAIC0xMDE3LDYgKzEwMjQsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiKSkge1xuK1x0XHRcdGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyA9IGZhbHNlO1xuK1xuIFx0XHRcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRcdFx0b2ZmID0gMDtcbiBcdFx0XHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xuQEAgLTEwMjQsOCArMTAzMywxMCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG4gXHRcdFx0XHRsZW4gPSBzdG0tXHUwMDNlZnVsbF9sZW47XG4rXHRcdFx0XHRzZXR0bGVfZndkX2FsbG9jID0gdHJ1ZTtcbiBcdFx0XHR9XG4tXHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgZmFsc2UpO1xuK1x0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sXG4rXHRcdFx0XHRcdFx0XHRmYWxzZSwgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4gXHRcdH1cbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbmluZGV4IDFkNzIzMTcyOGVhZmQuLmM3YWQyMWQwYmJmNDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbkBAIC0xLDUgKzEsOSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luZXRfZGlhZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2NrX2RpYWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldGluZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcInNvY2ttYXBfaGVscGVycy5oXCJcbkBAIC00NjAsNiArNDY0LDE3MSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpXG4gXHR0ZXN0X3NvY2ttYXBfc3RycF9fZGVzdHJveShzdHJwKTtcbiB9XG4gXG4rLyogUmVhZCBza19mb3J3YXJkX2FsbG9jIHRocm91Z2ggaW5ldF9kaWFnIG1lbWluZm8uICovXG4rc3RhdGljIGludCBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhpbnQgc29jaywgaW50ICpmd2RfYWxsb2MpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgbG9jYWwgPSB7fSwgcGVlciA9IHt9O1xuK1x0c3RydWN0IHNvY2thZGRyX2luICpsb2NhbF9pbiwgKnBlZXJfaW47XG4rXHRzb2NrbGVuX3QgYWRkcl9sZW4gPSBzaXplb2YobG9jYWwpO1xuK1x0Y2hhciBidWZbMTAyNF07XG4rXHRzdHJ1Y3Qge1xuK1x0XHRzdHJ1Y3Qgbmxtc2doZHIgbmxoO1xuK1x0XHRzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiByZXE7XG4rXHR9IHJlcSA9IHtcbitcdFx0Lm5saCA9IHtcbitcdFx0XHQubmxtc2dfbGVuID0gc2l6ZW9mKHJlcSksXG4rXHRcdFx0Lm5sbXNnX3R5cGUgPSBTT0NLX0RJQUdfQllfRkFNSUxZLFxuK1x0XHRcdC5ubG1zZ19mbGFncyA9IE5MTV9GX1JFUVVFU1QsXG4rXHRcdFx0Lm5sbXNnX3NlcSA9IDEsXG4rXHRcdH0sXG4rXHRcdC5yZXEgPSB7XG4rXHRcdFx0LnNkaWFnX2ZhbWlseSA9IEFGX0lORVQsXG4rXHRcdFx0LnNkaWFnX3Byb3RvY29sID0gSVBQUk9UT19UQ1AsXG4rXHRcdFx0LmlkaWFnX2V4dCA9IDEgXHUwMDNjXHUwMDNjIChJTkVUX0RJQUdfTUVNSU5GTyAtIDEpLFxuK1x0XHRcdC5pZGlhZ19zdGF0ZXMgPSB+MFUsXG4rXHRcdFx0LmlkLmlkaWFnX2Nvb2tpZSA9IHtcbitcdFx0XHRcdElORVRfRElBR19OT0NPT0tJRSxcbitcdFx0XHRcdElORVRfRElBR19OT0NPT0tJRSxcbitcdFx0XHR9LFxuK1x0XHR9LFxuK1x0fTtcbitcdGludCBkaWFnX2ZkLCByZXQsIGVyciA9IC1FTk9FTlQ7XG4rXG4rXHRpZiAoZ2V0c29ja25hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmxvY2FsLCBcdTAwMjZhZGRyX2xlbikpXG4rXHRcdHJldHVybiAtZXJybm87XG4rXHRhZGRyX2xlbiA9IHNpemVvZihwZWVyKTtcbitcdGlmIChnZXRwZWVybmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2cGVlciwgXHUwMDI2YWRkcl9sZW4pKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0bG9jYWxfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopXHUwMDI2bG9jYWw7XG4rXHRwZWVyX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNnBlZXI7XG4rXHRyZXEucmVxLmlkLmlkaWFnX3Nwb3J0ID0gbG9jYWxfaW4tXHUwMDNlc2luX3BvcnQ7XG4rXHRyZXEucmVxLmlkLmlkaWFnX2Rwb3J0ID0gcGVlcl9pbi1cdTAwM2VzaW5fcG9ydDtcbitcdHJlcS5yZXEuaWQuaWRpYWdfc3JjWzBdID0gbG9jYWxfaW4tXHUwMDNlc2luX2FkZHIuc19hZGRyO1xuK1x0cmVxLnJlcS5pZC5pZGlhZ19kc3RbMF0gPSBwZWVyX2luLVx1MDAzZXNpbl9hZGRyLnNfYWRkcjtcbitcbitcdGRpYWdfZmQgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcgfCBTT0NLX0NMT0VYRUMsXG4rXHRcdFx0IE5FVExJTktfU09DS19ESUFHKTtcbitcdGlmIChkaWFnX2ZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0cmV0ID0gc2VuZChkaWFnX2ZkLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpLCAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0ZXJyID0gLWVycm5vO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGlmIChyZXQgIT0gc2l6ZW9mKHJlcSkpIHtcbitcdFx0ZXJyID0gLUVJTztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSByZWN2KGRpYWdfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRlcnIgPSAtZXJybm87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0Zm9yIChzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilidWY7XG4rXHQgICAgIE5MTVNHX09LKG5saCwgcmV0KTsgbmxoID0gTkxNU0dfTkVYVChubGgsIHJldCkpIHtcbitcdFx0c3RydWN0IGluZXRfZGlhZ19tc2cgKm1zZyA9IE5MTVNHX0RBVEEobmxoKTtcbitcdFx0c3RydWN0IHJ0YXR0ciAqYXR0cjtcbitcdFx0aW50IGxlbjtcbitcbitcdFx0aWYgKG5saC1cdTAwM2VubG1zZ190eXBlID09IE5MTVNHX0VSUk9SKSB7XG4rXHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHRpZiAobmxoLVx1MDAzZW5sbXNnX3R5cGUgPT0gTkxNU0dfRE9ORSlcbitcdFx0XHRicmVhaztcbitcbitcdFx0bGVuID0gbmxoLVx1MDAzZW5sbXNnX2xlbiAtIE5MTVNHX0xFTkdUSChzaXplb2YoKm1zZykpO1xuK1x0XHRmb3IgKGF0dHIgPSAoc3RydWN0IHJ0YXR0ciAqKShtc2cgKyAxKTsgUlRBX09LKGF0dHIsIGxlbik7XG4rXHRcdCAgICAgYXR0ciA9IFJUQV9ORVhUKGF0dHIsIGxlbikpIHtcbitcdFx0XHRzdHJ1Y3QgaW5ldF9kaWFnX21lbWluZm8gKm1pbmZvO1xuK1xuK1x0XHRcdGlmIChhdHRyLVx1MDAzZXJ0YV90eXBlICE9IElORVRfRElBR19NRU1JTkZPKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0bWluZm8gPSBSVEFfREFUQShhdHRyKTtcbitcdFx0XHQqZndkX2FsbG9jID0gKF9fczMyKW1pbmZvLVx1MDAzZWlkaWFnX2ZtZW07XG4rXHRcdFx0ZXJyID0gMDtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0fVxuK1xuK291dDpcbitcdGNsb3NlKGRpYWdfZmQpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLyogVGVzdCBzdHJwYXJzZXIgU0tfUEFTUyBkZWxpdmVyeSB0byB0aGUgc2FtZSBzb2NrZXQuICovXG4rc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYyh2b2lkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfc3RycCAqc3RycCA9IE5VTEw7XG4rXHRjaGFyIHNuZFs0ICogMTAyNF07XG4rXHRpbnQgYyA9IC0xLCBwID0gLTE7XG4rXHRpbnQgZndkX2FsbG9jO1xuK1x0aW50IHNuZGJ1ZiA9IHNpemVvZihzbmQpO1xuK1x0aW50IHplcm8gPSAwO1xuK1x0Y2hhciByY3Y7XG4rXHRpbnQgc2VudCwgcmVjdmQ7XG4rXHRpbnQgbWFwO1xuK1x0aW50IGVycjtcbitcbitcdG1lbXNldChzbmQsIDB4YTUsIHNpemVvZihzbmQpKTtcbitcbitcdHN0cnAgPSB0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHN0cnAsIFwidGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdG1hcCA9IGJwZl9tYXBfX2ZkKHN0cnAtXHUwMDNlbWFwcy5zb2NrX21hcCk7XG4rXHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLVx1MDAzZXByb2dzLnByb2dfc2tiX3BhcnNlcl9vbmUpLFxuK1x0XHRcdCAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0ZXJyID0geGJwZl9wcm9nX2F0dGFjaChicGZfcHJvZ3JhbV9fZmQoc3RycC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0X3Bhc3MpLFxuK1x0XHRcdCAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdGVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBcdTAwMjZjLCBcdTAwMjZwKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJjcmVhdGVfcGFpclwiKSlcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdGVyciA9IHhzZXRzb2Nrb3B0KGMsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgXHUwMDI2c25kYnVmLCBzaXplb2Yoc25kYnVmKSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0ZXJyID0geHNldHNvY2tvcHQocCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCBcdTAwMjZzbmRidWYsIHNpemVvZihzbmRidWYpKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRlcnIgPSB4YnBmX21hcF91cGRhdGVfZWxlbShtYXAsIFx1MDAyNnplcm8sIFx1MDAyNnAsIEJQRl9OT0VYSVNUKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRzZW50ID0gc2VuZChjLCBzbmQsIHNpemVvZihzbmQpLCBNU0dfRE9OVFdBSVQpO1xuK1x0aWYgKCFBU1NFUlRfRVEoc2VudCwgc2l6ZW9mKHNuZCksIFwic2VuZFwiKSlcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdHJlY3ZkID0gcmVjdl90aW1lb3V0KHAsIFx1MDAyNnJjdiwgc2l6ZW9mKHJjdiksIE1TR19ET05UV0FJVCxcbitcdFx0XHQgICAgIElPX1RJTUVPVVRfU0VDKTtcbitcdGlmICghQVNTRVJUX0VRKHJlY3ZkLCBzaXplb2YocmN2KSwgXCJyZWN2X3RpbWVvdXRcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKHJjdiwgc25kWzBdLCBcImRhdGEgbWlzbWF0Y2hcIikpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRlcnIgPSBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhwLCBcdTAwMjZmd2RfYWxsb2MpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jXCIpIHx8XG4rXHQgICAgIUFTU0VSVF9HRShmd2RfYWxsb2MsIDAsIFwic2tfZm9yd2FyZF9hbGxvY1wiKSlcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitvdXRfZGVzdHJveTpcbitcdHRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApO1xuK1x0aWYgKGMgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShjKTtcbitcdGlmIChwIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UocCk7XG4rfVxuK1xuIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgc3RycCB0Y3AgcGFzc1wiKSlcbkBAIC00ODIsNCArNjUxLDYgQEAgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKVxuIFx0XHR0ZXN0X3NvY2ttYXBfc3RycF9kaXNwYXRjaF9wa3QoQUZfSU5FVCwgU09DS19TVFJFQU0pO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzb2NrbWFwIHN0cnAgcGFyc2VyIHJlamVjdCBwa3QgbW9kXCIpKVxuIFx0XHR0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KCk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgc3RycCBzZWxmIHBhc3MgZndkIGFsbG9jXCIpKVxuK1x0XHR0ZXN0X3NvY2ttYXBfc3RycF9zZWxmX3Bhc3NfZndkX2FsbG9jKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcbmluZGV4IGZlODhmYTZkNDBiYzUuLjY4MmU1M2Q0MDc1MWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcbkBAIC01MCw2ICs1MCwxMiBAQCBpbnQgcHJvZ19za2JfcGFyc2VyX3BhcnRpYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDEwO1xuIH1cbiBcbitTRUMoXCJza19za2Ivc3RyZWFtX3BhcnNlclwiKVxuK2ludCBwcm9nX3NrYl9wYXJzZXJfb25lKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRyZXR1cm4gMTtcbit9XG4rXG4gU0VDKFwic2tfc2tiL3N0cmVhbV9wYXJzZXJcIilcbiBpbnQgcHJvZ19za2JfcGFyc2VyX3Jlc2l6ZShzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6MjguNTM2Mzc5MDk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0MjYyOTI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBuZXQvY29yZS9za21zZy5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgaXQncyBhIHNwZWNpZmljIGZpeCBpbnZvbHZpbmcgYG5ldC9jb3JlL3NrbXNnLmNgIGFuZCBhIG5ldyB0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhhbmRsaW5nIHRoZSBgc2tfZm9yd2FyZF9hbGxvY2AgZGVmaWNpdCB3aGVuIGRlYWxpbmcgd2l0aCBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgY2xvbmVzIGR1cmluZyByZWNlaXZlIG93bmVyc2hpcCBhc3NpZ25tZW50LiBTcGVjaWZpY2FsbHksIHRoZXkndmUgYWRkZWQgYSBgc2V0dGxlX2Z3ZF9hbGxvY2AgYm9vbGVhbiBwYXJhbWV0ZXIgdG8gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFuZCBhcmUgY2FsbGluZyBgc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLCAwKWAgaWYgaXQncyBzZXQgdG8gdHJ1ZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgYWJvdXQgcmVhY2hhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCB3aGljaCBhcmUgY3JpdGljYWwgY29tcG9uZW50cyBvZiB0aGUgc29ja21hcC9za21zZyBCUEYgaW5mcmFzdHJ1Y3R1cmUsIEknbSBwcmV0dHkgY29uZmlkZW50IHRoYXQgdGhlc2UgZnVuY3Rpb25zICphcmUqIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gVGhleSdyZSBmdW5kYW1lbnRhbCB0byB0aGUgd2hvbGUgcHJvY2Vzcy5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgcGxhY2VzIHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cy4gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGFyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzLiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgaXMgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIGV4cG9zdXJlLCBzbyB0aGUgZm9ybWVyIHR3byBhcmUgbGlrZWx5IHRoZSBtb3JlIGNyaXRpY2FsIHRhcmdldHMuXG5cblRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcsIEknbGwgbmVlZCB0byBsb2NhdGUgdGhvc2UgdHdvIGZ1bmN0aW9ucywgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCB3aXRoaW4gYG5ldC9jb3JlL3NrbXNnLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzYzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6MzQuMTc5MDEyNjY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODE3NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3NrYl9pbmdyZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz01MzM9c3RhdGljIHN0cnVjdCBza19tc2cgKnNrX3Bzb2NrX2NyZWF0ZV9pbmdyZXNzX21zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTU0NC1cXG5uZXQvY29yZS9za21zZy5jOjU0NTpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za21zZy5jLTU0Ni1cXHRcXHRcXHRcXHRcXHR1MzIgb2ZmLCB1MzIgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01ODctXFxubmV0L2NvcmUvc2ttc2cuYzo1ODg6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy01ODktXFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01OTEtXFxubmV0L2NvcmUvc2ttc2cuYzo1OTI6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtNTkzLVxcdFxcdFxcdFxcdHUzMiBvZmYsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTU5OS1cXHRpZiAodW5saWtlbHkoc2tiLVxcdTAwM2VzayA9PSBzaykpXFxubmV0L2NvcmUvc2ttc2cuYzo2MDA6XFx0XFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUsXFxubmV0L2NvcmUvc2ttc2cuYy02MDEtXFx0XFx0XFx0XFx0XFx0XFx0IHNrYl9icGZfc3RycGFyc2VyKHNrYikpO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02MTItXFx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xcbm5ldC9jb3JlL3NrbXNnLmM6NjEzOlxcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc2tiLCBvZmYsIGxlbiwgcHNvY2ssIHNrLCBtc2csIHRydWUpO1xcbm5ldC9jb3JlL3NrbXNnLmMtNjE0LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02MjMtICovXFxubmV0L2NvcmUvc2ttc2cuYzo2MjQ6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy02MjUtXFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02NDctXFx0bXNnLVxcdTAwM2VzayA9IHNrO1xcbm5ldC9jb3JlL3NrbXNnLmM6NjQ4OlxcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc2tiLCBvZmYsIGxlbiwgcHNvY2ssIHNrLCBtc2csIHRha2VfcmVmKTtcXG5uZXQvY29yZS9za21zZy5jLTY0OS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NjU0PXN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02NjItXFxubmV0L2NvcmUvc2ttc2cuYzo2NjM6XFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHBzb2NrLCBza2IsIG9mZiwgbGVuKTtcXG5uZXQvY29yZS9za21zZy5jLTY2NC19XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEwMDM9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwMjItXFx0XFx0ICogcXVldWUgd29yayBvdGhlcndpc2Ugd2UgbWF5IGdldCBPT08gZGF0YS4gT3RoZXJ3aXNlLFxcbm5ldC9jb3JlL3NrbXNnLmM6MTAyMzpcXHRcXHQgKiBpZiBza19wc29ja19za2JfaW5ncmVzcyBlcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5XFxubmV0L2NvcmUvc2ttc2cuYy0xMDI0LVxcdFxcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDM3LVxcdFxcdFxcdH1cXG5uZXQvY29yZS9za21zZy5jOjEwMzg6XFx0XFx0XFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcXG5uZXQvY29yZS9za21zZy5jLTEwMzktXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UsIHNldHRsZV9md2RfYWxsb2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxNzozNC4yMjc4MzU5MDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc0NTE4NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkFuYWx5emluZyBQYWNrZXQgU29ja2V0IFZlcmRpY3QgQXBwbGljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBhcmUgYm90aCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCdzIGEgZ29vZCBpbml0aWFsIGNsdWUg4oCTIGl0IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBoYXZlICppbnRlcm5hbCBsaW5rYWdlKiB3aXRoaW4gdGhlaXIgY29tcGlsYXRpb24gdW5pdC4gVGhleSdyZSBub3QgbWVhbnQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gb3V0c2lkZSB0aGF0IHNwZWNpZmljIG1vZHVsZSBvciBmaWxlLlxuXG5HaXZlbiB0aGF0LCBteSBuZXh0IHRob3VnaHQgaXM6ICpXaG8qIGlzIGNhbGxpbmcgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgPyBTaW5jZSBpdCdzIHN0YXRpYywgdGhlIGNhbGwgaGFzIHRvIG9yaWdpbmF0ZSB3aXRoaW4gdGhlIHNhbWUgc291cmNlIGZpbGUsIHNvIEkgbmVlZCB0byBmaW5kIGl0cyBjYWxsZXJzIHRvIHJlYWxseSB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhY2tldCBzb2NrZXQgdmVyZGljdGluZyBwcm9jZXNzIHdvcmtzIGFuZCB3aGF0IHRoZSBjb25zdHJhaW50cyBhcmUuIFRoZSBmYWN0IHRoYXQgaXQgaXMgYSAqdmVyZGljdCBhcHBsaWNhdGlvbiogbWVhbnMgdGhhdCBpdCBpcyBhcHBseWluZyBzb21lIGRlY2lzaW9uIGFib3V0IHRoZSBwYWNrZXQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgZGVjaXNpb25zIGFyZSBhbmQgd2hhdCB0aGUgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MgZGVwZW5kcyBvbi4gVGhpcyBzZWVtcyBsaWtlIGEgY29yZSBwYXJ0IG9mIHdoYXRldmVyIHN5c3RlbSB0aGlzIGNvZGUgaXMgaW1wbGVtZW50aW5nLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgKmluZ3Jlc3MqIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSB2ZXJkaWN0IGFwcGxpY2F0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuIExldCdzIHNlZSB3aGF0IHRoZSBjYWxsIHNpdGVzIHJldmVhbC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTI3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6MzguMTAyMzU3OTg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDg4Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTk2NT1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChzdHJ1Y3Qgc2tfcHNvY2sgKmZyb20sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwMDItXFxubmV0L2NvcmUvc2ttc2cuYzoxMDAzOnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtMTAwNC1cXHRcXHRcXHRcXHQgIGludCB2ZXJkaWN0KVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMDg2PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTA5LVxcdH1cXG5uZXQvY29yZS9za21zZy5jOjExMTA6XFx0c2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTExMS1vdXQ6XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEyMDk9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjMyLVxcdH1cXG5uZXQvY29yZS9za21zZy5jOjEyMzM6XFx0cmV0ID0gc2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTIzNC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6MzguMTkxODUxNjE2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyMTY0NTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIHRoZSBJbnRlcnBsYXkgb2YgcHNvY2sgRnVuY3Rpb24gQ2FsbHMqKlxuXG5BbHJpZ2h0LCBzbyBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgYm90aCwgaXQgc2VlbXMsIGVuZCB1cCBjYWxsaW5nIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludCBmb3IgbWUuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgdGhhdCBhZmZlY3RzIHRoZSBvdmVyYWxsIGZsb3cgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgcGFja2V0IHNvY2tldCAocHNvY2spIG9wZXJhdGlvbnMuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMgaG93IGlzIGl0IHVzZWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLlxuXG5UaGUgaW1tZWRpYXRlIHRoaW5nIEknbSBmb2N1c2VkIG9uIGlzIHdoZXRoZXIgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBoYXMgcmVhbCBpbXBsaWNhdGlvbnMgZm9yIHNjb3BpbmcsIHZpc2liaWxpdHksIGFuZCBwb3RlbnRpYWxseSwgb3B0aW1pemF0aW9uLiBBIHN0YXRpYyBmdW5jdGlvbiB3b3VsZCBiZSBzY29wZWQgb25seSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIG1lYW5pbmcgaXQncyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIG90aGVyIG1vZHVsZXMsIGJ1dCByYXRoZXIgYWN0cyBhcyBhIHByaXZhdGUgaGVscGVyLiBLbm93aW5nIGlmIGl0J3Mgc3RhdGljIGdpdmVzIG1lIGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGUgcHV6emxlIGluIHRlcm1zIG9mIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGFuZCBkZXNpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI1NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE3OjQxLjYxMzQ5OTc5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM0NzE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja19zdHJwX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEwNjg9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDg1LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jOjEwODY6c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2ttc2cuYy0xMDg3LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTExNC1cXG5uZXQvY29yZS9za21zZy5jOjExMTU6c3RhdGljIGludCBza19wc29ja19zdHJwX3JlYWRfZG9uZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTExNi17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTExNTQ9aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExNTgtXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdHJwX2NhbGxiYWNrcyBjYiA9IHtcXG5uZXQvY29yZS9za21zZy5jOjExNTk6XFx0XFx0LnJjdl9tc2dcXHQ9IHNrX3Bzb2NrX3N0cnBfcmVhZCxcXG5uZXQvY29yZS9za21zZy5jOjExNjA6XFx0XFx0LnJlYWRfc29ja19kb25lXFx0PSBza19wc29ja19zdHJwX3JlYWRfZG9uZSxcXG5uZXQvY29yZS9za21zZy5jLTExNjEtXFx0XFx0LnBhcnNlX21zZ1xcdD0gc2tfcHNvY2tfc3RycF9wYXJzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6NDEuNjg2ODUxOTQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2ODA5NTU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgc2tfcHNvY2tfaW5pdF9zdHJwYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAqKlxuXG5SaWdodCwgc28gYHNrX3Bzb2NrX2luaXRfc3RycGAgaXNuJ3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIGV4cG9zZWQgYW5kIGNhbGxlZCBmcm9tIG91dHNpZGUgaXRzIHByaW1hcnkgY29tcGlsYXRpb24gdW5pdC4gTWFrZXMgbWUgd29uZGVyIHdoZXJlIGFuZCB3aHkuIElzIGl0IHBhcnQgb2YgYSBwdWJsaWMgQVBJPyBJcyBpdCB1c2VkIGluIHNvbWUga2luZCBvZiBoZWxwZXIgbW9kdWxlPyBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YC4gVGhhdCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggcGFja2V0IHNvY2tldHMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGtpbmQgb2YgZmlsdGVyaW5nIG9yIHZlcmRpY3QgbWVjaGFuaXNtIG9uIHRoZSByZWNlaXZlZCBwYWNrZXRzLiBUaGUgbmFtZSBpcyBwcmV0dHkgY2xlYXIsIGJ1dCB0aGUgY29udGV4dCBtYXR0ZXJzLiBJcyB0aGlzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIHBhY2tldCBmaWx0ZXIgbGlrZSBCUEY/IE9yIHBlcmhhcHMgYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIGNvbnRyb2xsaW5nIHRoZSBiZWhhdmlvdXIgb2YgcmF3IHNvY2tldHM/IEl0IG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBpbnRlZ3JhdGlvbiBhbmQgZnVuY3Rpb25hbGl0eSwgc28gSSdsbCBuZWVkIHRvIGRpdmUgaW50byB0aGF0IG9uZSBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTM2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6NDUuMTU0OTUwNzA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzMzMjkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEyMDQ9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMDgtXFxubmV0L2NvcmUvc2ttc2cuYzoxMjA5OnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za21zZy5jLTEyMTAte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjQxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyNTctXFxubmV0L2NvcmUvc2ttc2cuYzoxMjU4OlxcdGNvcGllZCA9IG9wcy1cXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjU5LVxcdGlmIChjb3BpZWQgXFx1MDAzZT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxNzo0NS4yMDgyODg1NjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4OTUxNzE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YCoqXG5cblJpZ2h0LCBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YCBpcyBmbGFnZ2VkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gU3RhdGljIGZ1bmN0aW9ucywgd2l0aGluIGEga2VybmVsIGNvbnRleHQgbGlrZSB0aGlzLCB1c3VhbGx5IG1lYW4gaXQncyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgcHJvYmFibHkgZm9yIGEgdmVyeSBzcGVjaWZpYyBtb2R1bGUgb3Igc3Vic3lzdGVtLiBJdCdzIGxpa2VseSBub3QgbWVhbnQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gb3V0c2lkZSBpdHMgY29tcGlsYXRpb24gdW5pdC5cblxuU28sIGxldCdzIHRyYWNlIHRoaXMgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzIG9mIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgLiBVbmRlcnN0YW5kaW5nIHdoZXJlIGl0J3MgY2FsbGVkIGZyb20gaXMgY3J1Y2lhbCB0byBncmFzcGluZyBpdHMgZnVuY3Rpb24gYW5kIHRoZSBjb250ZXh0IGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE3OjUwLjI5NzgwODZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1Njg3MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za21zZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9MTIwOT1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyNDAtXFxubmV0L2NvcmUvc2ttc2cuYzoxMjQxOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMjQyLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTI2OD12b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjczLVxcdHBzb2NrLVxcdTAwM2VzYXZlZF9kYXRhX3JlYWR5ID0gc2stXFx1MDAzZXNrX2RhdGFfcmVhZHk7XFxubmV0L2NvcmUvc2ttc2cuYzoxMjc0OlxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX2RhdGFfcmVhZHksIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjc1LVxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX3dyaXRlX3NwYWNlLCBza19wc29ja193cml0ZV9zcGFjZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE3OjUwLjM4MzUwMTc4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzUwNjcyNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFja2V0IFNvY2tldCBEYXRhIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYWNrZXQgc29ja2V0IGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAgaXNuJ3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0J3MgbXkgaW5pdGlhbCBwb2ludCBvZiBmb2N1cy4gSXQgbG9va3MgbGlrZSBgc2tfcHNvY2tfaW5pdF9zdHJwYCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc29ja2V0IHN0YXJ0cy4gQnV0LCBoYW5nIG9uLi4uIHRoZXNlIGFwcGVhciB0byBiZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMsIG5vdCB0aGUgYWN0dWFsIGRhdGEgcGF0aC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGRhdGEgYWN0dWFsbHkgZmxvd3MuXG5cbkFscmlnaHQsIHRoZSBkYXRhIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGFyZSBwcm9iYWJseSBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAuIE9oLCBidXQgdGhleSdyZSAqc3RhdGljKi4gVGhhdOKAmXMgYSBwb3RlbnRpYWwgcm9hZGJsb2NrLiBTbywgbXkgZ29hbCBub3cgaXMgdG8gZmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMgZGF0YSBwYXRoLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdy5cblxuTGV0J3MgY2hlY2sgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhcyBhIHBvc3NpYmxlIHBhdGguIEhtbSwgc3RhdGljLiBPa2F5LCB0aGF0J3Mgbm90IGl0LiBJIG5lZWQgdG8gd2lkZW4gdGhlIHNlYXJjaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBsb29rIGF0IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBuZXQvY29yZS9za21zZy5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMDcsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6NTQuNzM0MTc3NTgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUwMDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWjAtOV9dKyBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEyPXN0YXRpYyBib29sIHNrX21zZ190cnlfY29hbGVzY2Vfb2soc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgZWxlbV9maXJzdF9jb2FsZXNjZSlcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMjUtXFxubmV0L2NvcmUvc2ttc2cuYzoyNjppbnQgc2tfbXNnX2FsbG9jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuLFxcbm5ldC9jb3JlL3NrbXNnLmMtMjctXFx0XFx0IGludCBlbGVtX2ZpcnN0X2NvYWxlc2NlKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz04NT1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfYWxsb2MpO1xcbm5ldC9jb3JlL3NrbXNnLmMtODYtXFxubmV0L2NvcmUvc2ttc2cuYzo4NzppbnQgc2tfbXNnX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqZHN0LCBzdHJ1Y3Qgc2tfbXNnICpzcmMsXFxubmV0L2NvcmUvc2ttc2cuYy04OC1cXHRcXHQgdTMyIG9mZiwgdTMyIGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTM2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19jbG9uZSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMzctXFxubmV0L2NvcmUvc2ttc2cuYzoxMzg6dm9pZCBza19tc2dfcmV0dXJuX3plcm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBieXRlcylcXG5uZXQvY29yZS9za21zZy5jLTEzOS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTE2MD1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfcmV0dXJuX3plcm8pO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTYxLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTYyOnZvaWQgc2tfbXNnX3JldHVybihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTYzLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTk0PXN0YXRpYyBpbnQgX19za19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGksXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTIxMS1cXG5uZXQvY29yZS9za21zZy5jOjIxMjppbnQgc2tfbXNnX2ZyZWVfbm9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2cpXFxubmV0L2NvcmUvc2ttc2cuYy0yMTMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0yMTY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2ZyZWVfbm9jaGFyZ2UpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMjE3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MjE4OmludCBza19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcXG5uZXQvY29yZS9za21zZy5jLTIxOS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTIyND1zdGF0aWMgdm9pZCBfX3NrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTI1MS1cXG5uZXQvY29yZS9za21zZy5jOjI1Mjp2b2lkIHNrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcXG5uZXQvY29yZS9za21zZy5jLTI1My17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTI1Nj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9wYXJ0aWFsKTtcXG5uZXQvY29yZS9za21zZy5jLTI1Ny1cXG5uZXQvY29yZS9za21zZy5jOjI1ODp2b2lkIHNrX21zZ19mcmVlX3BhcnRpYWxfbm9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXFxubmV0L2NvcmUvc2ttc2cuYy0yNTktXFx0XFx0XFx0XFx0ICB1MzIgYnl0ZXMpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTI2My1cXG5uZXQvY29yZS9za21zZy5jOjI2NDp2b2lkIHNrX21zZ190cmltKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuKVxcbm5ldC9jb3JlL3NrbXNnLmMtMjY1LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MzEwPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ190cmltKTtcXG5uZXQvY29yZS9za21zZy5jLTMxMS1cXG5uZXQvY29yZS9za21zZy5jOjMxMjppbnQgc2tfbXNnX3plcm9jb3B5X2Zyb21faXRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG5uZXQvY29yZS9za21zZy5jLTMxMy1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MzY3PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ196ZXJvY29weV9mcm9tX2l0ZXIpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMzY4LVxcbm5ldC9jb3JlL3NrbXNnLmM6MzY5OmludCBza19tc2dfbWVtY29weV9mcm9tX2l0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxubmV0L2NvcmUvc2ttc2cuYy0zNzAtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NDExPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19tZW1jb3B5X2Zyb21faXRlcik7XFxubmV0L2NvcmUvc2ttc2cuYy00MTItXFxubmV0L2NvcmUvc2ttc2cuYzo0MTM6aW50IF9fc2tfbXNnX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L2NvcmUvc2ttc2cuYy00MTQtXFx0XFx0ICAgICBpbnQgbGVuLCBpbnQgZmxhZ3MsIGludCAqY29waWVkX2Zyb21fc2VsZilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTAwLS8qIFJlY2VpdmUgc2tfbXNnIGZyb20gcHNvY2stXFx1MDAzZWluZ3Jlc3NfbXNnIHRvIEBtc2cuICovXFxubmV0L2NvcmUvc2ttc2cuYzo1MDE6aW50IHNrX21zZ19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9jb3JlL3NrbXNnLmMtNTAyLVxcdFxcdCAgIGludCBsZW4sIGludCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NTA2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19yZWN2bXNnKTtcXG5uZXQvY29yZS9za21zZy5jLTUwNy1cXG5uZXQvY29yZS9za21zZy5jOjUwODpib29sIHNrX21zZ19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc2ttc2cuYy01MDkte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz04NTE9c3RhdGljIHZvaWQgc2tfcHNvY2tfbGlua19kZXN0cm95KHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTg2MC1cXG5uZXQvY29yZS9za21zZy5jOjg2MTp2b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTg2Mi17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTg3MT1zdGF0aWMgdm9pZCBza19wc29ja19kZXN0cm95KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtODk1LVxcbm5ldC9jb3JlL3NrbXNnLmM6ODk2OnZvaWQgc2tfcHNvY2tfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy04OTcte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05MTQ9c3RhdGljIGludCBza19wc29ja19tYXBfdmVyZChpbnQgdmVyZGljdCwgYm9vbCByZWRpcilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTI2LVxcbm5ldC9jb3JlL3NrbXNnLmM6OTI3OmludCBza19wc29ja19tc2dfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxubmV0L2NvcmUvc2ttc2cuYy05MjgtXFx0XFx0XFx0IHN0cnVjdCBza19tc2cgKm1zZylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTEzOD1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTUzLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTE1NDppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTExNTUte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTc0LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTE3NTp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE3Ni17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExODQtXFxubmV0L2NvcmUvc2ttc2cuYzoxMTg1OnZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTExODYte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjQxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyNjctXFxubmV0L2NvcmUvc2ttc2cuYzoxMjY4OnZvaWQgc2tfcHNvY2tfc3RhcnRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMjY5LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI3Ny1cXG5uZXQvY29yZS9za21zZy5jOjEyNzg6dm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI3OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE3OjU0Ljc5NTY4MjM2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTE2OTQ4NzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgcHNvY2sgRmxvdyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZvciB0aGVzZSBwYWNrZXQgc29ja2V0IGZ1bmN0aW9ucy4gSSd2ZSBnb3QgYSBmZXcgc3Ryb25nIGNvbnRlbmRlcnMgcmlnaHQgb2ZmIHRoZSBiYXQ6IGBza19wc29ja19pbml0X3N0cnBgLCBgc2tfcHNvY2tfc3RhcnRfc3RycGAsIGFuZCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAuIFRob3NlIGxvb2sgbGlrZSBwcm9taXNpbmcgc3RhcnRpbmcgcG9pbnRzLiBCdXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5UaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVGhleSBhcmUgY2FsbGVkIGJ5IGBza19wc29ja19oYW5kbGVfc2tiYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLiBOb3csIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyB0cmlnZ2VyZWQgZnJvbSBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAuICBgc2tfcHNvY2tfc3RycF9yZWFkYCBpcyByZWdpc3RlcmVkIGFzIGAucmN2X21zZ2Agd2l0aGluIGBza19wc29ja19pbml0X3N0cnBgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBGdXJ0aGVybW9yZSwgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgaXMgY2FsbGVkIGJ5IGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgLCB3aGljaCBpcyByZWdpc3RlcmVkIGFzIGAuc2tfZGF0YV9yZWFkeWAgaW4gYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLlxuXG5BbHJpZ2h0LCBJIHRoaW5rIEknbSBnZXR0aW5nIGEgY2xlYXJlciBwaWN0dXJlLiAgYHNrX3Bzb2NrX2luaXRfc3RycGAgYW5kIGBza19wc29ja19zdGFydF92ZXJkaWN0YCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3Igc2V0dGluZyB1cCB0aGUgZW50aXJlIHByb2Nlc3NpbmcgZmxvdy4gVGhleSdyZSB3aGVyZSB0aGUgY2hhaW4gbGlrZWx5IGJlZ2lucy5cblxuTm93LCB3aGF0IGFib3V0IGBza19wc29ja19tc2dfdmVyZGljdGA/IEkgbmVlZCB0byBjaGVjayBpZiB0aGlzIGlzIHJlbGV2YW50IHRvIHRoZSBgc2tfYnVmZmAgcGF0aC4gQWgsIGl0IHNlZW1zIGxpa2UgaXQncyBzcGVjaWZpYyB0byBgc2tfbXNnYCBzbyBpdCBwcm9iYWJseSB3b24ndCBiZSBhcyBpbXBvcnRhbnQgZm9yIHdoYXQgSSdtIGxvb2tpbmcgYXQuXG5cblRpbWUgdG8gc3dpdGNoIGdlYXJzIGFuZCBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0J3MgZW5hYmxlZC4gQWxzbywgdGhlIGNvZGUgZm9yIHRoZSByZWxhdGVkIGBza19tc2dgIG9wZXJhdGlvbnMgc2hvdWxkIGJlIGluIGBuZXQvY29yZS9za21zZy5jYC4gTGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBNYWtlZmlsZWAgaW4gYG5ldC9jb3JlL2AgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYnVpbHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE4OjAwLjkxMjYzMzgzN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2ODg5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ttc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9NDM9b2JqLSQoQ09ORklHX0ZBSUxPVkVSKSArPSBmYWlsb3Zlci5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODowMC45ODgzMjgwMzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3MDkxODY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB3aGF0IEknbSBsb29raW5nIGF0OlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBTb2NrZXQgTWVzc2FnaW5nIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX05FVF9TT0NLX01TR2AuIFRoYXQgbXVjaCBpcyBzdHJhaWdodGZvcndhcmQuIE5vdywgaXQgbG9va3MgbGlrZSBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCAqbWlnaHQqIGFsc28gYmUgYSByZXF1aXJlbWVudCwgYmVjYXVzZSB0aGF0IGBza19wc29ja19zdHJwX3JlYWRgIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHdyYXBwZWQgaW4gYW4gYCNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilgIGJsb2NrLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoYXQncyBhY3R1YWxseSB0aGUgY2FzZS4gQmVzdCBiZXQgaXMgdG8ganVtcCBpbnRvIGBuZXQvY29yZS9za21zZy5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHNlZSBob3cgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgaXMgdXNlZCBhbmQgaWYgaXQncyB0cnVseSBlc3NlbnRpYWwgaW4gdGhpcyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1OTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODowNS4xNTkyNjA0ODJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzc2OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZfU1RSRUFNX1BBUlNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za21zZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NTQ1PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01NzMtXFxubmV0L2NvcmUvc2ttc2cuYzo1NzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxcbm5ldC9jb3JlL3NrbXNnLmMtNTc1LVxcdHBzb2NrLVxcdTAwM2VpbmdyZXNzX2J5dGVzICs9IGxlbjtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTA2OD1zdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwODQtXFxubmV0L2NvcmUvc2ttc2cuYzoxMDg1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jLTEwODYtc3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEyMDQ9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMDYtfVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIwNzojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXFxubmV0L2NvcmUvc2ttc2cuYy0xMjA4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODowNS4yMTE2NDU0NzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1NjUyNDQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBCUEYgU3RyZWFtIFBhcnNlcioqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIHN0cmVhbSBwYXJzZXIgc3R1ZmYuIEl0J3MgY2xlYXIgdGhhdCBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCBpcyBhIG11c3QtaGF2ZSBmb3IgdGhlIHN0cnBhcnNlciBwYXRoLCBubyBxdWVzdGlvbiBhYm91dCB0aGF0LiBOb3csIGEgcXVlc3Rpb24gcG9wcyBpbnRvIG15IGhlYWQ6IHdoYXQncyB0aGUgZGVhbCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgPyBJdCAqdXN1YWxseSogZ29lcyBoYW5kLWluLWhhbmQgd2l0aCBCUEYgZnVuY3Rpb25hbGl0eSBpbiBnZW5lcmFsLCByaWdodD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgaXQncyBzdHJpY3RseSAqcmVxdWlyZWQqIGhlcmUgb3IganVzdCBnZW5lcmFsbHkgcmVjb21tZW5kZWQuIExldCdzIHNlZS4uLkkgc2hvdWxkIGNoZWNrIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzIHRvIHNlZSBob3cgYE5FVF9TT0NLX01TR2AgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYXJlIHRpZWQgdG9nZXRoZXIuIEVpdGhlciBgbmV0L2NvcmUvS2NvbmZpZ2Agb3IganVzdCB0aGUgbWFpbiBgbmV0L0tjb25maWdgIGZpbGUgc2hvdWxkIGhhdmUgdGhlIGFuc3dlcnMgSSBuZWVkLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODowOC43NjgxNzM4MDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTY3Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU09DS19NU0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXFxuLS1cXG5uZXQvS2NvbmZpZy00NzgtXFxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy00ODAtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODowOC44MjE3NDY1OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyMzE0NTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipIaWRkZW4gQm9vbCBJbnZlc3RpZ2F0aW9uOiBORVRcXF9TT0NLXFxfTVNHKipcblxuT2theSwgc28gdGhlcmUncyB0aGlzIGBORVRfU09DS19NU0dgIHZhcmlhYmxlLCBhbmQgaXQncyBhIGhpZGRlbiBib29sZWFuLiBNZWFuaW5nIGl0J3MgYmVpbmcgdXNlZCBpbnRlcm5hbGx5LCBwcm9iYWJseSBub3QgZGlyZWN0bHkgZXhwb3NlZCBmb3IgY29uZmlndXJhdGlvbiBvciB1c2VyIGlucHV0LiBNeSBndXQgc2F5cyB0aGlzIHdhc24ndCBkZWNsYXJlZCBvbiBhIHdoaW0uIFRoZSBmYWN0IHRoYXQgaXQncyBoaWRkZW4gaW1wbGllcyBpdCdzIGJlaW5nIHNldCBvciB1bnNldCBiYXNlZCBvbiAqc29tZSogY29uZGl0aW9uLCAqc29tZSogb3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtIGlzIGRlY2lkaW5nIHdoZW4gdGhpcyBmbGFnIGlzIGFjdGl2ZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IHRyaWdnZXJpbmcgbWVjaGFuaXNtIGlzLiBXaGF0IGFyZSB0aGUgbG9naWNhbCBwYXRod2F5cyB0aGF0IGxlYWQgdG8gdGhpcyBib29sIGJlaW5nIG1vZGlmaWVkPyBJdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBuZXQgc29ja2V0IG1lc3NhZ2UgaGFuZGxpbmcgYWN0dWFsbHkgd29ya3MsIGFuZCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjMyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MTEuOTQ0ODk2ODk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUxMTkwODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBORVRfU09DS19NU0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0zMy1cXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbmtlcm5lbC9icGYvS2NvbmZpZzozNDpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbmtlcm5lbC9icGYvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4tLVxcbm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG4tLVxcbm5ldC9LY29uZmlnLTM2Ni1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnOjM2NzpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctMzY4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9pcHY0L0tjb25maWc6Mzg2OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTMtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2Ni9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUT19HQ01cXG5uZXQvdGxzL0tjb25maWc6MTE6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC90bHMvS2NvbmZpZy0xMi1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MTQuNDk2MDkyMTA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDY0MjUyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgYXVkaWVuY2UgaXMgYW5vdGhlciBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTkVUX1NPQ0tfTVNHIFBhdGh3YXkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBJIHNlZSB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgdHJpZ2dlcmluZyBgTkVUX1NPQ0tfTVNHYCwgYW5kIGFsc28sIHN0cmFuZ2VseSwgdGhhdCBgQlBGX1NUUkVBTV9QQVJTRVJgIGlzIHNlbGVjdGluZyBgTkVUX1NPQ0tfTVNHYCB0b28uIFRoYXTigJlzIHdvcnRoIGRpZ2dpbmcgaW50by4gR2l2ZW4gdGhlIG92ZXJsYXAsIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNoYXJlZCBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgYEJQRl9TVFJFQU1fUEFSU0VSYCBiZWNhdXNlIGl0IGlzIGxlc3MgY29udmVudGlvbmFsIGFuZCBsaWtlbHkgdGhlIHNvdXJjZSBvZiB0aGUgb3ZlcmxhcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGJvdGggc2VlbSB0byBiZSBwb2ludGluZyB0b3dhcmQgdGhlIHNhbWUgbmV0IHNvY2tldCBtZXNzYWdlIGhhbmRsaW5nLiBUaGVyZSBjb3VsZCBiZSBzb21lIGludGVyZXN0aW5nIGFyY2hpdGVjdHVyZSBjaG9pY2VzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjQ2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MTguMTQyNTIwMDAyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzE2MDA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcXG4tLVxcbm5ldC9LY29uZmlnLTM2MC1cXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxubmV0L0tjb25maWctMzYyLVxcdGJvb2wgXFxcImVuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MTguMjA1Njg0MzgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzk2NDY4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkVuYWJsaW5nIEJQRiBTdHJlYW0gUGFyc2luZyBhbmQgU3lzY2FsbCBJbnRlZ3JhdGlvbioqXG5cbkFscmlnaHQsIHNvIGl0J3MgbG9va2luZyBsaWtlIGBCUEZfU1RSRUFNX1BBUlNFUmAgaXMgZXhwb3NlZCBhcyBhIGJvb2xlYW4gc2V0dGluZy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuYWJsZSBib3RoIGBCUEZfU1RSRUFNX1BBUlNFUmAgYW5kIGBCUEZfU1lTQ0FMTGAgZnVuY3Rpb25hbGl0eS4gVGhlIGNvbWJpbmVkIHBvd2VyIGhlcmUgaXMgc2lnbmlmaWNhbnQgZm9yIHdoYXQgSSdtIGFpbWluZyB0byBhY2hpZXZlLlxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQgZnVydGhlciwgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYEJQRl9TWVNDQUxMYCBtZWNoYW5pc20uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIGFueSByZWNlbnQgY2hhbmdlcy4gSSBuZWVkIHRvIGFzc2VzcyB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIG9mIHRoaXMgY291cGxpbmcsIGFuZCB3aGF0IGltcGFjdCBpdCB3aWxsIGhhdmUgb24gcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MjEuNTg1MzMzMTc5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODEzMTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MjEuNjczNDcxMjY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NzUzNDAyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFN0cmVhbSBQYXJzZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBCUEYgc3RyZWFtIHBhcnNlciBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgaW4gdGhlIGNvbnRleHQgb2YgZGlyZWN0IHN0cnBhcnNlciBTS19QQVNTIGNsb25lcy4gRnJvbSB0aGUgY29kZSwgSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cywgY29uZmlnLXdpc2UsIGludm9sdmVzIGVuYWJsaW5nIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAuXG5cbkZ1bmN0aW9uYWxseSwgSSdtIHByZXR0eSBjb25maWRlbnQgaW4gdGhlIGZpeC4gTm93LCBsZXQncyBuYWlsIGRvd24gYSBnb29kIGZ1enppbmcgc3RyYXRlZ3kuXG5cbk15IGluaXRpYWwgdGhvdWdodHMgb24gd29ydGhmdXp6aW5nIGFyZSBwb3NpdGl2ZS4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHNvbWUgZ29vZCB0ZXN0aW5nIG91dCBvZiB0aGlzLlxuXG5SZWdhcmRpbmcgZm9jdXMgc3ltYm9scywgSSBpbml0aWFsbHkgaGFkIGEgbGlzdDogYHNrX3Bzb2NrX2luaXRfc3RycGAsIGBza19wc29ja19zdGFydF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBhbmQgcG90ZW50aWFsbHkgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCAodGhvdWdoIHRoYXQncyBzdGF0aWMsIHNvIGl0J3MgbGlrZWx5IG5vdCBnb2luZyB0byBiZSBmZWFzaWJsZSkuIFdhaXQsIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyBhbHNvIHN0YXRpYy4gU28sIEkgbmVlZCB0byBhZGp1c3QgdGhpcyBsaXN0IGFuZCBrZWVwIHRoaW5ncyBwcmFjdGljYWwuXG5cbldlIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLlxuXG5UaGlua2luZyBhYm91dCB0aGUgY29ubmVjdGlvbiBvZiBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYCBhbmQgYHNrX3Bzb2NrX2luaXRfc3RycGAgKHRoYXQgbG9va3MgcHJvbWlzaW5nIHNpbmNlIGl0J3MgYW4gYXR0YWNoIGNhbGwpLiBBbHNvLCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAgaXMgY2FsbGVkIGJ5IEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QuXG5cblRoZXNlIGFyZSBnb29kIGVudHJ5IHBvaW50cyB0byB0aGUgY29kZS5cblxuQ2hlY2tpbmcgYWdhaW4sIGBza19wc29ja19pbml0X3N0cnBgIGFuZCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAgYXJlIGluZGVlZCB0aGUgYmVzdCBlbnRyeSBwb2ludHMgdG8gdGhlIG1vZGlmaWVkIGNvZGUgcGF0aC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSByaWdodCBzeW1ib2xzIHRvIHByaW9yaXRpemUuXG5cbkFsc28sIGBza19tc2dfcmVjdm1zZ2AgaXMgbGlrZWx5IHJlbGV2YW50IHNpbmNlIGl0IHJlYWRzIHRob3NlIHF1ZXVlZCBtZXNzYWdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MjguNDQ4ODE1MjI0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTc1NjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19tc2dfcmVjdm1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za21zZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NDExPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19tZW1jb3B5X2Zyb21faXRlcik7XFxubmV0L2NvcmUvc2ttc2cuYy00MTItXFxubmV0L2NvcmUvc2ttc2cuYzo0MTM6aW50IF9fc2tfbXNnX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L2NvcmUvc2ttc2cuYy00MTQtXFx0XFx0ICAgICBpbnQgbGVuLCBpbnQgZmxhZ3MsIGludCAqY29waWVkX2Zyb21fc2VsZilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTAwLS8qIFJlY2VpdmUgc2tfbXNnIGZyb20gcHNvY2stXFx1MDAzZWluZ3Jlc3NfbXNnIHRvIEBtc2cuICovXFxubmV0L2NvcmUvc2ttc2cuYzo1MDE6aW50IHNrX21zZ19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9jb3JlL3NrbXNnLmMtNTAyLVxcdFxcdCAgIGludCBsZW4sIGludCBmbGFncylcXG5uZXQvY29yZS9za21zZy5jLTUwMy17XFxubmV0L2NvcmUvc2ttc2cuYzo1MDQ6XFx0cmV0dXJuIF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIE5VTEwpO1xcbm5ldC9jb3JlL3NrbXNnLmMtNTA1LX1cXG5uZXQvY29yZS9za21zZy5jOjUwNjpFWFBPUlRfU1lNQk9MX0dQTChza19tc2dfcmVjdm1zZyk7XFxubmV0L2NvcmUvc2ttc2cuYy01MDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE4OjI4LjUwODU3NjA4M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTY3NDM5MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRW50cnkgUG9pbnRzIGZvciBOZXR3b3JrIFNvY2tldCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gYHNrX21zZ19yZWN2bXNnYCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkLCB0aGF0J3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVsc2UgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIGlzIHJlbGV2YW50LCBzcGVjaWZpY2FsbHkgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFzIHRob3NlIGFyZSB0aGUgb25lcyB3ZSBjYW4gdXNlLiBJIHF1aWNrbHkgcnVsZSBvdXQgYHNrX3Bzb2NrX21zZ192ZXJkaWN0YCBiZWNhdXNlIHRoYXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byB0aGUgKnNlbmQqIHBhdGggKGBza19tc2dgKSwgbm90IHRoZSByZWNlaXZlIHBhdGggKGBza19idWZmYCkgd2hpY2ggaXMgd2hhdCBJJ20gbW9yZSBpbnRlcmVzdGVkIGluIGhlcmUuXG5cblRoZSBwYXRjaCBJJ20gbG9va2luZyBhdCBmb2N1c2VzIG9uIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYnV0IHRoYXQncyBjYWxsZWQgaW5kaXJlY3RseS4gTGV0IG1lIHRyYWNlIHRoZSBjYWxsczogaXQncyBjYWxsZWQgZnJvbSBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuIGBza19wc29ja19za2JfaW5ncmVzc2AgaXMgZnVydGhlciBjYWxsZWQgYnkgYHNrX3Bzb2NrX2hhbmRsZV9za2JgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgc2tfcHNvY2tfYmFja2xvZ2Agd2hpY2ggaXMsIG9mIGNvdXJzZSwgYSB3b3JrcXVldWUuIFRoZW4gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGdldHMgY2FsbGVkIGZyb20gYHNrX3Bzb2NrX3N0cnBfcmVhZGAgYW5kIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLlxuXG5TbywgdGhhdCB0ZWxscyBtZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIGVzc2VudGlhbGx5OiBgc2tfcHNvY2tfc3RycF9yZWFkYCAod2hpY2ggaXMgc3RhdGljLCBhbmQgcmVnaXN0ZXJlZCB0aHJvdWdoIGBza19wc29ja19pbml0X3N0cnBgKSwgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgKGFsc28gc3RhdGljLCByZWdpc3RlcmVkIHRocm91Z2ggYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgKSwgYW5kIGZpbmFsbHksIHRoZSB3b3JrcXVldWUgYHNrX3Bzb2NrX2JhY2tsb2dgLlxuXG5HaXZlbiB0aGUgY29uc3RyYWludCBvbiBub24tc3RhdGljIGZ1bmN0aW9ucywgaXQgc2VlbXMgdGhhdCBgc2tfcHNvY2tfaW5pdF9zdHJwYCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgdGhlIGJlc3Qgb3B0aW9ucyBmb3Igb3VyIHVzZS1jYXNlLCBhcyB0aGV5IHJlZ2lzdGVyIHRoZSBzdGF0aWMgZnVuY3Rpb25zLiBBZGRpbmcgYHNrX21zZ19yZWN2bXNnYCBtYWtlcyBzZW5zZSB0b28sIHNpbmNlIGl0IGFjdHVhbGx5IGNvbnN1bWVzIHRoZSBtZXNzYWdlcy4gTGV0IG1lIGdvIGJhY2sgYW5kIGdpdmUgdGhvc2UgdHdvIGZ1bmN0aW9ucyBhIGNsb3NlciBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA4NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODozNC42NzYwMTg1NDhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDQyMTE3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja19pbml0X3N0cnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTExMzg9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE1My1cXG5uZXQvY29yZS9za21zZy5jOjExNTQ6aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMTU1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MzQuNzkwNDQ1Nzk2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTMwMjgyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgc2tfcHNvY2tfaW5pdF9zdHJwYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgc2tfcHNvY2tfaW5pdF9zdHJwYCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCBldmVyeSBzaW5nbGUgbG9jYXRpb24gd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgd2l0aGluIHRoaXMgcHJvamVjdC4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgYW5kIHRoZSBjcml0aWNhbCBwaWVjZXMgb2YgaW5mb3JtYXRpb24gdGhhdCBJJ2xsIG5lZWQgdG8ga25vdy4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBVbmRlcnN0YW5kaW5nICp3aHkqIGl0IGlzIGJlaW5nIGNhbGxlZCB3aWxsIGNvbWUgYWZ0ZXIgdGhhdC4gVGhlbiBJIGNhbiBzdGFydCB0byBmb3JtIGFuIGlkZWEgb2Ygd2h5IHRoaXMgZnVuY3Rpb24gZXhpc3RzIGFuZCB3aGF0IHJvbGUgaXQgcGxheXMgd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZS4gVGltZSB0byBnZXQgc2VhcmNoaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA1OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE4OjM4LjM4MzQ3Njg1MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MDQ4MjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX2luaXRfc3RycFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9MjE3PXN0YXRpYyBpbnQgc29ja19tYXBfbGluayhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTMwNi1cXHRcXHRpZiAoc2tfaXNfdGNwKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jOjMwNzpcXHRcXHRcXHRyZXQgPSBza19wc29ja19pbml0X3N0cnAoc2ssIHBzb2NrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTMwOC1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE4OjM4LjQ5MDUyOTMwOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQyNDMxODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU29ja2V0IE1hcCBMaW5raW5nIFByb2Nlc3MqKlxuXG5SaWdodCwgc28gSSdtIHRyYWNpbmcgdGhpcyBleGVjdXRpb24gcGF0aCwgYW5kIGl0IGxvb2tzIGxpa2UgYHNvY2tfbWFwX2xpbmtgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLCBiZWluZyBjYWxsZWQgYnkgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBgc29ja19tYXBfbGlua2AgYmVjYXVzZSBJJ20gc2VlaW5nIHRoaXMgY2FsbCB0byBgc2tfcHNvY2tfaW5pdF9zdHJwYCBjb25kaXRpb25hbCBvbiB0aGVyZSBiZWluZyBhIHBhcnNlciBwcm9ncmFtIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFwLiBUaGF0IHN1Z2dlc3RzIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IGludGVyYWN0aW9uIHdpdGggcHJvZ3JhbSBsb2FkaW5nIG9yIHNvbWUgc29ydCBvZiBwcmUtcHJvY2Vzc2luZy4gVGhlIGZhY3QgdGhhdCBgc2tfcHNvY2tfaW5pdF9zdHJwYCBpcyBjYWxsZWQsIGxpa2VseSBtZWFucyB3ZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHBhcnNlciBwcm9ncmFtIGF0IG1hcCBsaW5rIHRpbWUuIExldCdzIGhlYWQgc3RyYWlnaHQgaW50byBgbmV0L2NvcmUvc29ja19tYXAuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYHNvY2tfbWFwX2xpbmtgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBhbmQgcHJlY2lzZWx5IHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoYXQgYHNrX3Bzb2NrX2luaXRfc3RycGAgY2FsbC4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzOTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODo0Mi4xMzI5NjM4ODNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NjgwNzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jPTE5Nz1zdGF0aWMgc3RydWN0IHNrX3Bzb2NrICpzb2NrX21hcF9wc29ja19nZXRfY2hlY2tlZChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTIxNi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjIxNzpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NDcwPXN0YXRpYyBpbnQgc29ja19tYXBfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgaWR4LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00ODgtXFxubmV0L2NvcmUvc29ja19tYXAuYzo0ODk6XFx0cmV0ID0gc29ja19tYXBfbGluayhtYXAsIHNrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ5MC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTkzPXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMDExLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTAxMjpcXHRyZXQgPSBzb2NrX21hcF9saW5rKG1hcCwgc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAxMy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTczNz1zdHJ1Y3Qgc29ja21hcF9saW5rIHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc0MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NDI6c3RhdGljIHZvaWQgc29ja19tYXBfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDMte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzU4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc1OTpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfZGV0YWNoKHN0cnVjdCBicGZfbGluayAqbGluaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NjAte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc2MTpcXHRzb2NrX21hcF9saW5rX3JlbGVhc2UobGluayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzYyLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzY0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc2NTpzdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc2Ni17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NzMtICovXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzc0OnN0YXRpYyBpbnQgc29ja19tYXBfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzc1LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODMzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTgzNDpzdGF0aWMgdTMyIHNvY2tfbWFwX2xpbmtfZ2V0X21hcF9pZChjb25zdCBzdHJ1Y3Qgc29ja21hcF9saW5rICpzb2NrbWFwX2xpbmspXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODM1LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg0NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NDU6c3RhdGljIGludCBzb2NrX21hcF9saW5rX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODQ2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODQ4LVxcdGNvbnN0IHN0cnVjdCBzb2NrbWFwX2xpbmsgKnNvY2ttYXBfbGluayA9IGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3Qgc29ja21hcF9saW5rLCBsaW5rKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NDk6XFx0dTMyIG1hcF9pZCA9IHNvY2tfbWFwX2xpbmtfZ2V0X21hcF9pZChzb2NrbWFwX2xpbmspO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1MC1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1NS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NTY6c3RhdGljIHZvaWQgc29ja19tYXBfbGlua19zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODU3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODU5LVxcdGNvbnN0IHN0cnVjdCBzb2NrbWFwX2xpbmsgKnNvY2ttYXBfbGluayA9IGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3Qgc29ja21hcF9saW5rLCBsaW5rKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NjA6XFx0dTMyIG1hcF9pZCA9IHNvY2tfbWFwX2xpbmtfZ2V0X21hcF9pZChzb2NrbWFwX2xpbmspO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg2MS1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg2NS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NjY6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgc29ja19tYXBfbGlua19vcHMgPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxODY3OlxcdC5yZWxlYXNlID0gc29ja19tYXBfbGlua19yZWxlYXNlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg2ODpcXHQuZGVhbGxvYyA9IHNvY2tfbWFwX2xpbmtfZGVhbGxvYyxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4Njk6XFx0LmRldGFjaCA9IHNvY2tfbWFwX2xpbmtfZGV0YWNoLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg3MDpcXHQudXBkYXRlX3Byb2cgPSBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg3MTpcXHQuZmlsbF9saW5rX2luZm8gPSBzb2NrX21hcF9saW5rX2ZpbGxfaW5mbyxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NzI6XFx0LnNob3dfZmRpbmZvID0gc29ja19tYXBfbGlua19zaG93X2ZkaW5mbyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzMtfTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzQtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxODc1OmludCBzb2NrX21hcF9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg3Ni17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MDAtXFx0YXR0YWNoX3R5cGUgPSBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE5MDE6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2c29ja21hcF9saW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1NPQ0tNQVAsIFxcdTAwMjZzb2NrX21hcF9saW5rX29wcywgcHJvZyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MDItXFx0XFx0ICAgICAgYXR0YWNoX3R5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODo0Mi4yMDE2NTEyNTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3NDczNDc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBGdXp6aW5nIEVmZm9ydHMqKlxuXG5Pa2F5LCBzbyBJJ20gemVyb2luZyBpbiBvbiB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgdGhpcyBCUEYgY29kZS4gSXQgbG9va3MgbGlrZSBgc29ja19tYXBfdXBkYXRlX2VsZW1gIGFuZCBgc29ja19oYXNoX3VwZGF0ZV9lbGVtYCBhcmUgdGhlIHRvcC1sZXZlbCBjYWxscy4gSG93ZXZlciwgdGhleSBhcmUgZnVuZGFtZW50YWxseSBtYXAgb3BlcmF0aW9ucy4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgZnV6emluZyBzaG91bGQgY29uY2VudHJhdGUgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIEJQRiBtYXAgdXBkYXRlcyBhbmQgdGhlIHNvY2tldCBvcGVyYXRpb25zIHRoZW1zZWx2ZXMuXG5cblNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgbG9va2luZyBjbG9zZWx5IGF0IGBza19wc29ja19pbml0X3N0cnBgIGFuZCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAuIFRob3NlIGxvb2sgbGlrZSBwcm9taXNpbmcgdGFyZ2V0cy4gQWxzbywgYHNrX21zZ19yZWN2bXNnYCBpcyBkZWZpbml0ZWx5IHdvcnRoIHNvbWUgYXR0ZW50aW9uLlxuXG5KdXN0IHRvIGJlIHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYC4gTm9wZSwgdGhhdCdzIHN0YXRpYy4gU2FtZSB3aXRoIGBza19wc29ja19oYW5kbGVfc2tiYCBhbmQgYHNrX3Bzb2NrX2JhY2tsb2dgLiBUaG9zZSB3b24ndCB3b3JrIGFzIGRpcmVjdCBlbnRyeSBwb2ludHMuXG5cbkFscmlnaHQsIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBMZXQncyBoZWFkIG92ZXIgdG8gYG5ldC9jb3JlL3NrbXNnLmNgLiBUaGF0IGZpbGUgc2hvdWxkIGNvbnRhaW4gc29tZSB1c2VmdWwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgU0tNU0cgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzE0LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE4OjQ2Ljg3NjM4OTgwMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMTUwNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aMC05X10rIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za21zZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9MTI9c3RhdGljIGJvb2wgc2tfbXNnX3RyeV9jb2FsZXNjZV9vayhzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBlbGVtX2ZpcnN0X2NvYWxlc2NlKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0yNS1cXG5uZXQvY29yZS9za21zZy5jOjI2OmludCBza19tc2dfYWxsb2Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBsZW4sXFxubmV0L2NvcmUvc2ttc2cuYy0yNy1cXHRcXHQgaW50IGVsZW1fZmlyc3RfY29hbGVzY2UpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTg1PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19hbGxvYyk7XFxubmV0L2NvcmUvc2ttc2cuYy04Ni1cXG5uZXQvY29yZS9za21zZy5jOjg3OmludCBza19tc2dfY2xvbmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICpkc3QsIHN0cnVjdCBza19tc2cgKnNyYyxcXG5uZXQvY29yZS9za21zZy5jLTg4LVxcdFxcdCB1MzIgb2ZmLCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMzY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2Nsb25lKTtcXG5uZXQvY29yZS9za21zZy5jLTEzNy1cXG5uZXQvY29yZS9za21zZy5jOjEzODp2b2lkIHNrX21zZ19yZXR1cm5femVybyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTM5LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTYwPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19yZXR1cm5femVybyk7XFxubmV0L2NvcmUvc2ttc2cuYy0xNjEtXFxubmV0L2NvcmUvc2ttc2cuYzoxNjI6dm9pZCBza19tc2dfcmV0dXJuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgYnl0ZXMpXFxubmV0L2NvcmUvc2ttc2cuYy0xNjMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xOTQ9c3RhdGljIGludCBfX3NrX21zZ19mcmVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgaSxcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMjExLVxcbm5ldC9jb3JlL3NrbXNnLmM6MjEyOmludCBza19tc2dfZnJlZV9ub2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcXG5uZXQvY29yZS9za21zZy5jLTIxMy17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTIxNj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9ub2NoYXJnZSk7XFxubmV0L2NvcmUvc2ttc2cuYy0yMTctXFxubmV0L2NvcmUvc2ttc2cuYzoyMTg6aW50IHNrX21zZ19mcmVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnKVxcbm5ldC9jb3JlL3NrbXNnLmMtMjE5LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MjI0PXN0YXRpYyB2b2lkIF9fc2tfbXNnX2ZyZWVfcGFydGlhbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMjUxLVxcbm5ldC9jb3JlL3NrbXNnLmM6MjUyOnZvaWQgc2tfbXNnX2ZyZWVfcGFydGlhbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzKVxcbm5ldC9jb3JlL3NrbXNnLmMtMjUzLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MjU2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19mcmVlX3BhcnRpYWwpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMjU3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MjU4OnZvaWQgc2tfbXNnX2ZyZWVfcGFydGlhbF9ub2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG5uZXQvY29yZS9za21zZy5jLTI1OS1cXHRcXHRcXHRcXHQgIHUzMiBieXRlcylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMjYzLVxcbm5ldC9jb3JlL3NrbXNnLmM6MjY0OnZvaWQgc2tfbXNnX3RyaW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBsZW4pXFxubmV0L2NvcmUvc2ttc2cuYy0yNjUte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0zMTA9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3RyaW0pO1xcbm5ldC9jb3JlL3NrbXNnLmMtMzExLVxcbm5ldC9jb3JlL3NrbXNnLmM6MzEyOmludCBza19tc2dfemVyb2NvcHlfZnJvbV9pdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbm5ldC9jb3JlL3NrbXNnLmMtMzEzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0zNjc9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3plcm9jb3B5X2Zyb21faXRlcik7XFxubmV0L2NvcmUvc2ttc2cuYy0zNjgtXFxubmV0L2NvcmUvc2ttc2cuYzozNjk6aW50IHNrX21zZ19tZW1jb3B5X2Zyb21faXRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG5uZXQvY29yZS9za21zZy5jLTM3MC1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz00MTE9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX21lbWNvcHlfZnJvbV9pdGVyKTtcXG5uZXQvY29yZS9za21zZy5jLTQxMi1cXG5uZXQvY29yZS9za21zZy5jOjQxMzppbnQgX19za19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvY29yZS9za21zZy5jLTQxNC1cXHRcXHQgICAgIGludCBsZW4sIGludCBmbGFncywgaW50ICpjb3BpZWRfZnJvbV9zZWxmKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01MDAtLyogUmVjZWl2ZSBza19tc2cgZnJvbSBwc29jay1cXHUwMDNlaW5ncmVzc19tc2cgdG8gQG1zZy4gKi9cXG5uZXQvY29yZS9za21zZy5jOjUwMTppbnQgc2tfbXNnX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L2NvcmUvc2ttc2cuYy01MDItXFx0XFx0ICAgaW50IGxlbiwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz01MDY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3JlY3Ztc2cpO1xcbm5ldC9jb3JlL3NrbXNnLmMtNTA3LVxcbm5ldC9jb3JlL3NrbXNnLmM6NTA4OmJvb2wgc2tfbXNnX2lzX3JlYWRhYmxlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9za21zZy5jLTUwOS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTg1MT1zdGF0aWMgdm9pZCBza19wc29ja19saW5rX2Rlc3Ryb3koc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtODYwLVxcbm5ldC9jb3JlL3NrbXNnLmM6ODYxOnZvaWQgc2tfcHNvY2tfc3RvcChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtODYyLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9ODcxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2Rlc3Ryb3koc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy04OTUtXFxubmV0L2NvcmUvc2ttc2cuYzo4OTY6dm9pZCBza19wc29ja19kcm9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTg5Ny17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTkxND1zdGF0aWMgaW50IHNrX3Bzb2NrX21hcF92ZXJkKGludCB2ZXJkaWN0LCBib29sIHJlZGlyKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy05MjYtXFxubmV0L2NvcmUvc2ttc2cuYzo5Mjc6aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5uZXQvY29yZS9za21zZy5jLTkyOC1cXHRcXHRcXHQgc3RydWN0IHNrX21zZyAqbXNnKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMTM4PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExNTMtXFxubmV0L2NvcmUvc2ttc2cuYzoxMTU0OmludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE1NS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExNzQtXFxubmV0L2NvcmUvc2ttc2cuYzoxMTc1OnZvaWQgc2tfcHNvY2tfc3RhcnRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMTc2LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE4NC1cXG5uZXQvY29yZS9za21zZy5jOjExODU6dm9pZCBza19wc29ja19zdG9wX3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE4Ni17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEyNDE9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI2Ny1cXG5uZXQvY29yZS9za21zZy5jOjEyNjg6dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTEyNjkte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjc3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTI3ODp2b2lkIHNrX3Bzb2NrX3N0b3BfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMjc5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6NDYuOTg3NTQ0MjU5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDU3MDcxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgU29ja2V0IEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGBza19wc29ja19pbml0X3N0cnBgLCBgc2tfcHNvY2tfc3RhcnRfc3RycGAsIGBza19wc29ja19zdGFydF92ZXJkaWN0YCwgYW5kIGBza19tc2dfcmVjdm1zZ2AgbG9vayBwcm9taXNpbmcuIFRoZXNlIHNlZW0gbGlrZSB0aGV5J3JlIGluIHRoZSByaWdodCBiYWxscGFyayBmb3Igd2hhdCBJJ20gdHJ5aW5nIHRvIGFjaGlldmUuIFRoZXkgYWxpZ24gd2l0aCB0aGUgZ2VuZXJhbCBmbG93IEkgd2FzIGV4cGVjdGluZy5cblxuTm93LCBhIHNsaWdodCBwYXVzZSBmb3IgdGhvdWdodC4gV2Fzbid0IGl0IGBza19wc29ja19zdGFydF9zdHJwYCB0aGF0IHdhcyBhbHNvIGNhbGxlZCBmcm9tIGBzb2NrX21hcF9saW5rYD8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlIGNoZWNrIHRoYXQuIEl0IHdvdWxkIGJlIGdvb2QgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIGdyYXBoIHRvIGF2b2lkIGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gTGV0J3MgZGlnIGEgbGl0dGxlIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODo1MC41MzMyNTQyOTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTE3MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3N0YXJ0X3N0cnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jPTIxNz1zdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zMTQtXFx0XFx0fVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzE1OlxcdFxcdHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc2ssIHBzb2NrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTMxNi1cXHR9IGVsc2UgaWYgKCFzdHJlYW1fcGFyc2VyIFxcdTAwMjZcXHUwMDI2IHN0cmVhbV92ZXJkaWN0IFxcdTAwMjZcXHUwMDI2ICFwc29jay1cXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODo1MC42MDE3NzkyNDNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIzOTgzOTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU29ja2V0IFByb2Nlc3NpbmcgUGF0aCoqXG5cbk9rYXksIHNvIEkndmUgdHJhY2VkIHRoZSBleGVjdXRpb24gZmxvdyByZWxhdGVkIHRvIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgIGlzIGluZGVlZCBjYWxsZWQgZnJvbSBgc29ja19tYXBfbGlua2AsIGFzIEkgc3VzcGVjdGVkLiBUaGF0IG1lYW5zIHRoZSBrZXkgc2V0dXAgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYHNrX3Bzb2NrX2luaXRfc3RycGAsIGBza19wc29ja19zdGFydF9zdHJwYCwgYW5kIGBza19wc29ja19zdGFydF92ZXJkaWN0YC4gVGhlIGFjdHVhbCBkYXRhIHBhdGggaXMgdHJpZ2dlcmVkIGJ5IHRoZSBzb2NrZXQncyByZWNlaXZlIG1lY2hhbmlzbSwgd2hpY2ggdGhlbiBnb2VzIHRocm91Z2ggZWl0aGVyIGBzdHJwYXJzZXJgIG9yIGBza19kYXRhX3JlYWR5YC4gU2luY2Ugd2UgY2FuJ3QgemVybyBpbiBkaXJlY3RseSBvbiB0aGUgc3RhdGljIGRhdGEgcGF0aCBmdW5jdGlvbnMsIEkgdGhpbmsgdGhlIG1vc3QgZWZmZWN0aXZlIGFwcHJvYWNoIGlzIHRvIGZvY3VzIG9uIHRob3NlIHNldHVwIGZ1bmN0aW9ucyBJIG1lbnRpb25lZCwgcGx1cyBgc2tfbXNnX3JlY3Ztc2dgLiBBZGRpbmcgaW4gYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYCBhbmQgYHNvY2tfaGFzaF91cGRhdGVfZWxlbWAgaXMgdGVtcHRpbmcsIGJ1dCB0aGV5J3JlIG1hcCBvcGVyYXRpb25zIGFuZCBtaWdodCBpbnRyb2R1Y2UgdW5uZWNlc3Nhcnkgbm9pc2UuIEknbGwgc3RpY2sgdG8gdGhlIGNvcmUgc2V0dXAgZnVuY3Rpb25zIGFuZCBgc2tfbXNnX3JlY3Ztc2dgIHRvIGtlZXAgaXQgY29uY2lzZSBhbmQgZm9jdXNlZC5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gUmlnaHQsIHdlIGhhdmUgYEJQRl9TWVNDQUxMYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIGBORVRfU09DS19NU0dgLCB3aGljaCBpcyBzZWxlY3RlZCBieSBib3RoIG9mIHRoZSBmaXJzdCB0d28uIFNvLCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX1NUUkVBTV9QQVJTRVJgIGFyZSBzdWZmaWNpZW50IHRvIHRyaWdnZXIgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBhbHRlcnMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgIHRvIGhhbmRsZSBzaXR1YXRpb25zIHdoZXJlIGBza19mb3J3YXJkX2FsbG9jYCBpcyBpbnN1ZmZpY2llbnQgZHVyaW5nIHJlY2VpdmUgb3duZXJzaGlwIGFzc2lnbm1lbnQgd2hlbiBhIGRpcmVjdCBgc3RycGFyc2VyYCBTS19QQVNTIGNsb25lIGlzIGludm9sdmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBzb2NrbWFwL3NrbXNnIEJQRiBpbmZyYXN0cnVjdHVyZS4gU28gdGhlIGNvZGUgYmVpbmcgY2hhbmdlZCBpcyByZWFjaGVkIHdoZW4gYSBCUEYgc29ja21hcCB3aXRoIGEgc3RyZWFtIHBhcnNlciBhbmQgdmVyZGljdCBwcm9ncmFtIGFyZSBhdHRhY2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzODcsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE4OjU3Ljg0MTYyMTYzMloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODk4MjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tfcHNvY2tfaW5pdF9zdHJwXCIsXG4gICAgXCJza19wc29ja19zdGFydF9zdHJwXCIsXG4gICAgXCJza19wc29ja19zdGFydF92ZXJkaWN0XCIsXG4gICAgXCJza19tc2dfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCB0byBoYW5kbGUgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgd2hlbiBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXAgdG8gYSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgY2xvbmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc29ja21hcC9za21zZyBCUEYgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHNvY2ttYXAgd2l0aCBhIHN0cmVhbSBwYXJzZXIgYW5kIHZlcmRpY3QgcHJvZ3JhbSBhdHRhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19wc29ja19pbml0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0YXJ0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RcIixcbiAgICBcInNrX21zZ19yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgIHRvIGhhbmRsZSBgc2tfZm9yd2FyZF9hbGxvY2AgZGVmaWNpdCB3aGVuIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byBhIGRpcmVjdCBzdHJwYXJzZXIgU0tfUEFTUyBjbG9uZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzb2NrbWFwL3NrbXNnIEJQRiBpbmZyYXN0cnVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBCUEYgc29ja21hcCB3aXRoIGEgc3RyZWFtIHBhcnNlciBhbmQgdmVyZGljdCBwcm9ncmFtIGF0dGFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcskww[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 11:00:31 +0000 UTC FinishedAt: 2026-08-02 11:18:59 +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": "fdeba03fea78407a8c52faa99177c9f7f29f90eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "fdeba03fea78407a8c52faa99177c9f7f29f90eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER" ], "series_id": "2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "sk_psock_init_strp", "sk_psock_start_strp", "sk_psock_start_verdict", "sk_msg_recvmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tfcHNvY2tfaW5pdF9zdHJwJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0YXJ0X3N0cnAmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RhcnRfdmVyZGljdCYjMzQ7LAogICAgJiMzNDtza19tc2dfcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgYW5kIGBza19wc29ja19za2JfaW5ncmVzc2AgdG8gaGFuZGxlIGBza19mb3J3YXJkX2FsbG9jYCBkZWZpY2l0IHdoZW4gYXNzaWduaW5nIHJlY2VpdmUgb3duZXJzaGlwIHRvIGEgZGlyZWN0IHN0cnBhcnNlciBTS19QQVNTIGNsb25lLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHNvY2ttYXAvc2ttc2cgQlBGIGluZnJhc3RydWN0dXJlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIEJQRiBzb2NrbWFwIHdpdGggYSBzdHJlYW0gcGFyc2VyIGFuZCB2ZXJkaWN0IHByb2dyYW0gYXR0YWNoZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZmFjOTFiYjMzOTNlZGVmZjkwMmJlMjRlNjVjYWE2MmY2NzNlYmMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxMToxNzoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuY1xuaW5kZXggMjUyMWI2NDNmYTA1ZC4uY2U1YWQ4MTYwMjgyOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrbXNnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrbXNnLmNcbkBAIC01ODYsNyAmIzQzOzU4Niw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIH1cbiBcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZik7XG4mIzQzO1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuJiM0MztcdFx0XHRcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKTtcbiBcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHR1MzIgb2ZmLCB1MzIgbGVuKVxuQEAgLTU5NSwxMiAmIzQzOzU5Niw5IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBza19tc2cgKm1zZztcbiBcdGludCBlcnI7XG4gXG4tXHQvKiBJZiB3ZSBhcmUgcmVjZWl2aW5nIG9uIHRoZSBzYW1lIHNvY2sgc2tiLVx1MDAzZXNrIGlzIGFscmVhZHkgYXNzaWduZWQsXG4tXHQgKiBza2lwIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBvd25lciB0cmFuc2l0aW9uIHNlZWluZyBpdCBhbHJlYWR5IHNldFxuLVx0ICogY29ycmVjdGx5LlxuLVx0ICovXG4gXHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZXNrID09IHNrKSlcbi1cdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUpO1xuJiM0MztcdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUsXG4mIzQzO1x0XHRcdFx0XHRcdCBza2JfYnBmX3N0cnBhcnNlcihza2IpKTtcbiBcdG1zZyA9IHNrX3Bzb2NrX2NyZWF0ZV9pbmdyZXNzX21zZyhzaywgc2tiKTtcbiBcdGlmICghbXNnKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbkBAIC02MTgsMTIgJiM0Mzs2MTYsMTQgQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgb2YgdGhlIHNvY2tldCBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZVxuLSAqIHNrYi4gSW4gdGhpcyBjYXNlIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIG1lbW9yeSBsaW1pdHMgb3Igc2tiX3NldF9vd25lcl9yXG4tICogYmVjYXVzZSB0aGUgc2tiIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBoZXJlLlxuJiM0MzsvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stXHUwMDNlc2suXG4mIzQzOyAqXG4mIzQzOyAqIEJlZm9yZSBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXAgdG8gYSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgY2xvbmUsXG4mIzQzOyAqIHNldHRsZSBhbnkgZXhpc3Rpbmcgc2tfZm9yd2FyZF9hbGxvYyBkZWZpY2l0IGZyb20gZWFybGllciBjbG9uZSBjaGFyZ2VzLlxuICAqL1xuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKVxuJiM0MztcdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcbiYjNDM7XHRcdFx0XHQgICAgIGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYylcbiB7XG4gXHRzdHJ1Y3Qgc2tfbXNnICptc2cgPSBhbGxvY19za19tc2coR0ZQX0FUT01JQyk7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay1cdTAwM2VzaztcbkBAIC02MzEsNiAmIzQzOzYzMSwxMyBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYlxuIFxuIFx0aWYgKHVubGlrZWx5KCFtc2cpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldHRsZV9md2RfYWxsb2MgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApKSB7XG4mIzQzO1x0XHRrZnJlZShtc2cpO1xuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0fVxuJiM0MztcbiBcdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbiBcbiBcdC8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG5AQCAtMTAxNyw2ICYjNDM7MTAyNCw4IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgKiByZXRyeWluZyBsYXRlciBmcm9tIHdvcmtxdWV1ZS5cbiBcdFx0ICovXG4gXHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19za2IpKSB7XG4mIzQzO1x0XHRcdGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyA9IGZhbHNlO1xuJiM0MztcbiBcdFx0XHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0XHRcdG9mZiA9IDA7XG4gXHRcdFx0aWYgKHNrYl9icGZfc3RycGFyc2VyKHNrYikpIHtcbkBAIC0xMDI0LDggJiM0MzsxMDMzLDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0XHRcdFx0b2ZmID0gc3RtLVx1MDAzZW9mZnNldDtcbiBcdFx0XHRcdGxlbiA9IHN0bS1cdTAwM2VmdWxsX2xlbjtcbiYjNDM7XHRcdFx0XHRzZXR0bGVfZndkX2FsbG9jID0gdHJ1ZTtcbiBcdFx0XHR9XG4tXHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgZmFsc2UpO1xuJiM0MztcdFx0XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLFxuJiM0MztcdFx0XHRcdFx0XHRcdGZhbHNlLCBzZXR0bGVfZndkX2FsbG9jKTtcbiBcdFx0fVxuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbG9jayk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuaW5kZXggMWQ3MjMxNzI4ZWFmZC4uYzdhZDIxZDBiYmY0OSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuQEAgLTEsNSAmIzQzOzEsOSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc29ja19kaWFnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7c29ja21hcF9oZWxwZXJzLmhcJiMzNDtcbkBAIC00NjAsNiAmIzQzOzQ2NCwxNzEgQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfcGFyc2VyX3JlamVjdCh2b2lkKVxuIFx0dGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7XG4gfVxuIFxuJiM0MzsvKiBSZWFkIHNrX2ZvcndhcmRfYWxsb2MgdGhyb3VnaCBpbmV0X2RpYWcgbWVtaW5mby4gKi9cbiYjNDM7c3RhdGljIGludCBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhpbnQgc29jaywgaW50ICpmd2RfYWxsb2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBsb2NhbCA9IHt9LCBwZWVyID0ge307XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luICpsb2NhbF9pbiwgKnBlZXJfaW47XG4mIzQzO1x0c29ja2xlbl90IGFkZHJfbGVuID0gc2l6ZW9mKGxvY2FsKTtcbiYjNDM7XHRjaGFyIGJ1ZlsxMDI0XTtcbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0c3RydWN0IG5sbXNnaGRyIG5saDtcbiYjNDM7XHRcdHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyIHJlcTtcbiYjNDM7XHR9IHJlcSA9IHtcbiYjNDM7XHRcdC5ubGggPSB7XG4mIzQzO1x0XHRcdC5ubG1zZ19sZW4gPSBzaXplb2YocmVxKSxcbiYjNDM7XHRcdFx0Lm5sbXNnX3R5cGUgPSBTT0NLX0RJQUdfQllfRkFNSUxZLFxuJiM0MztcdFx0XHQubmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNULFxuJiM0MztcdFx0XHQubmxtc2dfc2VxID0gMSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0XHQucmVxID0ge1xuJiM0MztcdFx0XHQuc2RpYWdfZmFtaWx5ID0gQUZfSU5FVCxcbiYjNDM7XHRcdFx0LnNkaWFnX3Byb3RvY29sID0gSVBQUk9UT19UQ1AsXG4mIzQzO1x0XHRcdC5pZGlhZ19leHQgPSAxIFx1MDAzY1x1MDAzYyAoSU5FVF9ESUFHX01FTUlORk8gLSAxKSxcbiYjNDM7XHRcdFx0LmlkaWFnX3N0YXRlcyA9IH4wVSxcbiYjNDM7XHRcdFx0LmlkLmlkaWFnX2Nvb2tpZSA9IHtcbiYjNDM7XHRcdFx0XHRJTkVUX0RJQUdfTk9DT09LSUUsXG4mIzQzO1x0XHRcdFx0SU5FVF9ESUFHX05PQ09PS0lFLFxuJiM0MztcdFx0XHR9LFxuJiM0MztcdFx0fSxcbiYjNDM7XHR9O1xuJiM0MztcdGludCBkaWFnX2ZkLCByZXQsIGVyciA9IC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdGlmIChnZXRzb2NrbmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2bG9jYWwsIFx1MDAyNmFkZHJfbGVuKSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1x0YWRkcl9sZW4gPSBzaXplb2YocGVlcik7XG4mIzQzO1x0aWYgKGdldHBlZXJuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZwZWVyLCBcdTAwMjZhZGRyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRsb2NhbF9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcdTAwMjZsb2NhbDtcbiYjNDM7XHRwZWVyX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNnBlZXI7XG4mIzQzO1x0cmVxLnJlcS5pZC5pZGlhZ19zcG9ydCA9IGxvY2FsX2luLVx1MDAzZXNpbl9wb3J0O1xuJiM0MztcdHJlcS5yZXEuaWQuaWRpYWdfZHBvcnQgPSBwZWVyX2luLVx1MDAzZXNpbl9wb3J0O1xuJiM0MztcdHJlcS5yZXEuaWQuaWRpYWdfc3JjWzBdID0gbG9jYWxfaW4tXHUwMDNlc2luX2FkZHIuc19hZGRyO1xuJiM0MztcdHJlcS5yZXEuaWQuaWRpYWdfZHN0WzBdID0gcGVlcl9pbi1cdTAwM2VzaW5fYWRkci5zX2FkZHI7XG4mIzQzO1xuJiM0MztcdGRpYWdfZmQgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcgfCBTT0NLX0NMT0VYRUMsXG4mIzQzO1x0XHRcdCBORVRMSU5LX1NPQ0tfRElBRyk7XG4mIzQzO1x0aWYgKGRpYWdfZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzZW5kKGRpYWdfZmQsIFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGVyciA9IC1lcnJubztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocmV0ICE9IHNpemVvZihyZXEpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUlPO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSByZWN2KGRpYWdfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGVyciA9IC1lcnJubztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilidWY7XG4mIzQzO1x0ICAgICBOTE1TR19PSyhubGgsIHJldCk7IG5saCA9IE5MTVNHX05FWFQobmxoLCByZXQpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqbXNnID0gTkxNU0dfREFUQShubGgpO1xuJiM0MztcdFx0c3RydWN0IHJ0YXR0ciAqYXR0cjtcbiYjNDM7XHRcdGludCBsZW47XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5saC1cdTAwM2VubG1zZ190eXBlID09IE5MTVNHX0VSUk9SKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKG5saC1cdTAwM2VubG1zZ190eXBlID09IE5MTVNHX0RPTkUpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGxlbiA9IG5saC1cdTAwM2VubG1zZ19sZW4gLSBOTE1TR19MRU5HVEgoc2l6ZW9mKCptc2cpKTtcbiYjNDM7XHRcdGZvciAoYXR0ciA9IChzdHJ1Y3QgcnRhdHRyICopKG1zZyAmIzQzOyAxKTsgUlRBX09LKGF0dHIsIGxlbik7XG4mIzQzO1x0XHQgICAgIGF0dHIgPSBSVEFfTkVYVChhdHRyLCBsZW4pKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBpbmV0X2RpYWdfbWVtaW5mbyAqbWluZm87XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoYXR0ci1cdTAwM2VydGFfdHlwZSAhPSBJTkVUX0RJQUdfTUVNSU5GTylcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0bWluZm8gPSBSVEFfREFUQShhdHRyKTtcbiYjNDM7XHRcdFx0KmZ3ZF9hbGxvYyA9IChfX3MzMiltaW5mby1cdTAwM2VpZGlhZ19mbWVtO1xuJiM0MztcdFx0XHRlcnIgPSAwO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y2xvc2UoZGlhZ19mZCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGVzdCBzdHJwYXJzZXIgU0tfUEFTUyBkZWxpdmVyeSB0byB0aGUgc2FtZSBzb2NrZXQuICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2Modm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfc3RycCAqc3RycCA9IE5VTEw7XG4mIzQzO1x0Y2hhciBzbmRbNCAqIDEwMjRdO1xuJiM0MztcdGludCBjID0gLTEsIHAgPSAtMTtcbiYjNDM7XHRpbnQgZndkX2FsbG9jO1xuJiM0MztcdGludCBzbmRidWYgPSBzaXplb2Yoc25kKTtcbiYjNDM7XHRpbnQgemVybyA9IDA7XG4mIzQzO1x0Y2hhciByY3Y7XG4mIzQzO1x0aW50IHNlbnQsIHJlY3ZkO1xuJiM0MztcdGludCBtYXA7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KHNuZCwgMHhhNSwgc2l6ZW9mKHNuZCkpO1xuJiM0MztcbiYjNDM7XHRzdHJwID0gdGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc3RycCwgXCYjMzQ7dGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtYXAgPSBicGZfbWFwX19mZChzdHJwLVx1MDAzZW1hcHMuc29ja19tYXApO1xuJiM0MztcdGVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtXHUwMDNlcHJvZ3MucHJvZ19za2JfcGFyc2VyX29uZSksXG4mIzQzO1x0XHRcdCAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdGVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtXHUwMDNlcHJvZ3MucHJvZ19za2JfdmVyZGljdF9wYXNzKSxcbiYjNDM7XHRcdFx0ICAgICAgIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVCwgMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdGVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBcdTAwMjZjLCBcdTAwMjZwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2NyZWF0ZV9wYWlyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdGVyciA9IHhzZXRzb2Nrb3B0KGMsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgXHUwMDI2c25kYnVmLCBzaXplb2Yoc25kYnVmKSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdGVyciA9IHhzZXRzb2Nrb3B0KHAsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgXHUwMDI2c25kYnVmLCBzaXplb2Yoc25kYnVmKSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdGVyciA9IHhicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcCwgXHUwMDI2emVybywgXHUwMDI2cCwgQlBGX05PRVhJU1QpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztcbiYjNDM7XHRzZW50ID0gc2VuZChjLCBzbmQsIHNpemVvZihzbmQpLCBNU0dfRE9OVFdBSVQpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNlbnQsIHNpemVvZihzbmQpLCBcJiMzNDtzZW5kXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdHJlY3ZkID0gcmVjdl90aW1lb3V0KHAsIFx1MDAyNnJjdiwgc2l6ZW9mKHJjdiksIE1TR19ET05UV0FJVCxcbiYjNDM7XHRcdFx0ICAgICBJT19USU1FT1VUX1NFQyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocmVjdmQsIHNpemVvZihyY3YpLCBcJiMzNDtyZWN2X3RpbWVvdXRcJiMzNDspIHx8XG4mIzQzO1x0ICAgICFBU1NFUlRfRVEocmN2LCBzbmRbMF0sIFwmIzM0O2RhdGEgbWlzbWF0Y2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGVzdHJveTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc29ja21hcF9zdHJwX2dldF9md2RfYWxsb2MocCwgXHUwMDI2ZndkX2FsbG9jKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jXCYjMzQ7KSB8fFxuJiM0MztcdCAgICAhQVNTRVJUX0dFKGZ3ZF9hbGxvYywgMCwgXCYjMzQ7c2tfZm9yd2FyZF9hbGxvY1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95O1xuJiM0MztvdXRfZGVzdHJveTpcbiYjNDM7XHR0ZXN0X3NvY2ttYXBfc3RycF9fZGVzdHJveShzdHJwKTtcbiYjNDM7XHRpZiAoYyBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShjKTtcbiYjNDM7XHRpZiAocCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShwKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c29ja21hcCBzdHJwIHRjcCBwYXNzXCYjMzQ7KSlcbkBAIC00ODIsNCAmIzQzOzY1MSw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcbiBcdFx0dGVzdF9zb2NrbWFwX3N0cnBfZGlzcGF0Y2hfcGt0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2RcJiMzNDspKVxuIFx0XHR0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c29ja21hcCBzdHJwIHNlbGYgcGFzcyBmd2QgYWxsb2NcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYygpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG5pbmRleCBmZTg4ZmE2ZDQwYmM1Li42ODJlNTNkNDA3NTFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXG5AQCAtNTAsNiAmIzQzOzUwLDEyIEBAIGludCBwcm9nX3NrYl9wYXJzZXJfcGFydGlhbChzdHJ1Y3QgX19za19idWZmICpza2IpXG4gXHRyZXR1cm4gMTA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7c2tfc2tiL3N0cmVhbV9wYXJzZXJcJiMzNDspXG4mIzQzO2ludCBwcm9nX3NrYl9wYXJzZXJfb25lKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAxO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDtza19za2Ivc3RyZWFtX3BhcnNlclwmIzM0OylcbiBpbnQgcHJvZ19za2JfcGFyc2VyX3Jlc2l6ZShzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX3Bzb2NrX2luaXRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF9zdHJwJiMzNDssCiAgICAmIzM0O3NrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3QmIzM0OywKICAgICYjMzQ7c2tfbXNnX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgIHRvIGhhbmRsZSBgc2tfZm9yd2FyZF9hbGxvY2AgZGVmaWNpdCB3aGVuIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byBhIGRpcmVjdCBzdHJwYXJzZXIgU0tfUEFTUyBjbG9uZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzb2NrbWFwL3NrbXNnIEJQRiBpbmZyYXN0cnVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBCUEYgc29ja21hcCB3aXRoIGEgc3RyZWFtIHBhcnNlciBhbmQgdmVyZGljdCBwcm9ncmFtIGF0dGFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWZhYzkxYmIzMzkzZWRlZmY5MDJiZTI0ZTY1Y2FhNjJmNjczZWJjMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMTE6MTc6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za21zZy5jIGIvbmV0L2NvcmUvc2ttc2cuYwppbmRleCAyNTIxYjY0M2ZhMDVkLi5jZTVhZDgxNjAyODI4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9za21zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrbXNnLmMKQEAgLTU4Niw3ICYjNDM7NTg2LDggQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsCiB9CiAKIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZik7CiYjNDM7CQkJCSAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZiwKJiM0MzsJCQkJICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpOwogCiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJdTMyIG9mZiwgdTMyIGxlbikKQEAgLTU5NSwxMiAmIzQzOzU5Niw5IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3Qgc2tfbXNnICptc2c7CiAJaW50IGVycjsKIAotCS8qIElmIHdlIGFyZSByZWNlaXZpbmcgb24gdGhlIHNhbWUgc29jayBza2ItJmd0O3NrIGlzIGFscmVhZHkgYXNzaWduZWQsCi0JICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXQKLQkgKiBjb3JyZWN0bHkuCi0JICovCiAJaWYgKHVubGlrZWx5KHNrYi0mZ3Q7c2sgPT0gc2spKQotCQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSk7CiYjNDM7CQlyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSwKJiM0MzsJCQkJCQkgc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSk7CiAJbXNnID0gc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHNrLCBza2IpOwogCWlmICghbXNnKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTYxOCwxMiAmIzQzOzYxNiwxNCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIGVycjsKIH0KIAotLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgb2YgdGhlIHNvY2tldCBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZQotICogc2tiLiBJbiB0aGlzIGNhc2Ugd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgbWVtb3J5IGxpbWl0cyBvciBza2Jfc2V0X293bmVyX3IKLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS4KJiM0MzsvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stJmd0O3NrLgomIzQzOyAqCiYjNDM7ICogQmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byBhIGRpcmVjdCBzdHJwYXJzZXIgU0tfUEFTUyBjbG9uZSwKJiM0MzsgKiBzZXR0bGUgYW55IGV4aXN0aW5nIHNrX2ZvcndhcmRfYWxsb2MgZGVmaWNpdCBmcm9tIGVhcmxpZXIgY2xvbmUgY2hhcmdlcy4KICAqLwogc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKQomIzQzOwkJCQkgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsCiYjNDM7CQkJCSAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKQogewogCXN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBwc29jay0mZ3Q7c2s7CkBAIC02MzEsNiAmIzQzOzYzMSwxMyBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYgogCiAJaWYgKHVubGlrZWx5KCFtc2cpKQogCQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsKJiM0MzsJaWYgKHNldHRsZV9md2RfYWxsb2MgJmFtcDsmYW1wOwomIzQzOwkgICAgIXNrX3JtZW1fc2NoZWR1bGUoc2ssIHNrYiwgMCkpIHsKJiM0MzsJCWtmcmVlKG1zZyk7CiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsJfQomIzQzOwogCXNrYl9zZXRfb3duZXJfcihza2IsIHNrKTsKIAogCS8qIFRoaXMgaXMgdXNlZCBpbiB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlCkBAIC0xMDE3LDYgJiM0MzsxMDI0LDggQEAgc3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLgogCQkgKi8KIAkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmYW1wO3Bzb2NrLSZndDtpbmdyZXNzX3NrYikpIHsKJiM0MzsJCQlib29sIHNldHRsZV9md2RfYWxsb2MgPSBmYWxzZTsKJiM0MzsKIAkJCWxlbiA9IHNrYi0mZ3Q7bGVuOwogCQkJb2ZmID0gMDsKIAkJCWlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7CkBAIC0xMDI0LDggJiM0MzsxMDMzLDEwIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJCQkJb2ZmID0gc3RtLSZndDtvZmZzZXQ7CiAJCQkJbGVuID0gc3RtLSZndDtmdWxsX2xlbjsKJiM0MzsJCQkJc2V0dGxlX2Z3ZF9hbGxvYyA9IHRydWU7CiAJCQl9Ci0JCQllcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7CiYjNDM7CQkJZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwKJiM0MzsJCQkJCQkJZmFsc2UsIHNldHRsZV9md2RfYWxsb2MpOwogCQl9CiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlzcGluX2xvY2tfYmgoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19sb2NrKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKaW5kZXggMWQ3MjMxNzI4ZWFmZC4uYzdhZDIxZDBiYmY0OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmMKQEAgLTEsNSAmIzQzOzEsOSBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKICNpbmNsdWRlICZsdDtlcnJvci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbmV0X2RpYWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc29ja19kaWFnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0aW5ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3NvY2ttYXBfaGVscGVycy5oJiMzNDsKQEAgLTQ2MCw2ICYjNDM7NDY0LDE3MSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpCiAJdGVzdF9zb2NrbWFwX3N0cnBfX2Rlc3Ryb3koc3RycCk7CiB9CiAKJiM0MzsvKiBSZWFkIHNrX2ZvcndhcmRfYWxsb2MgdGhyb3VnaCBpbmV0X2RpYWcgbWVtaW5mby4gKi8KJiM0MztzdGF0aWMgaW50IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKGludCBzb2NrLCBpbnQgKmZ3ZF9hbGxvYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGxvY2FsID0ge30sIHBlZXIgPSB7fTsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luICpsb2NhbF9pbiwgKnBlZXJfaW47CiYjNDM7CXNvY2tsZW5fdCBhZGRyX2xlbiA9IHNpemVvZihsb2NhbCk7CiYjNDM7CWNoYXIgYnVmWzEwMjRdOwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJc3RydWN0IG5sbXNnaGRyIG5saDsKJiM0MzsJCXN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyIHJlcTsKJiM0MzsJfSByZXEgPSB7CiYjNDM7CQkubmxoID0gewomIzQzOwkJCS5ubG1zZ19sZW4gPSBzaXplb2YocmVxKSwKJiM0MzsJCQkubmxtc2dfdHlwZSA9IFNPQ0tfRElBR19CWV9GQU1JTFksCiYjNDM7CQkJLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCwKJiM0MzsJCQkubmxtc2dfc2VxID0gMSwKJiM0MzsJCX0sCiYjNDM7CQkucmVxID0gewomIzQzOwkJCS5zZGlhZ19mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJCS5zZGlhZ19wcm90b2NvbCA9IElQUFJPVE9fVENQLAomIzQzOwkJCS5pZGlhZ19leHQgPSAxICZsdDsmbHQ7IChJTkVUX0RJQUdfTUVNSU5GTyAtIDEpLAomIzQzOwkJCS5pZGlhZ19zdGF0ZXMgPSB+MFUsCiYjNDM7CQkJLmlkLmlkaWFnX2Nvb2tpZSA9IHsKJiM0MzsJCQkJSU5FVF9ESUFHX05PQ09PS0lFLAomIzQzOwkJCQlJTkVUX0RJQUdfTk9DT09LSUUsCiYjNDM7CQkJfSwKJiM0MzsJCX0sCiYjNDM7CX07CiYjNDM7CWludCBkaWFnX2ZkLCByZXQsIGVyciA9IC1FTk9FTlQ7CiYjNDM7CiYjNDM7CWlmIChnZXRzb2NrbmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtsb2NhbCwgJmFtcDthZGRyX2xlbikpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwlhZGRyX2xlbiA9IHNpemVvZihwZWVyKTsKJiM0MzsJaWYgKGdldHBlZXJuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO3BlZXIsICZhbXA7YWRkcl9sZW4pKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJbG9jYWxfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmFtcDtsb2NhbDsKJiM0MzsJcGVlcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYW1wO3BlZXI7CiYjNDM7CXJlcS5yZXEuaWQuaWRpYWdfc3BvcnQgPSBsb2NhbF9pbi0mZ3Q7c2luX3BvcnQ7CiYjNDM7CXJlcS5yZXEuaWQuaWRpYWdfZHBvcnQgPSBwZWVyX2luLSZndDtzaW5fcG9ydDsKJiM0MzsJcmVxLnJlcS5pZC5pZGlhZ19zcmNbMF0gPSBsb2NhbF9pbi0mZ3Q7c2luX2FkZHIuc19hZGRyOwomIzQzOwlyZXEucmVxLmlkLmlkaWFnX2RzdFswXSA9IHBlZXJfaW4tJmd0O3Npbl9hZGRyLnNfYWRkcjsKJiM0MzsKJiM0MzsJZGlhZ19mZCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVyB8IFNPQ0tfQ0xPRVhFQywKJiM0MzsJCQkgTkVUTElOS19TT0NLX0RJQUcpOwomIzQzOwlpZiAoZGlhZ19mZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwlyZXQgPSBzZW5kKGRpYWdfZmQsICZhbXA7cmVxLCBzaXplb2YocmVxKSwgMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSAtZXJybm87CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlpZiAocmV0ICE9IHNpemVvZihyZXEpKSB7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcmVjdihkaWFnX2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCWVyciA9IC1lcnJubzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopYnVmOwomIzQzOwkgICAgIE5MTVNHX09LKG5saCwgcmV0KTsgbmxoID0gTkxNU0dfTkVYVChubGgsIHJldCkpIHsKJiM0MzsJCXN0cnVjdCBpbmV0X2RpYWdfbXNnICptc2cgPSBOTE1TR19EQVRBKG5saCk7CiYjNDM7CQlzdHJ1Y3QgcnRhdHRyICphdHRyOwomIzQzOwkJaW50IGxlbjsKJiM0MzsKJiM0MzsJCWlmIChubGgtJmd0O25sbXNnX3R5cGUgPT0gTkxNU0dfRVJST1IpIHsKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwkJaWYgKG5saC0mZ3Q7bmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJbGVuID0gbmxoLSZndDtubG1zZ19sZW4gLSBOTE1TR19MRU5HVEgoc2l6ZW9mKCptc2cpKTsKJiM0MzsJCWZvciAoYXR0ciA9IChzdHJ1Y3QgcnRhdHRyICopKG1zZyAmIzQzOyAxKTsgUlRBX09LKGF0dHIsIGxlbik7CiYjNDM7CQkgICAgIGF0dHIgPSBSVEFfTkVYVChhdHRyLCBsZW4pKSB7CiYjNDM7CQkJc3RydWN0IGluZXRfZGlhZ19tZW1pbmZvICptaW5mbzsKJiM0MzsKJiM0MzsJCQlpZiAoYXR0ci0mZ3Q7cnRhX3R5cGUgIT0gSU5FVF9ESUFHX01FTUlORk8pCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCW1pbmZvID0gUlRBX0RBVEEoYXR0cik7CiYjNDM7CQkJKmZ3ZF9hbGxvYyA9IChfX3MzMiltaW5mby0mZ3Q7aWRpYWdfZm1lbTsKJiM0MzsJCQllcnIgPSAwOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljbG9zZShkaWFnX2ZkKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGVzdCBzdHJwYXJzZXIgU0tfUEFTUyBkZWxpdmVyeSB0byB0aGUgc2FtZSBzb2NrZXQuICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3Rfc29ja21hcF9zdHJwICpzdHJwID0gTlVMTDsKJiM0MzsJY2hhciBzbmRbNCAqIDEwMjRdOwomIzQzOwlpbnQgYyA9IC0xLCBwID0gLTE7CiYjNDM7CWludCBmd2RfYWxsb2M7CiYjNDM7CWludCBzbmRidWYgPSBzaXplb2Yoc25kKTsKJiM0MzsJaW50IHplcm8gPSAwOwomIzQzOwljaGFyIHJjdjsKJiM0MzsJaW50IHNlbnQsIHJlY3ZkOwomIzQzOwlpbnQgbWFwOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwltZW1zZXQoc25kLCAweGE1LCBzaXplb2Yoc25kKSk7CiYjNDM7CiYjNDM7CXN0cnAgPSB0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc3RycCwgJiMzNDt0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbWFwID0gYnBmX21hcF9fZmQoc3RycC0mZ3Q7bWFwcy5zb2NrX21hcCk7CiYjNDM7CWVyciA9IHhicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHN0cnAtJmd0O3Byb2dzLnByb2dfc2tiX3BhcnNlcl9vbmUpLAomIzQzOwkJCSAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzOwomIzQzOwllcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLSZndDtwcm9ncy5wcm9nX3NrYl92ZXJkaWN0X3Bhc3MpLAomIzQzOwkJCSAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0gY3JlYXRlX3BhaXIoQUZfSU5FVCwgU09DS19TVFJFQU0sICZhbXA7YywgJmFtcDtwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2NyZWF0ZV9wYWlyJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geHNldHNvY2tvcHQoYywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmYW1wO3NuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geHNldHNvY2tvcHQocCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmYW1wO3NuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJZXJyID0geGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCAmYW1wO3plcm8sICZhbXA7cCwgQlBGX05PRVhJU1QpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfZGVzdHJveTsKJiM0MzsKJiM0MzsJc2VudCA9IHNlbmQoYywgc25kLCBzaXplb2Yoc25kKSwgTVNHX0RPTlRXQUlUKTsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2VudCwgc2l6ZW9mKHNuZCksICYjMzQ7c2VuZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7CiYjNDM7CXJlY3ZkID0gcmVjdl90aW1lb3V0KHAsICZhbXA7cmN2LCBzaXplb2YocmN2KSwgTVNHX0RPTlRXQUlULAomIzQzOwkJCSAgICAgSU9fVElNRU9VVF9TRUMpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZWN2ZCwgc2l6ZW9mKHJjdiksICYjMzQ7cmVjdl90aW1lb3V0JiMzNDspIHx8CiYjNDM7CSAgICAhQVNTRVJUX0VRKHJjdiwgc25kWzBdLCAmIzM0O2RhdGEgbWlzbWF0Y2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXN0cm95OwomIzQzOwomIzQzOwllcnIgPSBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhwLCAmYW1wO2Z3ZF9hbGxvYyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyYjMzQ7KSB8fAomIzQzOwkgICAgIUFTU0VSVF9HRShmd2RfYWxsb2MsIDAsICYjMzQ7c2tfZm9yd2FyZF9hbGxvYyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2Rlc3Ryb3k7CiYjNDM7b3V0X2Rlc3Ryb3k6CiYjNDM7CXRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApOwomIzQzOwlpZiAoYyAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoYyk7CiYjNDM7CWlmIChwICZndDs9IDApCiYjNDM7CQljbG9zZShwKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpCiB7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHN0cnAgdGNwIHBhc3MmIzM0OykpCkBAIC00ODIsNCAmIzQzOzY1MSw2IEBAIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZCkKIAkJdGVzdF9zb2NrbWFwX3N0cnBfZGlzcGF0Y2hfcGt0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgc3RycCBwYXJzZXIgcmVqZWN0IHBrdCBtb2QmIzM0OykpCiAJCXRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3QoKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHN0cnAgc2VsZiBwYXNzIGZ3ZCBhbGxvYyYjMzQ7KSkKJiM0MzsJCXRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2MoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMKaW5kZXggZmU4OGZhNmQ0MGJjNS4uNjgyZTUzZDQwNzUxYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmMKQEAgLTUwLDYgJiM0Mzs1MCwxMiBAQCBpbnQgcHJvZ19za2JfcGFyc2VyX3BhcnRpYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQogCXJldHVybiAxMDsKIH0KIAomIzQzO1NFQygmIzM0O3NrX3NrYi9zdHJlYW1fcGFyc2VyJiMzNDspCiYjNDM7aW50IHByb2dfc2tiX3BhcnNlcl9vbmUoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7c2tfc2tiL3N0cmVhbV9wYXJzZXImIzM0OykKIGludCBwcm9nX3NrYl9wYXJzZXJfcmVzaXplKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc2MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBuZXQvY29yZS9za21zZy5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIHNwZWNpZmljIGZpeCBpbnZvbHZpbmcgYG5ldC9jb3JlL3NrbXNnLmNgIGFuZCBhIG5ldyB0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhhbmRsaW5nIHRoZSBgc2tfZm9yd2FyZF9hbGxvY2AgZGVmaWNpdCB3aGVuIGRlYWxpbmcgd2l0aCBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgY2xvbmVzIGR1cmluZyByZWNlaXZlIG93bmVyc2hpcCBhc3NpZ25tZW50LiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGFkZGVkIGEgYHNldHRsZV9md2RfYWxsb2NgIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCBhbmQgYXJlIGNhbGxpbmcgYHNrX3JtZW1fc2NoZWR1bGUoc2ssIHNrYiwgMClgIGlmIGl0JiMzOTtzIHNldCB0byB0cnVlLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgYWJvdXQgcmVhY2hhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCwgd2hpY2ggYXJlIGNyaXRpY2FsIGNvbXBvbmVudHMgb2YgdGhlIHNvY2ttYXAvc2ttc2cgQlBGIGluZnJhc3RydWN0dXJlLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCB0aGVzZSBmdW5jdGlvbnMgKmFyZSogcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBUaGV5JiMzOTtyZSBmdW5kYW1lbnRhbCB0byB0aGUgd2hvbGUgcHJvY2Vzcy4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHBsYWNlcyB0byBmb2N1cyBmdXp6aW5nIGVmZm9ydHMuIGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBhcmUgdGhlIG9idmlvdXMgY2FuZGlkYXRlcy4gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBleHBvc3VyZSwgc28gdGhlIGZvcm1lciB0d28gYXJlIGxpa2VseSB0aGUgbW9yZSBjcml0aWNhbCB0YXJnZXRzLgoKVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhvc2UgdHdvIGZ1bmN0aW9ucywgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCB3aXRoaW4gYG5ldC9jb3JlL3NrbXNnLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Bzb2NrX3NrYl9pbmdyZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTUzMz1zdGF0aWMgc3RydWN0IHNrX21zZyAqc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvY29yZS9za21zZy5jLTU0NC1cbm5ldC9jb3JlL3NrbXNnLmM6NTQ1OnN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy01NDYtXHRcdFx0XHRcdHUzMiBvZmYsIHUzMiBsZW4sXG4tLVxubmV0L2NvcmUvc2ttc2cuYy01ODctXG5uZXQvY29yZS9za21zZy5jOjU4ODpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrbXNnLmMtNTg5LVx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTkxLVxubmV0L2NvcmUvc2ttc2cuYzo1OTI6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2ttc2cuYy01OTMtXHRcdFx0XHR1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTk5LVx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VzayA9PSBzaykpXG5uZXQvY29yZS9za21zZy5jOjYwMDpcdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUsXG5uZXQvY29yZS9za21zZy5jLTYwMS1cdFx0XHRcdFx0XHQgc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSk7XG4tLVxubmV0L2NvcmUvc2ttc2cuYy02MTItXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XG5uZXQvY29yZS9za21zZy5jOjYxMzpcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc2tiLCBvZmYsIGxlbiwgcHNvY2ssIHNrLCBtc2csIHRydWUpO1xubmV0L2NvcmUvc2ttc2cuYy02MTQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNjIzLSAqL1xubmV0L2NvcmUvc2ttc2cuYzo2MjQ6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za21zZy5jLTYyNS1cdFx0XHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgYm9vbCB0YWtlX3JlZixcbi0tXG5uZXQvY29yZS9za21zZy5jLTY0Ny1cdG1zZy1cdTAwM2VzayA9IHNrO1xubmV0L2NvcmUvc2ttc2cuYzo2NDg6XHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHNrYiwgb2ZmLCBsZW4sIHBzb2NrLCBzaywgbXNnLCB0YWtlX3JlZik7XG5uZXQvY29yZS9za21zZy5jLTY0OS1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2NvcmUvc2ttc2cuYz02NTQ9c3RhdGljIGludCBza19wc29ja19oYW5kbGVfc2tiKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy02NjItXG5uZXQvY29yZS9za21zZy5jOjY2MzpcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzcyhwc29jaywgc2tiLCBvZmYsIGxlbik7XG5uZXQvY29yZS9za21zZy5jLTY2NC19XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMDAzPXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTAyMi1cdFx0ICogcXVldWUgd29yayBvdGhlcndpc2Ugd2UgbWF5IGdldCBPT08gZGF0YS4gT3RoZXJ3aXNlLFxubmV0L2NvcmUvc2ttc2cuYzoxMDIzOlx0XHQgKiBpZiBza19wc29ja19za2JfaW5ncmVzcyBlcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5XG5uZXQvY29yZS9za21zZy5jLTEwMjQtXHRcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTAzNy1cdFx0XHR9XG5uZXQvY29yZS9za21zZy5jOjEwMzg6XHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcbm5ldC9jb3JlL3NrbXNnLmMtMTAzOS1cdFx0XHRcdFx0XHRcdGZhbHNlLCBzZXR0bGVfZndkX2FsbG9jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipBbmFseXppbmcgUGFja2V0IFNvY2tldCBWZXJkaWN0IEFwcGxpY2F0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBhcmUgYm90aCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIGdvb2QgaW5pdGlhbCBjbHVlIOKAkyBpdCB0ZWxscyBtZSB0aGVzZSBmdW5jdGlvbnMgaGF2ZSAqaW50ZXJuYWwgbGlua2FnZSogd2l0aGluIHRoZWlyIGNvbXBpbGF0aW9uIHVuaXQuIFRoZXkmIzM5O3JlIG5vdCBtZWFudCB0byBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgbW9kdWxlIG9yIGZpbGUuCgpHaXZlbiB0aGF0LCBteSBuZXh0IHRob3VnaHQgaXM6ICpXaG8qIGlzIGNhbGxpbmcgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgPyBTaW5jZSBpdCYjMzk7cyBzdGF0aWMsIHRoZSBjYWxsIGhhcyB0byBvcmlnaW5hdGUgd2l0aGluIHRoZSBzYW1lIHNvdXJjZSBmaWxlLCBzbyBJIG5lZWQgdG8gZmluZCBpdHMgY2FsbGVycyB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyBwYWNrZXQgc29ja2V0IHZlcmRpY3RpbmcgcHJvY2VzcyB3b3JrcyBhbmQgd2hhdCB0aGUgY29uc3RyYWludHMgYXJlLiBUaGUgZmFjdCB0aGF0IGl0IGlzIGEgKnZlcmRpY3QgYXBwbGljYXRpb24qIG1lYW5zIHRoYXQgaXQgaXMgYXBwbHlpbmcgc29tZSBkZWNpc2lvbiBhYm91dCB0aGUgcGFja2V0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRob3NlIGRlY2lzaW9ucyBhcmUgYW5kIHdoYXQgdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIGRlcGVuZHMgb24uIFRoaXMgc2VlbXMgbGlrZSBhIGNvcmUgcGFydCBvZiB3aGF0ZXZlciBzeXN0ZW0gdGhpcyBjb2RlIGlzIGltcGxlbWVudGluZywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzICppbmdyZXNzKiBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgdmVyZGljdCBhcHBsaWNhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNhbGwgc2l0ZXMgcmV2ZWFsLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9hcHBseSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz05NjU9c3RhdGljIGludCBza19wc29ja19za2JfcmVkaXJlY3Qoc3RydWN0IHNrX3Bzb2NrICpmcm9tLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTAwMi1cbm5ldC9jb3JlL3NrbXNnLmM6MTAwMzpzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrbXNnLmMtMTAwNC1cdFx0XHRcdCAgaW50IHZlcmRpY3QpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMDg2PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTEwOS1cdH1cbm5ldC9jb3JlL3NrbXNnLmM6MTExMDpcdHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkocHNvY2ssIHNrYiwgcmV0KTtcbm5ldC9jb3JlL3NrbXNnLmMtMTExMS1vdXQ6XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjA5PXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMzItXHR9XG5uZXQvY29yZS9za21zZy5jOjEyMzM6XHRyZXQgPSBza19wc29ja192ZXJkaWN0X2FwcGx5KHBzb2NrLCBza2IsIHJldCk7XG5uZXQvY29yZS9za21zZy5jLTEyMzQtXHRpZiAocmV0IFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgdGhlIEludGVycGxheSBvZiBwc29jayBGdW5jdGlvbiBDYWxscyoqCgpBbHJpZ2h0LCBzbyBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgYm90aCwgaXQgc2VlbXMsIGVuZCB1cCBjYWxsaW5nIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludCBmb3IgbWUuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IHRoYXQgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93IGFuZCBmdW5jdGlvbmFsaXR5IG9mIHBhY2tldCBzb2NrZXQgKHBzb2NrKSBvcGVyYXRpb25zLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzIGhvdyBpcyBpdCB1c2VkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcC4KClRoZSBpbW1lZGlhdGUgdGhpbmcgSSYjMzk7bSBmb2N1c2VkIG9uIGlzIHdoZXRoZXIgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBoYXMgcmVhbCBpbXBsaWNhdGlvbnMgZm9yIHNjb3BpbmcsIHZpc2liaWxpdHksIGFuZCBwb3RlbnRpYWxseSwgb3B0aW1pemF0aW9uLiBBIHN0YXRpYyBmdW5jdGlvbiB3b3VsZCBiZSBzY29wZWQgb25seSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIG1lYW5pbmcgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBvdGhlciBtb2R1bGVzLCBidXQgcmF0aGVyIGFjdHMgYXMgYSBwcml2YXRlIGhlbHBlci4gS25vd2luZyBpZiBpdCYjMzk7cyBzdGF0aWMgZ2l2ZXMgbWUgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBwdXp6bGUgaW4gdGVybXMgb2YgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgYW5kIGRlc2lnbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Bzb2NrX3N0cnBfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz0xMDY4PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEwODUtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2NvcmUvc2ttc2cuYzoxMDg2OnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2ttc2cuYy0xMDg3LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTExMTQtXG5uZXQvY29yZS9za21zZy5jOjExMTU6c3RhdGljIGludCBza19wc29ja19zdHJwX3JlYWRfZG9uZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxubmV0L2NvcmUvc2ttc2cuYy0xMTE2LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTExNTQ9aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTU4LVx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdHJwX2NhbGxiYWNrcyBjYiA9IHtcbm5ldC9jb3JlL3NrbXNnLmM6MTE1OTpcdFx0LnJjdl9tc2dcdD0gc2tfcHNvY2tfc3RycF9yZWFkLFxubmV0L2NvcmUvc2ttc2cuYzoxMTYwOlx0XHQucmVhZF9zb2NrX2RvbmVcdD0gc2tfcHNvY2tfc3RycF9yZWFkX2RvbmUsXG5uZXQvY29yZS9za21zZy5jLTExNjEtXHRcdC5wYXJzZV9tc2dcdD0gc2tfcHNvY2tfc3RycF9wYXJzZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTM2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYHNrX3Bzb2NrX2luaXRfc3RycGAgYW5kIGBza19wc29ja192ZXJkaWN0X3JlY3ZgKioKClJpZ2h0LCBzbyBgc2tfcHNvY2tfaW5pdF9zdHJwYCBpc24mIzM5O3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIGV4cG9zZWQgYW5kIGNhbGxlZCBmcm9tIG91dHNpZGUgaXRzIHByaW1hcnkgY29tcGlsYXRpb24gdW5pdC4gTWFrZXMgbWUgd29uZGVyIHdoZXJlIGFuZCB3aHkuIElzIGl0IHBhcnQgb2YgYSBwdWJsaWMgQVBJPyBJcyBpdCB1c2VkIGluIHNvbWUga2luZCBvZiBoZWxwZXIgbW9kdWxlPyBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsZXJzLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YC4gVGhhdCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBhY2tldCBzb2NrZXRzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBraW5kIG9mIGZpbHRlcmluZyBvciB2ZXJkaWN0IG1lY2hhbmlzbSBvbiB0aGUgcmVjZWl2ZWQgcGFja2V0cy4gVGhlIG5hbWUgaXMgcHJldHR5IGNsZWFyLCBidXQgdGhlIGNvbnRleHQgbWF0dGVycy4gSXMgdGhpcyByZWxhdGVkIHRvIHNvbWUga2luZCBvZiBwYWNrZXQgZmlsdGVyIGxpa2UgQlBGPyBPciBwZXJoYXBzIGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBjb250cm9sbGluZyB0aGUgYmVoYXZpb3VyIG9mIHJhdyBzb2NrZXRzPyBJdCBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgaW50ZWdyYXRpb24gYW5kIGZ1bmN0aW9uYWxpdHksIHNvIEkmIzM5O2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoYXQgb25lIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3Bzb2NrX3ZlcmRpY3RfcmVjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz0xMjA0PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTIwOC1cbm5ldC9jb3JlL3NrbXNnLmM6MTIwOTpzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za21zZy5jLTEyMTAte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTI0MT1zdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI1Ny1cbm5ldC9jb3JlL3NrbXNnLmM6MTI1ODpcdGNvcGllZCA9IG9wcy1cdTAwM2VyZWFkX3NrYihzaywgc2tfcHNvY2tfdmVyZGljdF9yZWN2KTtcbm5ldC9jb3JlL3NrbXNnLmMtMTI1OS1cdGlmIChjb3BpZWQgXHUwMDNlPSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YCoqCgpSaWdodCwgYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAgaXMgZmxhZ2dlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFN0YXRpYyBmdW5jdGlvbnMsIHdpdGhpbiBhIGtlcm5lbCBjb250ZXh0IGxpa2UgdGhpcywgdXN1YWxseSBtZWFuIGl0JiMzOTtzIGFuIGludGVybmFsIGZ1bmN0aW9uLCBwcm9iYWJseSBmb3IgYSB2ZXJ5IHNwZWNpZmljIG1vZHVsZSBvciBzdWJzeXN0ZW0uIEl0JiMzOTtzIGxpa2VseSBub3QgbWVhbnQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gb3V0c2lkZSBpdHMgY29tcGlsYXRpb24gdW5pdC4KClNvLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgYHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeWAuIFVuZGVyc3RhbmRpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20gaXMgY3J1Y2lhbCB0byBncmFzcGluZyBpdHMgZnVuY3Rpb24gYW5kIHRoZSBjb250ZXh0IGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTEyMDk9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI0MC1cbm5ldC9jb3JlL3NrbXNnLmM6MTI0MTpzdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjQyLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEyNjg9dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNzMtXHRwc29jay1cdTAwM2VzYXZlZF9kYXRhX3JlYWR5ID0gc2stXHUwMDNlc2tfZGF0YV9yZWFkeTtcbm5ldC9jb3JlL3NrbXNnLmM6MTI3NDpcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfZGF0YV9yZWFkeSwgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KTtcbm5ldC9jb3JlL3NrbXNnLmMtMTI3NS1cdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfd3JpdGVfc3BhY2UsIHNrX3Bzb2NrX3dyaXRlX3NwYWNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMDcKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWNrZXQgU29ja2V0IERhdGEgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGFja2V0IHNvY2tldCBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGlzbiYjMzk7dCBkZWNsYXJlZCBzdGF0aWMuIFRoYXQmIzM5O3MgbXkgaW5pdGlhbCBwb2ludCBvZiBmb2N1cy4gSXQgbG9va3MgbGlrZSBgc2tfcHNvY2tfaW5pdF9zdHJwYCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc29ja2V0IHN0YXJ0cy4gQnV0LCBoYW5nIG9uLi4uIHRoZXNlIGFwcGVhciB0byBiZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMsIG5vdCB0aGUgYWN0dWFsIGRhdGEgcGF0aC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGRhdGEgYWN0dWFsbHkgZmxvd3MuCgpBbHJpZ2h0LCB0aGUgZGF0YSBwcm9jZXNzaW5nIGZ1bmN0aW9ucyBhcmUgcHJvYmFibHkgYHNrX3Bzb2NrX3N0cnBfcmVhZGAgYW5kIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLiBPaCwgYnV0IHRoZXkmIzM5O3JlICpzdGF0aWMqLiBUaGF04oCZcyBhIHBvdGVudGlhbCByb2FkYmxvY2suIFNvLCBteSBnb2FsIG5vdyBpcyB0byBmaW5kIG91dCBpZiB0aGVyZSBhcmUgYW55ICpub24qLXN0YXRpYyBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBkYXRhIHBhdGguIEkgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LgoKTGV0JiMzOTtzIGNoZWNrIGBza19wc29ja19za2JfaW5ncmVzc2AgYXMgYSBwb3NzaWJsZSBwYXRoLiBIbW0sIHN0YXRpYy4gT2theSwgdGhhdCYjMzk7cyBub3QgaXQuIEkgbmVlZCB0byB3aWRlbiB0aGUgc2VhcmNoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBuZXQvY29yZS9za21zZy5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXSYjNDM7IFthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTEyPXN0YXRpYyBib29sIHNrX21zZ190cnlfY29hbGVzY2Vfb2soc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgZWxlbV9maXJzdF9jb2FsZXNjZSlcbi0tXG5uZXQvY29yZS9za21zZy5jLTI1LVxubmV0L2NvcmUvc2ttc2cuYzoyNjppbnQgc2tfbXNnX2FsbG9jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuLFxubmV0L2NvcmUvc2ttc2cuYy0yNy1cdFx0IGludCBlbGVtX2ZpcnN0X2NvYWxlc2NlKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9ODU9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2FsbG9jKTtcbm5ldC9jb3JlL3NrbXNnLmMtODYtXG5uZXQvY29yZS9za21zZy5jOjg3OmludCBza19tc2dfY2xvbmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICpkc3QsIHN0cnVjdCBza19tc2cgKnNyYyxcbm5ldC9jb3JlL3NrbXNnLmMtODgtXHRcdCB1MzIgb2ZmLCB1MzIgbGVuKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTM2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19jbG9uZSk7XG5uZXQvY29yZS9za21zZy5jLTEzNy1cbm5ldC9jb3JlL3NrbXNnLmM6MTM4OnZvaWQgc2tfbXNnX3JldHVybl96ZXJvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgYnl0ZXMpXG5uZXQvY29yZS9za21zZy5jLTEzOS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xNjA9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3JldHVybl96ZXJvKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTYxLVxubmV0L2NvcmUvc2ttc2cuYzoxNjI6dm9pZCBza19tc2dfcmV0dXJuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgYnl0ZXMpXG5uZXQvY29yZS9za21zZy5jLTE2My17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xOTQ9c3RhdGljIGludCBfX3NrX21zZ19mcmVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgaSxcbi0tXG5uZXQvY29yZS9za21zZy5jLTIxMS1cbm5ldC9jb3JlL3NrbXNnLmM6MjEyOmludCBza19tc2dfZnJlZV9ub2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcbm5ldC9jb3JlL3NrbXNnLmMtMjEzLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTIxNj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9ub2NoYXJnZSk7XG5uZXQvY29yZS9za21zZy5jLTIxNy1cbm5ldC9jb3JlL3NrbXNnLmM6MjE4OmludCBza19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcbm5ldC9jb3JlL3NrbXNnLmMtMjE5LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTIyND1zdGF0aWMgdm9pZCBfX3NrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yNTEtXG5uZXQvY29yZS9za21zZy5jOjI1Mjp2b2lkIHNrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcbm5ldC9jb3JlL3NrbXNnLmMtMjUzLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTI1Nj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9wYXJ0aWFsKTtcbm5ldC9jb3JlL3NrbXNnLmMtMjU3LVxubmV0L2NvcmUvc2ttc2cuYzoyNTg6dm9pZCBza19tc2dfZnJlZV9wYXJ0aWFsX25vY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxubmV0L2NvcmUvc2ttc2cuYy0yNTktXHRcdFx0XHQgIHUzMiBieXRlcylcbi0tXG5uZXQvY29yZS9za21zZy5jLTI2My1cbm5ldC9jb3JlL3NrbXNnLmM6MjY0OnZvaWQgc2tfbXNnX3RyaW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBsZW4pXG5uZXQvY29yZS9za21zZy5jLTI2NS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0zMTA9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3RyaW0pO1xubmV0L2NvcmUvc2ttc2cuYy0zMTEtXG5uZXQvY29yZS9za21zZy5jOjMxMjppbnQgc2tfbXNnX3plcm9jb3B5X2Zyb21faXRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbm5ldC9jb3JlL3NrbXNnLmMtMzEzLVx0XHRcdCAgICAgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MzY3PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ196ZXJvY29weV9mcm9tX2l0ZXIpO1xubmV0L2NvcmUvc2ttc2cuYy0zNjgtXG5uZXQvY29yZS9za21zZy5jOjM2OTppbnQgc2tfbXNnX21lbWNvcHlfZnJvbV9pdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxubmV0L2NvcmUvc2ttc2cuYy0zNzAtXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcbi0tXG5uZXQvY29yZS9za21zZy5jPTQxMT1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfbWVtY29weV9mcm9tX2l0ZXIpO1xubmV0L2NvcmUvc2ttc2cuYy00MTItXG5uZXQvY29yZS9za21zZy5jOjQxMzppbnQgX19za19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtNDE0LVx0XHQgICAgIGludCBsZW4sIGludCBmbGFncywgaW50ICpjb3BpZWRfZnJvbV9zZWxmKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTAwLS8qIFJlY2VpdmUgc2tfbXNnIGZyb20gcHNvY2stXHUwMDNlaW5ncmVzc19tc2cgdG8gQG1zZy4gKi9cbm5ldC9jb3JlL3NrbXNnLmM6NTAxOmludCBza19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtNTAyLVx0XHQgICBpbnQgbGVuLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz01MDY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3JlY3Ztc2cpO1xubmV0L2NvcmUvc2ttc2cuYy01MDctXG5uZXQvY29yZS9za21zZy5jOjUwODpib29sIHNrX21zZ19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9za21zZy5jLTUwOS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz04NTE9c3RhdGljIHZvaWQgc2tfcHNvY2tfbGlua19kZXN0cm95KHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2NvcmUvc2ttc2cuYy04NjAtXG5uZXQvY29yZS9za21zZy5jOjg2MTp2b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtODYyLXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTg3MT1zdGF0aWMgdm9pZCBza19wc29ja19kZXN0cm95KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTg5NS1cbm5ldC9jb3JlL3NrbXNnLmM6ODk2OnZvaWQgc2tfcHNvY2tfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTg5Ny17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05MTQ9c3RhdGljIGludCBza19wc29ja19tYXBfdmVyZChpbnQgdmVyZGljdCwgYm9vbCByZWRpcilcbi0tXG5uZXQvY29yZS9za21zZy5jLTkyNi1cbm5ldC9jb3JlL3NrbXNnLmM6OTI3OmludCBza19wc29ja19tc2dfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG5uZXQvY29yZS9za21zZy5jLTkyOC1cdFx0XHQgc3RydWN0IHNrX21zZyAqbXNnKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTEzOD1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE1My1cbm5ldC9jb3JlL3NrbXNnLmM6MTE1NDppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtMTE1NS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMTc0LVxubmV0L2NvcmUvc2ttc2cuYzoxMTc1OnZvaWQgc2tfcHNvY2tfc3RhcnRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExNzYte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE4NC1cbm5ldC9jb3JlL3NrbXNnLmM6MTE4NTp2b2lkIHNrX3Bzb2NrX3N0b3Bfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExODYte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTI0MT1zdGF0aWMgdm9pZCBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTI2Ny1cbm5ldC9jb3JlL3NrbXNnLmM6MTI2ODp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjY5LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNzctXG5uZXQvY29yZS9za21zZy5jOjEyNzg6dm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMjc5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBwc29jayBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmb3IgdGhlc2UgcGFja2V0IHNvY2tldCBmdW5jdGlvbnMuIEkmIzM5O3ZlIGdvdCBhIGZldyBzdHJvbmcgY29udGVuZGVycyByaWdodCBvZmYgdGhlIGJhdDogYHNrX3Bzb2NrX2luaXRfc3RycGAsIGBza19wc29ja19zdGFydF9zdHJwYCwgYW5kIGBza19wc29ja19zdGFydF92ZXJkaWN0YC4gVGhvc2UgbG9vayBsaWtlIHByb21pc2luZyBzdGFydGluZyBwb2ludHMuIEJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIFRoZXkgYXJlIGNhbGxlZCBieSBgc2tfcHNvY2tfaGFuZGxlX3NrYmAgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gTm93LCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaXMgdHJpZ2dlcmVkIGZyb20gYHNrX3Bzb2NrX3N0cnBfcmVhZGAgYW5kIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLiAgYHNrX3Bzb2NrX3N0cnBfcmVhZGAgaXMgcmVnaXN0ZXJlZCBhcyBgLnJjdl9tc2dgIHdpdGhpbiBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gRnVydGhlcm1vcmUsIGBza19wc29ja192ZXJkaWN0X3JlY3ZgIGlzIGNhbGxlZCBieSBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YCwgd2hpY2ggaXMgcmVnaXN0ZXJlZCBhcyBgLnNrX2RhdGFfcmVhZHlgIGluIGBza19wc29ja19zdGFydF92ZXJkaWN0YC4KCkFscmlnaHQsIEkgdGhpbmsgSSYjMzk7bSBnZXR0aW5nIGEgY2xlYXJlciBwaWN0dXJlLiAgYHNrX3Bzb2NrX2luaXRfc3RycGAgYW5kIGBza19wc29ja19zdGFydF92ZXJkaWN0YCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3Igc2V0dGluZyB1cCB0aGUgZW50aXJlIHByb2Nlc3NpbmcgZmxvdy4gVGhleSYjMzk7cmUgd2hlcmUgdGhlIGNoYWluIGxpa2VseSBiZWdpbnMuCgpOb3csIHdoYXQgYWJvdXQgYHNrX3Bzb2NrX21zZ192ZXJkaWN0YD8gSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgcmVsZXZhbnQgdG8gdGhlIGBza19idWZmYCBwYXRoLiBBaCwgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBzcGVjaWZpYyB0byBgc2tfbXNnYCBzbyBpdCBwcm9iYWJseSB3b24mIzM5O3QgYmUgYXMgaW1wb3J0YW50IGZvciB3aGF0IEkmIzM5O20gbG9va2luZyBhdC4KClRpbWUgdG8gc3dpdGNoIGdlYXJzIGFuZCBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCYjMzk7cyBlbmFibGVkLiBBbHNvLCB0aGUgY29kZSBmb3IgdGhlIHJlbGF0ZWQgYHNrX21zZ2Agb3BlcmF0aW9ucyBzaG91bGQgYmUgaW4gYG5ldC9jb3JlL3NrbXNnLmNgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBNYWtlZmlsZWAgaW4gYG5ldC9jb3JlL2AgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYnVpbHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9NDM9b2JqLSQoQ09ORklHX0ZBSUxPVkVSKSAmIzQzOz0gZmFpbG92ZXIub1xubmV0L2NvcmUvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1OTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQ6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBTb2NrZXQgTWVzc2FnaW5nIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfTkVUX1NPQ0tfTVNHYC4gVGhhdCBtdWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgICptaWdodCogYWxzbyBiZSBhIHJlcXVpcmVtZW50LCBiZWNhdXNlIHRoYXQgYHNrX3Bzb2NrX3N0cnBfcmVhZGAgZnVuY3Rpb24gaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCwgd3JhcHBlZCBpbiBhbiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKWAgYmxvY2suIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhhdCYjMzk7cyBhY3R1YWxseSB0aGUgY2FzZS4gQmVzdCBiZXQgaXMgdG8ganVtcCBpbnRvIGBuZXQvY29yZS9za21zZy5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHNlZSBob3cgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgaXMgdXNlZCBhbmQgaWYgaXQmIzM5O3MgdHJ1bHkgZXNzZW50aWFsIGluIHRoaXMgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz01NDU9c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy01NzMtXG5uZXQvY29yZS9za21zZy5jOjU3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9za21zZy5jLTU3NS1cdHBzb2NrLVx1MDAzZWluZ3Jlc3NfYnl0ZXMgJiM0Mzs9IGxlbjtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEwNjg9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTA4NC1cbm5ldC9jb3JlL3NrbXNnLmM6MTA4NTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvY29yZS9za21zZy5jLTEwODYtc3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMjA0PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2RvbmVfc3RycChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTIwNi19XG5uZXQvY29yZS9za21zZy5jOjEyMDc6I2VuZGlmIC8qIENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUiAqL1xubmV0L2NvcmUvc2ttc2cuYy0xMjA4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIzMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgQlBGIFN0cmVhbSBQYXJzZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIHN0cmVhbSBwYXJzZXIgc3R1ZmYuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgaXMgYSBtdXN0LWhhdmUgZm9yIHRoZSBzdHJwYXJzZXIgcGF0aCwgbm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gTm93LCBhIHF1ZXN0aW9uIHBvcHMgaW50byBteSBoZWFkOiB3aGF0JiMzOTtzIHRoZSBkZWFsIHdpdGggYENPTkZJR19CUEZfU1lTQ0FMTGA/IEl0ICp1c3VhbGx5KiBnb2VzIGhhbmQtaW4taGFuZCB3aXRoIEJQRiBmdW5jdGlvbmFsaXR5IGluIGdlbmVyYWwsIHJpZ2h0PyBJIG5lZWQgdG8gY2xhcmlmeSBpZiBpdCYjMzk7cyBzdHJpY3RseSAqcmVxdWlyZWQqIGhlcmUgb3IganVzdCBnZW5lcmFsbHkgcmVjb21tZW5kZWQuIExldCYjMzk7cyBzZWUuLi5JIHNob3VsZCBjaGVjayB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMgdG8gc2VlIGhvdyBgTkVUX1NPQ0tfTVNHYCBhbmQgYEJQRl9TVFJFQU1fUEFSU0VSYCBhcmUgdGllZCB0b2dldGhlci4gRWl0aGVyIGBuZXQvY29yZS9LY29uZmlnYCBvciBqdXN0IHRoZSBtYWluIGBuZXQvS2NvbmZpZ2AgZmlsZSBzaG91bGQgaGF2ZSB0aGUgYW5zd2VycyBJIG5lZWQuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TT0NLX01TRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xuLS1cbm5ldC9LY29uZmlnLTQ3OC1cbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy00ODAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjMyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSGlkZGVuIEJvb2wgSW52ZXN0aWdhdGlvbjogTkVUXF9TT0NLXF9NU0cqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgdGhpcyBgTkVUX1NPQ0tfTVNHYCB2YXJpYWJsZSwgYW5kIGl0JiMzOTtzIGEgaGlkZGVuIGJvb2xlYW4uIE1lYW5pbmcgaXQmIzM5O3MgYmVpbmcgdXNlZCBpbnRlcm5hbGx5LCBwcm9iYWJseSBub3QgZGlyZWN0bHkgZXhwb3NlZCBmb3IgY29uZmlndXJhdGlvbiBvciB1c2VyIGlucHV0LiBNeSBndXQgc2F5cyB0aGlzIHdhc24mIzM5O3QgZGVjbGFyZWQgb24gYSB3aGltLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGhpZGRlbiBpbXBsaWVzIGl0JiMzOTtzIGJlaW5nIHNldCBvciB1bnNldCBiYXNlZCBvbiAqc29tZSogY29uZGl0aW9uLCAqc29tZSogb3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtIGlzIGRlY2lkaW5nIHdoZW4gdGhpcyBmbGFnIGlzIGFjdGl2ZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IHRyaWdnZXJpbmcgbWVjaGFuaXNtIGlzLiBXaGF0IGFyZSB0aGUgbG9naWNhbCBwYXRod2F5cyB0aGF0IGxlYWQgdG8gdGhpcyBib29sIGJlaW5nIG1vZGlmaWVkPyBJdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgbmV0IHNvY2tldCBtZXNzYWdlIGhhbmRsaW5nIGFjdHVhbGx5IHdvcmtzLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE5FVF9TT0NLX01TRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTMzLVx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbmtlcm5lbC9icGYvS2NvbmZpZzozNDpcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG5rZXJuZWwvYnBmL0tjb25maWctMzUtXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbi0tXG5uZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG4tLVxubmV0L0tjb25maWctMzY2LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnOjM2NzpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTM2OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg1LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY0L0tjb25maWc6Mzg2Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZy0zODctXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05My1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvaXB2Ni9LY29uZmlnOjk0Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjYvS2NvbmZpZy05NS1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xuLS1cbm5ldC90bHMvS2NvbmZpZy0xMC1cdHNlbGVjdCBDUllQVE9fR0NNXG5uZXQvdGxzL0tjb25maWc6MTE6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvdGxzL0tjb25maWctMTItXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgYXVkaWVuY2UgaXMgYW5vdGhlciBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5FVF9TT0NLX01TRyBQYXRod2F5KioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IEkgc2VlIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyB0cmlnZ2VyaW5nIGBORVRfU09DS19NU0dgLCBhbmQgYWxzbywgc3RyYW5nZWx5LCB0aGF0IGBCUEZfU1RSRUFNX1BBUlNFUmAgaXMgc2VsZWN0aW5nIGBORVRfU09DS19NU0dgIHRvby4gVGhhdOKAmXMgd29ydGggZGlnZ2luZyBpbnRvLiBHaXZlbiB0aGUgb3ZlcmxhcCwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgc2hhcmVkIGJlaGF2aW9yLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBgQlBGX1NUUkVBTV9QQVJTRVJgIGJlY2F1c2UgaXQgaXMgbGVzcyBjb252ZW50aW9uYWwgYW5kIGxpa2VseSB0aGUgc291cmNlIG9mIHRoZSBvdmVybGFwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgYm90aCBzZWVtIHRvIGJlIHBvaW50aW5nIHRvd2FyZCB0aGUgc2FtZSBuZXQgc29ja2V0IG1lc3NhZ2UgaGFuZGxpbmcuIFRoZXJlIGNvdWxkIGJlIHNvbWUgaW50ZXJlc3RpbmcgYXJjaGl0ZWN0dXJlIGNob2ljZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcbi0tXG5uZXQvS2NvbmZpZy0zNjAtXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkVuYWJsaW5nIEJQRiBTdHJlYW0gUGFyc2luZyBhbmQgU3lzY2FsbCBJbnRlZ3JhdGlvbioqCgpBbHJpZ2h0LCBzbyBpdCYjMzk7cyBsb29raW5nIGxpa2UgYEJQRl9TVFJFQU1fUEFSU0VSYCBpcyBleHBvc2VkIGFzIGEgYm9vbGVhbiBzZXR0aW5nLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuYWJsZSBib3RoIGBCUEZfU1RSRUFNX1BBUlNFUmAgYW5kIGBCUEZfU1lTQ0FMTGAgZnVuY3Rpb25hbGl0eS4gVGhlIGNvbWJpbmVkIHBvd2VyIGhlcmUgaXMgc2lnbmlmaWNhbnQgZm9yIHdoYXQgSSYjMzk7bSBhaW1pbmcgdG8gYWNoaWV2ZS4KCk5vdywgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgQlBGX1NZU0NBTExgIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgY3VycmVudCBzdGF0ZSBhbmQgYW55IHJlY2VudCBjaGFuZ2VzLiBJIG5lZWQgdG8gYXNzZXNzIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgb2YgdGhpcyBjb3VwbGluZywgYW5kIHdoYXQgaW1wYWN0IGl0IHdpbGwgaGF2ZSBvbiBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTIwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBTdHJlYW0gUGFyc2VyIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBCUEYgc3RyZWFtIHBhcnNlciBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgaW4gdGhlIGNvbnRleHQgb2YgZGlyZWN0IHN0cnBhcnNlciBTS19QQVNTIGNsb25lcy4gRnJvbSB0aGUgY29kZSwgSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cywgY29uZmlnLXdpc2UsIGludm9sdmVzIGVuYWJsaW5nIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAuCgpGdW5jdGlvbmFsbHksIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpbiB0aGUgZml4LiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gYSBnb29kIGZ1enppbmcgc3RyYXRlZ3kuCgpNeSBpbml0aWFsIHRob3VnaHRzIG9uIHdvcnRoZnV6emluZyBhcmUgcG9zaXRpdmUuIFdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCBzb21lIGdvb2QgdGVzdGluZyBvdXQgb2YgdGhpcy4KClJlZ2FyZGluZyBmb2N1cyBzeW1ib2xzLCBJIGluaXRpYWxseSBoYWQgYSBsaXN0OiBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAsIGFuZCBwb3RlbnRpYWxseSBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgICh0aG91Z2ggdGhhdCYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIGxpa2VseSBub3QgZ29pbmcgdG8gYmUgZmVhc2libGUpLiBXYWl0LCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgaXMgYWxzbyBzdGF0aWMuIFNvLCBJIG5lZWQgdG8gYWRqdXN0IHRoaXMgbGlzdCBhbmQga2VlcCB0aGluZ3MgcHJhY3RpY2FsLgoKV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIGBza19wc29ja19pbml0X3N0cnBgLCBgc2tfcHNvY2tfc3RhcnRfc3RycGAsIGFuZCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAuCgpUaGlua2luZyBhYm91dCB0aGUgY29ubmVjdGlvbiBvZiBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYCBhbmQgYHNrX3Bzb2NrX2luaXRfc3RycGAgKHRoYXQgbG9va3MgcHJvbWlzaW5nIHNpbmNlIGl0JiMzOTtzIGFuIGF0dGFjaCBjYWxsKS4gQWxzbywgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGlzIGNhbGxlZCBieSBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULgoKVGhlc2UgYXJlIGdvb2QgZW50cnkgcG9pbnRzIHRvIHRoZSBjb2RlLgoKQ2hlY2tpbmcgYWdhaW4sIGBza19wc29ja19pbml0X3N0cnBgIGFuZCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAgYXJlIGluZGVlZCB0aGUgYmVzdCBlbnRyeSBwb2ludHMgdG8gdGhlIG1vZGlmaWVkIGNvZGUgcGF0aC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSByaWdodCBzeW1ib2xzIHRvIHByaW9yaXRpemUuCgpBbHNvLCBgc2tfbXNnX3JlY3Ztc2dgIGlzIGxpa2VseSByZWxldmFudCBzaW5jZSBpdCByZWFkcyB0aG9zZSBxdWV1ZWQgbWVzc2FnZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX21zZ19yZWN2bXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTQxMT1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfbWVtY29weV9mcm9tX2l0ZXIpO1xubmV0L2NvcmUvc2ttc2cuYy00MTItXG5uZXQvY29yZS9za21zZy5jOjQxMzppbnQgX19za19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtNDE0LVx0XHQgICAgIGludCBsZW4sIGludCBmbGFncywgaW50ICpjb3BpZWRfZnJvbV9zZWxmKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNTAwLS8qIFJlY2VpdmUgc2tfbXNnIGZyb20gcHNvY2stXHUwMDNlaW5ncmVzc19tc2cgdG8gQG1zZy4gKi9cbm5ldC9jb3JlL3NrbXNnLmM6NTAxOmludCBza19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtNTAyLVx0XHQgICBpbnQgbGVuLCBpbnQgZmxhZ3MpXG5uZXQvY29yZS9za21zZy5jLTUwMy17XG5uZXQvY29yZS9za21zZy5jOjUwNDpcdHJldHVybiBfX3NrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzLCBOVUxMKTtcbm5ldC9jb3JlL3NrbXNnLmMtNTA1LX1cbm5ldC9jb3JlL3NrbXNnLmM6NTA2OkVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19yZWN2bXNnKTtcbm5ldC9jb3JlL3NrbXNnLmMtNTA3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA4NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBmb3IgTmV0d29yayBTb2NrZXQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBgc2tfbXNnX3JlY3Ztc2dgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHRoYXQmIzM5O3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVsc2UgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIGlzIHJlbGV2YW50LCBzcGVjaWZpY2FsbHkgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFzIHRob3NlIGFyZSB0aGUgb25lcyB3ZSBjYW4gdXNlLiBJIHF1aWNrbHkgcnVsZSBvdXQgYHNrX3Bzb2NrX21zZ192ZXJkaWN0YCBiZWNhdXNlIHRoYXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byB0aGUgKnNlbmQqIHBhdGggKGBza19tc2dgKSwgbm90IHRoZSByZWNlaXZlIHBhdGggKGBza19idWZmYCkgd2hpY2ggaXMgd2hhdCBJJiMzOTttIG1vcmUgaW50ZXJlc3RlZCBpbiBoZXJlLgoKVGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCBmb2N1c2VzIG9uIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYnV0IHRoYXQmIzM5O3MgY2FsbGVkIGluZGlyZWN0bHkuIExldCBtZSB0cmFjZSB0aGUgY2FsbHM6IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBpcyBmdXJ0aGVyIGNhbGxlZCBieSBgc2tfcHNvY2tfaGFuZGxlX3NrYmAsIHdoaWNoIGl0c2VsZiBpcyBpbnZva2VkIGJ5IGBza19wc29ja19iYWNrbG9nYCB3aGljaCBpcywgb2YgY291cnNlLCBhIHdvcmtxdWV1ZS4gVGhlbiBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAgZ2V0cyBjYWxsZWQgZnJvbSBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAuCgpTbywgdGhhdCB0ZWxscyBtZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIGVzc2VudGlhbGx5OiBgc2tfcHNvY2tfc3RycF9yZWFkYCAod2hpY2ggaXMgc3RhdGljLCBhbmQgcmVnaXN0ZXJlZCB0aHJvdWdoIGBza19wc29ja19pbml0X3N0cnBgKSwgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgKGFsc28gc3RhdGljLCByZWdpc3RlcmVkIHRocm91Z2ggYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgKSwgYW5kIGZpbmFsbHksIHRoZSB3b3JrcXVldWUgYHNrX3Bzb2NrX2JhY2tsb2dgLgoKR2l2ZW4gdGhlIGNvbnN0cmFpbnQgb24gbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGl0IHNlZW1zIHRoYXQgYHNrX3Bzb2NrX2luaXRfc3RycGAgYW5kIGBza19wc29ja19zdGFydF92ZXJkaWN0YCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIHRoZSBiZXN0IG9wdGlvbnMgZm9yIG91ciB1c2UtY2FzZSwgYXMgdGhleSByZWdpc3RlciB0aGUgc3RhdGljIGZ1bmN0aW9ucy4gQWRkaW5nIGBza19tc2dfcmVjdm1zZ2AgbWFrZXMgc2Vuc2UgdG9vLCBzaW5jZSBpdCBhY3R1YWxseSBjb25zdW1lcyB0aGUgbWVzc2FnZXMuIExldCBtZSBnbyBiYWNrIGFuZCBnaXZlIHRob3NlIHR3byBmdW5jdGlvbnMgYSBjbG9zZXIgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfaW5pdF9zdHJwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za21zZy5jPTExMzg9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTExNTMtXG5uZXQvY29yZS9za21zZy5jOjExNTQ6aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExNTUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA1OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgc2tfcHNvY2tfaW5pdF9zdHJwYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHNrX3Bzb2NrX2luaXRfc3RycGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcGlucG9pbnQgZXZlcnkgc2luZ2xlIGxvY2F0aW9uIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhpcyBwcm9qZWN0LiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBhbmQgdGhlIGNyaXRpY2FsIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiB0aGF0IEkmIzM5O2xsIG5lZWQgdG8ga25vdy4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gVW5kZXJzdGFuZGluZyAqd2h5KiBpdCBpcyBiZWluZyBjYWxsZWQgd2lsbCBjb21lIGFmdGVyIHRoYXQuIFRoZW4gSSBjYW4gc3RhcnQgdG8gZm9ybSBhbiBpZGVhIG9mIHdoeSB0aGlzIGZ1bmN0aW9uIGV4aXN0cyBhbmQgd2hhdCByb2xlIGl0IHBsYXlzIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRpbWUgdG8gZ2V0IHNlYXJjaGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfaW5pdF9zdHJwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jPTIxNz1zdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzA2LVx0XHRpZiAoc2tfaXNfdGNwKHNrKSlcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzA3Olx0XHRcdHJldCA9IHNrX3Bzb2NrX2luaXRfc3RycChzaywgcHNvY2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0zMDgtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzOTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgU29ja2V0IE1hcCBMaW5raW5nIFByb2Nlc3MqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aGlzIGV4ZWN1dGlvbiBwYXRoLCBhbmQgaXQgbG9va3MgbGlrZSBgc29ja19tYXBfbGlua2AgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUsIGJlaW5nIGNhbGxlZCBieSBgc29ja19tYXBfdXBkYXRlX2VsZW1gLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgc29ja19tYXBfbGlua2AgYmVjYXVzZSBJJiMzOTttIHNlZWluZyB0aGlzIGNhbGwgdG8gYHNrX3Bzb2NrX2luaXRfc3RycGAgY29uZGl0aW9uYWwgb24gdGhlcmUgYmVpbmcgYSBwYXJzZXIgcHJvZ3JhbSBhc3NvY2lhdGVkIHdpdGggdGhlIG1hcC4gVGhhdCBzdWdnZXN0cyBhIHBvdGVudGlhbGx5IGltcG9ydGFudCBpbnRlcmFjdGlvbiB3aXRoIHByb2dyYW0gbG9hZGluZyBvciBzb21lIHNvcnQgb2YgcHJlLXByb2Nlc3NpbmcuIFRoZSBmYWN0IHRoYXQgYHNrX3Bzb2NrX2luaXRfc3RycGAgaXMgY2FsbGVkLCBsaWtlbHkgbWVhbnMgd2UgbmVlZCB0byBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXJzZXIgcHJvZ3JhbSBhdCBtYXAgbGluayB0aW1lLiBMZXQmIzM5O3MgaGVhZCBzdHJhaWdodCBpbnRvIGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgc29ja19tYXBfbGlua2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGFuZCBwcmVjaXNlbHkgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhhdCBgc2tfcHNvY2tfaW5pdF9zdHJwYCBjYWxsLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29ja19tYXBfbGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0xOTc9c3RhdGljIHN0cnVjdCBza19wc29jayAqc29ja19tYXBfcHNvY2tfZ2V0X2NoZWNrZWQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE2LVxubmV0L2NvcmUvc29ja19tYXAuYzoyMTc6c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE4LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTQ3MD1zdGF0aWMgaW50IHNvY2tfbWFwX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGlkeCxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ4OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NDg5Olx0cmV0ID0gc29ja19tYXBfbGluayhtYXAsIHNrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDkwLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTk5Mz1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMTEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEwMTI6XHRyZXQgPSBzb2NrX21hcF9saW5rKG1hcCwgc2spO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMDEzLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE3Mzc9c3RydWN0IHNvY2ttYXBfbGluayB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzQxLVxubmV0L2NvcmUvc29ja19tYXAuYzoxNzQyOnN0YXRpYyB2b2lkIHNvY2tfbWFwX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDMte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc1OC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc1OTpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfZGV0YWNoKHN0cnVjdCBicGZfbGluayAqbGluaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc2MC17XG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NjE6XHRzb2NrX21hcF9saW5rX3JlbGVhc2UobGluayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NjItXHRyZXR1cm4gMDtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NjQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NjU6c3RhdGljIHZvaWQgc29ja19tYXBfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc2Ni17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNzczLSAqL1xubmV0L2NvcmUvc29ja19tYXAuYzoxNzc0OnN0YXRpYyBpbnQgc29ja19tYXBfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NzUtXHRcdFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4MzMtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4MzQ6c3RhdGljIHUzMiBzb2NrX21hcF9saW5rX2dldF9tYXBfaWQoY29uc3Qgc3RydWN0IHNvY2ttYXBfbGluayAqc29ja21hcF9saW5rKVxubmV0L2NvcmUvc29ja19tYXAuYy0xODM1LXtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NDQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NDU6c3RhdGljIGludCBzb2NrX21hcF9saW5rX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NDYtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NDgtXHRjb25zdCBzdHJ1Y3Qgc29ja21hcF9saW5rICpzb2NrbWFwX2xpbmsgPSBjb250YWluZXJfb2YobGluaywgc3RydWN0IHNvY2ttYXBfbGluaywgbGluayk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NDk6XHR1MzIgbWFwX2lkID0gc29ja19tYXBfbGlua19nZXRfbWFwX2lkKHNvY2ttYXBfbGluayk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NTAtXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xODU1LVxubmV0L2NvcmUvc29ja19tYXAuYzoxODU2OnN0YXRpYyB2b2lkIHNvY2tfbWFwX2xpbmtfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxubmV0L2NvcmUvc29ja19tYXAuYy0xODU3LVx0XHRcdFx0ICAgICAgc3RydWN0IHNlcV9maWxlICpzZXEpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xODU5LVx0Y29uc3Qgc3RydWN0IHNvY2ttYXBfbGluayAqc29ja21hcF9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBzb2NrbWFwX2xpbmssIGxpbmspO1xubmV0L2NvcmUvc29ja19tYXAuYzoxODYwOlx0dTMyIG1hcF9pZCA9IHNvY2tfbWFwX2xpbmtfZ2V0X21hcF9pZChzb2NrbWFwX2xpbmspO1xubmV0L2NvcmUvc29ja19tYXAuYy0xODYxLVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg2NS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg2NjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBzb2NrX21hcF9saW5rX29wcyA9IHtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg2NzpcdC5yZWxlYXNlID0gc29ja19tYXBfbGlua19yZWxlYXNlLFxubmV0L2NvcmUvc29ja19tYXAuYzoxODY4Olx0LmRlYWxsb2MgPSBzb2NrX21hcF9saW5rX2RlYWxsb2MsXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4Njk6XHQuZGV0YWNoID0gc29ja19tYXBfbGlua19kZXRhY2gsXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NzA6XHQudXBkYXRlX3Byb2cgPSBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nLFxubmV0L2NvcmUvc29ja19tYXAuYzoxODcxOlx0LmZpbGxfbGlua19pbmZvID0gc29ja19tYXBfbGlua19maWxsX2luZm8sXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NzI6XHQuc2hvd19mZGluZm8gPSBzb2NrX21hcF9saW5rX3Nob3dfZmRpbmZvLFxubmV0L2NvcmUvc29ja19tYXAuYy0xODczLX07XG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NzU6aW50IHNvY2tfbWFwX2xpbmtfY3JlYXRlKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzYte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTkwMC1cdGF0dGFjaF90eXBlID0gYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTkwMTpcdGJwZl9saW5rX2luaXQoXHUwMDI2c29ja21hcF9saW5rLVx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfU09DS01BUCwgXHUwMDI2c29ja19tYXBfbGlua19vcHMsIHByb2csXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MDItXHRcdCAgICAgIGF0dGFjaF90eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMTQKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgRnV6emluZyBFZmZvcnRzKioKCk9rYXksIHNvIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgdGhpcyBCUEYgY29kZS4gSXQgbG9va3MgbGlrZSBgc29ja19tYXBfdXBkYXRlX2VsZW1gIGFuZCBgc29ja19oYXNoX3VwZGF0ZV9lbGVtYCBhcmUgdGhlIHRvcC1sZXZlbCBjYWxscy4gSG93ZXZlciwgdGhleSBhcmUgZnVuZGFtZW50YWxseSBtYXAgb3BlcmF0aW9ucy4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgZnV6emluZyBzaG91bGQgY29uY2VudHJhdGUgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIEJQRiBtYXAgdXBkYXRlcyBhbmQgdGhlIHNvY2tldCBvcGVyYXRpb25zIHRoZW1zZWx2ZXMuCgpTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBgc2tfcHNvY2tfaW5pdF9zdHJwYCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLiBUaG9zZSBsb29rIGxpa2UgcHJvbWlzaW5nIHRhcmdldHMuIEFsc28sIGBza19tc2dfcmVjdm1zZ2AgaXMgZGVmaW5pdGVseSB3b3J0aCBzb21lIGF0dGVudGlvbi4KCkp1c3QgdG8gYmUgc3VyZSwgbGV0IG1lIGRvdWJsZS1jaGVjayBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLiBOb3BlLCB0aGF0JiMzOTtzIHN0YXRpYy4gU2FtZSB3aXRoIGBza19wc29ja19oYW5kbGVfc2tiYCBhbmQgYHNrX3Bzb2NrX2JhY2tsb2dgLiBUaG9zZSB3b24mIzM5O3Qgd29yayBhcyBkaXJlY3QgZW50cnkgcG9pbnRzLgoKQWxyaWdodCwgSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG5ldC9jb3JlL3NrbXNnLmNgLiBUaGF0IGZpbGUgc2hvdWxkIGNvbnRhaW4gc29tZSB1c2VmdWwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgU0tNU0cgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOyBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2ttc2cuYz0xMj1zdGF0aWMgYm9vbCBza19tc2dfdHJ5X2NvYWxlc2NlX29rKHN0cnVjdCBza19tc2cgKm1zZywgaW50IGVsZW1fZmlyc3RfY29hbGVzY2UpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yNS1cbm5ldC9jb3JlL3NrbXNnLmM6MjY6aW50IHNrX21zZ19hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGxlbixcbm5ldC9jb3JlL3NrbXNnLmMtMjctXHRcdCBpbnQgZWxlbV9maXJzdF9jb2FsZXNjZSlcbi0tXG5uZXQvY29yZS9za21zZy5jPTg1PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19hbGxvYyk7XG5uZXQvY29yZS9za21zZy5jLTg2LVxubmV0L2NvcmUvc2ttc2cuYzo4NzppbnQgc2tfbXNnX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqZHN0LCBzdHJ1Y3Qgc2tfbXNnICpzcmMsXG5uZXQvY29yZS9za21zZy5jLTg4LVx0XHQgdTMyIG9mZiwgdTMyIGxlbilcbi0tXG5uZXQvY29yZS9za21zZy5jPTEzNj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfY2xvbmUpO1xubmV0L2NvcmUvc2ttc2cuYy0xMzctXG5uZXQvY29yZS9za21zZy5jOjEzODp2b2lkIHNrX21zZ19yZXR1cm5femVybyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxubmV0L2NvcmUvc2ttc2cuYy0xMzkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTYwPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19yZXR1cm5femVybyk7XG5uZXQvY29yZS9za21zZy5jLTE2MS1cbm5ldC9jb3JlL3NrbXNnLmM6MTYyOnZvaWQgc2tfbXNnX3JldHVybihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxubmV0L2NvcmUvc2ttc2cuYy0xNjMte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTk0PXN0YXRpYyBpbnQgX19za19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGksXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yMTEtXG5uZXQvY29yZS9za21zZy5jOjIxMjppbnQgc2tfbXNnX2ZyZWVfbm9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2cpXG5uZXQvY29yZS9za21zZy5jLTIxMy17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0yMTY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2ZyZWVfbm9jaGFyZ2UpO1xubmV0L2NvcmUvc2ttc2cuYy0yMTctXG5uZXQvY29yZS9za21zZy5jOjIxODppbnQgc2tfbXNnX2ZyZWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2cpXG5uZXQvY29yZS9za21zZy5jLTIxOS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0yMjQ9c3RhdGljIHZvaWQgX19za19tc2dfZnJlZV9wYXJ0aWFsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMjUxLVxubmV0L2NvcmUvc2ttc2cuYzoyNTI6dm9pZCBza19tc2dfZnJlZV9wYXJ0aWFsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYnl0ZXMpXG5uZXQvY29yZS9za21zZy5jLTI1My17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0yNTY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2ZyZWVfcGFydGlhbCk7XG5uZXQvY29yZS9za21zZy5jLTI1Ny1cbm5ldC9jb3JlL3NrbXNnLmM6MjU4OnZvaWQgc2tfbXNnX2ZyZWVfcGFydGlhbF9ub2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcbm5ldC9jb3JlL3NrbXNnLmMtMjU5LVx0XHRcdFx0ICB1MzIgYnl0ZXMpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0yNjMtXG5uZXQvY29yZS9za21zZy5jOjI2NDp2b2lkIHNrX21zZ190cmltKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuKVxubmV0L2NvcmUvc2ttc2cuYy0yNjUte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MzEwPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ190cmltKTtcbm5ldC9jb3JlL3NrbXNnLmMtMzExLVxubmV0L2NvcmUvc2ttc2cuYzozMTI6aW50IHNrX21zZ196ZXJvY29weV9mcm9tX2l0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG5uZXQvY29yZS9za21zZy5jLTMxMy1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcbi0tXG5uZXQvY29yZS9za21zZy5jPTM2Nz1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfemVyb2NvcHlfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL3NrbXNnLmMtMzY4LVxubmV0L2NvcmUvc2ttc2cuYzozNjk6aW50IHNrX21zZ19tZW1jb3B5X2Zyb21faXRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcbm5ldC9jb3JlL3NrbXNnLmMtMzcwLVx0XHRcdCAgICAgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYnl0ZXMpXG4tLVxubmV0L2NvcmUvc2ttc2cuYz00MTE9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX21lbWNvcHlfZnJvbV9pdGVyKTtcbm5ldC9jb3JlL3NrbXNnLmMtNDEyLVxubmV0L2NvcmUvc2ttc2cuYzo0MTM6aW50IF9fc2tfbXNnX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvY29yZS9za21zZy5jLTQxNC1cdFx0ICAgICBpbnQgbGVuLCBpbnQgZmxhZ3MsIGludCAqY29waWVkX2Zyb21fc2VsZilcbi0tXG5uZXQvY29yZS9za21zZy5jLTUwMC0vKiBSZWNlaXZlIHNrX21zZyBmcm9tIHBzb2NrLVx1MDAzZWluZ3Jlc3NfbXNnIHRvIEBtc2cuICovXG5uZXQvY29yZS9za21zZy5jOjUwMTppbnQgc2tfbXNnX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvY29yZS9za21zZy5jLTUwMi1cdFx0ICAgaW50IGxlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmM9NTA2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19yZWN2bXNnKTtcbm5ldC9jb3JlL3NrbXNnLmMtNTA3LVxubmV0L2NvcmUvc2ttc2cuYzo1MDg6Ym9vbCBza19tc2dfaXNfcmVhZGFibGUoc3RydWN0IHNvY2sgKnNrKVxubmV0L2NvcmUvc2ttc2cuYy01MDkte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9ODUxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2xpbmtfZGVzdHJveShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtODYwLVxubmV0L2NvcmUvc2ttc2cuYzo4NjE6dm9pZCBza19wc29ja19zdG9wKHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTg2Mi17XG4tLVxubmV0L2NvcmUvc2ttc2cuYz04NzE9c3RhdGljIHZvaWQgc2tfcHNvY2tfZGVzdHJveShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L2NvcmUvc2ttc2cuYy04OTUtXG5uZXQvY29yZS9za21zZy5jOjg5Njp2b2lkIHNrX3Bzb2NrX2Ryb3Aoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy04OTcte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9OTE0PXN0YXRpYyBpbnQgc2tfcHNvY2tfbWFwX3ZlcmQoaW50IHZlcmRpY3QsIGJvb2wgcmVkaXIpXG4tLVxubmV0L2NvcmUvc2ttc2cuYy05MjYtXG5uZXQvY29yZS9za21zZy5jOjkyNzppbnQgc2tfcHNvY2tfbXNnX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2NvcmUvc2ttc2cuYy05MjgtXHRcdFx0IHN0cnVjdCBza19tc2cgKm1zZylcbi0tXG5uZXQvY29yZS9za21zZy5jPTExMzg9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTExNTMtXG5uZXQvY29yZS9za21zZy5jOjExNTQ6aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXG5uZXQvY29yZS9za21zZy5jLTExNTUte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmMtMTE3NC1cbm5ldC9jb3JlL3NrbXNnLmM6MTE3NTp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMTc2LXtcbi0tXG5uZXQvY29yZS9za21zZy5jLTExODQtXG5uZXQvY29yZS9za21zZy5jOjExODU6dm9pZCBza19wc29ja19zdG9wX3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxubmV0L2NvcmUvc2ttc2cuYy0xMTg2LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTEyNDE9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyNjctXG5uZXQvY29yZS9za21zZy5jOjEyNjg6dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtMTI2OS17XG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMjc3LVxubmV0L2NvcmUvc2ttc2cuYzoxMjc4OnZvaWQgc2tfcHNvY2tfc3RvcF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbm5ldC9jb3JlL3NrbXNnLmMtMTI3OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBTb2NrZXQgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAsIGFuZCBgc2tfbXNnX3JlY3Ztc2dgIGxvb2sgcHJvbWlzaW5nLiBUaGVzZSBzZWVtIGxpa2UgdGhleSYjMzk7cmUgaW4gdGhlIHJpZ2h0IGJhbGxwYXJrIGZvciB3aGF0IEkmIzM5O20gdHJ5aW5nIHRvIGFjaGlldmUuIFRoZXkgYWxpZ24gd2l0aCB0aGUgZ2VuZXJhbCBmbG93IEkgd2FzIGV4cGVjdGluZy4KCk5vdywgYSBzbGlnaHQgcGF1c2UgZm9yIHRob3VnaHQuIFdhc24mIzM5O3QgaXQgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgIHRoYXQgd2FzIGFsc28gY2FsbGVkIGZyb20gYHNvY2tfbWFwX2xpbmtgPyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUgY2hlY2sgdGhhdC4gSXQgd291bGQgYmUgZ29vZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNhbGwgZ3JhcGggdG8gYXZvaWQgYW55IHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLiBMZXQmIzM5O3MgZGlnIGEgbGl0dGxlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfcHNvY2tfc3RhcnRfc3RycCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29ja19tYXAuYz0yMTc9c3RhdGljIGludCBzb2NrX21hcF9saW5rKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTMxNC1cdFx0fVxubmV0L2NvcmUvc29ja19tYXAuYzozMTU6XHRcdHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc2ssIHBzb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzE2LVx0fSBlbHNlIGlmICghc3RyZWFtX3BhcnNlciBcdTAwMjZcdTAwMjYgc3RyZWFtX3ZlcmRpY3QgXHUwMDI2XHUwMDI2ICFwc29jay1cdTAwM2VzYXZlZF9kYXRhX3JlYWR5KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzg3CgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU29ja2V0IFByb2Nlc3NpbmcgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0cmFjZWQgdGhlIGV4ZWN1dGlvbiBmbG93IHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC4gSSBzZWUgdGhhdCBgc2tfcHNvY2tfc3RhcnRfc3RycGAgaXMgaW5kZWVkIGNhbGxlZCBmcm9tIGBzb2NrX21hcF9saW5rYCwgYXMgSSBzdXNwZWN0ZWQuIFRoYXQgbWVhbnMgdGhlIGtleSBzZXR1cCBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLiBUaGUgYWN0dWFsIGRhdGEgcGF0aCBpcyB0cmlnZ2VyZWQgYnkgdGhlIHNvY2tldCYjMzk7cyByZWNlaXZlIG1lY2hhbmlzbSwgd2hpY2ggdGhlbiBnb2VzIHRocm91Z2ggZWl0aGVyIGBzdHJwYXJzZXJgIG9yIGBza19kYXRhX3JlYWR5YC4gU2luY2Ugd2UgY2FuJiMzOTt0IHplcm8gaW4gZGlyZWN0bHkgb24gdGhlIHN0YXRpYyBkYXRhIHBhdGggZnVuY3Rpb25zLCBJIHRoaW5rIHRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaCBpcyB0byBmb2N1cyBvbiB0aG9zZSBzZXR1cCBmdW5jdGlvbnMgSSBtZW50aW9uZWQsIHBsdXMgYHNrX21zZ19yZWN2bXNnYC4gQWRkaW5nIGluIGBzb2NrX21hcF91cGRhdGVfZWxlbWAgYW5kIGBzb2NrX2hhc2hfdXBkYXRlX2VsZW1gIGlzIHRlbXB0aW5nLCBidXQgdGhleSYjMzk7cmUgbWFwIG9wZXJhdGlvbnMgYW5kIG1pZ2h0IGludHJvZHVjZSB1bm5lY2Vzc2FyeSBub2lzZS4gSSYjMzk7bGwgc3RpY2sgdG8gdGhlIGNvcmUgc2V0dXAgZnVuY3Rpb25zIGFuZCBgc2tfbXNnX3JlY3Ztc2dgIHRvIGtlZXAgaXQgY29uY2lzZSBhbmQgZm9jdXNlZC4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCB3ZSBoYXZlIGBCUEZfU1lTQ0FMTGAsIGBCUEZfU1RSRUFNX1BBUlNFUmAsIGFuZCBgTkVUX1NPQ0tfTVNHYCwgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgYm90aCBvZiB0aGUgZmlyc3QgdHdvLiBTbywgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9TVFJFQU1fUEFSU0VSYCBhcmUgc3VmZmljaWVudCB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLgoKVGhlIHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIGFsdGVycyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgYW5kIGBza19wc29ja19za2JfaW5ncmVzc2AgdG8gaGFuZGxlIHNpdHVhdGlvbnMgd2hlcmUgYHNrX2ZvcndhcmRfYWxsb2NgIGlzIGluc3VmZmljaWVudCBkdXJpbmcgcmVjZWl2ZSBvd25lcnNoaXAgYXNzaWdubWVudCB3aGVuIGEgZGlyZWN0IGBzdHJwYXJzZXJgIFNLX1BBU1MgY2xvbmUgaXMgaW52b2x2ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIHNvY2ttYXAvc2ttc2cgQlBGIGluZnJhc3RydWN0dXJlLiBTbyB0aGUgY29kZSBiZWluZyBjaGFuZ2VkIGlzIHJlYWNoZWQgd2hlbiBhIEJQRiBzb2NrbWFwIHdpdGggYSBzdHJlYW0gcGFyc2VyIGFuZCB2ZXJkaWN0IHByb2dyYW0gYXJlIGF0dGFjaGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza19wc29ja19pbml0X3N0cnAmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RhcnRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF92ZXJkaWN0JiMzNDssCiAgICAmIzM0O3NrX21zZ19yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCB0byBoYW5kbGUgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgd2hlbiBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXAgdG8gYSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgY2xvbmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc29ja21hcC9za21zZyBCUEYgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHNvY2ttYXAgd2l0aCBhIHN0cmVhbSBwYXJzZXIgYW5kIHZlcmRpY3QgcHJvZ3JhbSBhdHRhY2hlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza19wc29ja19pbml0X3N0cnAmIzM0OywKICAgICYjMzQ7c2tfcHNvY2tfc3RhcnRfc3RycCYjMzQ7LAogICAgJiMzNDtza19wc29ja19zdGFydF92ZXJkaWN0JiMzNDssCiAgICAmIzM0O3NrX21zZ19yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCB0byBoYW5kbGUgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgd2hlbiBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXAgdG8gYSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgY2xvbmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc29ja21hcC9za21zZyBCUEYgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHNvY2ttYXAgd2l0aCBhIHN0cmVhbSBwYXJzZXIgYW5kIHZlcmRpY3QgcHJvZ3JhbSBhdHRhY2hlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE3OjI4LjA4MjIzNDEwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTA4MzgyMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX3Bzb2NrX2luaXRfc3RycFwiLFxuICAgIFwic2tfcHNvY2tfc3RhcnRfc3RycFwiLFxuICAgIFwic2tfcHNvY2tfc3RhcnRfdmVyZGljdFwiLFxuICAgIFwic2tfbXNnX3JlY3Ztc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgYW5kIGBza19wc29ja19za2JfaW5ncmVzc2AgdG8gaGFuZGxlIGBza19mb3J3YXJkX2FsbG9jYCBkZWZpY2l0IHdoZW4gYXNzaWduaW5nIHJlY2VpdmUgb3duZXJzaGlwIHRvIGEgZGlyZWN0IHN0cnBhcnNlciBTS19QQVNTIGNsb25lLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHNvY2ttYXAvc2ttc2cgQlBGIGluZnJhc3RydWN0dXJlLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIEJQRiBzb2NrbWFwIHdpdGggYSBzdHJlYW0gcGFyc2VyIGFuZCB2ZXJkaWN0IHByb2dyYW0gYXR0YWNoZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE3OjI4LjA4MjIzOTQ2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzMjQ5NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWZhYzkxYmIzMzkzZWRlZmY5MDJiZTI0ZTY1Y2FhNjJmNjczZWJjM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyIDExOjE3OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXFxuaW5kZXggMjUyMWI2NDNmYTA1ZC4uY2U1YWQ4MTYwMjgyOCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9za21zZy5jXFxuKysrIGIvbmV0L2NvcmUvc2ttc2cuY1xcbkBAIC01ODYsNyArNTg2LDggQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpO1xcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKTtcXG4gXFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0dTMyIG9mZiwgdTMyIGxlbilcXG5AQCAtNTk1LDEyICs1OTYsOSBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBza19tc2cgKm1zZztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdC8qIElmIHdlIGFyZSByZWNlaXZpbmcgb24gdGhlIHNhbWUgc29jayBza2ItXFx1MDAzZXNrIGlzIGFscmVhZHkgYXNzaWduZWQsXFxuLVxcdCAqIHNraXAgbWVtb3J5IGFjY291bnRpbmcgYW5kIG93bmVyIHRyYW5zaXRpb24gc2VlaW5nIGl0IGFscmVhZHkgc2V0XFxuLVxcdCAqIGNvcnJlY3RseS5cXG4tXFx0ICovXFxuIFxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZXNrID09IHNrKSlcXG4tXFx0XFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUpO1xcbitcXHRcXHRyZXR1cm4gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgdHJ1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHNrYl9icGZfc3RycGFyc2VyKHNrYikpO1xcbiBcXHRtc2cgPSBza19wc29ja19jcmVhdGVfaW5ncmVzc19tc2coc2ssIHNrYik7XFxuIFxcdGlmICghbXNnKVxcbiBcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG5AQCAtNjE4LDEyICs2MTYsMTQgQEAgc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi0vKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBvZiB0aGUgc29ja2V0IGFscmVhZHkgYXNzaWduZWQgdG8gdGhlXFxuLSAqIHNrYi4gSW4gdGhpcyBjYXNlIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIG1lbW9yeSBsaW1pdHMgb3Igc2tiX3NldF9vd25lcl9yXFxuLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS5cXG4rLyogUHV0cyBhbiBza2Igb24gdGhlIGluZ3Jlc3MgcXVldWUgZm9yIHBzb2NrLVxcdTAwM2Vzay5cXG4rICpcXG4rICogQmVmb3JlIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byBhIGRpcmVjdCBzdHJwYXJzZXIgU0tfUEFTUyBjbG9uZSxcXG4rICogc2V0dGxlIGFueSBleGlzdGluZyBza19mb3J3YXJkX2FsbG9jIGRlZmljaXQgZnJvbSBlYXJsaWVyIGNsb25lIGNoYXJnZXMuXFxuICAqL1xcbiBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKVxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgYm9vbCBzZXR0bGVfZndkX2FsbG9jKVxcbiB7XFxuIFxcdHN0cnVjdCBza19tc2cgKm1zZyA9IGFsbG9jX3NrX21zZyhHRlBfQVRPTUlDKTtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gcHNvY2stXFx1MDAzZXNrO1xcbkBAIC02MzEsNiArNjMxLDEzIEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiXFxuIFxcbiBcXHRpZiAodW5saWtlbHkoIW1zZykpXFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXG4rXFx0aWYgKHNldHRsZV9md2RfYWxsb2MgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApKSB7XFxuK1xcdFxcdGtmcmVlKG1zZyk7XFxuK1xcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXHR9XFxuK1xcbiBcXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XFxuIFxcbiBcXHQvKiBUaGlzIGlzIHVzZWQgaW4gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxcbkBAIC0xMDE3LDYgKzEwMjQsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSB7XFxuK1xcdFxcdFxcdGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyA9IGZhbHNlO1xcbitcXG4gXFx0XFx0XFx0bGVuID0gc2tiLVxcdTAwM2VsZW47XFxuIFxcdFxcdFxcdG9mZiA9IDA7XFxuIFxcdFxcdFxcdGlmIChza2JfYnBmX3N0cnBhcnNlcihza2IpKSB7XFxuQEAgLTEwMjQsOCArMTAzMywxMCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdFxcdFxcdFxcdG9mZiA9IHN0bS1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRcXHRcXHRcXHRsZW4gPSBzdG0tXFx1MDAzZWZ1bGxfbGVuO1xcbitcXHRcXHRcXHRcXHRzZXR0bGVfZndkX2FsbG9jID0gdHJ1ZTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRlcnIgPSBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCBmYWxzZSk7XFxuK1xcdFxcdFxcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlLCBzZXR0bGVfZndkX2FsbG9jKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX2xvY2spO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXFxuaW5kZXggMWQ3MjMxNzI4ZWFmZC4uYzdhZDIxZDBiYmY0OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jXFxuQEAgLTEsNSArMSw5IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICNpbmNsdWRlIFxcdTAwM2NlcnJvci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5ldF9kaWFnLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRsaW5rLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvY2tfZGlhZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0aW5ldC90Y3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInNvY2ttYXBfaGVscGVycy5oXFxcIlxcbkBAIC00NjAsNiArNDY0LDE3MSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpXFxuIFxcdHRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApO1xcbiB9XFxuIFxcbisvKiBSZWFkIHNrX2ZvcndhcmRfYWxsb2MgdGhyb3VnaCBpbmV0X2RpYWcgbWVtaW5mby4gKi9cXG4rc3RhdGljIGludCBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhpbnQgc29jaywgaW50ICpmd2RfYWxsb2MpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgbG9jYWwgPSB7fSwgcGVlciA9IHt9O1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gKmxvY2FsX2luLCAqcGVlcl9pbjtcXG4rXFx0c29ja2xlbl90IGFkZHJfbGVuID0gc2l6ZW9mKGxvY2FsKTtcXG4rXFx0Y2hhciBidWZbMTAyNF07XFxuK1xcdHN0cnVjdCB7XFxuK1xcdFxcdHN0cnVjdCBubG1zZ2hkciBubGg7XFxuK1xcdFxcdHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyIHJlcTtcXG4rXFx0fSByZXEgPSB7XFxuK1xcdFxcdC5ubGggPSB7XFxuK1xcdFxcdFxcdC5ubG1zZ19sZW4gPSBzaXplb2YocmVxKSxcXG4rXFx0XFx0XFx0Lm5sbXNnX3R5cGUgPSBTT0NLX0RJQUdfQllfRkFNSUxZLFxcbitcXHRcXHRcXHQubmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNULFxcbitcXHRcXHRcXHQubmxtc2dfc2VxID0gMSxcXG4rXFx0XFx0fSxcXG4rXFx0XFx0LnJlcSA9IHtcXG4rXFx0XFx0XFx0LnNkaWFnX2ZhbWlseSA9IEFGX0lORVQsXFxuK1xcdFxcdFxcdC5zZGlhZ19wcm90b2NvbCA9IElQUFJPVE9fVENQLFxcbitcXHRcXHRcXHQuaWRpYWdfZXh0ID0gMSBcXHUwMDNjXFx1MDAzYyAoSU5FVF9ESUFHX01FTUlORk8gLSAxKSxcXG4rXFx0XFx0XFx0LmlkaWFnX3N0YXRlcyA9IH4wVSxcXG4rXFx0XFx0XFx0LmlkLmlkaWFnX2Nvb2tpZSA9IHtcXG4rXFx0XFx0XFx0XFx0SU5FVF9ESUFHX05PQ09PS0lFLFxcbitcXHRcXHRcXHRcXHRJTkVUX0RJQUdfTk9DT09LSUUsXFxuK1xcdFxcdFxcdH0sXFxuK1xcdFxcdH0sXFxuK1xcdH07XFxuK1xcdGludCBkaWFnX2ZkLCByZXQsIGVyciA9IC1FTk9FTlQ7XFxuK1xcbitcXHRpZiAoZ2V0c29ja25hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZsb2NhbCwgXFx1MDAyNmFkZHJfbGVuKSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFx0YWRkcl9sZW4gPSBzaXplb2YocGVlcik7XFxuK1xcdGlmIChnZXRwZWVybmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNnBlZXIsIFxcdTAwMjZhZGRyX2xlbikpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRsb2NhbF9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilcXHUwMDI2bG9jYWw7XFxuK1xcdHBlZXJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopXFx1MDAyNnBlZXI7XFxuK1xcdHJlcS5yZXEuaWQuaWRpYWdfc3BvcnQgPSBsb2NhbF9pbi1cXHUwMDNlc2luX3BvcnQ7XFxuK1xcdHJlcS5yZXEuaWQuaWRpYWdfZHBvcnQgPSBwZWVyX2luLVxcdTAwM2VzaW5fcG9ydDtcXG4rXFx0cmVxLnJlcS5pZC5pZGlhZ19zcmNbMF0gPSBsb2NhbF9pbi1cXHUwMDNlc2luX2FkZHIuc19hZGRyO1xcbitcXHRyZXEucmVxLmlkLmlkaWFnX2RzdFswXSA9IHBlZXJfaW4tXFx1MDAzZXNpbl9hZGRyLnNfYWRkcjtcXG4rXFxuK1xcdGRpYWdfZmQgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcgfCBTT0NLX0NMT0VYRUMsXFxuK1xcdFxcdFxcdCBORVRMSU5LX1NPQ0tfRElBRyk7XFxuK1xcdGlmIChkaWFnX2ZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdHJldCA9IHNlbmQoZGlhZ19mZCwgXFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRlcnIgPSAtZXJybm87XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGlmIChyZXQgIT0gc2l6ZW9mKHJlcSkpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTztcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IHJlY3YoZGlhZ19mZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGVyciA9IC1lcnJubztcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopYnVmO1xcbitcXHQgICAgIE5MTVNHX09LKG5saCwgcmV0KTsgbmxoID0gTkxNU0dfTkVYVChubGgsIHJldCkpIHtcXG4rXFx0XFx0c3RydWN0IGluZXRfZGlhZ19tc2cgKm1zZyA9IE5MTVNHX0RBVEEobmxoKTtcXG4rXFx0XFx0c3RydWN0IHJ0YXR0ciAqYXR0cjtcXG4rXFx0XFx0aW50IGxlbjtcXG4rXFxuK1xcdFxcdGlmIChubGgtXFx1MDAzZW5sbXNnX3R5cGUgPT0gTkxNU0dfRVJST1IpIHtcXG4rXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKG5saC1cXHUwMDNlbmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGxlbiA9IG5saC1cXHUwMDNlbmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqbXNnKSk7XFxuK1xcdFxcdGZvciAoYXR0ciA9IChzdHJ1Y3QgcnRhdHRyICopKG1zZyArIDEpOyBSVEFfT0soYXR0ciwgbGVuKTtcXG4rXFx0XFx0ICAgICBhdHRyID0gUlRBX05FWFQoYXR0ciwgbGVuKSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9kaWFnX21lbWluZm8gKm1pbmZvO1xcbitcXG4rXFx0XFx0XFx0aWYgKGF0dHItXFx1MDAzZXJ0YV90eXBlICE9IElORVRfRElBR19NRU1JTkZPKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0bWluZm8gPSBSVEFfREFUQShhdHRyKTtcXG4rXFx0XFx0XFx0KmZ3ZF9hbGxvYyA9IChfX3MzMiltaW5mby1cXHUwMDNlaWRpYWdfZm1lbTtcXG4rXFx0XFx0XFx0ZXJyID0gMDtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRjbG9zZShkaWFnX2ZkKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLyogVGVzdCBzdHJwYXJzZXIgU0tfUEFTUyBkZWxpdmVyeSB0byB0aGUgc2FtZSBzb2NrZXQuICovXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2Modm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3N0cnAgKnN0cnAgPSBOVUxMO1xcbitcXHRjaGFyIHNuZFs0ICogMTAyNF07XFxuK1xcdGludCBjID0gLTEsIHAgPSAtMTtcXG4rXFx0aW50IGZ3ZF9hbGxvYztcXG4rXFx0aW50IHNuZGJ1ZiA9IHNpemVvZihzbmQpO1xcbitcXHRpbnQgemVybyA9IDA7XFxuK1xcdGNoYXIgcmN2O1xcbitcXHRpbnQgc2VudCwgcmVjdmQ7XFxuK1xcdGludCBtYXA7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRtZW1zZXQoc25kLCAweGE1LCBzaXplb2Yoc25kKSk7XFxuK1xcbitcXHRzdHJwID0gdGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHN0cnAsIFxcXCJ0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtYXAgPSBicGZfbWFwX19mZChzdHJwLVxcdTAwM2VtYXBzLnNvY2tfbWFwKTtcXG4rXFx0ZXJyID0geGJwZl9wcm9nX2F0dGFjaChicGZfcHJvZ3JhbV9fZmQoc3RycC1cXHUwMDNlcHJvZ3MucHJvZ19za2JfcGFyc2VyX29uZSksXFxuK1xcdFxcdFxcdCAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0X2Rlc3Ryb3k7XFxuK1xcbitcXHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLVxcdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0X3Bhc3MpLFxcbitcXHRcXHRcXHQgICAgICAgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULCAwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdGVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBcXHUwMDI2YywgXFx1MDAyNnApO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJjcmVhdGVfcGFpclxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXN0cm95O1xcbitcXG4rXFx0ZXJyID0geHNldHNvY2tvcHQoYywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCBcXHUwMDI2c25kYnVmLCBzaXplb2Yoc25kYnVmKSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0X2Rlc3Ryb3k7XFxuK1xcbitcXHRlcnIgPSB4c2V0c29ja29wdChwLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIFxcdTAwMjZzbmRidWYsIHNpemVvZihzbmRidWYpKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdGVyciA9IHhicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcCwgXFx1MDAyNnplcm8sIFxcdTAwMjZwLCBCUEZfTk9FWElTVCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0X2Rlc3Ryb3k7XFxuK1xcbitcXHRzZW50ID0gc2VuZChjLCBzbmQsIHNpemVvZihzbmQpLCBNU0dfRE9OVFdBSVQpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShzZW50LCBzaXplb2Yoc25kKSwgXFxcInNlbmRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdHJlY3ZkID0gcmVjdl90aW1lb3V0KHAsIFxcdTAwMjZyY3YsIHNpemVvZihyY3YpLCBNU0dfRE9OVFdBSVQsXFxuK1xcdFxcdFxcdCAgICAgSU9fVElNRU9VVF9TRUMpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShyZWN2ZCwgc2l6ZW9mKHJjdiksIFxcXCJyZWN2X3RpbWVvdXRcXFwiKSB8fFxcbitcXHQgICAgIUFTU0VSVF9FUShyY3YsIHNuZFswXSwgXFxcImRhdGEgbWlzbWF0Y2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rXFxuK1xcdGVyciA9IHNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jKHAsIFxcdTAwMjZmd2RfYWxsb2MpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvY1xcXCIpIHx8XFxuK1xcdCAgICAhQVNTRVJUX0dFKGZ3ZF9hbGxvYywgMCwgXFxcInNrX2ZvcndhcmRfYWxsb2NcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveTtcXG4rb3V0X2Rlc3Ryb3k6XFxuK1xcdHRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApO1xcbitcXHRpZiAoYyBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShjKTtcXG4rXFx0aWYgKHAgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UocCk7XFxuK31cXG4rXFxuIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCBzdHJwIHRjcCBwYXNzXFxcIikpXFxuQEAgLTQ4Miw0ICs2NTEsNiBAQCB2b2lkIHRlc3Rfc29ja21hcF9zdHJwKHZvaWQpXFxuIFxcdFxcdHRlc3Rfc29ja21hcF9zdHJwX2Rpc3BhdGNoX3BrdChBRl9JTkVULCBTT0NLX1NUUkVBTSk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHN0cnAgcGFyc2VyIHJlamVjdCBwa3QgbW9kXFxcIikpXFxuIFxcdFxcdHRlc3Rfc29ja21hcF9zdHJwX3BhcnNlcl9yZWplY3QoKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInNvY2ttYXAgc3RycCBzZWxmIHBhc3MgZndkIGFsbG9jXFxcIikpXFxuK1xcdFxcdHRlc3Rfc29ja21hcF9zdHJwX3NlbGZfcGFzc19md2RfYWxsb2MoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXFxuaW5kZXggZmU4OGZhNmQ0MGJjNS4uNjgyZTUzZDQwNzUxYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jXFxuQEAgLTUwLDYgKzUwLDEyIEBAIGludCBwcm9nX3NrYl9wYXJzZXJfcGFydGlhbChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuIFxcdHJldHVybiAxMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCJza19za2Ivc3RyZWFtX3BhcnNlclxcXCIpXFxuK2ludCBwcm9nX3NrYl9wYXJzZXJfb25lKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRyZXR1cm4gMTtcXG4rfVxcbitcXG4gU0VDKFxcXCJza19za2Ivc3RyZWFtX3BhcnNlclxcXCIpXFxuIGludCBwcm9nX3NrYl9wYXJzZXJfcmVzaXplKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxNzoyOC41MzYzNzY1NDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4OTQ1NDIzMDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19wc29ja19pbml0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0YXJ0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RcIixcbiAgICBcInNrX21zZ19yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgIHRvIGhhbmRsZSBgc2tfZm9yd2FyZF9hbGxvY2AgZGVmaWNpdCB3aGVuIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byBhIGRpcmVjdCBzdHJwYXJzZXIgU0tfUEFTUyBjbG9uZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzb2NrbWFwL3NrbXNnIEJQRiBpbmZyYXN0cnVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBCUEYgc29ja21hcCB3aXRoIGEgc3RyZWFtIHBhcnNlciBhbmQgdmVyZGljdCBwcm9ncmFtIGF0dGFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZmFjOTFiYjMzOTNlZGVmZjkwMmJlMjRlNjVjYWE2MmY2NzNlYmMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxMToxNzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrbXNnLmMgYi9uZXQvY29yZS9za21zZy5jXG5pbmRleCAyNTIxYjY0M2ZhMDVkLi5jZTVhZDgxNjAyODI4IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2ttc2cuY1xuKysrIGIvbmV0L2NvcmUvc2ttc2cuY1xuQEAgLTU4Niw3ICs1ODYsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB9XG4gXG4gc3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICAgIHUzMiBvZmYsIHUzMiBsZW4sIGJvb2wgdGFrZV9yZWYpO1xuK1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0ICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpO1xuIFxuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHUzMiBvZmYsIHUzMiBsZW4pXG5AQCAtNTk1LDEyICs1OTYsOSBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3Qgc2tfbXNnICptc2c7XG4gXHRpbnQgZXJyO1xuIFxuLVx0LyogSWYgd2UgYXJlIHJlY2VpdmluZyBvbiB0aGUgc2FtZSBzb2NrIHNrYi1cdTAwM2VzayBpcyBhbHJlYWR5IGFzc2lnbmVkLFxuLVx0ICogc2tpcCBtZW1vcnkgYWNjb3VudGluZyBhbmQgb3duZXIgdHJhbnNpdGlvbiBzZWVpbmcgaXQgYWxyZWFkeSBzZXRcbi1cdCAqIGNvcnJlY3RseS5cbi1cdCAqL1xuIFx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VzayA9PSBzaykpXG4tXHRcdHJldHVybiBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHBzb2NrLCBza2IsIG9mZiwgbGVuLCB0cnVlKTtcbitcdFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUsXG4rXHRcdFx0XHRcdFx0IHNrYl9icGZfc3RycGFyc2VyKHNrYikpO1xuIFx0bXNnID0gc2tfcHNvY2tfY3JlYXRlX2luZ3Jlc3NfbXNnKHNrLCBza2IpO1xuIFx0aWYgKCFtc2cpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuQEAgLTYxOCwxMiArNjE2LDE0IEBAIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Moc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIFB1dHMgYW4gc2tiIG9uIHRoZSBpbmdyZXNzIHF1ZXVlIG9mIHRoZSBzb2NrZXQgYWxyZWFkeSBhc3NpZ25lZCB0byB0aGVcbi0gKiBza2IuIEluIHRoaXMgY2FzZSB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBtZW1vcnkgbGltaXRzIG9yIHNrYl9zZXRfb3duZXJfclxuLSAqIGJlY2F1c2UgdGhlIHNrYiBpcyBhbHJlYWR5IGFjY291bnRlZCBmb3IgaGVyZS5cbisvKiBQdXRzIGFuIHNrYiBvbiB0aGUgaW5ncmVzcyBxdWV1ZSBmb3IgcHNvY2stXHUwMDNlc2suXG4rICpcbisgKiBCZWZvcmUgYXNzaWduaW5nIHJlY2VpdmUgb3duZXJzaGlwIHRvIGEgZGlyZWN0IHN0cnBhcnNlciBTS19QQVNTIGNsb25lLFxuKyAqIHNldHRsZSBhbnkgZXhpc3Rpbmcgc2tfZm9yd2FyZF9hbGxvYyBkZWZpY2l0IGZyb20gZWFybGllciBjbG9uZSBjaGFyZ2VzLlxuICAqL1xuIHN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmKVxuK1x0XHRcdFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxuK1x0XHRcdFx0ICAgICBib29sIHNldHRsZV9md2RfYWxsb2MpXG4ge1xuIFx0c3RydWN0IHNrX21zZyAqbXNnID0gYWxsb2Nfc2tfbXNnKEdGUF9BVE9NSUMpO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gcHNvY2stXHUwMDNlc2s7XG5AQCAtNjMxLDYgKzYzMSwxMyBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYlxuIFxuIFx0aWYgKHVubGlrZWx5KCFtc2cpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbitcbitcdGlmIChzZXR0bGVfZndkX2FsbG9jIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFza19ybWVtX3NjaGVkdWxlKHNrLCBza2IsIDApKSB7XG4rXHRcdGtmcmVlKG1zZyk7XG4rXHRcdHJldHVybiAtRUFHQUlOO1xuK1x0fVxuK1xuIFx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xuIFxuIFx0LyogVGhpcyBpcyB1c2VkIGluIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbkBAIC0xMDE3LDYgKzEwMjQsOCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICogcmV0cnlpbmcgbGF0ZXIgZnJvbSB3b3JrcXVldWUuXG4gXHRcdCAqL1xuIFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3Nfc2tiKSkge1xuK1x0XHRcdGJvb2wgc2V0dGxlX2Z3ZF9hbGxvYyA9IGZhbHNlO1xuK1xuIFx0XHRcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRcdFx0b2ZmID0gMDtcbiBcdFx0XHRpZiAoc2tiX2JwZl9zdHJwYXJzZXIoc2tiKSkge1xuQEAgLTEwMjQsOCArMTAzMywxMCBAQCBzdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHkoc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdFx0XHRcdG9mZiA9IHN0bS1cdTAwM2VvZmZzZXQ7XG4gXHRcdFx0XHRsZW4gPSBzdG0tXHUwMDNlZnVsbF9sZW47XG4rXHRcdFx0XHRzZXR0bGVfZndkX2FsbG9jID0gdHJ1ZTtcbiBcdFx0XHR9XG4tXHRcdFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbiwgZmFsc2UpO1xuK1x0XHRcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sXG4rXHRcdFx0XHRcdFx0XHRmYWxzZSwgc2V0dGxlX2Z3ZF9hbGxvYyk7XG4gXHRcdH1cbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX2xvY2spO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbmluZGV4IDFkNzIzMTcyOGVhZmQuLmM3YWQyMWQwYmJmNDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9zdHJwLmNcbkBAIC0xLDUgKzEsOSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjZXJyb3IuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luZXRfZGlhZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2NrX2RpYWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldGluZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcInNvY2ttYXBfaGVscGVycy5oXCJcbkBAIC00NjAsNiArNDY0LDE3MSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KHZvaWQpXG4gXHR0ZXN0X3NvY2ttYXBfc3RycF9fZGVzdHJveShzdHJwKTtcbiB9XG4gXG4rLyogUmVhZCBza19mb3J3YXJkX2FsbG9jIHRocm91Z2ggaW5ldF9kaWFnIG1lbWluZm8uICovXG4rc3RhdGljIGludCBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhpbnQgc29jaywgaW50ICpmd2RfYWxsb2MpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgbG9jYWwgPSB7fSwgcGVlciA9IHt9O1xuK1x0c3RydWN0IHNvY2thZGRyX2luICpsb2NhbF9pbiwgKnBlZXJfaW47XG4rXHRzb2NrbGVuX3QgYWRkcl9sZW4gPSBzaXplb2YobG9jYWwpO1xuK1x0Y2hhciBidWZbMTAyNF07XG4rXHRzdHJ1Y3Qge1xuK1x0XHRzdHJ1Y3Qgbmxtc2doZHIgbmxoO1xuK1x0XHRzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiByZXE7XG4rXHR9IHJlcSA9IHtcbitcdFx0Lm5saCA9IHtcbitcdFx0XHQubmxtc2dfbGVuID0gc2l6ZW9mKHJlcSksXG4rXHRcdFx0Lm5sbXNnX3R5cGUgPSBTT0NLX0RJQUdfQllfRkFNSUxZLFxuK1x0XHRcdC5ubG1zZ19mbGFncyA9IE5MTV9GX1JFUVVFU1QsXG4rXHRcdFx0Lm5sbXNnX3NlcSA9IDEsXG4rXHRcdH0sXG4rXHRcdC5yZXEgPSB7XG4rXHRcdFx0LnNkaWFnX2ZhbWlseSA9IEFGX0lORVQsXG4rXHRcdFx0LnNkaWFnX3Byb3RvY29sID0gSVBQUk9UT19UQ1AsXG4rXHRcdFx0LmlkaWFnX2V4dCA9IDEgXHUwMDNjXHUwMDNjIChJTkVUX0RJQUdfTUVNSU5GTyAtIDEpLFxuK1x0XHRcdC5pZGlhZ19zdGF0ZXMgPSB+MFUsXG4rXHRcdFx0LmlkLmlkaWFnX2Nvb2tpZSA9IHtcbitcdFx0XHRcdElORVRfRElBR19OT0NPT0tJRSxcbitcdFx0XHRcdElORVRfRElBR19OT0NPT0tJRSxcbitcdFx0XHR9LFxuK1x0XHR9LFxuK1x0fTtcbitcdGludCBkaWFnX2ZkLCByZXQsIGVyciA9IC1FTk9FTlQ7XG4rXG4rXHRpZiAoZ2V0c29ja25hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmxvY2FsLCBcdTAwMjZhZGRyX2xlbikpXG4rXHRcdHJldHVybiAtZXJybm87XG4rXHRhZGRyX2xlbiA9IHNpemVvZihwZWVyKTtcbitcdGlmIChnZXRwZWVybmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2cGVlciwgXHUwMDI2YWRkcl9sZW4pKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0bG9jYWxfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopXHUwMDI2bG9jYWw7XG4rXHRwZWVyX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKVx1MDAyNnBlZXI7XG4rXHRyZXEucmVxLmlkLmlkaWFnX3Nwb3J0ID0gbG9jYWxfaW4tXHUwMDNlc2luX3BvcnQ7XG4rXHRyZXEucmVxLmlkLmlkaWFnX2Rwb3J0ID0gcGVlcl9pbi1cdTAwM2VzaW5fcG9ydDtcbitcdHJlcS5yZXEuaWQuaWRpYWdfc3JjWzBdID0gbG9jYWxfaW4tXHUwMDNlc2luX2FkZHIuc19hZGRyO1xuK1x0cmVxLnJlcS5pZC5pZGlhZ19kc3RbMF0gPSBwZWVyX2luLVx1MDAzZXNpbl9hZGRyLnNfYWRkcjtcbitcbitcdGRpYWdfZmQgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcgfCBTT0NLX0NMT0VYRUMsXG4rXHRcdFx0IE5FVExJTktfU09DS19ESUFHKTtcbitcdGlmIChkaWFnX2ZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0cmV0ID0gc2VuZChkaWFnX2ZkLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpLCAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0ZXJyID0gLWVycm5vO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGlmIChyZXQgIT0gc2l6ZW9mKHJlcSkpIHtcbitcdFx0ZXJyID0gLUVJTztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSByZWN2KGRpYWdfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRlcnIgPSAtZXJybm87XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0Zm9yIChzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilidWY7XG4rXHQgICAgIE5MTVNHX09LKG5saCwgcmV0KTsgbmxoID0gTkxNU0dfTkVYVChubGgsIHJldCkpIHtcbitcdFx0c3RydWN0IGluZXRfZGlhZ19tc2cgKm1zZyA9IE5MTVNHX0RBVEEobmxoKTtcbitcdFx0c3RydWN0IHJ0YXR0ciAqYXR0cjtcbitcdFx0aW50IGxlbjtcbitcbitcdFx0aWYgKG5saC1cdTAwM2VubG1zZ190eXBlID09IE5MTVNHX0VSUk9SKSB7XG4rXHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0XHRpZiAobmxoLVx1MDAzZW5sbXNnX3R5cGUgPT0gTkxNU0dfRE9ORSlcbitcdFx0XHRicmVhaztcbitcbitcdFx0bGVuID0gbmxoLVx1MDAzZW5sbXNnX2xlbiAtIE5MTVNHX0xFTkdUSChzaXplb2YoKm1zZykpO1xuK1x0XHRmb3IgKGF0dHIgPSAoc3RydWN0IHJ0YXR0ciAqKShtc2cgKyAxKTsgUlRBX09LKGF0dHIsIGxlbik7XG4rXHRcdCAgICAgYXR0ciA9IFJUQV9ORVhUKGF0dHIsIGxlbikpIHtcbitcdFx0XHRzdHJ1Y3QgaW5ldF9kaWFnX21lbWluZm8gKm1pbmZvO1xuK1xuK1x0XHRcdGlmIChhdHRyLVx1MDAzZXJ0YV90eXBlICE9IElORVRfRElBR19NRU1JTkZPKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0bWluZm8gPSBSVEFfREFUQShhdHRyKTtcbitcdFx0XHQqZndkX2FsbG9jID0gKF9fczMyKW1pbmZvLVx1MDAzZWlkaWFnX2ZtZW07XG4rXHRcdFx0ZXJyID0gMDtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1x0fVxuK1xuK291dDpcbitcdGNsb3NlKGRpYWdfZmQpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rLyogVGVzdCBzdHJwYXJzZXIgU0tfUEFTUyBkZWxpdmVyeSB0byB0aGUgc2FtZSBzb2NrZXQuICovXG4rc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnBfc2VsZl9wYXNzX2Z3ZF9hbGxvYyh2b2lkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X3NvY2ttYXBfc3RycCAqc3RycCA9IE5VTEw7XG4rXHRjaGFyIHNuZFs0ICogMTAyNF07XG4rXHRpbnQgYyA9IC0xLCBwID0gLTE7XG4rXHRpbnQgZndkX2FsbG9jO1xuK1x0aW50IHNuZGJ1ZiA9IHNpemVvZihzbmQpO1xuK1x0aW50IHplcm8gPSAwO1xuK1x0Y2hhciByY3Y7XG4rXHRpbnQgc2VudCwgcmVjdmQ7XG4rXHRpbnQgbWFwO1xuK1x0aW50IGVycjtcbitcbitcdG1lbXNldChzbmQsIDB4YTUsIHNpemVvZihzbmQpKTtcbitcbitcdHN0cnAgPSB0ZXN0X3NvY2ttYXBfc3RycF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHN0cnAsIFwidGVzdF9zb2NrbWFwX3N0cnBfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdG1hcCA9IGJwZl9tYXBfX2ZkKHN0cnAtXHUwMDNlbWFwcy5zb2NrX21hcCk7XG4rXHRlcnIgPSB4YnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChzdHJwLVx1MDAzZXByb2dzLnByb2dfc2tiX3BhcnNlcl9vbmUpLFxuK1x0XHRcdCAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1BBUlNFUiwgMCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0ZXJyID0geGJwZl9wcm9nX2F0dGFjaChicGZfcHJvZ3JhbV9fZmQoc3RycC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0X3Bhc3MpLFxuK1x0XHRcdCAgICAgICBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdGVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBcdTAwMjZjLCBcdTAwMjZwKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJjcmVhdGVfcGFpclwiKSlcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdGVyciA9IHhzZXRzb2Nrb3B0KGMsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgXHUwMDI2c25kYnVmLCBzaXplb2Yoc25kYnVmKSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dF9kZXN0cm95O1xuK1xuK1x0ZXJyID0geHNldHNvY2tvcHQocCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCBcdTAwMjZzbmRidWYsIHNpemVvZihzbmRidWYpKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRlcnIgPSB4YnBmX21hcF91cGRhdGVfZWxlbShtYXAsIFx1MDAyNnplcm8sIFx1MDAyNnAsIEJQRl9OT0VYSVNUKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRzZW50ID0gc2VuZChjLCBzbmQsIHNpemVvZihzbmQpLCBNU0dfRE9OVFdBSVQpO1xuK1x0aWYgKCFBU1NFUlRfRVEoc2VudCwgc2l6ZW9mKHNuZCksIFwic2VuZFwiKSlcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitcbitcdHJlY3ZkID0gcmVjdl90aW1lb3V0KHAsIFx1MDAyNnJjdiwgc2l6ZW9mKHJjdiksIE1TR19ET05UV0FJVCxcbitcdFx0XHQgICAgIElPX1RJTUVPVVRfU0VDKTtcbitcdGlmICghQVNTRVJUX0VRKHJlY3ZkLCBzaXplb2YocmN2KSwgXCJyZWN2X3RpbWVvdXRcIikgfHxcbitcdCAgICAhQVNTRVJUX0VRKHJjdiwgc25kWzBdLCBcImRhdGEgbWlzbWF0Y2hcIikpXG4rXHRcdGdvdG8gb3V0X2Rlc3Ryb3k7XG4rXG4rXHRlcnIgPSBzb2NrbWFwX3N0cnBfZ2V0X2Z3ZF9hbGxvYyhwLCBcdTAwMjZmd2RfYWxsb2MpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNvY2ttYXBfc3RycF9nZXRfZndkX2FsbG9jXCIpIHx8XG4rXHQgICAgIUFTU0VSVF9HRShmd2RfYWxsb2MsIDAsIFwic2tfZm9yd2FyZF9hbGxvY1wiKSlcbitcdFx0Z290byBvdXRfZGVzdHJveTtcbitvdXRfZGVzdHJveTpcbitcdHRlc3Rfc29ja21hcF9zdHJwX19kZXN0cm95KHN0cnApO1xuK1x0aWYgKGMgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShjKTtcbitcdGlmIChwIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UocCk7XG4rfVxuK1xuIHZvaWQgdGVzdF9zb2NrbWFwX3N0cnAodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgc3RycCB0Y3AgcGFzc1wiKSlcbkBAIC00ODIsNCArNjUxLDYgQEAgdm9pZCB0ZXN0X3NvY2ttYXBfc3RycCh2b2lkKVxuIFx0XHR0ZXN0X3NvY2ttYXBfc3RycF9kaXNwYXRjaF9wa3QoQUZfSU5FVCwgU09DS19TVFJFQU0pO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzb2NrbWFwIHN0cnAgcGFyc2VyIHJlamVjdCBwa3QgbW9kXCIpKVxuIFx0XHR0ZXN0X3NvY2ttYXBfc3RycF9wYXJzZXJfcmVqZWN0KCk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInNvY2ttYXAgc3RycCBzZWxmIHBhc3MgZndkIGFsbG9jXCIpKVxuK1x0XHR0ZXN0X3NvY2ttYXBfc3RycF9zZWxmX3Bhc3NfZndkX2FsbG9jKCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NvY2ttYXBfc3RycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcbmluZGV4IGZlODhmYTZkNDBiYzUuLjY4MmU1M2Q0MDc1MWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zb2NrbWFwX3N0cnAuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc29ja21hcF9zdHJwLmNcbkBAIC01MCw2ICs1MCwxMiBAQCBpbnQgcHJvZ19za2JfcGFyc2VyX3BhcnRpYWwoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDEwO1xuIH1cbiBcbitTRUMoXCJza19za2Ivc3RyZWFtX3BhcnNlclwiKVxuK2ludCBwcm9nX3NrYl9wYXJzZXJfb25lKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRyZXR1cm4gMTtcbit9XG4rXG4gU0VDKFwic2tfc2tiL3N0cmVhbV9wYXJzZXJcIilcbiBpbnQgcHJvZ19za2JfcGFyc2VyX3Jlc2l6ZShzdHJ1Y3QgX19za19idWZmICpza2IpXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6MjguNTM2Mzc5MDk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0MjYyOTI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBuZXQvY29yZS9za21zZy5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgaXQncyBhIHNwZWNpZmljIGZpeCBpbnZvbHZpbmcgYG5ldC9jb3JlL3NrbXNnLmNgIGFuZCBhIG5ldyB0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX3N0cnAuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhhbmRsaW5nIHRoZSBgc2tfZm9yd2FyZF9hbGxvY2AgZGVmaWNpdCB3aGVuIGRlYWxpbmcgd2l0aCBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgY2xvbmVzIGR1cmluZyByZWNlaXZlIG93bmVyc2hpcCBhc3NpZ25tZW50LiBTcGVjaWZpY2FsbHksIHRoZXkndmUgYWRkZWQgYSBgc2V0dGxlX2Z3ZF9hbGxvY2AgYm9vbGVhbiBwYXJhbWV0ZXIgdG8gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFuZCBhcmUgY2FsbGluZyBgc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLCAwKWAgaWYgaXQncyBzZXQgdG8gdHJ1ZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgYWJvdXQgcmVhY2hhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCB3aGljaCBhcmUgY3JpdGljYWwgY29tcG9uZW50cyBvZiB0aGUgc29ja21hcC9za21zZyBCUEYgaW5mcmFzdHJ1Y3R1cmUsIEknbSBwcmV0dHkgY29uZmlkZW50IHRoYXQgdGhlc2UgZnVuY3Rpb25zICphcmUqIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gVGhleSdyZSBmdW5kYW1lbnRhbCB0byB0aGUgd2hvbGUgcHJvY2Vzcy5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgcGxhY2VzIHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cy4gYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGFyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzLiBgc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZmAgaXMgc3RhdGljLCB3aGljaCBsaW1pdHMgaXRzIGV4cG9zdXJlLCBzbyB0aGUgZm9ybWVyIHR3byBhcmUgbGlrZWx5IHRoZSBtb3JlIGNyaXRpY2FsIHRhcmdldHMuXG5cblRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcsIEknbGwgbmVlZCB0byBsb2NhdGUgdGhvc2UgdHdvIGZ1bmN0aW9ucywgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLCB3aXRoaW4gYG5ldC9jb3JlL3NrbXNnLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzYzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6MzQuMTc5MDEyNjY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODE3NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3NrYl9pbmdyZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrbXNnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2ttc2cuYz01MzM9c3RhdGljIHN0cnVjdCBza19tc2cgKnNrX3Bzb2NrX2NyZWF0ZV9pbmdyZXNzX21zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTU0NC1cXG5uZXQvY29yZS9za21zZy5jOjU0NTpzdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za21zZy5jLTU0Ni1cXHRcXHRcXHRcXHRcXHR1MzIgb2ZmLCB1MzIgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01ODctXFxubmV0L2NvcmUvc2ttc2cuYzo1ODg6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy01ODktXFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01OTEtXFxubmV0L2NvcmUvc2ttc2cuYzo1OTI6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtNTkzLVxcdFxcdFxcdFxcdHUzMiBvZmYsIHUzMiBsZW4pXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTU5OS1cXHRpZiAodW5saWtlbHkoc2tiLVxcdTAwM2VzayA9PSBzaykpXFxubmV0L2NvcmUvc2ttc2cuYzo2MDA6XFx0XFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGYocHNvY2ssIHNrYiwgb2ZmLCBsZW4sIHRydWUsXFxubmV0L2NvcmUvc2ttc2cuYy02MDEtXFx0XFx0XFx0XFx0XFx0XFx0IHNrYl9icGZfc3RycGFyc2VyKHNrYikpO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02MTItXFx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xcbm5ldC9jb3JlL3NrbXNnLmM6NjEzOlxcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc2tiLCBvZmYsIGxlbiwgcHNvY2ssIHNrLCBtc2csIHRydWUpO1xcbm5ldC9jb3JlL3NrbXNnLmMtNjE0LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02MjMtICovXFxubmV0L2NvcmUvc2ttc2cuYzo2MjQ6c3RhdGljIGludCBza19wc29ja19za2JfaW5ncmVzc19zZWxmKHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2ttc2cuYy02MjUtXFx0XFx0XFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBib29sIHRha2VfcmVmLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02NDctXFx0bXNnLVxcdTAwM2VzayA9IHNrO1xcbm5ldC9jb3JlL3NrbXNnLmM6NjQ4OlxcdGVyciA9IHNrX3Bzb2NrX3NrYl9pbmdyZXNzX2VucXVldWUoc2tiLCBvZmYsIGxlbiwgcHNvY2ssIHNrLCBtc2csIHRha2VfcmVmKTtcXG5uZXQvY29yZS9za21zZy5jLTY0OS1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NjU0PXN0YXRpYyBpbnQgc2tfcHNvY2tfaGFuZGxlX3NrYihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy02NjItXFxubmV0L2NvcmUvc2ttc2cuYzo2NjM6XFx0cmV0dXJuIHNrX3Bzb2NrX3NrYl9pbmdyZXNzKHBzb2NrLCBza2IsIG9mZiwgbGVuKTtcXG5uZXQvY29yZS9za21zZy5jLTY2NC19XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEwMDM9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwMjItXFx0XFx0ICogcXVldWUgd29yayBvdGhlcndpc2Ugd2UgbWF5IGdldCBPT08gZGF0YS4gT3RoZXJ3aXNlLFxcbm5ldC9jb3JlL3NrbXNnLmM6MTAyMzpcXHRcXHQgKiBpZiBza19wc29ja19za2JfaW5ncmVzcyBlcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5XFxubmV0L2NvcmUvc2ttc2cuYy0xMDI0LVxcdFxcdCAqIHJldHJ5aW5nIGxhdGVyIGZyb20gd29ya3F1ZXVlLlxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDM3LVxcdFxcdFxcdH1cXG5uZXQvY29yZS9za21zZy5jOjEwMzg6XFx0XFx0XFx0ZXJyID0gc2tfcHNvY2tfc2tiX2luZ3Jlc3Nfc2VsZihwc29jaywgc2tiLCBvZmYsIGxlbixcXG5uZXQvY29yZS9za21zZy5jLTEwMzktXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UsIHNldHRsZV9md2RfYWxsb2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxNzozNC4yMjc4MzU5MDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc0NTE4NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkFuYWx5emluZyBQYWNrZXQgU29ja2V0IFZlcmRpY3QgQXBwbGljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBza19wc29ja19za2JfaW5ncmVzc2AgYW5kIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBhcmUgYm90aCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCdzIGEgZ29vZCBpbml0aWFsIGNsdWUg4oCTIGl0IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBoYXZlICppbnRlcm5hbCBsaW5rYWdlKiB3aXRoaW4gdGhlaXIgY29tcGlsYXRpb24gdW5pdC4gVGhleSdyZSBub3QgbWVhbnQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gb3V0c2lkZSB0aGF0IHNwZWNpZmljIG1vZHVsZSBvciBmaWxlLlxuXG5HaXZlbiB0aGF0LCBteSBuZXh0IHRob3VnaHQgaXM6ICpXaG8qIGlzIGNhbGxpbmcgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgPyBTaW5jZSBpdCdzIHN0YXRpYywgdGhlIGNhbGwgaGFzIHRvIG9yaWdpbmF0ZSB3aXRoaW4gdGhlIHNhbWUgc291cmNlIGZpbGUsIHNvIEkgbmVlZCB0byBmaW5kIGl0cyBjYWxsZXJzIHRvIHJlYWxseSB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhY2tldCBzb2NrZXQgdmVyZGljdGluZyBwcm9jZXNzIHdvcmtzIGFuZCB3aGF0IHRoZSBjb25zdHJhaW50cyBhcmUuIFRoZSBmYWN0IHRoYXQgaXQgaXMgYSAqdmVyZGljdCBhcHBsaWNhdGlvbiogbWVhbnMgdGhhdCBpdCBpcyBhcHBseWluZyBzb21lIGRlY2lzaW9uIGFib3V0IHRoZSBwYWNrZXQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgZGVjaXNpb25zIGFyZSBhbmQgd2hhdCB0aGUgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MgZGVwZW5kcyBvbi4gVGhpcyBzZWVtcyBsaWtlIGEgY29yZSBwYXJ0IG9mIHdoYXRldmVyIHN5c3RlbSB0aGlzIGNvZGUgaXMgaW1wbGVtZW50aW5nLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgKmluZ3Jlc3MqIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSB2ZXJkaWN0IGFwcGxpY2F0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuIExldCdzIHNlZSB3aGF0IHRoZSBjYWxsIHNpdGVzIHJldmVhbC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTI3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6MzguMTAyMzU3OTg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NDg4Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTk2NT1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChzdHJ1Y3Qgc2tfcHNvY2sgKmZyb20sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwMDItXFxubmV0L2NvcmUvc2ttc2cuYzoxMDAzOnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9hcHBseShzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrbXNnLmMtMTAwNC1cXHRcXHRcXHRcXHQgIGludCB2ZXJkaWN0KVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMDg2PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTA5LVxcdH1cXG5uZXQvY29yZS9za21zZy5jOjExMTA6XFx0c2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTExMS1vdXQ6XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEyMDk9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjMyLVxcdH1cXG5uZXQvY29yZS9za21zZy5jOjEyMzM6XFx0cmV0ID0gc2tfcHNvY2tfdmVyZGljdF9hcHBseShwc29jaywgc2tiLCByZXQpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTIzNC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6MzguMTkxODUxNjE2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyMTY0NTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIHRoZSBJbnRlcnBsYXkgb2YgcHNvY2sgRnVuY3Rpb24gQ2FsbHMqKlxuXG5BbHJpZ2h0LCBzbyBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgYm90aCwgaXQgc2VlbXMsIGVuZCB1cCBjYWxsaW5nIGBza19wc29ja192ZXJkaWN0X2FwcGx5YC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludCBmb3IgbWUuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgdGhhdCBhZmZlY3RzIHRoZSBvdmVyYWxsIGZsb3cgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgcGFja2V0IHNvY2tldCAocHNvY2spIG9wZXJhdGlvbnMuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMgaG93IGlzIGl0IHVzZWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLlxuXG5UaGUgaW1tZWRpYXRlIHRoaW5nIEknbSBmb2N1c2VkIG9uIGlzIHdoZXRoZXIgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBoYXMgcmVhbCBpbXBsaWNhdGlvbnMgZm9yIHNjb3BpbmcsIHZpc2liaWxpdHksIGFuZCBwb3RlbnRpYWxseSwgb3B0aW1pemF0aW9uLiBBIHN0YXRpYyBmdW5jdGlvbiB3b3VsZCBiZSBzY29wZWQgb25seSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIG1lYW5pbmcgaXQncyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIG90aGVyIG1vZHVsZXMsIGJ1dCByYXRoZXIgYWN0cyBhcyBhIHByaXZhdGUgaGVscGVyLiBLbm93aW5nIGlmIGl0J3Mgc3RhdGljIGdpdmVzIG1lIGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGUgcHV6emxlIGluIHRlcm1zIG9mIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGFuZCBkZXNpZ25lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI1NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE3OjQxLjYxMzQ5OTc5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM0NzE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja19zdHJwX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEwNjg9c3RhdGljIHZvaWQgc2tfcHNvY2tfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDg1LSNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jOjEwODY6c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2ttc2cuYy0xMDg3LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTExNC1cXG5uZXQvY29yZS9za21zZy5jOjExMTU6c3RhdGljIGludCBza19wc29ja19zdHJwX3JlYWRfZG9uZShzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBpbnQgZXJyKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTExNi17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTExNTQ9aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExNTgtXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBzdHJwX2NhbGxiYWNrcyBjYiA9IHtcXG5uZXQvY29yZS9za21zZy5jOjExNTk6XFx0XFx0LnJjdl9tc2dcXHQ9IHNrX3Bzb2NrX3N0cnBfcmVhZCxcXG5uZXQvY29yZS9za21zZy5jOjExNjA6XFx0XFx0LnJlYWRfc29ja19kb25lXFx0PSBza19wc29ja19zdHJwX3JlYWRfZG9uZSxcXG5uZXQvY29yZS9za21zZy5jLTExNjEtXFx0XFx0LnBhcnNlX21zZ1xcdD0gc2tfcHNvY2tfc3RycF9wYXJzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6NDEuNjg2ODUxOTQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2ODA5NTU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgc2tfcHNvY2tfaW5pdF9zdHJwYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAqKlxuXG5SaWdodCwgc28gYHNrX3Bzb2NrX2luaXRfc3RycGAgaXNuJ3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIGV4cG9zZWQgYW5kIGNhbGxlZCBmcm9tIG91dHNpZGUgaXRzIHByaW1hcnkgY29tcGlsYXRpb24gdW5pdC4gTWFrZXMgbWUgd29uZGVyIHdoZXJlIGFuZCB3aHkuIElzIGl0IHBhcnQgb2YgYSBwdWJsaWMgQVBJPyBJcyBpdCB1c2VkIGluIHNvbWUga2luZCBvZiBoZWxwZXIgbW9kdWxlPyBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgc2tfcHNvY2tfdmVyZGljdF9yZWN2YC4gVGhhdCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggcGFja2V0IHNvY2tldHMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGtpbmQgb2YgZmlsdGVyaW5nIG9yIHZlcmRpY3QgbWVjaGFuaXNtIG9uIHRoZSByZWNlaXZlZCBwYWNrZXRzLiBUaGUgbmFtZSBpcyBwcmV0dHkgY2xlYXIsIGJ1dCB0aGUgY29udGV4dCBtYXR0ZXJzLiBJcyB0aGlzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIHBhY2tldCBmaWx0ZXIgbGlrZSBCUEY/IE9yIHBlcmhhcHMgYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIGNvbnRyb2xsaW5nIHRoZSBiZWhhdmlvdXIgb2YgcmF3IHNvY2tldHM/IEl0IG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBpbnRlZ3JhdGlvbiBhbmQgZnVuY3Rpb25hbGl0eSwgc28gSSdsbCBuZWVkIHRvIGRpdmUgaW50byB0aGF0IG9uZSBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTM2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6NDUuMTU0OTUwNzA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzMzMjkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja192ZXJkaWN0X3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEyMDQ9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMDgtXFxubmV0L2NvcmUvc2ttc2cuYzoxMjA5OnN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvY29yZS9za21zZy5jLTEyMTAte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjQxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyNTctXFxubmV0L2NvcmUvc2ttc2cuYzoxMjU4OlxcdGNvcGllZCA9IG9wcy1cXHUwMDNlcmVhZF9za2Ioc2ssIHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjU5LVxcdGlmIChjb3BpZWQgXFx1MDAzZT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxNzo0NS4yMDgyODg1NjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4OTUxNzE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YCoqXG5cblJpZ2h0LCBgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5YCBpcyBmbGFnZ2VkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gU3RhdGljIGZ1bmN0aW9ucywgd2l0aGluIGEga2VybmVsIGNvbnRleHQgbGlrZSB0aGlzLCB1c3VhbGx5IG1lYW4gaXQncyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgcHJvYmFibHkgZm9yIGEgdmVyeSBzcGVjaWZpYyBtb2R1bGUgb3Igc3Vic3lzdGVtLiBJdCdzIGxpa2VseSBub3QgbWVhbnQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gb3V0c2lkZSBpdHMgY29tcGlsYXRpb24gdW5pdC5cblxuU28sIGxldCdzIHRyYWNlIHRoaXMgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzIG9mIGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgLiBVbmRlcnN0YW5kaW5nIHdoZXJlIGl0J3MgY2FsbGVkIGZyb20gaXMgY3J1Y2lhbCB0byBncmFzcGluZyBpdHMgZnVuY3Rpb24gYW5kIHRoZSBjb250ZXh0IGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE3OjUwLjI5NzgwODZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1Njg3MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za21zZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9MTIwOT1zdGF0aWMgaW50IHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyNDAtXFxubmV0L2NvcmUvc2ttc2cuYzoxMjQxOnN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMjQyLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTI2OD12b2lkIHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjczLVxcdHBzb2NrLVxcdTAwM2VzYXZlZF9kYXRhX3JlYWR5ID0gc2stXFx1MDAzZXNrX2RhdGFfcmVhZHk7XFxubmV0L2NvcmUvc2ttc2cuYzoxMjc0OlxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX2RhdGFfcmVhZHksIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjc1LVxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX3dyaXRlX3NwYWNlLCBza19wc29ja193cml0ZV9zcGFjZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE3OjUwLjM4MzUwMTc4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzUwNjcyNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFja2V0IFNvY2tldCBEYXRhIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYWNrZXQgc29ja2V0IGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAgaXNuJ3QgZGVjbGFyZWQgc3RhdGljLiBUaGF0J3MgbXkgaW5pdGlhbCBwb2ludCBvZiBmb2N1cy4gSXQgbG9va3MgbGlrZSBgc2tfcHNvY2tfaW5pdF9zdHJwYCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc29ja2V0IHN0YXJ0cy4gQnV0LCBoYW5nIG9uLi4uIHRoZXNlIGFwcGVhciB0byBiZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMsIG5vdCB0aGUgYWN0dWFsIGRhdGEgcGF0aC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGRhdGEgYWN0dWFsbHkgZmxvd3MuXG5cbkFscmlnaHQsIHRoZSBkYXRhIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGFyZSBwcm9iYWJseSBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAuIE9oLCBidXQgdGhleSdyZSAqc3RhdGljKi4gVGhhdOKAmXMgYSBwb3RlbnRpYWwgcm9hZGJsb2NrLiBTbywgbXkgZ29hbCBub3cgaXMgdG8gZmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSAqbm9uKi1zdGF0aWMgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMgZGF0YSBwYXRoLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdy5cblxuTGV0J3MgY2hlY2sgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCBhcyBhIHBvc3NpYmxlIHBhdGguIEhtbSwgc3RhdGljLiBPa2F5LCB0aGF0J3Mgbm90IGl0LiBJIG5lZWQgdG8gd2lkZW4gdGhlIHNlYXJjaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBsb29rIGF0IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBuZXQvY29yZS9za21zZy5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMDcsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTc6NTQuNzM0MTc3NTgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUwMDUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWjAtOV9dKyBbYS16QS1aMC05X10rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTEyPXN0YXRpYyBib29sIHNrX21zZ190cnlfY29hbGVzY2Vfb2soc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgZWxlbV9maXJzdF9jb2FsZXNjZSlcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMjUtXFxubmV0L2NvcmUvc2ttc2cuYzoyNjppbnQgc2tfbXNnX2FsbG9jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuLFxcbm5ldC9jb3JlL3NrbXNnLmMtMjctXFx0XFx0IGludCBlbGVtX2ZpcnN0X2NvYWxlc2NlKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz04NT1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfYWxsb2MpO1xcbm5ldC9jb3JlL3NrbXNnLmMtODYtXFxubmV0L2NvcmUvc2ttc2cuYzo4NzppbnQgc2tfbXNnX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqZHN0LCBzdHJ1Y3Qgc2tfbXNnICpzcmMsXFxubmV0L2NvcmUvc2ttc2cuYy04OC1cXHRcXHQgdTMyIG9mZiwgdTMyIGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTM2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19jbG9uZSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMzctXFxubmV0L2NvcmUvc2ttc2cuYzoxMzg6dm9pZCBza19tc2dfcmV0dXJuX3plcm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBieXRlcylcXG5uZXQvY29yZS9za21zZy5jLTEzOS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTE2MD1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfcmV0dXJuX3plcm8pO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTYxLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTYyOnZvaWQgc2tfbXNnX3JldHVybihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTYzLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTk0PXN0YXRpYyBpbnQgX19za19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGksXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTIxMS1cXG5uZXQvY29yZS9za21zZy5jOjIxMjppbnQgc2tfbXNnX2ZyZWVfbm9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2cpXFxubmV0L2NvcmUvc2ttc2cuYy0yMTMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0yMTY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2ZyZWVfbm9jaGFyZ2UpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMjE3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MjE4OmludCBza19tc2dfZnJlZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcXG5uZXQvY29yZS9za21zZy5jLTIxOS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTIyND1zdGF0aWMgdm9pZCBfX3NrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTI1MS1cXG5uZXQvY29yZS9za21zZy5jOjI1Mjp2b2lkIHNrX21zZ19mcmVlX3BhcnRpYWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcXG5uZXQvY29yZS9za21zZy5jLTI1My17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTI1Nj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9wYXJ0aWFsKTtcXG5uZXQvY29yZS9za21zZy5jLTI1Ny1cXG5uZXQvY29yZS9za21zZy5jOjI1ODp2b2lkIHNrX21zZ19mcmVlX3BhcnRpYWxfbm9jaGFyZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXFxubmV0L2NvcmUvc2ttc2cuYy0yNTktXFx0XFx0XFx0XFx0ICB1MzIgYnl0ZXMpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTI2My1cXG5uZXQvY29yZS9za21zZy5jOjI2NDp2b2lkIHNrX21zZ190cmltKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgbGVuKVxcbm5ldC9jb3JlL3NrbXNnLmMtMjY1LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MzEwPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ190cmltKTtcXG5uZXQvY29yZS9za21zZy5jLTMxMS1cXG5uZXQvY29yZS9za21zZy5jOjMxMjppbnQgc2tfbXNnX3plcm9jb3B5X2Zyb21faXRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG5uZXQvY29yZS9za21zZy5jLTMxMy1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MzY3PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ196ZXJvY29weV9mcm9tX2l0ZXIpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMzY4LVxcbm5ldC9jb3JlL3NrbXNnLmM6MzY5OmludCBza19tc2dfbWVtY29weV9mcm9tX2l0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxubmV0L2NvcmUvc2ttc2cuYy0zNzAtXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBieXRlcylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NDExPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19tZW1jb3B5X2Zyb21faXRlcik7XFxubmV0L2NvcmUvc2ttc2cuYy00MTItXFxubmV0L2NvcmUvc2ttc2cuYzo0MTM6aW50IF9fc2tfbXNnX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L2NvcmUvc2ttc2cuYy00MTQtXFx0XFx0ICAgICBpbnQgbGVuLCBpbnQgZmxhZ3MsIGludCAqY29waWVkX2Zyb21fc2VsZilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTAwLS8qIFJlY2VpdmUgc2tfbXNnIGZyb20gcHNvY2stXFx1MDAzZWluZ3Jlc3NfbXNnIHRvIEBtc2cuICovXFxubmV0L2NvcmUvc2ttc2cuYzo1MDE6aW50IHNrX21zZ19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9jb3JlL3NrbXNnLmMtNTAyLVxcdFxcdCAgIGludCBsZW4sIGludCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NTA2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19yZWN2bXNnKTtcXG5uZXQvY29yZS9za21zZy5jLTUwNy1cXG5uZXQvY29yZS9za21zZy5jOjUwODpib29sIHNrX21zZ19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2NvcmUvc2ttc2cuYy01MDkte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz04NTE9c3RhdGljIHZvaWQgc2tfcHNvY2tfbGlua19kZXN0cm95KHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTg2MC1cXG5uZXQvY29yZS9za21zZy5jOjg2MTp2b2lkIHNrX3Bzb2NrX3N0b3Aoc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTg2Mi17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTg3MT1zdGF0aWMgdm9pZCBza19wc29ja19kZXN0cm95KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtODk1LVxcbm5ldC9jb3JlL3NrbXNnLmM6ODk2OnZvaWQgc2tfcHNvY2tfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy04OTcte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05MTQ9c3RhdGljIGludCBza19wc29ja19tYXBfdmVyZChpbnQgdmVyZGljdCwgYm9vbCByZWRpcilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTI2LVxcbm5ldC9jb3JlL3NrbXNnLmM6OTI3OmludCBza19wc29ja19tc2dfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxubmV0L2NvcmUvc2ttc2cuYy05MjgtXFx0XFx0XFx0IHN0cnVjdCBza19tc2cgKm1zZylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTEzOD1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTUzLVxcbm5ldC9jb3JlL3NrbXNnLmM6MTE1NDppbnQgc2tfcHNvY2tfaW5pdF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTExNTUte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMTc0LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTE3NTp2b2lkIHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE3Ni17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExODQtXFxubmV0L2NvcmUvc2ttc2cuYzoxMTg1OnZvaWQgc2tfcHNvY2tfc3RvcF9zdHJwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTExODYte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMjQxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3ZlcmRpY3RfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyNjctXFxubmV0L2NvcmUvc2ttc2cuYzoxMjY4OnZvaWQgc2tfcHNvY2tfc3RhcnRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMjY5LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI3Ny1cXG5uZXQvY29yZS9za21zZy5jOjEyNzg6dm9pZCBza19wc29ja19zdG9wX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI3OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE3OjU0Ljc5NTY4MjM2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTE2OTQ4NzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgcHNvY2sgRmxvdyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZvciB0aGVzZSBwYWNrZXQgc29ja2V0IGZ1bmN0aW9ucy4gSSd2ZSBnb3QgYSBmZXcgc3Ryb25nIGNvbnRlbmRlcnMgcmlnaHQgb2ZmIHRoZSBiYXQ6IGBza19wc29ja19pbml0X3N0cnBgLCBgc2tfcHNvY2tfc3RhcnRfc3RycGAsIGFuZCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAuIFRob3NlIGxvb2sgbGlrZSBwcm9taXNpbmcgc3RhcnRpbmcgcG9pbnRzLiBCdXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5UaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVGhleSBhcmUgY2FsbGVkIGJ5IGBza19wc29ja19oYW5kbGVfc2tiYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgLiBOb3csIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyB0cmlnZ2VyZWQgZnJvbSBgc2tfcHNvY2tfc3RycF9yZWFkYCBhbmQgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAuICBgc2tfcHNvY2tfc3RycF9yZWFkYCBpcyByZWdpc3RlcmVkIGFzIGAucmN2X21zZ2Agd2l0aGluIGBza19wc29ja19pbml0X3N0cnBgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBGdXJ0aGVybW9yZSwgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgaXMgY2FsbGVkIGJ5IGBza19wc29ja192ZXJkaWN0X2RhdGFfcmVhZHlgLCB3aGljaCBpcyByZWdpc3RlcmVkIGFzIGAuc2tfZGF0YV9yZWFkeWAgaW4gYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLlxuXG5BbHJpZ2h0LCBJIHRoaW5rIEknbSBnZXR0aW5nIGEgY2xlYXJlciBwaWN0dXJlLiAgYHNrX3Bzb2NrX2luaXRfc3RycGAgYW5kIGBza19wc29ja19zdGFydF92ZXJkaWN0YCBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3Igc2V0dGluZyB1cCB0aGUgZW50aXJlIHByb2Nlc3NpbmcgZmxvdy4gVGhleSdyZSB3aGVyZSB0aGUgY2hhaW4gbGlrZWx5IGJlZ2lucy5cblxuTm93LCB3aGF0IGFib3V0IGBza19wc29ja19tc2dfdmVyZGljdGA/IEkgbmVlZCB0byBjaGVjayBpZiB0aGlzIGlzIHJlbGV2YW50IHRvIHRoZSBgc2tfYnVmZmAgcGF0aC4gQWgsIGl0IHNlZW1zIGxpa2UgaXQncyBzcGVjaWZpYyB0byBgc2tfbXNnYCBzbyBpdCBwcm9iYWJseSB3b24ndCBiZSBhcyBpbXBvcnRhbnQgZm9yIHdoYXQgSSdtIGxvb2tpbmcgYXQuXG5cblRpbWUgdG8gc3dpdGNoIGdlYXJzIGFuZCBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0J3MgZW5hYmxlZC4gQWxzbywgdGhlIGNvZGUgZm9yIHRoZSByZWxhdGVkIGBza19tc2dgIG9wZXJhdGlvbnMgc2hvdWxkIGJlIGluIGBuZXQvY29yZS9za21zZy5jYC4gTGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBNYWtlZmlsZWAgaW4gYG5ldC9jb3JlL2AgdG8gc2VlIGhvdyB0aG9zZSBhcmUgYnVpbHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE4OjAwLjkxMjYzMzgzN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2ODg5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ttc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9NDM9b2JqLSQoQ09ORklHX0ZBSUxPVkVSKSArPSBmYWlsb3Zlci5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODowMC45ODgzMjgwMzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3MDkxODY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGJyZWFrZG93biBvZiB3aGF0IEknbSBsb29raW5nIGF0OlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBTb2NrZXQgTWVzc2FnaW5nIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX05FVF9TT0NLX01TR2AuIFRoYXQgbXVjaCBpcyBzdHJhaWdodGZvcndhcmQuIE5vdywgaXQgbG9va3MgbGlrZSBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCAqbWlnaHQqIGFsc28gYmUgYSByZXF1aXJlbWVudCwgYmVjYXVzZSB0aGF0IGBza19wc29ja19zdHJwX3JlYWRgIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHdyYXBwZWQgaW4gYW4gYCNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilgIGJsb2NrLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoYXQncyBhY3R1YWxseSB0aGUgY2FzZS4gQmVzdCBiZXQgaXMgdG8ganVtcCBpbnRvIGBuZXQvY29yZS9za21zZy5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHNlZSBob3cgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgaXMgdXNlZCBhbmQgaWYgaXQncyB0cnVseSBlc3NlbnRpYWwgaW4gdGhpcyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1OTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODowNS4xNTkyNjA0ODJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzc2OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZfU1RSRUFNX1BBUlNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za21zZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NTQ1PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX2luZ3Jlc3NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01NzMtXFxubmV0L2NvcmUvc2ttc2cuYzo1NzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxcbm5ldC9jb3JlL3NrbXNnLmMtNTc1LVxcdHBzb2NrLVxcdTAwM2VpbmdyZXNzX2J5dGVzICs9IGxlbjtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTA2OD1zdGF0aWMgdm9pZCBza19wc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwODQtXFxubmV0L2NvcmUvc2ttc2cuYzoxMDg1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUilcXG5uZXQvY29yZS9za21zZy5jLTEwODYtc3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9yZWFkKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEyMDQ9c3RhdGljIHZvaWQgc2tfcHNvY2tfZG9uZV9zdHJwKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEyMDYtfVxcbm5ldC9jb3JlL3NrbXNnLmM6MTIwNzojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXFxubmV0L2NvcmUvc2ttc2cuYy0xMjA4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODowNS4yMTE2NDU0NzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1NjUyNDQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBCUEYgU3RyZWFtIFBhcnNlcioqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIHN0cmVhbSBwYXJzZXIgc3R1ZmYuIEl0J3MgY2xlYXIgdGhhdCBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCBpcyBhIG11c3QtaGF2ZSBmb3IgdGhlIHN0cnBhcnNlciBwYXRoLCBubyBxdWVzdGlvbiBhYm91dCB0aGF0LiBOb3csIGEgcXVlc3Rpb24gcG9wcyBpbnRvIG15IGhlYWQ6IHdoYXQncyB0aGUgZGVhbCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgPyBJdCAqdXN1YWxseSogZ29lcyBoYW5kLWluLWhhbmQgd2l0aCBCUEYgZnVuY3Rpb25hbGl0eSBpbiBnZW5lcmFsLCByaWdodD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgaXQncyBzdHJpY3RseSAqcmVxdWlyZWQqIGhlcmUgb3IganVzdCBnZW5lcmFsbHkgcmVjb21tZW5kZWQuIExldCdzIHNlZS4uLkkgc2hvdWxkIGNoZWNrIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzIHRvIHNlZSBob3cgYE5FVF9TT0NLX01TR2AgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYXJlIHRpZWQgdG9nZXRoZXIuIEVpdGhlciBgbmV0L2NvcmUvS2NvbmZpZ2Agb3IganVzdCB0aGUgbWFpbiBgbmV0L0tjb25maWdgIGZpbGUgc2hvdWxkIGhhdmUgdGhlIGFuc3dlcnMgSSBuZWVkLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMzIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODowOC43NjgxNzM4MDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTY3Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU09DS19NU0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXFxuLS1cXG5uZXQvS2NvbmZpZy00NzgtXFxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy00ODAtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODowOC44MjE3NDY1OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyMzE0NTQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipIaWRkZW4gQm9vbCBJbnZlc3RpZ2F0aW9uOiBORVRcXF9TT0NLXFxfTVNHKipcblxuT2theSwgc28gdGhlcmUncyB0aGlzIGBORVRfU09DS19NU0dgIHZhcmlhYmxlLCBhbmQgaXQncyBhIGhpZGRlbiBib29sZWFuLiBNZWFuaW5nIGl0J3MgYmVpbmcgdXNlZCBpbnRlcm5hbGx5LCBwcm9iYWJseSBub3QgZGlyZWN0bHkgZXhwb3NlZCBmb3IgY29uZmlndXJhdGlvbiBvciB1c2VyIGlucHV0LiBNeSBndXQgc2F5cyB0aGlzIHdhc24ndCBkZWNsYXJlZCBvbiBhIHdoaW0uIFRoZSBmYWN0IHRoYXQgaXQncyBoaWRkZW4gaW1wbGllcyBpdCdzIGJlaW5nIHNldCBvciB1bnNldCBiYXNlZCBvbiAqc29tZSogY29uZGl0aW9uLCAqc29tZSogb3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtIGlzIGRlY2lkaW5nIHdoZW4gdGhpcyBmbGFnIGlzIGFjdGl2ZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IHRyaWdnZXJpbmcgbWVjaGFuaXNtIGlzLiBXaGF0IGFyZSB0aGUgbG9naWNhbCBwYXRod2F5cyB0aGF0IGxlYWQgdG8gdGhpcyBib29sIGJlaW5nIG1vZGlmaWVkPyBJdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBuZXQgc29ja2V0IG1lc3NhZ2UgaGFuZGxpbmcgYWN0dWFsbHkgd29ya3MsIGFuZCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjMyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MTEuOTQ0ODk2ODk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUxMTkwODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBORVRfU09DS19NU0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0zMy1cXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbmtlcm5lbC9icGYvS2NvbmZpZzozNDpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbmtlcm5lbC9icGYvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4tLVxcbm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG4tLVxcbm5ldC9LY29uZmlnLTM2Ni1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnOjM2NzpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctMzY4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9pcHY0L0tjb25maWc6Mzg2OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTMtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2Ni9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUT19HQ01cXG5uZXQvdGxzL0tjb25maWc6MTE6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC90bHMvS2NvbmZpZy0xMi1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MTQuNDk2MDkyMTA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDY0MjUyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgYXVkaWVuY2UgaXMgYW5vdGhlciBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTkVUX1NPQ0tfTVNHIFBhdGh3YXkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBJIHNlZSB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgdHJpZ2dlcmluZyBgTkVUX1NPQ0tfTVNHYCwgYW5kIGFsc28sIHN0cmFuZ2VseSwgdGhhdCBgQlBGX1NUUkVBTV9QQVJTRVJgIGlzIHNlbGVjdGluZyBgTkVUX1NPQ0tfTVNHYCB0b28uIFRoYXTigJlzIHdvcnRoIGRpZ2dpbmcgaW50by4gR2l2ZW4gdGhlIG92ZXJsYXAsIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNoYXJlZCBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgYEJQRl9TVFJFQU1fUEFSU0VSYCBiZWNhdXNlIGl0IGlzIGxlc3MgY29udmVudGlvbmFsIGFuZCBsaWtlbHkgdGhlIHNvdXJjZSBvZiB0aGUgb3ZlcmxhcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGJvdGggc2VlbSB0byBiZSBwb2ludGluZyB0b3dhcmQgdGhlIHNhbWUgbmV0IHNvY2tldCBtZXNzYWdlIGhhbmRsaW5nLiBUaGVyZSBjb3VsZCBiZSBzb21lIGludGVyZXN0aW5nIGFyY2hpdGVjdHVyZSBjaG9pY2VzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjQ2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MTguMTQyNTIwMDAyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzE2MDA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcXG4tLVxcbm5ldC9LY29uZmlnLTM2MC1cXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxubmV0L0tjb25maWctMzYyLVxcdGJvb2wgXFxcImVuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MTguMjA1Njg0MzgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzk2NDY4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkVuYWJsaW5nIEJQRiBTdHJlYW0gUGFyc2luZyBhbmQgU3lzY2FsbCBJbnRlZ3JhdGlvbioqXG5cbkFscmlnaHQsIHNvIGl0J3MgbG9va2luZyBsaWtlIGBCUEZfU1RSRUFNX1BBUlNFUmAgaXMgZXhwb3NlZCBhcyBhIGJvb2xlYW4gc2V0dGluZy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UgZGVmaW5pdGVseSBuZWVkIHRvIGVuYWJsZSBib3RoIGBCUEZfU1RSRUFNX1BBUlNFUmAgYW5kIGBCUEZfU1lTQ0FMTGAgZnVuY3Rpb25hbGl0eS4gVGhlIGNvbWJpbmVkIHBvd2VyIGhlcmUgaXMgc2lnbmlmaWNhbnQgZm9yIHdoYXQgSSdtIGFpbWluZyB0byBhY2hpZXZlLlxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQgZnVydGhlciwgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYEJQRl9TWVNDQUxMYCBtZWNoYW5pc20uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIGFueSByZWNlbnQgY2hhbmdlcy4gSSBuZWVkIHRvIGFzc2VzcyB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIG9mIHRoaXMgY291cGxpbmcsIGFuZCB3aGF0IGltcGFjdCBpdCB3aWxsIGhhdmUgb24gcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MjEuNTg1MzMzMTc5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODEzMTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MjEuNjczNDcxMjY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NzUzNDAyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFN0cmVhbSBQYXJzZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBCUEYgc3RyZWFtIHBhcnNlciBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgaW4gdGhlIGNvbnRleHQgb2YgZGlyZWN0IHN0cnBhcnNlciBTS19QQVNTIGNsb25lcy4gRnJvbSB0aGUgY29kZSwgSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cywgY29uZmlnLXdpc2UsIGludm9sdmVzIGVuYWJsaW5nIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAuXG5cbkZ1bmN0aW9uYWxseSwgSSdtIHByZXR0eSBjb25maWRlbnQgaW4gdGhlIGZpeC4gTm93LCBsZXQncyBuYWlsIGRvd24gYSBnb29kIGZ1enppbmcgc3RyYXRlZ3kuXG5cbk15IGluaXRpYWwgdGhvdWdodHMgb24gd29ydGhmdXp6aW5nIGFyZSBwb3NpdGl2ZS4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHNvbWUgZ29vZCB0ZXN0aW5nIG91dCBvZiB0aGlzLlxuXG5SZWdhcmRpbmcgZm9jdXMgc3ltYm9scywgSSBpbml0aWFsbHkgaGFkIGEgbGlzdDogYHNrX3Bzb2NrX2luaXRfc3RycGAsIGBza19wc29ja19zdGFydF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLCBhbmQgcG90ZW50aWFsbHkgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCAodGhvdWdoIHRoYXQncyBzdGF0aWMsIHNvIGl0J3MgbGlrZWx5IG5vdCBnb2luZyB0byBiZSBmZWFzaWJsZSkuIFdhaXQsIGBza19wc29ja192ZXJkaWN0X2FwcGx5YCBpcyBhbHNvIHN0YXRpYy4gU28sIEkgbmVlZCB0byBhZGp1c3QgdGhpcyBsaXN0IGFuZCBrZWVwIHRoaW5ncyBwcmFjdGljYWwuXG5cbldlIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBgc2tfcHNvY2tfaW5pdF9zdHJwYCwgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgLCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgLlxuXG5UaGlua2luZyBhYm91dCB0aGUgY29ubmVjdGlvbiBvZiBgQlBGX1NLX1NLQl9TVFJFQU1fUEFSU0VSYCBhbmQgYHNrX3Bzb2NrX2luaXRfc3RycGAgKHRoYXQgbG9va3MgcHJvbWlzaW5nIHNpbmNlIGl0J3MgYW4gYXR0YWNoIGNhbGwpLiBBbHNvLCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAgaXMgY2FsbGVkIGJ5IEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QuXG5cblRoZXNlIGFyZSBnb29kIGVudHJ5IHBvaW50cyB0byB0aGUgY29kZS5cblxuQ2hlY2tpbmcgYWdhaW4sIGBza19wc29ja19pbml0X3N0cnBgIGFuZCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAgYXJlIGluZGVlZCB0aGUgYmVzdCBlbnRyeSBwb2ludHMgdG8gdGhlIG1vZGlmaWVkIGNvZGUgcGF0aC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSByaWdodCBzeW1ib2xzIHRvIHByaW9yaXRpemUuXG5cbkFsc28sIGBza19tc2dfcmVjdm1zZ2AgaXMgbGlrZWx5IHJlbGV2YW50IHNpbmNlIGl0IHJlYWRzIHRob3NlIHF1ZXVlZCBtZXNzYWdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MjguNDQ4ODE1MjI0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTc1NjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19tc2dfcmVjdm1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za21zZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9NDExPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19tZW1jb3B5X2Zyb21faXRlcik7XFxubmV0L2NvcmUvc2ttc2cuYy00MTItXFxubmV0L2NvcmUvc2ttc2cuYzo0MTM6aW50IF9fc2tfbXNnX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L2NvcmUvc2ttc2cuYy00MTQtXFx0XFx0ICAgICBpbnQgbGVuLCBpbnQgZmxhZ3MsIGludCAqY29waWVkX2Zyb21fc2VsZilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNTAwLS8qIFJlY2VpdmUgc2tfbXNnIGZyb20gcHNvY2stXFx1MDAzZWluZ3Jlc3NfbXNnIHRvIEBtc2cuICovXFxubmV0L2NvcmUvc2ttc2cuYzo1MDE6aW50IHNrX21zZ19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9jb3JlL3NrbXNnLmMtNTAyLVxcdFxcdCAgIGludCBsZW4sIGludCBmbGFncylcXG5uZXQvY29yZS9za21zZy5jLTUwMy17XFxubmV0L2NvcmUvc2ttc2cuYzo1MDQ6XFx0cmV0dXJuIF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIE5VTEwpO1xcbm5ldC9jb3JlL3NrbXNnLmMtNTA1LX1cXG5uZXQvY29yZS9za21zZy5jOjUwNjpFWFBPUlRfU1lNQk9MX0dQTChza19tc2dfcmVjdm1zZyk7XFxubmV0L2NvcmUvc2ttc2cuYy01MDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE4OjI4LjUwODU3NjA4M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTY3NDM5MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRW50cnkgUG9pbnRzIGZvciBOZXR3b3JrIFNvY2tldCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gYHNrX21zZ19yZWN2bXNnYCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkLCB0aGF0J3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVsc2UgaW4gYG5ldC9jb3JlL3NrbXNnLmNgIGlzIHJlbGV2YW50LCBzcGVjaWZpY2FsbHkgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFzIHRob3NlIGFyZSB0aGUgb25lcyB3ZSBjYW4gdXNlLiBJIHF1aWNrbHkgcnVsZSBvdXQgYHNrX3Bzb2NrX21zZ192ZXJkaWN0YCBiZWNhdXNlIHRoYXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byB0aGUgKnNlbmQqIHBhdGggKGBza19tc2dgKSwgbm90IHRoZSByZWNlaXZlIHBhdGggKGBza19idWZmYCkgd2hpY2ggaXMgd2hhdCBJJ20gbW9yZSBpbnRlcmVzdGVkIGluIGhlcmUuXG5cblRoZSBwYXRjaCBJJ20gbG9va2luZyBhdCBmb2N1c2VzIG9uIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCwgYnV0IHRoYXQncyBjYWxsZWQgaW5kaXJlY3RseS4gTGV0IG1lIHRyYWNlIHRoZSBjYWxsczogaXQncyBjYWxsZWQgZnJvbSBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgIGFuZCBgc2tfcHNvY2tfdmVyZGljdF9hcHBseWAuIGBza19wc29ja19za2JfaW5ncmVzc2AgaXMgZnVydGhlciBjYWxsZWQgYnkgYHNrX3Bzb2NrX2hhbmRsZV9za2JgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgc2tfcHNvY2tfYmFja2xvZ2Agd2hpY2ggaXMsIG9mIGNvdXJzZSwgYSB3b3JrcXVldWUuIFRoZW4gYHNrX3Bzb2NrX3ZlcmRpY3RfYXBwbHlgIGdldHMgY2FsbGVkIGZyb20gYHNrX3Bzb2NrX3N0cnBfcmVhZGAgYW5kIGBza19wc29ja192ZXJkaWN0X3JlY3ZgLlxuXG5TbywgdGhhdCB0ZWxscyBtZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIGVzc2VudGlhbGx5OiBgc2tfcHNvY2tfc3RycF9yZWFkYCAod2hpY2ggaXMgc3RhdGljLCBhbmQgcmVnaXN0ZXJlZCB0aHJvdWdoIGBza19wc29ja19pbml0X3N0cnBgKSwgYHNrX3Bzb2NrX3ZlcmRpY3RfcmVjdmAgKGFsc28gc3RhdGljLCByZWdpc3RlcmVkIHRocm91Z2ggYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgKSwgYW5kIGZpbmFsbHksIHRoZSB3b3JrcXVldWUgYHNrX3Bzb2NrX2JhY2tsb2dgLlxuXG5HaXZlbiB0aGUgY29uc3RyYWludCBvbiBub24tc3RhdGljIGZ1bmN0aW9ucywgaXQgc2VlbXMgdGhhdCBgc2tfcHNvY2tfaW5pdF9zdHJwYCBhbmQgYHNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgdGhlIGJlc3Qgb3B0aW9ucyBmb3Igb3VyIHVzZS1jYXNlLCBhcyB0aGV5IHJlZ2lzdGVyIHRoZSBzdGF0aWMgZnVuY3Rpb25zLiBBZGRpbmcgYHNrX21zZ19yZWN2bXNnYCBtYWtlcyBzZW5zZSB0b28sIHNpbmNlIGl0IGFjdHVhbGx5IGNvbnN1bWVzIHRoZSBtZXNzYWdlcy4gTGV0IG1lIGdvIGJhY2sgYW5kIGdpdmUgdGhvc2UgdHdvIGZ1bmN0aW9ucyBhIGNsb3NlciBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA4NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODozNC42NzYwMTg1NDhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDQyMTE3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19wc29ja19pbml0X3N0cnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2ttc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za21zZy5jPTExMzg9c3RhdGljIHZvaWQgc2tfcHNvY2tfc3RycF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE1My1cXG5uZXQvY29yZS9za21zZy5jOjExNTQ6aW50IHNrX3Bzb2NrX2luaXRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMTU1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6MzQuNzkwNDQ1Nzk2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTMwMjgyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBTaXRlcyBvZiBgc2tfcHNvY2tfaW5pdF9zdHJwYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgc2tfcHNvY2tfaW5pdF9zdHJwYCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCBldmVyeSBzaW5nbGUgbG9jYXRpb24gd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgd2l0aGluIHRoaXMgcHJvamVjdC4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgYW5kIHRoZSBjcml0aWNhbCBwaWVjZXMgb2YgaW5mb3JtYXRpb24gdGhhdCBJJ2xsIG5lZWQgdG8ga25vdy4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBVbmRlcnN0YW5kaW5nICp3aHkqIGl0IGlzIGJlaW5nIGNhbGxlZCB3aWxsIGNvbWUgYWZ0ZXIgdGhhdC4gVGhlbiBJIGNhbiBzdGFydCB0byBmb3JtIGFuIGlkZWEgb2Ygd2h5IHRoaXMgZnVuY3Rpb24gZXhpc3RzIGFuZCB3aGF0IHJvbGUgaXQgcGxheXMgd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZS4gVGltZSB0byBnZXQgc2VhcmNoaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA1OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE4OjM4LjM4MzQ3Njg1MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MDQ4MjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX2luaXRfc3RycFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmM9MjE3PXN0YXRpYyBpbnQgc29ja19tYXBfbGluayhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTMwNi1cXHRcXHRpZiAoc2tfaXNfdGNwKHNrKSlcXG5uZXQvY29yZS9zb2NrX21hcC5jOjMwNzpcXHRcXHRcXHRyZXQgPSBza19wc29ja19pbml0X3N0cnAoc2ssIHBzb2NrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTMwOC1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE4OjM4LjQ5MDUyOTMwOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQyNDMxODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU29ja2V0IE1hcCBMaW5raW5nIFByb2Nlc3MqKlxuXG5SaWdodCwgc28gSSdtIHRyYWNpbmcgdGhpcyBleGVjdXRpb24gcGF0aCwgYW5kIGl0IGxvb2tzIGxpa2UgYHNvY2tfbWFwX2xpbmtgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLCBiZWluZyBjYWxsZWQgYnkgYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBgc29ja19tYXBfbGlua2AgYmVjYXVzZSBJJ20gc2VlaW5nIHRoaXMgY2FsbCB0byBgc2tfcHNvY2tfaW5pdF9zdHJwYCBjb25kaXRpb25hbCBvbiB0aGVyZSBiZWluZyBhIHBhcnNlciBwcm9ncmFtIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFwLiBUaGF0IHN1Z2dlc3RzIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IGludGVyYWN0aW9uIHdpdGggcHJvZ3JhbSBsb2FkaW5nIG9yIHNvbWUgc29ydCBvZiBwcmUtcHJvY2Vzc2luZy4gVGhlIGZhY3QgdGhhdCBgc2tfcHNvY2tfaW5pdF9zdHJwYCBpcyBjYWxsZWQsIGxpa2VseSBtZWFucyB3ZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHBhcnNlciBwcm9ncmFtIGF0IG1hcCBsaW5rIHRpbWUuIExldCdzIGhlYWQgc3RyYWlnaHQgaW50byBgbmV0L2NvcmUvc29ja19tYXAuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYHNvY2tfbWFwX2xpbmtgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgZmxvdyBhbmQgcHJlY2lzZWx5IHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoYXQgYHNrX3Bzb2NrX2luaXRfc3RycGAgY2FsbC4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzOTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODo0Mi4xMzI5NjM4ODNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NjgwNzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvY2tfbWFwX2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jPTE5Nz1zdGF0aWMgc3RydWN0IHNrX3Bzb2NrICpzb2NrX21hcF9wc29ja19nZXRfY2hlY2tlZChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTIxNi1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjIxNzpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMjE4LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NDcwPXN0YXRpYyBpbnQgc29ja19tYXBfdXBkYXRlX2NvbW1vbihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIgaWR4LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy00ODgtXFxubmV0L2NvcmUvc29ja19tYXAuYzo0ODk6XFx0cmV0ID0gc29ja19tYXBfbGluayhtYXAsIHNrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTQ5MC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9OTkzPXN0YXRpYyBpbnQgc29ja19oYXNoX3VwZGF0ZV9jb21tb24oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMDExLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTAxMjpcXHRyZXQgPSBzb2NrX21hcF9saW5rKG1hcCwgc2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAxMy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTczNz1zdHJ1Y3Qgc29ja21hcF9saW5rIHtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc0MS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE3NDI6c3RhdGljIHZvaWQgc29ja19tYXBfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NDMte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzU4LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc1OTpzdGF0aWMgaW50IHNvY2tfbWFwX2xpbmtfZGV0YWNoKHN0cnVjdCBicGZfbGluayAqbGluaylcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NjAte1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc2MTpcXHRzb2NrX21hcF9saW5rX3JlbGVhc2UobGluayk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzYyLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzY0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTc2NTpzdGF0aWMgdm9pZCBzb2NrX21hcF9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTc2Ni17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE3NzMtICovXFxubmV0L2NvcmUvc29ja19tYXAuYzoxNzc0OnN0YXRpYyBpbnQgc29ja19tYXBfbGlua191cGRhdGVfcHJvZyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNzc1LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODMzLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTgzNDpzdGF0aWMgdTMyIHNvY2tfbWFwX2xpbmtfZ2V0X21hcF9pZChjb25zdCBzdHJ1Y3Qgc29ja21hcF9saW5rICpzb2NrbWFwX2xpbmspXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODM1LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg0NC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NDU6c3RhdGljIGludCBzb2NrX21hcF9saW5rX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODQ2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODQ4LVxcdGNvbnN0IHN0cnVjdCBzb2NrbWFwX2xpbmsgKnNvY2ttYXBfbGluayA9IGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3Qgc29ja21hcF9saW5rLCBsaW5rKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NDk6XFx0dTMyIG1hcF9pZCA9IHNvY2tfbWFwX2xpbmtfZ2V0X21hcF9pZChzb2NrbWFwX2xpbmspO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1MC1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg1NS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NTY6c3RhdGljIHZvaWQgc29ja19tYXBfbGlua19zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODU3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzZXFfZmlsZSAqc2VxKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xODU5LVxcdGNvbnN0IHN0cnVjdCBzb2NrbWFwX2xpbmsgKnNvY2ttYXBfbGluayA9IGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3Qgc29ja21hcF9saW5rLCBsaW5rKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NjA6XFx0dTMyIG1hcF9pZCA9IHNvY2tfbWFwX2xpbmtfZ2V0X21hcF9pZChzb2NrbWFwX2xpbmspO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg2MS1cXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg2NS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NjY6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgc29ja19tYXBfbGlua19vcHMgPSB7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxODY3OlxcdC5yZWxlYXNlID0gc29ja19tYXBfbGlua19yZWxlYXNlLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg2ODpcXHQuZGVhbGxvYyA9IHNvY2tfbWFwX2xpbmtfZGVhbGxvYyxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4Njk6XFx0LmRldGFjaCA9IHNvY2tfbWFwX2xpbmtfZGV0YWNoLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg3MDpcXHQudXBkYXRlX3Byb2cgPSBzb2NrX21hcF9saW5rX3VwZGF0ZV9wcm9nLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTg3MTpcXHQuZmlsbF9saW5rX2luZm8gPSBzb2NrX21hcF9saW5rX2ZpbGxfaW5mbyxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE4NzI6XFx0LnNob3dfZmRpbmZvID0gc29ja19tYXBfbGlua19zaG93X2ZkaW5mbyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzMtfTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE4NzQtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxODc1OmludCBzb2NrX21hcF9saW5rX2NyZWF0ZShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTg3Ni17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MDAtXFx0YXR0YWNoX3R5cGUgPSBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZTtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE5MDE6XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2c29ja21hcF9saW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1NPQ0tNQVAsIFxcdTAwMjZzb2NrX21hcF9saW5rX29wcywgcHJvZyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTE5MDItXFx0XFx0ICAgICAgYXR0YWNoX3R5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODo0Mi4yMDE2NTEyNTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3NDczNDc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBGdXp6aW5nIEVmZm9ydHMqKlxuXG5Pa2F5LCBzbyBJJ20gemVyb2luZyBpbiBvbiB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgdGhpcyBCUEYgY29kZS4gSXQgbG9va3MgbGlrZSBgc29ja19tYXBfdXBkYXRlX2VsZW1gIGFuZCBgc29ja19oYXNoX3VwZGF0ZV9lbGVtYCBhcmUgdGhlIHRvcC1sZXZlbCBjYWxscy4gSG93ZXZlciwgdGhleSBhcmUgZnVuZGFtZW50YWxseSBtYXAgb3BlcmF0aW9ucy4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgZnV6emluZyBzaG91bGQgY29uY2VudHJhdGUgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIEJQRiBtYXAgdXBkYXRlcyBhbmQgdGhlIHNvY2tldCBvcGVyYXRpb25zIHRoZW1zZWx2ZXMuXG5cblNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgbG9va2luZyBjbG9zZWx5IGF0IGBza19wc29ja19pbml0X3N0cnBgIGFuZCBgc2tfcHNvY2tfc3RhcnRfdmVyZGljdGAuIFRob3NlIGxvb2sgbGlrZSBwcm9taXNpbmcgdGFyZ2V0cy4gQWxzbywgYHNrX21zZ19yZWN2bXNnYCBpcyBkZWZpbml0ZWx5IHdvcnRoIHNvbWUgYXR0ZW50aW9uLlxuXG5KdXN0IHRvIGJlIHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYC4gTm9wZSwgdGhhdCdzIHN0YXRpYy4gU2FtZSB3aXRoIGBza19wc29ja19oYW5kbGVfc2tiYCBhbmQgYHNrX3Bzb2NrX2JhY2tsb2dgLiBUaG9zZSB3b24ndCB3b3JrIGFzIGRpcmVjdCBlbnRyeSBwb2ludHMuXG5cbkFscmlnaHQsIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBMZXQncyBoZWFkIG92ZXIgdG8gYG5ldC9jb3JlL3NrbXNnLmNgLiBUaGF0IGZpbGUgc2hvdWxkIGNvbnRhaW4gc29tZSB1c2VmdWwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgU0tNU0cgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzE0LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE4OjQ2Ljg3NjM4OTgwMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMTUwNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aMC05X10rIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za21zZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrbXNnLmM9MTI9c3RhdGljIGJvb2wgc2tfbXNnX3RyeV9jb2FsZXNjZV9vayhzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBlbGVtX2ZpcnN0X2NvYWxlc2NlKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0yNS1cXG5uZXQvY29yZS9za21zZy5jOjI2OmludCBza19tc2dfYWxsb2Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBsZW4sXFxubmV0L2NvcmUvc2ttc2cuYy0yNy1cXHRcXHQgaW50IGVsZW1fZmlyc3RfY29hbGVzY2UpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTg1PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19hbGxvYyk7XFxubmV0L2NvcmUvc2ttc2cuYy04Ni1cXG5uZXQvY29yZS9za21zZy5jOjg3OmludCBza19tc2dfY2xvbmUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICpkc3QsIHN0cnVjdCBza19tc2cgKnNyYyxcXG5uZXQvY29yZS9za21zZy5jLTg4LVxcdFxcdCB1MzIgb2ZmLCB1MzIgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMzY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX2Nsb25lKTtcXG5uZXQvY29yZS9za21zZy5jLTEzNy1cXG5uZXQvY29yZS9za21zZy5jOjEzODp2b2lkIHNrX21zZ19yZXR1cm5femVybyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgaW50IGJ5dGVzKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTM5LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MTYwPUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19yZXR1cm5femVybyk7XFxubmV0L2NvcmUvc2ttc2cuYy0xNjEtXFxubmV0L2NvcmUvc2ttc2cuYzoxNjI6dm9pZCBza19tc2dfcmV0dXJuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCBpbnQgYnl0ZXMpXFxubmV0L2NvcmUvc2ttc2cuYy0xNjMte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xOTQ9c3RhdGljIGludCBfX3NrX21zZ19mcmVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgaSxcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMjExLVxcbm5ldC9jb3JlL3NrbXNnLmM6MjEyOmludCBza19tc2dfZnJlZV9ub2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZylcXG5uZXQvY29yZS9za21zZy5jLTIxMy17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTIxNj1FWFBPUlRfU1lNQk9MX0dQTChza19tc2dfZnJlZV9ub2NoYXJnZSk7XFxubmV0L2NvcmUvc2ttc2cuYy0yMTctXFxubmV0L2NvcmUvc2ttc2cuYzoyMTg6aW50IHNrX21zZ19mcmVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnKVxcbm5ldC9jb3JlL3NrbXNnLmMtMjE5LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MjI0PXN0YXRpYyB2b2lkIF9fc2tfbXNnX2ZyZWVfcGFydGlhbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMjUxLVxcbm5ldC9jb3JlL3NrbXNnLmM6MjUyOnZvaWQgc2tfbXNnX2ZyZWVfcGFydGlhbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzKVxcbm5ldC9jb3JlL3NrbXNnLmMtMjUzLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9MjU2PUVYUE9SVF9TWU1CT0xfR1BMKHNrX21zZ19mcmVlX3BhcnRpYWwpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMjU3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MjU4OnZvaWQgc2tfbXNnX2ZyZWVfcGFydGlhbF9ub2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG5uZXQvY29yZS9za21zZy5jLTI1OS1cXHRcXHRcXHRcXHQgIHUzMiBieXRlcylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMjYzLVxcbm5ldC9jb3JlL3NrbXNnLmM6MjY0OnZvaWQgc2tfbXNnX3RyaW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIGludCBsZW4pXFxubmV0L2NvcmUvc2ttc2cuYy0yNjUte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0zMTA9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3RyaW0pO1xcbm5ldC9jb3JlL3NrbXNnLmMtMzExLVxcbm5ldC9jb3JlL3NrbXNnLmM6MzEyOmludCBza19tc2dfemVyb2NvcHlfZnJvbV9pdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxcbm5ldC9jb3JlL3NrbXNnLmMtMzEzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0zNjc9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3plcm9jb3B5X2Zyb21faXRlcik7XFxubmV0L2NvcmUvc2ttc2cuYy0zNjgtXFxubmV0L2NvcmUvc2ttc2cuYzozNjk6aW50IHNrX21zZ19tZW1jb3B5X2Zyb21faXRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG5uZXQvY29yZS9za21zZy5jLTM3MC1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz00MTE9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX21lbWNvcHlfZnJvbV9pdGVyKTtcXG5uZXQvY29yZS9za21zZy5jLTQxMi1cXG5uZXQvY29yZS9za21zZy5jOjQxMzppbnQgX19za19tc2dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvY29yZS9za21zZy5jLTQxNC1cXHRcXHQgICAgIGludCBsZW4sIGludCBmbGFncywgaW50ICpjb3BpZWRfZnJvbV9zZWxmKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy01MDAtLyogUmVjZWl2ZSBza19tc2cgZnJvbSBwc29jay1cXHUwMDNlaW5ncmVzc19tc2cgdG8gQG1zZy4gKi9cXG5uZXQvY29yZS9za21zZy5jOjUwMTppbnQgc2tfbXNnX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L2NvcmUvc2ttc2cuYy01MDItXFx0XFx0ICAgaW50IGxlbiwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz01MDY9RVhQT1JUX1NZTUJPTF9HUEwoc2tfbXNnX3JlY3Ztc2cpO1xcbm5ldC9jb3JlL3NrbXNnLmMtNTA3LVxcbm5ldC9jb3JlL3NrbXNnLmM6NTA4OmJvb2wgc2tfbXNnX2lzX3JlYWRhYmxlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9za21zZy5jLTUwOS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTg1MT1zdGF0aWMgdm9pZCBza19wc29ja19saW5rX2Rlc3Ryb3koc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtODYwLVxcbm5ldC9jb3JlL3NrbXNnLmM6ODYxOnZvaWQgc2tfcHNvY2tfc3RvcChzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtODYyLXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9ODcxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2Rlc3Ryb3koc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy04OTUtXFxubmV0L2NvcmUvc2ttc2cuYzo4OTY6dm9pZCBza19wc29ja19kcm9wKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTg5Ny17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTkxND1zdGF0aWMgaW50IHNrX3Bzb2NrX21hcF92ZXJkKGludCB2ZXJkaWN0LCBib29sIHJlZGlyKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy05MjYtXFxubmV0L2NvcmUvc2ttc2cuYzo5Mjc6aW50IHNrX3Bzb2NrX21zZ192ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5uZXQvY29yZS9za21zZy5jLTkyOC1cXHRcXHRcXHQgc3RydWN0IHNrX21zZyAqbXNnKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMTM4PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExNTMtXFxubmV0L2NvcmUvc2ttc2cuYzoxMTU0OmludCBza19wc29ja19pbml0X3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE1NS17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTExNzQtXFxubmV0L2NvcmUvc2ttc2cuYzoxMTc1OnZvaWQgc2tfcHNvY2tfc3RhcnRfc3RycChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMTc2LXtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE4NC1cXG5uZXQvY29yZS9za21zZy5jOjExODU6dm9pZCBza19wc29ja19zdG9wX3N0cnAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbm5ldC9jb3JlL3NrbXNnLmMtMTE4Ni17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTEyNDE9c3RhdGljIHZvaWQgc2tfcHNvY2tfdmVyZGljdF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTI2Ny1cXG5uZXQvY29yZS9za21zZy5jOjEyNjg6dm9pZCBza19wc29ja19zdGFydF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG5uZXQvY29yZS9za21zZy5jLTEyNjkte1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMjc3LVxcbm5ldC9jb3JlL3NrbXNnLmM6MTI3ODp2b2lkIHNrX3Bzb2NrX3N0b3BfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2spXFxubmV0L2NvcmUvc2ttc2cuYy0xMjc5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6MTg6NDYuOTg3NTQ0MjU5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDU3MDcxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucy5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgU29ja2V0IEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGBza19wc29ja19pbml0X3N0cnBgLCBgc2tfcHNvY2tfc3RhcnRfc3RycGAsIGBza19wc29ja19zdGFydF92ZXJkaWN0YCwgYW5kIGBza19tc2dfcmVjdm1zZ2AgbG9vayBwcm9taXNpbmcuIFRoZXNlIHNlZW0gbGlrZSB0aGV5J3JlIGluIHRoZSByaWdodCBiYWxscGFyayBmb3Igd2hhdCBJJ20gdHJ5aW5nIHRvIGFjaGlldmUuIFRoZXkgYWxpZ24gd2l0aCB0aGUgZ2VuZXJhbCBmbG93IEkgd2FzIGV4cGVjdGluZy5cblxuTm93LCBhIHNsaWdodCBwYXVzZSBmb3IgdGhvdWdodC4gV2Fzbid0IGl0IGBza19wc29ja19zdGFydF9zdHJwYCB0aGF0IHdhcyBhbHNvIGNhbGxlZCBmcm9tIGBzb2NrX21hcF9saW5rYD8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlIGNoZWNrIHRoYXQuIEl0IHdvdWxkIGJlIGdvb2QgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIGdyYXBoIHRvIGF2b2lkIGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gTGV0J3MgZGlnIGEgbGl0dGxlIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODo1MC41MzMyNTQyOTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTE3MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3Bzb2NrX3N0YXJ0X3N0cnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc29ja19tYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9zb2NrX21hcC5jPTIxNz1zdGF0aWMgaW50IHNvY2tfbWFwX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zMTQtXFx0XFx0fVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MzE1OlxcdFxcdHNrX3Bzb2NrX3N0YXJ0X3N0cnAoc2ssIHBzb2NrKTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTMxNi1cXHR9IGVsc2UgaWYgKCFzdHJlYW1fcGFyc2VyIFxcdTAwMjZcXHUwMDI2IHN0cmVhbV92ZXJkaWN0IFxcdTAwMjZcXHUwMDI2ICFwc29jay1cXHUwMDNlc2F2ZWRfZGF0YV9yZWFkeSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMToxODo1MC42MDE3NzkyNDNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIzOTgzOTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU29ja2V0IFByb2Nlc3NpbmcgUGF0aCoqXG5cbk9rYXksIHNvIEkndmUgdHJhY2VkIHRoZSBleGVjdXRpb24gZmxvdyByZWxhdGVkIHRvIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYHNrX3Bzb2NrX3N0YXJ0X3N0cnBgIGlzIGluZGVlZCBjYWxsZWQgZnJvbSBgc29ja19tYXBfbGlua2AsIGFzIEkgc3VzcGVjdGVkLiBUaGF0IG1lYW5zIHRoZSBrZXkgc2V0dXAgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYHNrX3Bzb2NrX2luaXRfc3RycGAsIGBza19wc29ja19zdGFydF9zdHJwYCwgYW5kIGBza19wc29ja19zdGFydF92ZXJkaWN0YC4gVGhlIGFjdHVhbCBkYXRhIHBhdGggaXMgdHJpZ2dlcmVkIGJ5IHRoZSBzb2NrZXQncyByZWNlaXZlIG1lY2hhbmlzbSwgd2hpY2ggdGhlbiBnb2VzIHRocm91Z2ggZWl0aGVyIGBzdHJwYXJzZXJgIG9yIGBza19kYXRhX3JlYWR5YC4gU2luY2Ugd2UgY2FuJ3QgemVybyBpbiBkaXJlY3RseSBvbiB0aGUgc3RhdGljIGRhdGEgcGF0aCBmdW5jdGlvbnMsIEkgdGhpbmsgdGhlIG1vc3QgZWZmZWN0aXZlIGFwcHJvYWNoIGlzIHRvIGZvY3VzIG9uIHRob3NlIHNldHVwIGZ1bmN0aW9ucyBJIG1lbnRpb25lZCwgcGx1cyBgc2tfbXNnX3JlY3Ztc2dgLiBBZGRpbmcgaW4gYHNvY2tfbWFwX3VwZGF0ZV9lbGVtYCBhbmQgYHNvY2tfaGFzaF91cGRhdGVfZWxlbWAgaXMgdGVtcHRpbmcsIGJ1dCB0aGV5J3JlIG1hcCBvcGVyYXRpb25zIGFuZCBtaWdodCBpbnRyb2R1Y2UgdW5uZWNlc3Nhcnkgbm9pc2UuIEknbGwgc3RpY2sgdG8gdGhlIGNvcmUgc2V0dXAgZnVuY3Rpb25zIGFuZCBgc2tfbXNnX3JlY3Ztc2dgIHRvIGtlZXAgaXQgY29uY2lzZSBhbmQgZm9jdXNlZC5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gUmlnaHQsIHdlIGhhdmUgYEJQRl9TWVNDQUxMYCwgYEJQRl9TVFJFQU1fUEFSU0VSYCwgYW5kIGBORVRfU09DS19NU0dgLCB3aGljaCBpcyBzZWxlY3RlZCBieSBib3RoIG9mIHRoZSBmaXJzdCB0d28uIFNvLCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX1NUUkVBTV9QQVJTRVJgIGFyZSBzdWZmaWNpZW50IHRvIHRyaWdnZXIgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBhbHRlcnMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgIHRvIGhhbmRsZSBzaXR1YXRpb25zIHdoZXJlIGBza19mb3J3YXJkX2FsbG9jYCBpcyBpbnN1ZmZpY2llbnQgZHVyaW5nIHJlY2VpdmUgb3duZXJzaGlwIGFzc2lnbm1lbnQgd2hlbiBhIGRpcmVjdCBgc3RycGFyc2VyYCBTS19QQVNTIGNsb25lIGlzIGludm9sdmVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBzb2NrbWFwL3NrbXNnIEJQRiBpbmZyYXN0cnVjdHVyZS4gU28gdGhlIGNvZGUgYmVpbmcgY2hhbmdlZCBpcyByZWFjaGVkIHdoZW4gYSBCUEYgc29ja21hcCB3aXRoIGEgc3RyZWFtIHBhcnNlciBhbmQgdmVyZGljdCBwcm9ncmFtIGFyZSBhdHRhY2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzODcsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjE4OjU3Ljg0MTYyMTYzMloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODk4MjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tfcHNvY2tfaW5pdF9zdHJwXCIsXG4gICAgXCJza19wc29ja19zdGFydF9zdHJwXCIsXG4gICAgXCJza19wc29ja19zdGFydF92ZXJkaWN0XCIsXG4gICAgXCJza19tc2dfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza19wc29ja19za2JfaW5ncmVzc19zZWxmYCBhbmQgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzYCB0byBoYW5kbGUgYHNrX2ZvcndhcmRfYWxsb2NgIGRlZmljaXQgd2hlbiBhc3NpZ25pbmcgcmVjZWl2ZSBvd25lcnNoaXAgdG8gYSBkaXJlY3Qgc3RycGFyc2VyIFNLX1BBU1MgY2xvbmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc29ja21hcC9za21zZyBCUEYgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgQlBGIHNvY2ttYXAgd2l0aCBhIHN0cmVhbSBwYXJzZXIgYW5kIHZlcmRpY3QgcHJvZ3JhbSBhdHRhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19wc29ja19pbml0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0YXJ0X3N0cnBcIixcbiAgICBcInNrX3Bzb2NrX3N0YXJ0X3ZlcmRpY3RcIixcbiAgICBcInNrX21zZ19yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrX3Bzb2NrX3NrYl9pbmdyZXNzX3NlbGZgIGFuZCBgc2tfcHNvY2tfc2tiX2luZ3Jlc3NgIHRvIGhhbmRsZSBgc2tfZm9yd2FyZF9hbGxvY2AgZGVmaWNpdCB3aGVuIGFzc2lnbmluZyByZWNlaXZlIG93bmVyc2hpcCB0byBhIGRpcmVjdCBzdHJwYXJzZXIgU0tfUEFTUyBjbG9uZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzb2NrbWFwL3NrbXNnIEJQRiBpbmZyYXN0cnVjdHVyZS4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBCUEYgc29ja21hcCB3aXRoIGEgc3RyZWFtIHBhcnNlciBhbmQgdmVyZGljdCBwcm9ncmFtIGF0dGFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcskww[1] Phase: Succeeded StartedAt: 2026-08-02 11:19:09 +0000 UTC FinishedAt: 2026-08-02 11:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 11:19:09 +0000 UTC FinishedAt: 2026-08-02 11:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2] Phase: Succeeded StartedAt: 2026-08-02 11:19:09 +0000 UTC FinishedAt: 2026-08-02 15:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 11:19:09 +0000 UTC FinishedAt: 2026-08-02 15:27:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","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-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 11:19:09 +0000 UTC FinishedAt: 2026-08-02 11:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 11:19:09 +0000 UTC FinishedAt: 2026-08-02 11:19:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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-workflowcskww/series-workflowcskww-convert-artifact-1059092484/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 11:19:19 +0000 UTC FinishedAt: 2026-08-02 11:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 11:19:19 +0000 UTC FinishedAt: 2026-08-02 11:54:53 +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:*2aeff5f2-0d0a-4a0d-8050-303dec348723,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-workflowcskww/series-workflowcskww-convert-artifact-1059092484/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": "51582173-d244-45e9-8804-e4fd87f9e03c", "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-workflowcskww/series-workflowcskww-build-action-1243888962/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 11:19:19 +0000 UTC FinishedAt: 2026-08-02 11:54:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2aeff5f2-0d0a-4a0d-8050-303dec348723,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-workflowcskww/series-workflowcskww-convert-artifact-1059092484/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": "51582173-d244-45e9-8804-e4fd87f9e03c", "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-workflowcskww/series-workflowcskww-build-action-1243888962/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 11:54:53 +0000 UTC FinishedAt: 2026-08-02 11:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 11:54:53 +0000 UTC FinishedAt: 2026-08-02 11:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 11:54:53 +0000 UTC FinishedAt: 2026-08-02 11:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 11:54:53 +0000 UTC FinishedAt: 2026-08-02 11:55:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","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-workflowcskww/series-workflowcskww-convert-artifact-2811109763/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 11:55:08 +0000 UTC FinishedAt: 2026-08-02 11:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 11:55:08 +0000 UTC FinishedAt: 2026-08-02 11:56:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*51582173-d244-45e9-8804-e4fd87f9e03c,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-workflowcskww/series-workflowcskww-build-action-1243888962/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-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 11:57:02 +0000 UTC FinishedAt: 2026-08-02 11:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 11:57:02 +0000 UTC FinishedAt: 2026-08-02 11:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 11:57:02 +0000 UTC FinishedAt: 2026-08-02 12:22:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 11:57:02 +0000 UTC FinishedAt: 2026-08-02 12:22:05 +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:*2aeff5f2-0d0a-4a0d-8050-303dec348723,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-workflowcskww/series-workflowcskww-convert-artifact-2811109763/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": "dadb8f55-c4a5-43fa-b8d1-2565c0f78848", "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-workflowcskww/series-workflowcskww-build-action-3011432503/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 11:57:02 +0000 UTC FinishedAt: 2026-08-02 12:21:55 +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:*2aeff5f2-0d0a-4a0d-8050-303dec348723,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-workflowcskww/series-workflowcskww-convert-artifact-2811109763/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": "dadb8f55-c4a5-43fa-b8d1-2565c0f78848", "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-workflowcskww/series-workflowcskww-build-action-3011432503/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 12:22:05 +0000 UTC FinishedAt: 2026-08-02 12:22:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 12:22:05 +0000 UTC FinishedAt: 2026-08-02 12:22:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 12:22:05 +0000 UTC FinishedAt: 2026-08-02 12:24:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 12:22:05 +0000 UTC FinishedAt: 2026-08-02 12:23:53 +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:*dadb8f55-c4a5-43fa-b8d1-2565c0f78848,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-workflowcskww/series-workflowcskww-build-action-3011432503/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-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 12:24:05 +0000 UTC FinishedAt: 2026-08-02 15:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 12:24:05 +0000 UTC FinishedAt: 2026-08-02 15:27:00 +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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"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:*51582173-d244-45e9-8804-e4fd87f9e03c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dadb8f55-c4a5-43fa-b8d1-2565c0f78848,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-workflowcskww/series-workflowcskww-build-action-1243888962/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-workflowcskww/series-workflowcskww-build-action-3011432503/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 12:24:05 +0000 UTC FinishedAt: 2026-08-02 12:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 12:24:05 +0000 UTC FinishedAt: 2026-08-02 12:24:12 +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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"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-workflowcskww/series-workflowcskww-convert-artifact-1865245084/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 12:24:05 +0000 UTC FinishedAt: 2026-08-02 12:24:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 12:24:05 +0000 UTC FinishedAt: 2026-08-02 12:24:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 12:24:05 +0000 UTC FinishedAt: 2026-08-02 12:24:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 12:24:17 +0000 UTC FinishedAt: 2026-08-02 15:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcskww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"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":["sk_psock_init_strp","sk_psock_start_strp","sk_psock_start_verdict","sk_msg_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER"],"series_id":"2ca9aca4-8d96-4b2e-9f0b-5d1579079a8e","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 12:24:17 +0000 UTC FinishedAt: 2026-08-02 15:26:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*51582173-d244-45e9-8804-e4fd87f9e03c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dadb8f55-c4a5-43fa-b8d1-2565c0f78848,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-workflowcskww/series-workflowcskww-build-action-1243888962/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-workflowcskww/series-workflowcskww-build-action-3011432503/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-workflowcskww/series-workflowcskww-convert-artifact-1865245084/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,}