Name: series-workflowtkct6 Phase: Succeeded StartedAt: 2026-08-07 02:03:39 +0000 UTC FinishedAt: 2026-08-07 05:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[0] Phase: Succeeded StartedAt: 2026-08-07 02:03:39 +0000 UTC FinishedAt: 2026-08-07 02:06:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 02:03:39 +0000 UTC FinishedAt: 2026-08-07 02:06:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0d839570765118029aa8bf4a95444c6a11aacf85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_INLINE_ENCRYPTION", "BLK_INLINE_ENCRYPTION_FALLBACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0d839570765118029aa8bf4a95444c6a11aacf85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_INLINE_ENCRYPTION", "BLK_INLINE_ENCRYPTION_FALLBACK" ], "series_id": "d369b433-7bb2-49c5-b096-9248d33bf304" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "mempool_alloc_bulk_noprof", "blk_crypto_fallback_encrypt_work_fn", "blk_crypto_fallback_bio_prep" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19JTkxJTkVfRU5DUllQVElPTiYjMzQ7LAogICAgJiMzNDtCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mJiMzNDssCiAgICAmIzM0O2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuJiMzNDssCiAgICAmIzM0O2Jsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIHRvIGFjY2VwdCBhIGBnZnBfbWFza2AgYW5kIGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzIHByb3Blcmx5LiBJdCBhbHNvIHVwZGF0ZXMgYGJsay1jcnlwdG8tZmFsbGJhY2tgIHRvIHVzZSB0aGlzIG5ldyBzaWduYXR1cmUgYW5kIGludHJvZHVjZXMgYSB3b3JrcXVldWUgKGBlbmNfcmVzY3VlX3dvcmtgKSB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjdXJzaXZlIGJpbyBzdWJtaXNzaW9ucyBieSBwdW50aW5nIGVuY3J5cHRpb24gd29yayB3aGVuIGBjdXJyZW50LVx1MDAzZWJpb19saXN0YCBpcyBub24tbnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIGNyeXB0byBmYWxsYmFjayBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGExMmE1MmJjMTU0ZDlhZGQ4MjM3Mzc2NTk0NThlNjg4MjBmZmQ1MDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDAyOjA1OjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYyBiL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY1xuaW5kZXggMmE1YzUyYWI3NGI0Yy4uOTczMzk5MDExZDVhMiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jXG5AQCAtODMsNiAmIzQzOzgzLDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYmxrX2NyeXB0b193cTtcbiBzdGF0aWMgbWVtcG9vbF90ICpibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2w7XG4gc3RhdGljIHN0cnVjdCBiaW9fc2V0IGVuY19iaW9fc2V0O1xuIFxuJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGVuY19yZXNjdWVfbGlzdF9sb2NrKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBiaW9fbGlzdCBlbmNfcmVzY3VlX2xpc3Q7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgZW5jX3Jlc2N1ZV93b3JrO1xuJiM0MztcbiAvKlxuICAqIFRoaXMgaXMgdGhlIGtleSB3ZSBzZXQgd2hlbiBldmljdGluZyBhIGtleXNsb3QuIFRoaXMgKnNob3VsZCogYmUgdGhlIGFsbCAwJiMzOTtzXG4gICoga2V5LCBidXQgQUVTLVhUUyByZWplY3RzIHRoYXQga2V5LCBzbyB3ZSB1c2Ugc29tZSByYW5kb20gYnl0ZXMgaW5zdGVhZC5cbkBAIC0xNzIsMTMgJiM0MzsxNzYsMjYgQEAgc3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2VuZGlvKHN0cnVjdCBiaW8gKmVuY19iaW8pXG4gc3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuIFx0XHR1bnNpZ25lZCBpbnQgbnJfc2Vncywgc3RydWN0IHBhZ2UgKioqcGFnZXNfcmV0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBtZW1mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuIFx0dW5zaWduZWQgaW50IG5yX2FsbG9jYXRlZDtcbiBcdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4gXHRzdHJ1Y3QgYmlvICpiaW87XG4mIzQzO1x0Z2ZwX3QgZ2ZwX21hc2s7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRHVyaW5nIHJlY3Vyc2l2ZSBiaW8gc3VibWlzc2lvbiAoY3VycmVudC1cdTAwM2ViaW9fbGlzdCAhPSBOVUxMKSBhbnlcbiYjNDM7XHQgKiBzdWJtaXR0ZWQgYm91bmNlIGJpb3MganVzdCBnZXQgYWRkZWQgdG8gY3VycmVudC1cdTAwM2ViaW9fbGlzdDsgdGhleVxuJiM0MztcdCAqIGNhbm5vdCBjb21wbGV0ZSBhbmQgcmVsZWFzZSByZXNvdXJjZXMgeWV0LiAgVGhlcmVmb3JlLCB0byBhdm9pZFxuJiM0MztcdCAqIGRlYWRsb2NrcywgZG9uJiMzOTt0IHdhaXQgaW5kZWZpbml0ZWx5IGZvciBhZGRpdGlvbmFsIHJlc291cmNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY3VycmVudC1cdTAwM2ViaW9fbGlzdClcbiYjNDM7XHRcdGdmcF9tYXNrID0gR0ZQX05PV0FJVDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRnZnBfbWFzayA9IEdGUF9OT0lPO1xuIFxuIFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiaW9fc3JjLVx1MDAzZWJpX2JkZXYsIG5yX3NlZ3MsIGJpb19zcmMtXHUwMDNlYmlfb3BmLFxuLVx0XHRcdEdGUF9OT0lPLCBcdTAwMjZlbmNfYmlvX3NldCk7XG4mIzQzO1x0XHRcdCAgICAgICBnZnBfbWFzaywgXHUwMDI2ZW5jX2Jpb19zZXQpO1xuJiM0MztcdGlmICh1bmxpa2VseSghYmlvKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuIFx0aWYgKGJpb19mbGFnZ2VkKGJpb19zcmMsIEJJT19SRU1BUFBFRCkpXG4gXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19SRU1BUFBFRCk7XG4gXHRiaW8tXHUwMDNlYmlfcHJpdmF0ZVx0XHQ9IGJpb19zcmM7XG5AQCAtMjA2LDEyICYjNDM7MjIzLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYmlvICpibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3RydWN0IGJpbyAqYmlvX3NyYyxcbiBcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuIFx0ICovXG4gXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuLVx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XG4tXHRpZiAobnJfYWxsb2NhdGVkIFx1MDAzYyBucl9zZWdzKVxuLVx0XHRtZW1wb29sX2FsbG9jX2J1bGsoYmxrX2NyeXB0b19ib3VuY2VfcGFnZV9wb29sLFxuJiM0MztcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3NlZ3MsIHBhZ2VzKTtcbiYjNDM7XHRpZiAodW5saWtlbHkobnJfYWxsb2NhdGVkIFx1MDAzYyBucl9zZWdzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1lbXBvb2xfYWxsb2NfYnVsayhibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2wsXG4gXHRcdFx0XHQodm9pZCAqKilwYWdlcyAmIzQzOyBucl9hbGxvY2F0ZWQsXG4tXHRcdFx0XHRucl9zZWdzIC0gbnJfYWxsb2NhdGVkKTtcbi1cdG1lbWFsbG9jX25vaW9fcmVzdG9yZShtZW1mbGFncyk7XG4mIzQzO1x0XHRcdFx0bnJfc2VncyAtIG5yX2FsbG9jYXRlZCwgZ2ZwX21hc2spKSB7XG4mIzQzO1x0XHRmcmVlX3BhZ2VzX2J1bGsocGFnZXMsIG5yX2FsbG9jYXRlZCk7XG4mIzQzO1x0XHRiaW9fcHV0KGJpbyk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXHQqcGFnZXNfcmV0ID0gcGFnZXM7XG4gXHRyZXR1cm4gYmlvO1xuIH1cbkBAIC0yMzksNiAmIzQzOzI1OSwyNSBAQCBzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2R1bl90b19pdihjb25zdCB1NjQgZHVuW0JMS19DUllQVE9fRFVOX0FSUkFZX1NJWkVdLFxuIFx0XHRpdi1cdTAwM2VkdW5baV0gPSBjcHVfdG9fbGU2NChkdW5baV0pO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvKTtcbiYjNDM7XG4mIzQzOy8qIEVuY3J5cHQgYSBsaXN0IG9mIGJpb3Mgd2hvc2UgZW5jcnlwdGlvbiB3YXMgcHVudGVkIHRvIGEga3dvcmtlci4gKi9cbiYjNDM7c3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpb19saXN0IGxpc3Q7XG4mIzQzO1x0c3RydWN0IGJpbyAqc3JjX2JpbztcbiYjNDM7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKGN1cnJlbnQtXHUwMDNlYmlvX2xpc3QpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0X2xvY2spO1xuJiM0MztcdGxpc3QgPSBlbmNfcmVzY3VlX2xpc3Q7XG4mIzQzO1x0YmlvX2xpc3RfaW5pdChcdTAwMjZlbmNfcmVzY3VlX2xpc3QpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmVuY19yZXNjdWVfbGlzdF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChzcmNfYmlvID0gYmlvX2xpc3RfcG9wKFx1MDAyNmxpc3QpKSlcbiYjNDM7XHRcdGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3JjX2Jpbyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgX19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHN0cnVjdCBiaW8gKnNyY19iaW8sXG4gXHRcdHN0cnVjdCBjcnlwdG9fc3luY19za2NpcGhlciAqdGZtKVxuIHtcbkBAIC0yNzMsNiAmIzQzOzMxMiwyMyBAQCBzdGF0aWMgdm9pZCBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbyxcbiBuZXdfYmlvOlxuIFx0bnJfZW5jX3BhZ2VzID0gbWluKGJpb19zZWdtZW50cyhzcmNfYmlvKSwgQklPX01BWF9WRUNTKTtcbiBcdGVuY19iaW8gPSBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3JjX2JpbywgbnJfZW5jX3BhZ2VzLCBcdTAwMjZlbmNfcGFnZXMpO1xuJiM0MztcdGlmICh1bmxpa2VseSghZW5jX2JpbykpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBGYWlsZWQgdG8gYWxsb2NhdGUgYSBib3VuY2UgYmlvIGR1cmluZyByZWN1cnNpdmUgYmlvXG4mIzQzO1x0XHQgKiBzdWJtaXNzaW9uLiAgV2UgbWlnaHQgYmUgYmxvY2tlZCBvbiBiaW9zIGluIGN1cnJlbnQtXHUwMDNlYmlvX2xpc3RcbiYjNDM7XHRcdCAqIGhvbGRpbmcgbWVtcG9vbCBlbGVtZW50cy4gIFRvIGVuYWJsZSBmb3J3YXJkIHByb2dyZXNzLCBwdW50XG4mIzQzO1x0XHQgKiB0aGUgcmVtYWluaW5nIGVuY3J5cHRpb24gd29yayBmb3Igc3JjX2JpbyB0byBhIGt3b3JrZXIuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogVGhlIERVTiBtYXkgaGF2ZSBiZWVuIGFkdmFuY2VkLCBzbyBtYWtlIHN1cmUgdG8gdXBkYXRlIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoIWN1cnJlbnQtXHUwMDNlYmlvX2xpc3QpO1xuJiM0MztcdFx0bWVtY3B5KGJjLVx1MDAzZWJjX2R1biwgY3Vycl9kdW4sIHNpemVvZihjdXJyX2R1bikpO1xuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNmVuY19yZXNjdWVfbGlzdF9sb2NrKTtcbiYjNDM7XHRcdGJpb19saXN0X2FkZChcdTAwMjZlbmNfcmVzY3VlX2xpc3QsIHNyY19iaW8pO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0X2xvY2spO1xuJiM0MztcdFx0cXVldWVfd29yayhibGtfY3J5cHRvX3dxLCBcdTAwMjZlbmNfcmVzY3VlX3dvcmspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcdGVuY19pZHggPSAwO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzdHJ1Y3QgYmlvX3ZlYyBzcmNfYnYgPVxuQEAgLTU5MSw2ICYjNDM7NjQ3LDggQEAgc3RhdGljIGludCBibGtfY3J5cHRvX2ZhbGxiYWNrX2luaXQodm9pZClcbiBcdGlmICghYmlvX2ZhbGxiYWNrX2NyeXB0X2N0eF9wb29sKVxuIFx0XHRnb3RvIGZhaWxfZnJlZV9jcnlwdF9jdHhfY2FjaGU7XG4gXG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNmVuY19yZXNjdWVfd29yaywgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm4pO1xuJiM0MztcbiBcdGJsa19jcnlwdG9fZmFsbGJhY2tfaW5pdGVkID0gdHJ1ZTtcbiBcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oIGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcbmluZGV4IGEwZmE2ZDQzZTBkYzQuLmY3ODk4Y2QxNTEyYmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcbkBAIC02NSw4ICYjNDM7NjUsOCBAQCB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7XG4gdm9pZCAqbWVtcG9vbF9hbGxvY19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGdmcF90IGdmcF9tYXNrKSBfX21hbGxvYztcbiAjZGVmaW5lIG1lbXBvb2xfYWxsb2MoLi4uKVx0XHRcdFx0XHRcdFxcXG4gXHRhbGxvY19ob29rcyhtZW1wb29sX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXG4taW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtLFxuLVx0XHR1bnNpZ25lZCBpbnQgY291bnQpO1xuJiM0Mztib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGNvdW50LCBnZnBfdCBnZnBfbWFzayk7XG4gI2RlZmluZSBtZW1wb29sX2FsbG9jX2J1bGsoLi4uKVx0XHRcdFx0XHRcdFxcXG4gXHRhbGxvY19ob29rcyhtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1wb29sLmMgYi9tbS9tZW1wb29sLmNcbmluZGV4IDQ3M2EwMjlmYTMxZmQuLmQ3NDFlNWY2MjU1NDMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvb2wuY1xuQEAgLTQwOSw3ICYjNDM7NDA5LDcgQEAgaW50IG1lbXBvb2xfcmVzaXplKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbmV3X21pbl9ucilcbiB9XG4gRVhQT1JUX1NZTUJPTChtZW1wb29sX3Jlc2l6ZSk7XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxuJiM0MztzdGF0aWMgYm9vbCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxuIFx0XHR1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCBhbGxvY2F0ZWQsXG4gXHRcdGdmcF90IGdmcF9tYXNrKVxuIHtcbkBAIC00MzIsNyAmIzQzOzQzMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2woc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcbiBcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkmIzQzOyYjNDM7KVxuIFx0XHRrbWVtbGVha191cGRhdGVfdHJhY2UoZWxlbXNbaV0pO1xuLVx0cmV0dXJuIGFsbG9jYXRlZDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiBcbiBmYWlsOlxuIFx0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSkge1xuQEAgLTQ1NCw3ICYjNDM7NDU0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGFsbG9jYXRlZDtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIC8qXG5AQCAtNDczLDI1ICYjNDM7NDczLDI4IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWVtcG9vbF9hZGp1c3RfZ2ZwKGdmcF90ICpnZnBfbWFzaylcbiAvKipcbiAgKiBtZW1wb29sX2FsbG9jX2J1bGsgLSBhbGxvY2F0ZSBtdWx0aXBsZSBlbGVtZW50cyBmcm9tIGEgbWVtb3J5IHBvb2xcbiAgKiBAcG9vbDpcdHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBwb29sXG4tICogQGVsZW1zOlx0cGFydGlhbGx5IG9yIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50cyBhcnJheVxuLSAqIEBjb3VudDpcdG51bWJlciBvZiBlbnRyaWVzIGluIEBlbGVtIHRoYXQgbmVlZCB0byBiZSBhbGxvY2F0ZWRcbiYjNDM7ICogQGVsZW1zOlx0cG9pbnRlciB0byBhcnJheSBpbnRvIHdoaWNoIHRoZSBlbGVtZW50IHBvaW50ZXJzIHdpbGwgYmUgc3RvcmVkXG4mIzQzOyAqIEBjb3VudDpcdG51bWJlciBvZiBlbGVtZW50cyB0byBhbGxvY2F0ZVxuJiM0MzsgKiBAZ2ZwX21hc2s6XHRHRlBfKiBmbGFncy4gICVfX0dGUF9aRVJPIGlzIG5vdCBzdXBwb3J0ZWQuICBJZiB0aGlzIG1hc2tcbiYjNDM7ICpcdFx0aW5jbHVkZXMgJV9fR0ZQX0RJUkVDVF9SRUNMQUlNLCB0aGVuIHRoZSBhbGxvY2F0aW9uIGlzIHJldHJpZWRcbiYjNDM7ICpcdFx0aW5kZWZpbml0ZWx5IHVudGlsIGl0IHN1Y2NlZWRzIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIGFsd2F5c1xuJiM0MzsgKlx0XHQldHJ1ZS4gIElmIHRoZSBtYXNrIGRvZXNuJiMzOTt0IGluY2x1ZGUgJV9fR0ZQX0RJUkVDVF9SRUNMQUlNLCB0aGVuXG4mIzQzOyAqXHRcdGZhaWx1cmUgaXMgYWxsb3dlZCBhbmQgJWZhbHNlIGNhbiBiZSByZXR1cm5lZC5cbiAgKlxuICAqIEFsbG9jYXRlIEBjb3VudCBlbGVtZW50cyBpbnRvIEBlbGVtcy4gIFRoaXMgaXMgZG9uZSBieSBmaXJzdCBjYWxsaW5nIGludG8gdGhlXG4gICogYWxsb2NfZm4gc3VwcGxpZWQgYXQgcG9vbCBpbml0aWFsaXphdGlvbiB0aW1lLCBhbmQgZGlwcGluZyBpbnRvIHRoZSByZXNlcnZlZFxuLSAqIHBvb2wgd2hlbiBhbGxvY19mbiBmYWlscyB0byBhbGxvY2F0ZSBhbiBlbGVtZW50LlxuLSAqXG4tICogT24gcmV0dXJuIGFsbCBAY291bnQgZWxlbWVudHMgaW4gQGVsZW1zIHdpbGwgYmUgcG9wdWxhdGVkLlxuJiM0MzsgKiBwb29sIHRvIGF0b21pY2FsbHkgYWxsb2NhdGUgdGhlIHJlbWFpbmluZyBlbGVtZW50cyBpZiBhbGxvY19mbiBmYWlscy5cbiAgKlxuLSAqIFJldHVybjogQWx3YXlzIDAuICBJZiBpdCB3YXNuJiMzOTt0IGZvciAlJCNeJCBhbGxvYyB0YWdzLCBpdCB3b3VsZCByZXR1cm4gdm9pZC5cbiYjNDM7ICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgYWxsb2NhdGlvbiBzdWNjZWVkZWQsIG9yICVmYWxzZSBpZiBpdCBmYWlsZWQuXG4gICovXG4taW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcbi1cdFx0dW5zaWduZWQgaW50IGNvdW50KVxuJiM0Mztib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spXG4ge1xuLVx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xuIFx0Z2ZwX3QgZ2ZwX3RlbXAgPSBtZW1wb29sX2FkanVzdF9nZnAoXHUwMDI2Z2ZwX21hc2spO1xuIFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoY291bnQgXHUwMDNlIHBvb2wtXHUwMDNlbWluX25yKTtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1pFUk8pO1xuIFx0bWlnaHRfYWxsb2MoZ2ZwX21hc2spO1xuIFxuIFx0LypcbkBAIC01MTYsMTMgJiM0Mzs1MTksMjYgQEAgaW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcbiBcdFx0YWxsb2NhdGVkJiM0MzsmIzQzOztcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiB0cnVlO1xuIFxuIHVzZV9wb29sOlxuLVx0YWxsb2NhdGVkID0gbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2wocG9vbCwgZWxlbXMsIGNvdW50LCBhbGxvY2F0ZWQsXG4tXHRcdFx0Z2ZwX3RlbXApO1xuLVx0Z2ZwX3RlbXAgPSBnZnBfbWFzaztcbi1cdGdvdG8gcmVwZWF0X2FsbG9jO1xuJiM0MztcdC8qIFRyeSB0byBhdG9taWNhbGx5IGFsbG9jYXRlIHRoZSByZW1haW5pbmcgZWxlbWVudHMgZnJvbSB0aGUgcG9vbC4gKi9cbiYjNDM7XHRpZiAobWVtcG9vbF9hbGxvY19mcm9tX3Bvb2wocG9vbCwgZWxlbXMsIGNvdW50LCBhbGxvY2F0ZWQsIGdmcF90ZW1wKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdC8qIFJldHJ5IGlmIHRoaXMgd2FzIGp1c3QgdGhlIG9wcG9ydHVuaXN0aWMgZmlyc3QgcGFzcy4gKi9cbiYjNDM7XHRpZiAoZ2ZwX3RlbXAgIT0gZ2ZwX21hc2spIHtcbiYjNDM7XHRcdGdmcF90ZW1wID0gZ2ZwX21hc2s7XG4mIzQzO1x0XHRnb3RvIHJlcGVhdF9hbGxvYztcbiYjNDM7XHR9XG4mIzQzO1x0LyogUmV0cnkgaW5kZWZpbml0ZWx5IGlmIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIGlzIHNldC4gKi9cbiYjNDM7XHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKVxuJiM0MztcdFx0Z290byByZXBlYXRfYWxsb2M7XG4mIzQzO1x0LyogT24gZmFpbHVyZSwgcm9sbCBiYWNrIGFueSBzdWNjZXNzZnVsIGFsbG9jYXRpb25zIGZyb20gLVx1MDAzZWFsbG9jKCkuICovXG4mIzQzO1x0d2hpbGUgKGFsbG9jYXRlZC0tKSB7XG4mIzQzO1x0XHRwb29sLVx1MDAzZWZyZWUoZWxlbXNbYWxsb2NhdGVkXSwgcG9vbC1cdTAwM2Vwb29sX2RhdGEpO1xuJiM0MztcdFx0ZWxlbXNbYWxsb2NhdGVkXSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWVtcG9vbF9hbGxvY19idWxrX25vcHJvZik7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19JTkxJTkVfRU5DUllQVElPTiYjMzQ7LAogICAgJiMzNDtCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mJiMzNDssCiAgICAmIzM0O2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuJiMzNDssCiAgICAmIzM0O2Jsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIHRvIGFjY2VwdCBhIGBnZnBfbWFza2AgYW5kIGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzIHByb3Blcmx5LiBJdCBhbHNvIHVwZGF0ZXMgYGJsay1jcnlwdG8tZmFsbGJhY2tgIHRvIHVzZSB0aGlzIG5ldyBzaWduYXR1cmUgYW5kIGludHJvZHVjZXMgYSB3b3JrcXVldWUgKGBlbmNfcmVzY3VlX3dvcmtgKSB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjdXJzaXZlIGJpbyBzdWJtaXNzaW9ucyBieSBwdW50aW5nIGVuY3J5cHRpb24gd29yayB3aGVuIGBjdXJyZW50LVx1MDAzZWJpb19saXN0YCBpcyBub24tbnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIGNyeXB0byBmYWxsYmFjayBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGExMmE1MmJjMTU0ZDlhZGQ4MjM3Mzc2NTk0NThlNjg4MjBmZmQ1MDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDAyOjA1OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jIGIvYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jCmluZGV4IDJhNWM1MmFiNzRiNGMuLjk3MzM5OTAxMWQ1YTIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMKQEAgLTgzLDYgJiM0Mzs4MywxMCBAQCBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJsa19jcnlwdG9fd3E7CiBzdGF0aWMgbWVtcG9vbF90ICpibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2w7CiBzdGF0aWMgc3RydWN0IGJpb19zZXQgZW5jX2Jpb19zZXQ7CiAKJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGVuY19yZXNjdWVfbGlzdF9sb2NrKTsKJiM0MztzdGF0aWMgc3RydWN0IGJpb19saXN0IGVuY19yZXNjdWVfbGlzdDsKJiM0MztzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IGVuY19yZXNjdWVfd29yazsKJiM0MzsKIC8qCiAgKiBUaGlzIGlzIHRoZSBrZXkgd2Ugc2V0IHdoZW4gZXZpY3RpbmcgYSBrZXlzbG90LiBUaGlzICpzaG91bGQqIGJlIHRoZSBhbGwgMCYjMzk7cwogICoga2V5LCBidXQgQUVTLVhUUyByZWplY3RzIHRoYXQga2V5LCBzbyB3ZSB1c2Ugc29tZSByYW5kb20gYnl0ZXMgaW5zdGVhZC4KQEAgLTE3MiwxMyAmIzQzOzE3NiwyNiBAQCBzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfZW5kaW8oc3RydWN0IGJpbyAqZW5jX2JpbykKIHN0YXRpYyBzdHJ1Y3QgYmlvICpibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3RydWN0IGJpbyAqYmlvX3NyYywKIAkJdW5zaWduZWQgaW50IG5yX3NlZ3MsIHN0cnVjdCBwYWdlICoqKnBhZ2VzX3JldCkKIHsKLQl1bnNpZ25lZCBpbnQgbWVtZmxhZ3MgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTsKIAl1bnNpZ25lZCBpbnQgbnJfYWxsb2NhdGVkOwogCXN0cnVjdCBwYWdlICoqcGFnZXM7CiAJc3RydWN0IGJpbyAqYmlvOwomIzQzOwlnZnBfdCBnZnBfbWFzazsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRHVyaW5nIHJlY3Vyc2l2ZSBiaW8gc3VibWlzc2lvbiAoY3VycmVudC0mZ3Q7YmlvX2xpc3QgIT0gTlVMTCkgYW55CiYjNDM7CSAqIHN1Ym1pdHRlZCBib3VuY2UgYmlvcyBqdXN0IGdldCBhZGRlZCB0byBjdXJyZW50LSZndDtiaW9fbGlzdDsgdGhleQomIzQzOwkgKiBjYW5ub3QgY29tcGxldGUgYW5kIHJlbGVhc2UgcmVzb3VyY2VzIHlldC4gIFRoZXJlZm9yZSwgdG8gYXZvaWQKJiM0MzsJICogZGVhZGxvY2tzLCBkb24mIzM5O3Qgd2FpdCBpbmRlZmluaXRlbHkgZm9yIGFkZGl0aW9uYWwgcmVzb3VyY2VzLgomIzQzOwkgKi8KJiM0MzsJaWYgKGN1cnJlbnQtJmd0O2Jpb19saXN0KQomIzQzOwkJZ2ZwX21hc2sgPSBHRlBfTk9XQUlUOwomIzQzOwllbHNlCiYjNDM7CQlnZnBfbWFzayA9IEdGUF9OT0lPOwogCiAJYmlvID0gYmlvX2FsbG9jX2Jpb3NldChiaW9fc3JjLSZndDtiaV9iZGV2LCBucl9zZWdzLCBiaW9fc3JjLSZndDtiaV9vcGYsCi0JCQlHRlBfTk9JTywgJmFtcDtlbmNfYmlvX3NldCk7CiYjNDM7CQkJICAgICAgIGdmcF9tYXNrLCAmYW1wO2VuY19iaW9fc2V0KTsKJiM0MzsJaWYgKHVubGlrZWx5KCFiaW8pKQomIzQzOwkJcmV0dXJuIE5VTEw7CiAJaWYgKGJpb19mbGFnZ2VkKGJpb19zcmMsIEJJT19SRU1BUFBFRCkpCiAJCWJpb19zZXRfZmxhZyhiaW8sIEJJT19SRU1BUFBFRCk7CiAJYmlvLSZndDtiaV9wcml2YXRlCQk9IGJpb19zcmM7CkBAIC0yMDYsMTIgJiM0MzsyMjMsMTUgQEAgc3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLAogCSAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLgogCSAqLwogCW1lbXNldChwYWdlcywgMCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnJfc2Vncyk7Ci0JbnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7Ci0JaWYgKG5yX2FsbG9jYXRlZCAmbHQ7IG5yX3NlZ3MpCi0JCW1lbXBvb2xfYWxsb2NfYnVsayhibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2wsCiYjNDM7CW5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3NlZ3MsIHBhZ2VzKTsKJiM0MzsJaWYgKHVubGlrZWx5KG5yX2FsbG9jYXRlZCAmbHQ7IG5yX3NlZ3MpICZhbXA7JmFtcDsKJiM0MzsJICAgICFtZW1wb29sX2FsbG9jX2J1bGsoYmxrX2NyeXB0b19ib3VuY2VfcGFnZV9wb29sLAogCQkJCSh2b2lkICoqKXBhZ2VzICYjNDM7IG5yX2FsbG9jYXRlZCwKLQkJCQlucl9zZWdzIC0gbnJfYWxsb2NhdGVkKTsKLQltZW1hbGxvY19ub2lvX3Jlc3RvcmUobWVtZmxhZ3MpOwomIzQzOwkJCQlucl9zZWdzIC0gbnJfYWxsb2NhdGVkLCBnZnBfbWFzaykpIHsKJiM0MzsJCWZyZWVfcGFnZXNfYnVsayhwYWdlcywgbnJfYWxsb2NhdGVkKTsKJiM0MzsJCWJpb19wdXQoYmlvKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiAJKnBhZ2VzX3JldCA9IHBhZ2VzOwogCXJldHVybiBiaW87CiB9CkBAIC0yMzksNiAmIzQzOzI1OSwyNSBAQCBzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2R1bl90b19pdihjb25zdCB1NjQgZHVuW0JMS19DUllQVE9fRFVOX0FSUkFZX1NJWkVdLAogCQlpdi0mZ3Q7ZHVuW2ldID0gY3B1X3RvX2xlNjQoZHVuW2ldKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2Jpbyk7CiYjNDM7CiYjNDM7LyogRW5jcnlwdCBhIGxpc3Qgb2YgYmlvcyB3aG9zZSBlbmNyeXB0aW9uIHdhcyBwdW50ZWQgdG8gYSBrd29ya2VyLiAqLwomIzQzO3N0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaW9fbGlzdCBsaXN0OwomIzQzOwlzdHJ1Y3QgYmlvICpzcmNfYmlvOwomIzQzOwomIzQzOwlXQVJOX09OX09OQ0UoY3VycmVudC0mZ3Q7YmlvX2xpc3QpOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtlbmNfcmVzY3VlX2xpc3RfbG9jayk7CiYjNDM7CWxpc3QgPSBlbmNfcmVzY3VlX2xpc3Q7CiYjNDM7CWJpb19saXN0X2luaXQoJmFtcDtlbmNfcmVzY3VlX2xpc3QpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2VuY19yZXNjdWVfbGlzdF9sb2NrKTsKJiM0MzsKJiM0MzsJd2hpbGUgKChzcmNfYmlvID0gYmlvX2xpc3RfcG9wKCZhbXA7bGlzdCkpKQomIzQzOwkJYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzcmNfYmlvKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbywKIAkJc3RydWN0IGNyeXB0b19zeW5jX3NrY2lwaGVyICp0Zm0pCiB7CkBAIC0yNzMsNiAmIzQzOzMxMiwyMyBAQCBzdGF0aWMgdm9pZCBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbywKIG5ld19iaW86CiAJbnJfZW5jX3BhZ2VzID0gbWluKGJpb19zZWdtZW50cyhzcmNfYmlvKSwgQklPX01BWF9WRUNTKTsKIAllbmNfYmlvID0gYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHNyY19iaW8sIG5yX2VuY19wYWdlcywgJmFtcDtlbmNfcGFnZXMpOwomIzQzOwlpZiAodW5saWtlbHkoIWVuY19iaW8pKSB7CiYjNDM7CQkvKgomIzQzOwkJICogRmFpbGVkIHRvIGFsbG9jYXRlIGEgYm91bmNlIGJpbyBkdXJpbmcgcmVjdXJzaXZlIGJpbwomIzQzOwkJICogc3VibWlzc2lvbi4gIFdlIG1pZ2h0IGJlIGJsb2NrZWQgb24gYmlvcyBpbiBjdXJyZW50LSZndDtiaW9fbGlzdAomIzQzOwkJICogaG9sZGluZyBtZW1wb29sIGVsZW1lbnRzLiAgVG8gZW5hYmxlIGZvcndhcmQgcHJvZ3Jlc3MsIHB1bnQKJiM0MzsJCSAqIHRoZSByZW1haW5pbmcgZW5jcnlwdGlvbiB3b3JrIGZvciBzcmNfYmlvIHRvIGEga3dvcmtlci4KJiM0MzsJCSAqCiYjNDM7CQkgKiBUaGUgRFVOIG1heSBoYXZlIGJlZW4gYWR2YW5jZWQsIHNvIG1ha2Ugc3VyZSB0byB1cGRhdGUgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCVdBUk5fT05fT05DRSghY3VycmVudC0mZ3Q7YmlvX2xpc3QpOwomIzQzOwkJbWVtY3B5KGJjLSZndDtiY19kdW4sIGN1cnJfZHVuLCBzaXplb2YoY3Vycl9kdW4pKTsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO2VuY19yZXNjdWVfbGlzdF9sb2NrKTsKJiM0MzsJCWJpb19saXN0X2FkZCgmYW1wO2VuY19yZXNjdWVfbGlzdCwgc3JjX2Jpbyk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2VuY19yZXNjdWVfbGlzdF9sb2NrKTsKJiM0MzsJCXF1ZXVlX3dvcmsoYmxrX2NyeXB0b193cSwgJmFtcDtlbmNfcmVzY3VlX3dvcmspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAJZW5jX2lkeCA9IDA7CiAJZm9yICg7OykgewogCQlzdHJ1Y3QgYmlvX3ZlYyBzcmNfYnYgPQpAQCAtNTkxLDYgJiM0Mzs2NDcsOCBAQCBzdGF0aWMgaW50IGJsa19jcnlwdG9fZmFsbGJhY2tfaW5pdCh2b2lkKQogCWlmICghYmlvX2ZhbGxiYWNrX2NyeXB0X2N0eF9wb29sKQogCQlnb3RvIGZhaWxfZnJlZV9jcnlwdF9jdHhfY2FjaGU7CiAKJiM0MzsJSU5JVF9XT1JLKCZhbXA7ZW5jX3Jlc2N1ZV93b3JrLCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbik7CiYjNDM7CiAJYmxrX2NyeXB0b19mYWxsYmFja19pbml0ZWQgPSB0cnVlOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oCmluZGV4IGEwZmE2ZDQzZTBkYzQuLmY3ODk4Y2QxNTEyYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oCkBAIC02NSw4ICYjNDM7NjUsOCBAQCB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7CiB2b2lkICptZW1wb29sX2FsbG9jX25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwX21hc2spIF9fbWFsbG9jOwogI2RlZmluZSBtZW1wb29sX2FsbG9jKC4uLikJCQkJCQlcCiAJYWxsb2NfaG9va3MobWVtcG9vbF9hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKQotaW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtLAotCQl1bnNpZ25lZCBpbnQgY291bnQpOwomIzQzO2Jvb2wgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW0sCiYjNDM7CQl1bnNpZ25lZCBpbnQgY291bnQsIGdmcF90IGdmcF9tYXNrKTsKICNkZWZpbmUgbWVtcG9vbF9hbGxvY19idWxrKC4uLikJCQkJCQlcCiAJYWxsb2NfaG9va3MobWVtcG9vbF9hbGxvY19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpCiAKZGlmZiAtLWdpdCBhL21tL21lbXBvb2wuYyBiL21tL21lbXBvb2wuYwppbmRleCA0NzNhMDI5ZmEzMWZkLi5kNzQxZTVmNjI1NTQzIDEwMDY0NAotLS0gYS9tbS9tZW1wb29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9vbC5jCkBAIC00MDksNyAmIzQzOzQwOSw3IEBAIGludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpCiB9CiBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfcmVzaXplKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLAomIzQzO3N0YXRpYyBib29sIG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsCiAJCXVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgaW50IGFsbG9jYXRlZCwKIAkJZ2ZwX3QgZ2ZwX21hc2spCiB7CkBAIC00MzIsNyAmIzQzOzQzMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2woc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcywKIAkgKi8KIAlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQ7IGkmIzQzOyYjNDM7KQogCQlrbWVtbGVha191cGRhdGVfdHJhY2UoZWxlbXNbaV0pOwotCXJldHVybiBhbGxvY2F0ZWQ7CiYjNDM7CXJldHVybiB0cnVlOwogCiBmYWlsOgogCWlmIChnZnBfbWFzayAmYW1wOyBfX0dGUF9ESVJFQ1RfUkVDTEFJTSkgewpAQCAtNDU0LDcgJiM0Mzs0NTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwb29sLSZndDtsb2NrLCBmbGFncyk7CiAJfQogCi0JcmV0dXJuIGFsbG9jYXRlZDsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiAvKgpAQCAtNDczLDI1ICYjNDM7NDczLDI4IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWVtcG9vbF9hZGp1c3RfZ2ZwKGdmcF90ICpnZnBfbWFzaykKIC8qKgogICogbWVtcG9vbF9hbGxvY19idWxrIC0gYWxsb2NhdGUgbXVsdGlwbGUgZWxlbWVudHMgZnJvbSBhIG1lbW9yeSBwb29sCiAgKiBAcG9vbDoJcG9pbnRlciB0byB0aGUgbWVtb3J5IHBvb2wKLSAqIEBlbGVtczoJcGFydGlhbGx5IG9yIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50cyBhcnJheQotICogQGNvdW50OgludW1iZXIgb2YgZW50cmllcyBpbiBAZWxlbSB0aGF0IG5lZWQgdG8gYmUgYWxsb2NhdGVkCiYjNDM7ICogQGVsZW1zOglwb2ludGVyIHRvIGFycmF5IGludG8gd2hpY2ggdGhlIGVsZW1lbnQgcG9pbnRlcnMgd2lsbCBiZSBzdG9yZWQKJiM0MzsgKiBAY291bnQ6CW51bWJlciBvZiBlbGVtZW50cyB0byBhbGxvY2F0ZQomIzQzOyAqIEBnZnBfbWFzazoJR0ZQXyogZmxhZ3MuICAlX19HRlBfWkVSTyBpcyBub3Qgc3VwcG9ydGVkLiAgSWYgdGhpcyBtYXNrCiYjNDM7ICoJCWluY2x1ZGVzICVfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgdGhlbiB0aGUgYWxsb2NhdGlvbiBpcyByZXRyaWVkCiYjNDM7ICoJCWluZGVmaW5pdGVseSB1bnRpbCBpdCBzdWNjZWVkcyBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyBhbHdheXMKJiM0MzsgKgkJJXRydWUuICBJZiB0aGUgbWFzayBkb2VzbiYjMzk7dCBpbmNsdWRlICVfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgdGhlbgomIzQzOyAqCQlmYWlsdXJlIGlzIGFsbG93ZWQgYW5kICVmYWxzZSBjYW4gYmUgcmV0dXJuZWQuCiAgKgogICogQWxsb2NhdGUgQGNvdW50IGVsZW1lbnRzIGludG8gQGVsZW1zLiAgVGhpcyBpcyBkb25lIGJ5IGZpcnN0IGNhbGxpbmcgaW50byB0aGUKICAqIGFsbG9jX2ZuIHN1cHBsaWVkIGF0IHBvb2wgaW5pdGlhbGl6YXRpb24gdGltZSwgYW5kIGRpcHBpbmcgaW50byB0aGUgcmVzZXJ2ZWQKLSAqIHBvb2wgd2hlbiBhbGxvY19mbiBmYWlscyB0byBhbGxvY2F0ZSBhbiBlbGVtZW50LgotICoKLSAqIE9uIHJldHVybiBhbGwgQGNvdW50IGVsZW1lbnRzIGluIEBlbGVtcyB3aWxsIGJlIHBvcHVsYXRlZC4KJiM0MzsgKiBwb29sIHRvIGF0b21pY2FsbHkgYWxsb2NhdGUgdGhlIHJlbWFpbmluZyBlbGVtZW50cyBpZiBhbGxvY19mbiBmYWlscy4KICAqCi0gKiBSZXR1cm46IEFsd2F5cyAwLiAgSWYgaXQgd2FzbiYjMzk7dCBmb3IgJSQjXiQgYWxsb2MgdGFncywgaXQgd291bGQgcmV0dXJuIHZvaWQuCiYjNDM7ICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgYWxsb2NhdGlvbiBzdWNjZWVkZWQsIG9yICVmYWxzZSBpZiBpdCBmYWlsZWQuCiAgKi8KLWludCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsCi0JCXVuc2lnbmVkIGludCBjb3VudCkKJiM0Mztib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcywKJiM0MzsJCXVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0JZ2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMOwogCWdmcF90IGdmcF90ZW1wID0gbWVtcG9vbF9hZGp1c3RfZ2ZwKCZhbXA7Z2ZwX21hc2spOwogCXVuc2lnbmVkIGludCBhbGxvY2F0ZWQgPSAwOwogCiAJVk1fV0FSTl9PTl9PTkNFKGNvdW50ICZndDsgcG9vbC0mZ3Q7bWluX25yKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdmcF9tYXNrICZhbXA7IF9fR0ZQX1pFUk8pOwogCW1pZ2h0X2FsbG9jKGdmcF9tYXNrKTsKIAogCS8qCkBAIC01MTYsMTMgJiM0Mzs1MTksMjYgQEAgaW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcywKIAkJYWxsb2NhdGVkJiM0MzsmIzQzOzsKIAl9CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHRydWU7CiAKIHVzZV9wb29sOgotCWFsbG9jYXRlZCA9IG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHBvb2wsIGVsZW1zLCBjb3VudCwgYWxsb2NhdGVkLAotCQkJZ2ZwX3RlbXApOwotCWdmcF90ZW1wID0gZ2ZwX21hc2s7Ci0JZ290byByZXBlYXRfYWxsb2M7CiYjNDM7CS8qIFRyeSB0byBhdG9taWNhbGx5IGFsbG9jYXRlIHRoZSByZW1haW5pbmcgZWxlbWVudHMgZnJvbSB0aGUgcG9vbC4gKi8KJiM0MzsJaWYgKG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHBvb2wsIGVsZW1zLCBjb3VudCwgYWxsb2NhdGVkLCBnZnBfdGVtcCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJLyogUmV0cnkgaWYgdGhpcyB3YXMganVzdCB0aGUgb3Bwb3J0dW5pc3RpYyBmaXJzdCBwYXNzLiAqLwomIzQzOwlpZiAoZ2ZwX3RlbXAgIT0gZ2ZwX21hc2spIHsKJiM0MzsJCWdmcF90ZW1wID0gZ2ZwX21hc2s7CiYjNDM7CQlnb3RvIHJlcGVhdF9hbGxvYzsKJiM0MzsJfQomIzQzOwkvKiBSZXRyeSBpbmRlZmluaXRlbHkgaWYgX19HRlBfRElSRUNUX1JFQ0xBSU0gaXMgc2V0LiAqLwomIzQzOwlpZiAoZ2ZwX21hc2sgJmFtcDsgX19HRlBfRElSRUNUX1JFQ0xBSU0pCiYjNDM7CQlnb3RvIHJlcGVhdF9hbGxvYzsKJiM0MzsJLyogT24gZmFpbHVyZSwgcm9sbCBiYWNrIGFueSBzdWNjZXNzZnVsIGFsbG9jYXRpb25zIGZyb20gLSZndDthbGxvYygpLiAqLwomIzQzOwl3aGlsZSAoYWxsb2NhdGVkLS0pIHsKJiM0MzsJCXBvb2wtJmd0O2ZyZWUoZWxlbXNbYWxsb2NhdGVkXSwgcG9vbC0mZ3Q7cG9vbF9kYXRhKTsKJiM0MzsJCWVsZW1zW2FsbG9jYXRlZF0gPSBOVUxMOwomIzQzOwl9CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2YpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEJsb2NrIENyeXB0byBGYWxsYmFjayBhbmQgTWVtb3J5IFBvb2wgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmNgIGFuZCBgbW0vbWVtcG9vbC5jYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBhbnl0aW1lIHdlJiMzOTtyZSBtZXNzaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIHRoZSBibG9jayBsYXllciwgSSBwYXkgY2xvc2UgYXR0ZW50aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uLiBQcmV2aW91c2x5LCBpdCBqdXN0ICphbHdheXMqIHN1Y2NlZWRlZCBhbmQgcmV0dXJuZWQgMCwgYnV0IG5vdyBpdCYjMzk7cyBnb2luZyB0byB0YWtlIGEgYGdmcF9tYXNrYCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgYW5kIHJldHVybiBhIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgd2UgaGFuZGxlIG1lbW9yeSBwb29sIGFsbG9jYXRpb24uIEl0JiMzOTtzIGEgbm9uLXRyaXZpYWwgY2hhbmdlLgoKTm93LCBpdCB1cGRhdGVzIGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gIHRvIHVzZSB0aGUgbmV3IGBtZW1wb29sX2FsbG9jX2J1bGtgIHNpZ25hdHVyZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgaW1wb3J0YW50IHBhcnQgaXMgaG93IHRoZSBwYXRjaCBoYW5kbGVzIGFsbG9jYXRpb24gZmFpbHVyZXMuIEluc3RlYWQgb2YganVzdCBjaHVnZ2luZyBhbG9uZywgaWYgdGhlIGBtZW1wb29sX2FsbG9jX2J1bGtgIGNhbGwgZmFpbHMsIGl0IG5vdyBwdW50cyB0byBhIHdvcmtxdWV1ZSwgYGVuY19yZXNjdWVfd29ya2AsIGJ1dCAqb25seSogaWYgYGN1cnJlbnQtJmd0O2Jpb19saXN0YCBpc24mIzM5O3QgbnVsbC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHRoZSBjaGVjayBmb3IgdGhlIGBiaW9fbGlzdGAgaGVscHMgYXZvaWQgYSBkZWFkbG9jayBzY2VuYXJpby4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc3RyYXRlZ3kgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHJlc291cmNlIGNvbnRlbnRpb24uIFRoYXQmIzM5O3MgYSBnb29kIHdheSB0byBoYW5kbGUgYSBjcml0aWNhbCBmYWlsdXJlLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRvIGJsb2NrIGNyeXB0byBmYWxsYmFjayBhbmQgbWVtcG9vbCBhbGxvY2F0aW9uLCBhbmQgaXQmIzM5O3Mgc29tZXRoaW5nIEkgbmVlZCB0byBldmFsdWF0ZS4gTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IFFFTVUgY291bGQgYWN0dWFsbHkgaGl0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBibG9jayBjcnlwdG8gZmFsbGJhY2ssIHNvIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBpZiBgQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS2AgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgS2NvbmZpZyBjaGVjayB0byBtYWtlIHN1cmUgaXQmIzM5O3MgcG9zc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTE5NT1jb25maWcgQkxLX0lOTElORV9FTkNSWVBUSU9OXG4tLVxuYmxvY2svS2NvbmZpZy0yMDEtXG5ibG9jay9LY29uZmlnOjIwMjpjb25maWcgQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLXG5ibG9jay9LY29uZmlnLTIwMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIGNyeXB0byBBUEkgZmFsbGJhY2sgZm9yIGJsay1jcnlwdG9cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODgwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBFbmNyeXB0aW9uIEZhbGxiYWNrIE1lY2hhbmlzbSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tgIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgYmxvY2svS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgc3Vic3lzdGVtLiBJIGtub3cgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aW9uLCBkZXBlbmRlbmNpZXMsIGFuZCBsaWtlbHkgc29tZSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIGFib3V0IHdoYXQgdGhpcyBmYWxsYmFjayBtZWNoYW5pc20gaXMgaW50ZW5kZWQgdG8gZG8uIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZW50cnkgd2lsbCBhbHNvIGdpdmUgbWUgY2x1ZXMgYWJvdXQgKndoeSogd2UgbWlnaHQgbmVlZCBhIGZhbGxiYWNrIGZvciBpbmxpbmUgZW5jcnlwdGlvbi4gVGhpcyBjb3VsZCBpbnZvbHZlIGxvb2tpbmcgYXQgYW55IGRlcGVuZGVuY2llcyBhbmQgZXhhbWluaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBmZWF0dXJlcyBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBgS2NvbmZpZ2AgZmlsZSB0byBwcm92aWRlIHRoZSBuZWNlc3NhcnkgZnJhbWV3b3JrIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBjaG9pY2VzIGJlaGluZCB0aGUgZmVhdHVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZHJpbGwgZG93biBpbnRvIHRoZSB1bmRlcmx5aW5nIGNvZGUgaWYgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk1Olx0Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTlxuIDE5NjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgaW5saW5lIGVuY3J5cHRpb24gc3VwcG9ydCBpbiBibG9jayBsYXllclwmIzM0O1xuIDE5NzpcdFx0aGVscFxuIDE5ODpcdFx0ICBCdWlsZCB0aGUgYmxrLWNyeXB0byBzdWJzeXN0ZW0uIEVuYWJsaW5nIHRoaXMgbGV0cyB0aGVcbiAxOTk6XHRcdCAgYmxvY2sgbGF5ZXIgaGFuZGxlIGVuY3J5cHRpb24sIHNvIHVzZXJzIGNhbiB0YWtlXG4gMjAwOlx0XHQgIGFkdmFudGFnZSBvZiBpbmxpbmUgZW5jcnlwdGlvbiBoYXJkd2FyZSBpZiBwcmVzZW50LlxuIDIwMTpcdFxuIDIwMjpcdGNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcbiAyMDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGNyeXB0byBBUEkgZmFsbGJhY2sgZm9yIGJsay1jcnlwdG9cJiMzNDtcbiAyMDQ6XHRcdGRlcGVuZHMgb24gQkxLX0lOTElORV9FTkNSWVBUSU9OXG4gMjA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gMjA2Olx0XHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXG4gMjA3Olx0XHRoZWxwXG4gMjA4Olx0XHQgIEVuYWJsaW5nIHRoaXMgbGV0cyB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlIGlubGluZSBlbmNyeXB0aW9uXG4gMjA5Olx0XHQgIGJ5IGZhbGxpbmcgYmFjayB0byB0aGUga2VybmVsIGNyeXB0byBBUEkgd2hlbiBpbmxpbmVcbiAyMTA6XHRcdCAgZW5jcnlwdGlvbiBoYXJkd2FyZSBpcyBub3QgcHJlc2VudC5cbiAyMTE6XHRcbiAyMTI6XHRzb3VyY2UgXCYjMzQ7YmxvY2svcGFydGl0aW9ucy9LY29uZmlnXCYjMzQ7XG4gMjEzOlx0XG4gMjE0Olx0Y29uZmlnIEJMS19QTVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NDAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyB0aGUgQ3J5cHRvZ3JhcGhpYyBCbG9jayBEZXZpY2UgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGUgaW1tZWRpYXRlIG5lZWQgaXMgdG8gaW1wbGVtZW50IGJvdGggYEJMS19JTkxJTkVfRU5DUllQVElPTmAgYW5kIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4gSG9sZCBvbiwgdGhlIHBhdGNoIHRvdWNoZXMgYG1tL21lbXBvb2wuY2AgdG9vLiBJbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCBpdCBtb2RpZmllcyB0aGUgYG1lbXBvb2xfYWxsb2NfYnVsa2AgZnVuY3Rpb24sIGFuZCB0aGF0JiMzOTtzIHVzZWQgYnkgYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBXaGF0IG90aGVyIHN1YnN5c3RlbXMgb3IgZHJpdmVycyByZWx5IG9uIGBtZW1wb29sX2FsbG9jX2J1bGtgPyBJIG5lZWQgdG8gcmV2aWV3ICphbGwqIG9mIHRoZSBgbWVtcG9vbF9hbGxvY19idWxrYCB1c2VzLiBJIGRvbiYjMzk7dCB3YW50IHRvIGJyZWFrIHNvbWV0aGluZyB1bnJlbGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtcG9vbF9hbGxvY19idWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzY9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMTktXHQgKiBUcnkgYSBidWxrIGFsbG9jYXRpb24gZmlyc3QuICBUaGlzIG1pZ2h0IG5vdCBmaWxsIGFsbCBhbGxvY2F0ZWRcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMjA6XHQgKiBwYWdlcywgYnV0IHdlJiMzOTtsbCBmaXggdGhhdCB1cCBsYXRlciBpbiBtZW1wb29sX2FsbG9jX2J1bGsuXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjIxLVx0ICpcbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjI3LVx0aWYgKHVubGlrZWx5KG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfc2VncykgXHUwMDI2XHUwMDI2XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjI4Olx0ICAgICFtZW1wb29sX2FsbG9jX2J1bGsoYmxrX2NyeXB0b19ib3VuY2VfcGFnZV9wb29sLFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIyOS1cdFx0XHRcdCh2b2lkICoqKXBhZ2VzICYjNDM7IG5yX2FsbG9jYXRlZCxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaD02NT12b2lkICptZW1wb29sX2FsbG9jX25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwX21hc2spIF9fbWFsbG9jO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTY3LVx0YWxsb2NfaG9va3MobWVtcG9vbF9hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6Njg6Ym9vbCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbSxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTY5LVx0XHR1bnNpZ25lZCBpbnQgY291bnQsIGdmcF90IGdmcF9tYXNrKTtcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oOjcwOiNkZWZpbmUgbWVtcG9vbF9hbGxvY19idWxrKC4uLilcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6NzE6XHRhbGxvY19ob29rcyhtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTcyLVxuLS1cbm1tL21lbXBvb2wuYz0yMT1zdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKGZhaWxfbWVtcG9vbF9hbGxvYyk7XG5tbS9tZW1wb29sLmM6MjI6c3RhdGljIERFQ0xBUkVfRkFVTFRfQVRUUihmYWlsX21lbXBvb2xfYWxsb2NfYnVsayk7XG5tbS9tZW1wb29sLmMtMjMtXG5tbS9tZW1wb29sLmM9MjQ9c3RhdGljIGludCBfX2luaXQgbWVtcG9vbF9mYXVsX2luamVjdF9pbml0KHZvaWQpXG4tLVxubW0vbWVtcG9vbC5jLTM0LVx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhcbm1tL21lbXBvb2wuYzozNTpcdFx0ZmF1bHRfY3JlYXRlX2RlYnVnZnNfYXR0cihcJiMzNDtmYWlsX21lbXBvb2xfYWxsb2NfYnVsa1wmIzM0OywgTlVMTCxcbm1tL21lbXBvb2wuYzozNjpcdFx0XHUwMDI2ZmFpbF9tZW1wb29sX2FsbG9jX2J1bGspKTtcbm1tL21lbXBvb2wuYy0zNy19XG4tLVxubW0vbWVtcG9vbC5jPTQ2Nz1zdGF0aWMgaW5saW5lIGdmcF90IG1lbXBvb2xfYWRqdXN0X2dmcChnZnBfdCAqZ2ZwX21hc2spXG4tLVxubW0vbWVtcG9vbC5jLTQ3My0vKipcbm1tL21lbXBvb2wuYzo0NzQ6ICogbWVtcG9vbF9hbGxvY19idWxrIC0gYWxsb2NhdGUgbXVsdGlwbGUgZWxlbWVudHMgZnJvbSBhIG1lbW9yeSBwb29sXG5tbS9tZW1wb29sLmMtNDc1LSAqIEBwb29sOlx0cG9pbnRlciB0byB0aGUgbWVtb3J5IHBvb2xcbi0tXG5tbS9tZW1wb29sLmMtNDg5LSAqL1xubW0vbWVtcG9vbC5jOjQ5MDpib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcbm1tL21lbXBvb2wuYy00OTEtXHRcdHVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vbWVtcG9vbC5jLTUwMy1cdCAqL1xubW0vbWVtcG9vbC5jOjUwNDpcdGlmIChzaG91bGRfZmFpbF9leChcdTAwMjZmYWlsX21lbXBvb2xfYWxsb2NfYnVsaywgMSwgRkFVTFRfTk9XQVJOKSkge1xubW0vbWVtcG9vbC5jLTUwNS1cdFx0cHJfaW5mbyhcJiMzNDtmb3JjaW5nIG1lbXBvb2wgdXNhZ2UgZm9yICVwU1xcblwmIzM0Oyxcbi0tXG5tbS9tZW1wb29sLmMtNTQyLX1cbm1tL21lbXBvb2wuYzo1NDM6RVhQT1JUX1NZTUJPTF9HUEwobWVtcG9vbF9hbGxvY19idWxrX25vcHJvZik7XG5tbS9tZW1wb29sLmMtNTQ0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJsb2NrIENyeXB0byBGYWxsYmFjayBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYmxvY2sgY3J5cHRvIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uLiBJdCBsb29rcyBsaWtlIGBtZW1wb29sX2FsbG9jX2J1bGtgIGlzIGV4Y2x1c2l2ZWx5IHVzZWQgd2l0aGluIGBibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhpcyBtb2R1bGUgaW50cm9kdWNlcyBhIG5ldyB3b3JrcXVldWUsIGBlbmNfcmVzY3VlX3dvcmtgLCBhbmQgdGhlIGFzc29jaWF0ZWQgd29ya2VyIGZ1bmN0aW9uIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbmAuIFRoZSBjb3JlIGNoYW5nZSBpcyBpbiBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYC4gSXQgbm93IGF0dGVtcHRzIGEgbm9uLWJsb2NraW5nIGFsbG9jYXRpb24gKGBHRlBfTk9XQUlUYCkgdXNpbmcgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIGlmIGBjdXJyZW50LSZndDtiaW9fbGlzdGAgaXMgcG9wdWxhdGVkLCBhbmQgaWYgdGhhdCBmYWlscywgaXQgb2ZmbG9hZHMgdGhlIHJlcXVlc3QgdG8gdGhlIG5ldyB3b3JrcXVldWUuIFRoaXMgZmFsbGJhY2sgbG9naWMga2lja3MgaW4gZHVyaW5nIGJsb2NrIGNyeXB0byBvcGVyYXRpb25zLCBvZiBjb3Vyc2UuCgpUbyB0ZXN0IHRoaXMgdGhvcm91Z2hseSwgSSBzaG91bGQgZW5hYmxlIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tgLiBUaGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzIGFyZTogYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCwgYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AsIGFuZCBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAuCgpIYW5nIG9uLCBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgaXMgYSBjb3JlIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3Mgb25seSB1c2VkIGJ5IGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgd2hpY2ggaXMgd29ydGggbm90aW5nLiBOb3csIHRoZSBwcm9tcHQgc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBMZXQgbWUgc2VlLi4uIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbmAgKmlzKiBzdGF0aWMuLi4gQnV0IHdhaXQsIGl0JiMzOTtzIHBhc3NlZCB0byBgSU5JVF9XT1JLYC4gVGhpcyBtZWFucyBpdCBpc24mIzM5O3QgaW5saW5lZCwgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQgc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCwgdGhhbmtmdWxseS4gTm93LCBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IGxlc3MgaWRlYWwsIGJ1dCBpdCYjMzk7cyBjYWxsZWQgYnkgYF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2Jpb2Agd2hpY2ggaXMgYWxzbyBzdGF0aWMuIExldCYjMzk7cyBkaWcgZGVlcGVyIHRvIGZpbmQgdGhlICphY3R1YWwqIGVudHJ5IHBvaW50cyBmb3IgdGhlIGJsb2NrIGNyeXB0byBmYWxsYmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0yNjU9c3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yODAtXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjgxOnN0YXRpYyB2b2lkIF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvLFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTI4Mi1cdFx0c3RydWN0IGNyeXB0b19zeW5jX3NrY2lwaGVyICp0Zm0pXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTQxMj1zdGF0aWMgdm9pZCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHN0cnVjdCBiaW8gKnNyY19iaW8pXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQyMy1cdH1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo0MjQ6XHRfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3JjX2JpbyxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy00MjUtXHRcdFx0YmxrX2NyeXB0b19mYWxsYmFja190Zm0oc2xvdCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Nzc0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2Jpb2AgaXMgYWN0dWFsbHkgdXNlZC4gVGhpcyBmdW5jdGlvbiBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIGEgZmFsbGJhY2sgZW5jcnlwdGlvbiBtZWNoYW5pc20sIGxpa2VseSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLCBhbmQgcHJvYmFibHkgdGllZCB0byBzb21lIEJJTyAoQnVmZmVyZWQgSS9PKSBzdHJ1Y3R1cmUuIFRoYXQgbWVhbnMgaXTigJlzIGhhbmRsaW5nIGRhdGEgbW92aW5nIGluIGFuZCBvdXQgb2YgYmxvY2sgZGV2aWNlcywgcG90ZW50aWFsbHkgd2hlbiBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaXNuJiMzOTt0IGF2YWlsYWJsZSBvciBjb25maWd1cmVkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSB0aGlzIGZhbGxiYWNrLCBzaW5jZSBpdCYjMzk7cyBhbiBpbXBvcnRhbnQgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbiwgYW5kIG1pZ2h0IGhpbnQgYXQgd2hlcmUgYWNjZWxlcmF0aW9uIGlzIGV4cGVjdGVkLiBJ4oCZbGwgc3RhcnQgYnkgdHJhY2luZyBpdHMgY2FsbHMgdG8gZ2V0IGEgZ3Jhc3Agb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgSS9PIGZsb3cuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjYWxsIGdyYXBoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0yNTM9c3RhdGljIHZvaWQgYmxrX2NyeXB0b19kdW5fdG9faXYoY29uc3QgdTY0IGR1bltCTEtfQ1JZUFRPX0RVTl9BUlJBWV9TSVpFXSxcbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjYxLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjI2MjpzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHN0cnVjdCBiaW8gKnNyY19iaW8pO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTI2My1cbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9MjY1PXN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjc3LVx0d2hpbGUgKChzcmNfYmlvID0gYmlvX2xpc3RfcG9wKFx1MDAyNmxpc3QpKSlcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyNzg6XHRcdGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3JjX2Jpbyk7XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjc5LX1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yODAtXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjgxOnN0YXRpYyB2b2lkIF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvLFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTI4Mi1cdFx0c3RydWN0IGNyeXB0b19zeW5jX3NrY2lwaGVyICp0Zm0pXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQxMS0gKi9cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo0MTI6c3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvKVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQxMy17XG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQyMy1cdH1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo0MjQ6XHRfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3JjX2JpbyxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy00MjUtXHRcdFx0YmxrX2NyeXB0b19mYWxsYmFja190Zm0oc2xvdCkpO1xuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz01NDQ9Ym9vbCBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTYxLVx0aWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB7XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6NTYyOlx0XHRibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKGJpbyk7XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTYzLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NzIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipBbmFseXppbmcgdGhlIEVudHJ5IFBvaW50OiBgYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcGAqKgoKUmlnaHQsIHNvIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCBpcyB0aGUgZGVzaWduYXRlZCBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBwcm9jZXNzLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBndW4sIHRoZSBmaXJzdCBwbGFjZSBleGVjdXRpb24gaGl0cy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcmVhbGx5IGRpZyBpbnRvIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBpdCBkb2VzLCB0aGUgcGFyYW1ldGVycyBpdCB1c2VzLCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAuIEkgd2FudCB0byBzZWUgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kIGNyeXB0byBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgdGhlIGZhbGxiYWNrIGhlcmUgaXMgY3J1Y2lhbC4gV2hhdCBpcyB0aGlzIGZ1bmN0aW9uIGEgJiMzNDtmYWxsYmFjayYjMzQ7ICpmcm9tKj8gQW5kLCBpZiBzbywgd2hpY2ggb3RoZXIgZnVuY3Rpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTUwNz1zdGF0aWMgdm9pZCBibGtfY3J5cHRvX2ZhbGxiYWNrX2RlY3J5cHRfZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy01MjYtLyoqXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6NTI3OiAqIGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAgLSBQcmVwYXJlIGEgYmlvIHRvIHVzZSBmYWxsYmFjayBlbi9kZWNyeXB0aW9uXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTI4LSAqIEBiaW86IGJpbyB0byBwcmVwYXJlXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTU0My0gKi9cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo1NDQ6Ym9vbCBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwKHN0cnVjdCBiaW8gKmJpbylcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy01NDUte1xuLS1cbmJsb2NrL2Jsay1jcnlwdG8taW50ZXJuYWwuaD0yMTM9c3RhdGljIGlubGluZSBpbnQgYmxrX2NyeXB0b19ycV9iaW9fcHJlcChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbyxcbi0tXG5ibG9jay9ibGstY3J5cHRvLWludGVybmFsLmgtMjIwLVxuYmxvY2svYmxrLWNyeXB0by1pbnRlcm5hbC5oOjIyMTpib29sIGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAoc3RydWN0IGJpbyAqYmlvKTtcbmJsb2NrL2Jsay1jcnlwdG8taW50ZXJuYWwuaC0yMjItXG4tLVxuYmxvY2svYmxrLWNyeXB0by5jPTI1Mj1ib29sIF9fYmxrX2NyeXB0b19zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstY3J5cHRvLmMtMjczLVx0XHR9XG5ibG9jay9ibGstY3J5cHRvLmM6Mjc0Olx0XHRyZXR1cm4gYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcChiaW8pO1xuYmxvY2svYmxrLWNyeXB0by5jLTI3NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxODEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJsb2NrIENyeXB0byBQYXRjaCBmb3IgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYF9fYmxrX2NyeXB0b19zdWJtaXRfYmlvYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgYmxvY2sgY3J5cHRvIG9wZXJhdGlvbnMuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgc29tZSBrZXkgZnVuY3Rpb25zOiBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCwgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCwgYW5kIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYC4KCkxldCBtZSBxdWlja2x5IHZlcmlmeSBpZiBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgaXMgZXZlbiB2aXNpYmxlIGV4dGVybmFsbHkuIEFoLCB5ZXAsIGl0JiMzOTtzIGBFWFBPUlRfU1lNQk9MX0dQTGAmIzM5O2QsIHNvIGl0JiMzOTtzIGEgbGVnaXRpbWF0ZSB0YXJnZXQgZm9yIGludmVzdGlnYXRpb24uIEdpdmVuIHRoYXQsIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCBhbmQgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCBhcmUgYWxzbyB3b3J0aCBhIGxvb2suCgpXYWl0IGEgc2Vjb25kLCBJIHNlZSB0aGUgY29yZSBpc3N1ZSDigJMgdGhpcyBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjdXJzaXZlIGJpbyBzdWJtaXNzaW9ucyBieSBzaGlmdGluZyBvcGVyYXRpb25zIHRvIGEgd29ya3F1ZXVlLiBPa2F5LCB0aGF0IGNvbnRleHQgaXMgZXNzZW50aWFsLiBUaGUgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCBpcyBkZWZpbml0ZWx5IGEgbmV3IGZ1bmN0aW9uIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gVGhpcyBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZyBnaXZlbiBpdHMgbmV3IG5hdHVyZS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIHRvIGFjY291bnQgZm9yIGBnZnBfbWFza2AgYW5kIGhhbmRsZSBgX19HRlBfRElSRUNUX1JFQ0xBSU1gIHdoaWNoIGNvdWxkIGhhdmUgaW50ZXJlc3RpbmcgY29uc2VxdWVuY2VzLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQmIzM5O3MgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIHRvIHRyaWdnZXIgdGhpcyBiZWhhdmlvcj8gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tgLiBEb2VzIGl0IGhhdmUgYW55IHVwc3RyZWFtIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGltcGFjdCBpdHMgZnVuY3Rpb24/IEFscmlnaHQsIGl0IGRlcGVuZHMgb24gYEJMS19JTkxJTkVfRU5DUllQVElPTmAuIFRpbWUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19JTkxJTkVfRU5DUllQVElPTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0xODU9Y29uZmlnIEJMS19TRURfT1BBTFxuLS1cbmJsb2NrL0tjb25maWctMTk0LVxuYmxvY2svS2NvbmZpZzoxOTU6Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTlxuYmxvY2svS2NvbmZpZy0xOTYtXHRib29sIFwmIzM0O0VuYWJsZSBpbmxpbmUgZW5jcnlwdGlvbiBzdXBwb3J0IGluIGJsb2NrIGxheWVyXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0yMDEtXG5ibG9jay9LY29uZmlnOjIwMjpjb25maWcgQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLXG5ibG9jay9LY29uZmlnLTIwMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIGNyeXB0byBBUEkgZmFsbGJhY2sgZm9yIGJsay1jcnlwdG9cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipSZXZpZXdpbmcgYGJsb2NrL0tjb25maWdgKioKCk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgdG8gYGJsb2NrL0tjb25maWdgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcm91bmQgbGluZSAxOTUuIEkgcmVjYWxsIHdlIGhhZCBkaXNjdXNzZWQgdGhpcyBzZWN0aW9uIHByZXZpb3VzbHksIGFuZCBJIHdhbnQgdG8gcmUtZXZhbHVhdGUgaXQgd2l0aCBmcmVzaCBleWVzLCBjb25zaWRlcmluZyB0aGUgbGF0ZXN0IGRpc2N1c3Npb25zIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgaXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHRcdGhlbHBcbiAxOTE6XHRcdEJ1aWxkcyBMb2dpYyBmb3IgaW50ZXJmYWNpbmcgd2l0aCBPcGFsIGVuYWJsZWQgY29udHJvbGxlcnMuXG4gMTkyOlx0XHRFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHVzZXJzIHRvIHNldHVwL3VubG9jay9sb2NrXG4gMTkzOlx0XHRMb2NraW5nIHJhbmdlcyBmb3IgU0VEIGRldmljZXMgdXNpbmcgdGhlIE9wYWwgcHJvdG9jb2wuXG4gMTk0Olx0XG4gMTk1Olx0Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTlxuIDE5NjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgaW5saW5lIGVuY3J5cHRpb24gc3VwcG9ydCBpbiBibG9jayBsYXllclwmIzM0O1xuIDE5NzpcdFx0aGVscFxuIDE5ODpcdFx0ICBCdWlsZCB0aGUgYmxrLWNyeXB0byBzdWJzeXN0ZW0uIEVuYWJsaW5nIHRoaXMgbGV0cyB0aGVcbiAxOTk6XHRcdCAgYmxvY2sgbGF5ZXIgaGFuZGxlIGVuY3J5cHRpb24sIHNvIHVzZXJzIGNhbiB0YWtlXG4gMjAwOlx0XHQgIGFkdmFudGFnZSBvZiBpbmxpbmUgZW5jcnlwdGlvbiBoYXJkd2FyZSBpZiBwcmVzZW50LlxuIDIwMTpcdFxuIDIwMjpcdGNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcbiAyMDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGNyeXB0byBBUEkgZmFsbGJhY2sgZm9yIGJsay1jcnlwdG9cJiMzNDtcbiAyMDQ6XHRcdGRlcGVuZHMgb24gQkxLX0lOTElORV9FTkNSWVBUSU9OXG4gMjA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gMjA2Olx0XHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXG4gMjA3Olx0XHRoZWxwXG4gMjA4Olx0XHQgIEVuYWJsaW5nIHRoaXMgbGV0cyB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlIGlubGluZSBlbmNyeXB0aW9uXG4gMjA5Olx0XHQgIGJ5IGZhbGxpbmcgYmFjayB0byB0aGUga2VybmVsIGNyeXB0byBBUEkgd2hlbiBpbmxpbmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MDIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMuIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05gIGlzIHNlbGYtY29udGFpbmVkLCBubyBkZXBlbmRlbmNpZXMuIEJ1dCwgYEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS2AgYnVpbGRzIHVwb24gdGhhdCwgcmlnaHQ/IEdvb2QuIEp1c3QgZG91YmxlLWNoZWNraW5nLCBhbmQgeWVwLCBgQ09ORklHX0NSWVBUT2AgYW5kIGBDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSYCBhcmUgc2VsZWN0ZWQgYXMgd2VsbC4KClNvIHdlIGhhdmUgdGhlIHR3byBtYWluIGNvbmZpZ3M6IGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05gIGFuZCBpdHMgZmFsbGJhY2suIE5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyLiBJJiMzOTttIHdvbmRlcmluZyBpZiBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgY2FuIGJlIHJlYWNoZWQgd2l0aG91dCB0aGUgYmxvY2sgY3J5cHRvIHBhdGguIEFoLCBpdCAqaXMqIGV4cG9ydGVkLCBidXQgY3VycmVudGx5IHNlZW1zIHRvIGJlIHVzZWQgb25seSBieSB0aGUgYmxvY2sgY3J5cHRvIGZhbGxiYWNrLiBIYW5nIG9uLCB0aGF0JiMzOTtzIGEgKmNvcmUqIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uISBUaGF0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggc29tZSBzZXJpb3VzIGZ1enppbmcgYXR0ZW50aW9uLgoKQWxyaWdodCwgdGhlIGNvcmUgZm9jdXMgdGhlbiB3aWxsIGJlOgoKKiAgIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYCAtIHRoYXQmIzM5O3MgYSBwcmlvcml0eS4KKiAgIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbmAgLSB0aGF0JiMzOTtzIGEgZ29vZCBlbnRyeSBwb2ludC4KKiAgIGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gIC0gSSYjMzk7bSBub3RpbmcgdGhpcyBvbmUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gTGV0JiMzOTtzIGluY2x1ZGUgaXQgaW4gdGhlIGluaXRpYWwgY292ZXJhZ2UsIG9yIGNvbnNpZGVyIGFsc28gaXRzIG5vbi1zdGF0aWMgZXF1aXZhbGVudCBgX19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvYC4KCldhaXQgYSBtaW51dGUsIGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgaW5saW5lZC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQ7IEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgaXQmIzM5O3MgYWN0dWFsbHkgaW5saW5lZCBiZWZvcmUgSSBmaW5hbGl6ZSB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgcGFydGljdWxhciBzeW1ib2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9MTQ4PXN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9lbmRpbyhzdHJ1Y3QgYmlvICplbmNfYmlvKVxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0xNzUtXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MTc2OnN0YXRpYyBzdHJ1Y3QgYmlvICpibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3RydWN0IGJpbyAqYmlvX3NyYyxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0xNzctXHRcdHVuc2lnbmVkIGludCBucl9zZWdzLCBzdHJ1Y3QgcGFnZSAqKipwYWdlc19yZXQpXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTI4MT1zdGF0aWMgdm9pZCBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2Jpbyxcbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMzEzLVx0bnJfZW5jX3BhZ2VzID0gbWluKGJpb19zZWdtZW50cyhzcmNfYmlvKSwgQklPX01BWF9WRUNTKTtcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzozMTQ6XHRlbmNfYmlvID0gYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHNyY19iaW8sIG5yX2VuY19wYWdlcywgXHUwMDI2ZW5jX3BhZ2VzKTtcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0zMTUtXHRpZiAodW5saWtlbHkoIWVuY19iaW8pKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDcnlwdG9ncmFwaGljIEJJTyBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gIGZ1bmN0aW9uLiBJdCYjMzk7cyBtYXJrZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIGZpbmUsIGJ1dCBpdCYjMzk7cyBhIHByZXR0eSBoZWZ0eSBjaHVuayBvZiBjb2RlLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGUgY29tcGlsZXIgd2lsbCBhY3R1YWxseSBpbmxpbmUgaXQsIGdpdmVuIHRoYXQgaXQgaGFuZGxlcyBiaW8gYWxsb2NhdGlvbiBhbmQgcGFnZSBhbGxvY2F0aW9uIOKAkyB0aGF0JiMzOTtzIG9mdGVuIGEgYml0IHRvbyBtdWNoIGZvciBhIHNpbXBsZSBpbmxpbmluZy4KClRoZW4gdGhlcmUmIzM5O3MgYF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2Jpb2AsIHdoaWNoIGlzICphbHNvKiBzdGF0aWMuIEhtbS4gVGhlIHJlYWwgZW50cnkgcG9pbnQgaXMgYGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXBgLCBhbmQgdGhhdCBvbmUgKmlzbiYjMzk7dCogc3RhdGljLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgb25lIHdlIHdhbnQgdG8gZm9jdXMgb24uIEkgdGhpbmsgd2UgY2FuIGxldmVyYWdlIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCwgYWxvbmcgd2l0aCBgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm5gIGFuZCBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgdG8gZ2V0IHRoZSBkZXNpcmVkIGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIGJlY2F1c2UgdGhhdCYjMzk7cyBhbHdheXMgZ29vZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBpbiBkZXRhaWwuIFRpbWUgdG8gY2hlY2sgYG1tL21lbXBvb2wuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtcG9vbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODA6XHQgKlx0XHRpbmRlZmluaXRlbHkgdW50aWwgaXQgc3VjY2VlZHMgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgYWx3YXlzXG4gNDgxOlx0ICpcdFx0JXRydWUuICBJZiB0aGUgbWFzayBkb2VzbiYjMzk7dCBpbmNsdWRlICVfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgdGhlblxuIDQ4MjpcdCAqXHRcdGZhaWx1cmUgaXMgYWxsb3dlZCBhbmQgJWZhbHNlIGNhbiBiZSByZXR1cm5lZC5cbiA0ODM6XHQgKlxuIDQ4NDpcdCAqIEFsbG9jYXRlIEBjb3VudCBlbGVtZW50cyBpbnRvIEBlbGVtcy4gIFRoaXMgaXMgZG9uZSBieSBmaXJzdCBjYWxsaW5nIGludG8gdGhlXG4gNDg1Olx0ICogYWxsb2NfZm4gc3VwcGxpZWQgYXQgcG9vbCBpbml0aWFsaXphdGlvbiB0aW1lLCBhbmQgZGlwcGluZyBpbnRvIHRoZSByZXNlcnZlZFxuIDQ4NjpcdCAqIHBvb2wgdG8gYXRvbWljYWxseSBhbGxvY2F0ZSB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGlmIGFsbG9jX2ZuIGZhaWxzLlxuIDQ4NzpcdCAqXG4gNDg4Olx0ICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgYWxsb2NhdGlvbiBzdWNjZWVkZWQsIG9yICVmYWxzZSBpZiBpdCBmYWlsZWQuXG4gNDg5Olx0ICovXG4gNDkwOlx0Ym9vbCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXG4gNDkxOlx0XHRcdHVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spXG4gNDkyOlx0e1xuIDQ5MzpcdFx0Z2ZwX3QgZ2ZwX3RlbXAgPSBtZW1wb29sX2FkanVzdF9nZnAoXHUwMDI2Z2ZwX21hc2spO1xuIDQ5NDpcdFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZCA9IDA7XG4gNDk1Olx0XG4gNDk2Olx0XHRWTV9XQVJOX09OX09OQ0UoY291bnQgXHUwMDNlIHBvb2wtXHUwMDNlbWluX25yKTtcbiA0OTc6XHRcdFZNX1dBUk5fT05fT05DRShnZnBfbWFzayBcdTAwMjYgX19HRlBfWkVSTyk7XG4gNDk4Olx0XHRtaWdodF9hbGxvYyhnZnBfbWFzayk7XG4gNDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjcwCgkJCQkJCQlvdXRwdXQ6IDIwMgoJCQkJCQkJdGhvdWdodHM6IDIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBCbG9jayBDcnlwdG8gRmFsbGJhY2sqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgbG9vayBmb3IgZnV6emluZy4gSXQmIzM5O3MgZnVuY3Rpb25hbCwgbWVhbmluZyBpdCBhY3R1YWxseSBjaGFuZ2VzIGhvdyB0aGluZ3MgKndvcmsq4oCUYW5kIGl0IHRvdWNoZXMgc29tZSBrZXkgYXJlYXMsIHNwZWNpZmljYWxseSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIGJsb2NrIGNyeXB0byBmYWxsYmFjayBsb2dpYywgd2hpY2ggaXMgY3J1Y2lhbCBmb3Igb3ZlcmFsbCBzeXN0ZW0gaW50ZWdyaXR5LiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbWFrZXMgaXQgZXZlbiBtb3JlIGF0dHJhY3RpdmUgZm9yIHRlc3RpbmcuCgpJJiMzOTttIGZsYWdnaW5nIHRoaXMgYXMgYFdvcnRoRnV6emluZz10cnVlYC4KCkkmIzM5O2xsIGJlIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlc2Ugc3ltYm9sczogYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgLCBgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm5gLCBhbmQgYGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXBgLiBGb2N1c2luZyBvbiB0aGVzZSBzaG91bGQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgYW5kIHRlc3QgdGhlIG5ldyBsb2dpYy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCwgdGhhdCB3b3VsZCBiZSBgQkxLX0lOTElORV9FTkNSWVBUSU9OYCBhbmQgYEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS2AuCgpUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjbGVhcjogVGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIGJlaGF2ZXMuIEl0IG5vdyB0YWtlcyBhIGBnZnBfbWFza2AgYW5kIGhhbmRsZXMgYWxsb2NhdGlvbiBmYWlsdXJlcyBiZXR0ZXIuIE1vcmUgaW1wb3J0YW50bHksIGl0IGludGVncmF0ZXMgdGhpcyBjaGFuZ2UgaW50byB0aGUgYGJsay1jcnlwdG8tZmFsbGJhY2tgIHN1YnN5c3RlbS4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYGVuY19yZXNjdWVfd29ya2Agd29ya3F1ZXVlIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgcmVjdXJzaXZlIGJpbyBzdWJtaXNzaW9ucyBzdWdnZXN0cyBhIHN1YnRsZSBidXQgY3J1Y2lhbCBmaXguIEl0JiMzOTtzIGFib3V0IHB1bnRpbmcgZW5jcnlwdGlvbiB3b3JrIHdoZW4gYGN1cnJlbnQtJmd0O2Jpb19saXN0YCBpcyBub24tbnVsbCwgd2hpY2ggaXMgYSBjb21tb24gc2NlbmFyaW8gaW4gYmxvY2sgbGF5ZXIgb3BlcmF0aW9ucy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gZml4ISBNeSBndWVzcyBpcyB0aGF0IHRoZSB3b3JrcXVldWUgd2lsbCBpbnRyb2R1Y2UgYSBuZXcgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0lOTElORV9FTkNSWVBUSU9OJiMzNDssCiAgICAmIzM0O0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm4mIzM0OywKICAgICYjMzQ7YmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgdG8gYWNjZXB0IGEgYGdmcF9tYXNrYCBhbmQgaGFuZGxlIGFsbG9jYXRpb24gZmFpbHVyZXMgcHJvcGVybHkuIEl0IGFsc28gdXBkYXRlcyBgYmxrLWNyeXB0by1mYWxsYmFja2AgdG8gdXNlIHRoaXMgbmV3IHNpZ25hdHVyZSBhbmQgaW50cm9kdWNlcyBhIHdvcmtxdWV1ZSAoYGVuY19yZXNjdWVfd29ya2ApIHRvIHByZXZlbnQgZGVhZGxvY2tzIGR1cmluZyByZWN1cnNpdmUgYmlvIHN1Ym1pc3Npb25zIGJ5IHB1bnRpbmcgZW5jcnlwdGlvbiB3b3JrIHdoZW4gYGN1cnJlbnQtXHUwMDNlYmlvX2xpc3RgIGlzIG5vbi1udWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYmxvY2sgbGF5ZXIgY3J5cHRvIGZhbGxiYWNrIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfSU5MSU5FX0VOQ1JZUFRJT04mIzM0OywKICAgICYjMzQ7QkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtcG9vbF9hbGxvY19idWxrX25vcHJvZiYjMzQ7LAogICAgJiMzNDtibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbiYjMzQ7LAogICAgJiMzNDtibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYCB0byBhY2NlcHQgYSBgZ2ZwX21hc2tgIGFuZCBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcyBwcm9wZXJseS4gSXQgYWxzbyB1cGRhdGVzIGBibGstY3J5cHRvLWZhbGxiYWNrYCB0byB1c2UgdGhpcyBuZXcgc2lnbmF0dXJlIGFuZCBpbnRyb2R1Y2VzIGEgd29ya3F1ZXVlIChgZW5jX3Jlc2N1ZV93b3JrYCkgdG8gcHJldmVudCBkZWFkbG9ja3MgZHVyaW5nIHJlY3Vyc2l2ZSBiaW8gc3VibWlzc2lvbnMgYnkgcHVudGluZyBlbmNyeXB0aW9uIHdvcmsgd2hlbiBgY3VycmVudC1cdTAwM2ViaW9fbGlzdGAgaXMgbm9uLW51bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBibG9jayBsYXllciBjcnlwdG8gZmFsbGJhY2sgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNTozNC41NjUzNDUzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNjY2OTM1OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19JTkxJTkVfRU5DUllQVElPTlwiLFxuICAgIFwiQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtcG9vbF9hbGxvY19idWxrX25vcHJvZlwiLFxuICAgIFwiYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm5cIixcbiAgICBcImJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgdG8gYWNjZXB0IGEgYGdmcF9tYXNrYCBhbmQgaGFuZGxlIGFsbG9jYXRpb24gZmFpbHVyZXMgcHJvcGVybHkuIEl0IGFsc28gdXBkYXRlcyBgYmxrLWNyeXB0by1mYWxsYmFja2AgdG8gdXNlIHRoaXMgbmV3IHNpZ25hdHVyZSBhbmQgaW50cm9kdWNlcyBhIHdvcmtxdWV1ZSAoYGVuY19yZXNjdWVfd29ya2ApIHRvIHByZXZlbnQgZGVhZGxvY2tzIGR1cmluZyByZWN1cnNpdmUgYmlvIHN1Ym1pc3Npb25zIGJ5IHB1bnRpbmcgZW5jcnlwdGlvbiB3b3JrIHdoZW4gYGN1cnJlbnQtXFx1MDAzZWJpb19saXN0YCBpcyBub24tbnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIGNyeXB0byBmYWxsYmFjayBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDU6MzQuNTY1MzUxMDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTgxNTgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGExMmE1MmJjMTU0ZDlhZGQ4MjM3Mzc2NTk0NThlNjg4MjBmZmQ1MDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAwMjowNTozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMgYi9ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmNcXG5pbmRleCAyYTVjNTJhYjc0YjRjLi45NzMzOTkwMTFkNWEyIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY1xcbisrKyBiL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY1xcbkBAIC04Myw2ICs4MywxMCBAQCBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJsa19jcnlwdG9fd3E7XFxuIHN0YXRpYyBtZW1wb29sX3QgKmJsa19jcnlwdG9fYm91bmNlX3BhZ2VfcG9vbDtcXG4gc3RhdGljIHN0cnVjdCBiaW9fc2V0IGVuY19iaW9fc2V0O1xcbiBcXG4rc3RhdGljIERFRklORV9TUElOTE9DSyhlbmNfcmVzY3VlX2xpc3RfbG9jayk7XFxuK3N0YXRpYyBzdHJ1Y3QgYmlvX2xpc3QgZW5jX3Jlc2N1ZV9saXN0O1xcbitzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IGVuY19yZXNjdWVfd29yaztcXG4rXFxuIC8qXFxuICAqIFRoaXMgaXMgdGhlIGtleSB3ZSBzZXQgd2hlbiBldmljdGluZyBhIGtleXNsb3QuIFRoaXMgKnNob3VsZCogYmUgdGhlIGFsbCAwJ3NcXG4gICoga2V5LCBidXQgQUVTLVhUUyByZWplY3RzIHRoYXQga2V5LCBzbyB3ZSB1c2Ugc29tZSByYW5kb20gYnl0ZXMgaW5zdGVhZC5cXG5AQCAtMTcyLDEzICsxNzYsMjYgQEAgc3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2VuZGlvKHN0cnVjdCBiaW8gKmVuY19iaW8pXFxuIHN0YXRpYyBzdHJ1Y3QgYmlvICpibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3RydWN0IGJpbyAqYmlvX3NyYyxcXG4gXFx0XFx0dW5zaWduZWQgaW50IG5yX3NlZ3MsIHN0cnVjdCBwYWdlICoqKnBhZ2VzX3JldClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3MgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTtcXG4gXFx0dW5zaWduZWQgaW50IG5yX2FsbG9jYXRlZDtcXG4gXFx0c3RydWN0IHBhZ2UgKipwYWdlcztcXG4gXFx0c3RydWN0IGJpbyAqYmlvO1xcbitcXHRnZnBfdCBnZnBfbWFzaztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIER1cmluZyByZWN1cnNpdmUgYmlvIHN1Ym1pc3Npb24gKGN1cnJlbnQtXFx1MDAzZWJpb19saXN0ICE9IE5VTEwpIGFueVxcbitcXHQgKiBzdWJtaXR0ZWQgYm91bmNlIGJpb3MganVzdCBnZXQgYWRkZWQgdG8gY3VycmVudC1cXHUwMDNlYmlvX2xpc3Q7IHRoZXlcXG4rXFx0ICogY2Fubm90IGNvbXBsZXRlIGFuZCByZWxlYXNlIHJlc291cmNlcyB5ZXQuICBUaGVyZWZvcmUsIHRvIGF2b2lkXFxuK1xcdCAqIGRlYWRsb2NrcywgZG9uJ3Qgd2FpdCBpbmRlZmluaXRlbHkgZm9yIGFkZGl0aW9uYWwgcmVzb3VyY2VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGN1cnJlbnQtXFx1MDAzZWJpb19saXN0KVxcbitcXHRcXHRnZnBfbWFzayA9IEdGUF9OT1dBSVQ7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Z2ZwX21hc2sgPSBHRlBfTk9JTztcXG4gXFxuIFxcdGJpbyA9IGJpb19hbGxvY19iaW9zZXQoYmlvX3NyYy1cXHUwMDNlYmlfYmRldiwgbnJfc2VncywgYmlvX3NyYy1cXHUwMDNlYmlfb3BmLFxcbi1cXHRcXHRcXHRHRlBfTk9JTywgXFx1MDAyNmVuY19iaW9fc2V0KTtcXG4rXFx0XFx0XFx0ICAgICAgIGdmcF9tYXNrLCBcXHUwMDI2ZW5jX2Jpb19zZXQpO1xcbitcXHRpZiAodW5saWtlbHkoIWJpbykpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRpZiAoYmlvX2ZsYWdnZWQoYmlvX3NyYywgQklPX1JFTUFQUEVEKSlcXG4gXFx0XFx0YmlvX3NldF9mbGFnKGJpbywgQklPX1JFTUFQUEVEKTtcXG4gXFx0YmlvLVxcdTAwM2ViaV9wcml2YXRlXFx0XFx0PSBiaW9fc3JjO1xcbkBAIC0yMDYsMTIgKzIyMywxNSBAQCBzdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXFxuIFxcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxcbiBcXHQgKi9cXG4gXFx0bWVtc2V0KHBhZ2VzLCAwLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9zZWdzKTtcXG4tXFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XFxuLVxcdGlmIChucl9hbGxvY2F0ZWQgXFx1MDAzYyBucl9zZWdzKVxcbi1cXHRcXHRtZW1wb29sX2FsbG9jX2J1bGsoYmxrX2NyeXB0b19ib3VuY2VfcGFnZV9wb29sLFxcbitcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcF9tYXNrLCBucl9zZWdzLCBwYWdlcyk7XFxuK1xcdGlmICh1bmxpa2VseShucl9hbGxvY2F0ZWQgXFx1MDAzYyBucl9zZWdzKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1lbXBvb2xfYWxsb2NfYnVsayhibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2wsXFxuIFxcdFxcdFxcdFxcdCh2b2lkICoqKXBhZ2VzICsgbnJfYWxsb2NhdGVkLFxcbi1cXHRcXHRcXHRcXHRucl9zZWdzIC0gbnJfYWxsb2NhdGVkKTtcXG4tXFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG1lbWZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0bnJfc2VncyAtIG5yX2FsbG9jYXRlZCwgZ2ZwX21hc2spKSB7XFxuK1xcdFxcdGZyZWVfcGFnZXNfYnVsayhwYWdlcywgbnJfYWxsb2NhdGVkKTtcXG4rXFx0XFx0YmlvX3B1dChiaW8pO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbiBcXHQqcGFnZXNfcmV0ID0gcGFnZXM7XFxuIFxcdHJldHVybiBiaW87XFxuIH1cXG5AQCAtMjM5LDYgKzI1OSwyNSBAQCBzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2R1bl90b19pdihjb25zdCB1NjQgZHVuW0JMS19DUllQVE9fRFVOX0FSUkFZX1NJWkVdLFxcbiBcXHRcXHRpdi1cXHUwMDNlZHVuW2ldID0gY3B1X3RvX2xlNjQoZHVuW2ldKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvKTtcXG4rXFxuKy8qIEVuY3J5cHQgYSBsaXN0IG9mIGJpb3Mgd2hvc2UgZW5jcnlwdGlvbiB3YXMgcHVudGVkIHRvIGEga3dvcmtlci4gKi9cXG4rc3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBiaW9fbGlzdCBsaXN0O1xcbitcXHRzdHJ1Y3QgYmlvICpzcmNfYmlvO1xcbitcXG4rXFx0V0FSTl9PTl9PTkNFKGN1cnJlbnQtXFx1MDAzZWJpb19saXN0KTtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0X2xvY2spO1xcbitcXHRsaXN0ID0gZW5jX3Jlc2N1ZV9saXN0O1xcbitcXHRiaW9fbGlzdF9pbml0KFxcdTAwMjZlbmNfcmVzY3VlX2xpc3QpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0X2xvY2spO1xcbitcXG4rXFx0d2hpbGUgKChzcmNfYmlvID0gYmlvX2xpc3RfcG9wKFxcdTAwMjZsaXN0KSkpXFxuK1xcdFxcdGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3JjX2Jpbyk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvLFxcbiBcXHRcXHRzdHJ1Y3QgY3J5cHRvX3N5bmNfc2tjaXBoZXIgKnRmbSlcXG4ge1xcbkBAIC0yNzMsNiArMzEyLDIzIEBAIHN0YXRpYyB2b2lkIF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvLFxcbiBuZXdfYmlvOlxcbiBcXHRucl9lbmNfcGFnZXMgPSBtaW4oYmlvX3NlZ21lbnRzKHNyY19iaW8pLCBCSU9fTUFYX1ZFQ1MpO1xcbiBcXHRlbmNfYmlvID0gYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHNyY19iaW8sIG5yX2VuY19wYWdlcywgXFx1MDAyNmVuY19wYWdlcyk7XFxuK1xcdGlmICh1bmxpa2VseSghZW5jX2JpbykpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRmFpbGVkIHRvIGFsbG9jYXRlIGEgYm91bmNlIGJpbyBkdXJpbmcgcmVjdXJzaXZlIGJpb1xcbitcXHRcXHQgKiBzdWJtaXNzaW9uLiAgV2UgbWlnaHQgYmUgYmxvY2tlZCBvbiBiaW9zIGluIGN1cnJlbnQtXFx1MDAzZWJpb19saXN0XFxuK1xcdFxcdCAqIGhvbGRpbmcgbWVtcG9vbCBlbGVtZW50cy4gIFRvIGVuYWJsZSBmb3J3YXJkIHByb2dyZXNzLCBwdW50XFxuK1xcdFxcdCAqIHRoZSByZW1haW5pbmcgZW5jcnlwdGlvbiB3b3JrIGZvciBzcmNfYmlvIHRvIGEga3dvcmtlci5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogVGhlIERVTiBtYXkgaGF2ZSBiZWVuIGFkdmFuY2VkLCBzbyBtYWtlIHN1cmUgdG8gdXBkYXRlIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0V0FSTl9PTl9PTkNFKCFjdXJyZW50LVxcdTAwM2ViaW9fbGlzdCk7XFxuK1xcdFxcdG1lbWNweShiYy1cXHUwMDNlYmNfZHVuLCBjdXJyX2R1biwgc2l6ZW9mKGN1cnJfZHVuKSk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0X2xvY2spO1xcbitcXHRcXHRiaW9fbGlzdF9hZGQoXFx1MDAyNmVuY19yZXNjdWVfbGlzdCwgc3JjX2Jpbyk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZlbmNfcmVzY3VlX2xpc3RfbG9jayk7XFxuK1xcdFxcdHF1ZXVlX3dvcmsoYmxrX2NyeXB0b193cSwgXFx1MDAyNmVuY19yZXNjdWVfd29yayk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXHRlbmNfaWR4ID0gMDtcXG4gXFx0Zm9yICg7Oykge1xcbiBcXHRcXHRzdHJ1Y3QgYmlvX3ZlYyBzcmNfYnYgPVxcbkBAIC01OTEsNiArNjQ3LDggQEAgc3RhdGljIGludCBibGtfY3J5cHRvX2ZhbGxiYWNrX2luaXQodm9pZClcXG4gXFx0aWYgKCFiaW9fZmFsbGJhY2tfY3J5cHRfY3R4X3Bvb2wpXFxuIFxcdFxcdGdvdG8gZmFpbF9mcmVlX2NyeXB0X2N0eF9jYWNoZTtcXG4gXFxuK1xcdElOSVRfV09SSyhcXHUwMDI2ZW5jX3Jlc2N1ZV93b3JrLCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbik7XFxuK1xcbiBcXHRibGtfY3J5cHRvX2ZhbGxiYWNrX2luaXRlZCA9IHRydWU7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1wb29sLmggYi9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaFxcbmluZGV4IGEwZmE2ZDQzZTBkYzQuLmY3ODk4Y2QxNTEyYmEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaFxcbkBAIC02NSw4ICs2NSw4IEBAIHZvaWQgbWVtcG9vbF9kZXN0cm95KHN0cnVjdCBtZW1wb29sICpwb29sKTtcXG4gdm9pZCAqbWVtcG9vbF9hbGxvY19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGdmcF90IGdmcF9tYXNrKSBfX21hbGxvYztcXG4gI2RlZmluZSBtZW1wb29sX2FsbG9jKC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGFsbG9jX2hvb2tzKG1lbXBvb2xfYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4taW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtLFxcbi1cXHRcXHR1bnNpZ25lZCBpbnQgY291bnQpO1xcbitib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQsIGdmcF90IGdmcF9tYXNrKTtcXG4gI2RlZmluZSBtZW1wb29sX2FsbG9jX2J1bGsoLi4uKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0YWxsb2NfaG9va3MobWVtcG9vbF9hbGxvY19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1wb29sLmMgYi9tbS9tZW1wb29sLmNcXG5pbmRleCA0NzNhMDI5ZmEzMWZkLi5kNzQxZTVmNjI1NTQzIDEwMDY0NFxcbi0tLSBhL21tL21lbXBvb2wuY1xcbisrKyBiL21tL21lbXBvb2wuY1xcbkBAIC00MDksNyArNDA5LDcgQEAgaW50IG1lbXBvb2xfcmVzaXplKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbmV3X21pbl9ucilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfcmVzaXplKTtcXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2woc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcXG4rc3RhdGljIGJvb2wgbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2woc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcXG4gXFx0XFx0dW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgYWxsb2NhdGVkLFxcbiBcXHRcXHRnZnBfdCBnZnBfbWFzaylcXG4ge1xcbkBAIC00MzIsNyArNDMyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxcbiBcXHQgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspXFxuIFxcdFxcdGttZW1sZWFrX3VwZGF0ZV90cmFjZShlbGVtc1tpXSk7XFxuLVxcdHJldHVybiBhbGxvY2F0ZWQ7XFxuK1xcdHJldHVybiB0cnVlO1xcbiBcXG4gZmFpbDpcXG4gXFx0aWYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU0pIHtcXG5AQCAtNDU0LDcgKzQ1NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2woc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cG9vbC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gYWxsb2NhdGVkO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTQ3MywyNSArNDczLDI4IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWVtcG9vbF9hZGp1c3RfZ2ZwKGdmcF90ICpnZnBfbWFzaylcXG4gLyoqXFxuICAqIG1lbXBvb2xfYWxsb2NfYnVsayAtIGFsbG9jYXRlIG11bHRpcGxlIGVsZW1lbnRzIGZyb20gYSBtZW1vcnkgcG9vbFxcbiAgKiBAcG9vbDpcXHRwb2ludGVyIHRvIHRoZSBtZW1vcnkgcG9vbFxcbi0gKiBAZWxlbXM6XFx0cGFydGlhbGx5IG9yIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50cyBhcnJheVxcbi0gKiBAY291bnQ6XFx0bnVtYmVyIG9mIGVudHJpZXMgaW4gQGVsZW0gdGhhdCBuZWVkIHRvIGJlIGFsbG9jYXRlZFxcbisgKiBAZWxlbXM6XFx0cG9pbnRlciB0byBhcnJheSBpbnRvIHdoaWNoIHRoZSBlbGVtZW50IHBvaW50ZXJzIHdpbGwgYmUgc3RvcmVkXFxuKyAqIEBjb3VudDpcXHRudW1iZXIgb2YgZWxlbWVudHMgdG8gYWxsb2NhdGVcXG4rICogQGdmcF9tYXNrOlxcdEdGUF8qIGZsYWdzLiAgJV9fR0ZQX1pFUk8gaXMgbm90IHN1cHBvcnRlZC4gIElmIHRoaXMgbWFza1xcbisgKlxcdFxcdGluY2x1ZGVzICVfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgdGhlbiB0aGUgYWxsb2NhdGlvbiBpcyByZXRyaWVkXFxuKyAqXFx0XFx0aW5kZWZpbml0ZWx5IHVudGlsIGl0IHN1Y2NlZWRzIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIGFsd2F5c1xcbisgKlxcdFxcdCV0cnVlLiAgSWYgdGhlIG1hc2sgZG9lc24ndCBpbmNsdWRlICVfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgdGhlblxcbisgKlxcdFxcdGZhaWx1cmUgaXMgYWxsb3dlZCBhbmQgJWZhbHNlIGNhbiBiZSByZXR1cm5lZC5cXG4gICpcXG4gICogQWxsb2NhdGUgQGNvdW50IGVsZW1lbnRzIGludG8gQGVsZW1zLiAgVGhpcyBpcyBkb25lIGJ5IGZpcnN0IGNhbGxpbmcgaW50byB0aGVcXG4gICogYWxsb2NfZm4gc3VwcGxpZWQgYXQgcG9vbCBpbml0aWFsaXphdGlvbiB0aW1lLCBhbmQgZGlwcGluZyBpbnRvIHRoZSByZXNlcnZlZFxcbi0gKiBwb29sIHdoZW4gYWxsb2NfZm4gZmFpbHMgdG8gYWxsb2NhdGUgYW4gZWxlbWVudC5cXG4tICpcXG4tICogT24gcmV0dXJuIGFsbCBAY291bnQgZWxlbWVudHMgaW4gQGVsZW1zIHdpbGwgYmUgcG9wdWxhdGVkLlxcbisgKiBwb29sIHRvIGF0b21pY2FsbHkgYWxsb2NhdGUgdGhlIHJlbWFpbmluZyBlbGVtZW50cyBpZiBhbGxvY19mbiBmYWlscy5cXG4gICpcXG4tICogUmV0dXJuOiBBbHdheXMgMC4gIElmIGl0IHdhc24ndCBmb3IgJSQjXiQgYWxsb2MgdGFncywgaXQgd291bGQgcmV0dXJuIHZvaWQuXFxuKyAqIFJldHVybjogJXRydWUgaWYgdGhlIGFsbG9jYXRpb24gc3VjY2VlZGVkLCBvciAlZmFsc2UgaWYgaXQgZmFpbGVkLlxcbiAgKi9cXG4taW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcXG4tXFx0XFx0dW5zaWduZWQgaW50IGNvdW50KVxcbitib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcXG4rXFx0XFx0dW5zaWduZWQgaW50IGNvdW50LCBnZnBfdCBnZnBfbWFzaylcXG4ge1xcbi1cXHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XFxuIFxcdGdmcF90IGdmcF90ZW1wID0gbWVtcG9vbF9hZGp1c3RfZ2ZwKFxcdTAwMjZnZnBfbWFzayk7XFxuIFxcdHVuc2lnbmVkIGludCBhbGxvY2F0ZWQgPSAwO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKGNvdW50IFxcdTAwM2UgcG9vbC1cXHUwMDNlbWluX25yKTtcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfWkVSTyk7XFxuIFxcdG1pZ2h0X2FsbG9jKGdmcF9tYXNrKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTUxNiwxMyArNTE5LDI2IEBAIGludCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXFxuIFxcdFxcdGFsbG9jYXRlZCsrO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuIFxcbiB1c2VfcG9vbDpcXG4tXFx0YWxsb2NhdGVkID0gbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2wocG9vbCwgZWxlbXMsIGNvdW50LCBhbGxvY2F0ZWQsXFxuLVxcdFxcdFxcdGdmcF90ZW1wKTtcXG4tXFx0Z2ZwX3RlbXAgPSBnZnBfbWFzaztcXG4tXFx0Z290byByZXBlYXRfYWxsb2M7XFxuK1xcdC8qIFRyeSB0byBhdG9taWNhbGx5IGFsbG9jYXRlIHRoZSByZW1haW5pbmcgZWxlbWVudHMgZnJvbSB0aGUgcG9vbC4gKi9cXG4rXFx0aWYgKG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHBvb2wsIGVsZW1zLCBjb3VudCwgYWxsb2NhdGVkLCBnZnBfdGVtcCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHQvKiBSZXRyeSBpZiB0aGlzIHdhcyBqdXN0IHRoZSBvcHBvcnR1bmlzdGljIGZpcnN0IHBhc3MuICovXFxuK1xcdGlmIChnZnBfdGVtcCAhPSBnZnBfbWFzaykge1xcbitcXHRcXHRnZnBfdGVtcCA9IGdmcF9tYXNrO1xcbitcXHRcXHRnb3RvIHJlcGVhdF9hbGxvYztcXG4rXFx0fVxcbitcXHQvKiBSZXRyeSBpbmRlZmluaXRlbHkgaWYgX19HRlBfRElSRUNUX1JFQ0xBSU0gaXMgc2V0LiAqL1xcbitcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSlcXG4rXFx0XFx0Z290byByZXBlYXRfYWxsb2M7XFxuK1xcdC8qIE9uIGZhaWx1cmUsIHJvbGwgYmFjayBhbnkgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9ucyBmcm9tIC1cXHUwMDNlYWxsb2MoKS4gKi9cXG4rXFx0d2hpbGUgKGFsbG9jYXRlZC0tKSB7XFxuK1xcdFxcdHBvb2wtXFx1MDAzZWZyZWUoZWxlbXNbYWxsb2NhdGVkXSwgcG9vbC1cXHUwMDNlcG9vbF9kYXRhKTtcXG4rXFx0XFx0ZWxlbXNbYWxsb2NhdGVkXSA9IE5VTEw7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2YpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDU6MzUuMDAxOTk2NjE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjAyMzAyNzYyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0lOTElORV9FTkNSWVBUSU9OXCIsXG4gICAgXCJCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mXCIsXG4gICAgXCJibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mblwiLFxuICAgIFwiYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYCB0byBhY2NlcHQgYSBgZ2ZwX21hc2tgIGFuZCBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcyBwcm9wZXJseS4gSXQgYWxzbyB1cGRhdGVzIGBibGstY3J5cHRvLWZhbGxiYWNrYCB0byB1c2UgdGhpcyBuZXcgc2lnbmF0dXJlIGFuZCBpbnRyb2R1Y2VzIGEgd29ya3F1ZXVlIChgZW5jX3Jlc2N1ZV93b3JrYCkgdG8gcHJldmVudCBkZWFkbG9ja3MgZHVyaW5nIHJlY3Vyc2l2ZSBiaW8gc3VibWlzc2lvbnMgYnkgcHVudGluZyBlbmNyeXB0aW9uIHdvcmsgd2hlbiBgY3VycmVudC1cXHUwMDNlYmlvX2xpc3RgIGlzIG5vbi1udWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYmxvY2sgbGF5ZXIgY3J5cHRvIGZhbGxiYWNrIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMTJhNTJiYzE1NGQ5YWRkODIzNzM3NjU5NDU4ZTY4ODIwZmZkNTA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMjowNTozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYyBiL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY1xuaW5kZXggMmE1YzUyYWI3NGI0Yy4uOTczMzk5MDExZDVhMiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY1xuKysrIGIvYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jXG5AQCAtODMsNiArODMsMTAgQEAgc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpibGtfY3J5cHRvX3dxO1xuIHN0YXRpYyBtZW1wb29sX3QgKmJsa19jcnlwdG9fYm91bmNlX3BhZ2VfcG9vbDtcbiBzdGF0aWMgc3RydWN0IGJpb19zZXQgZW5jX2Jpb19zZXQ7XG4gXG4rc3RhdGljIERFRklORV9TUElOTE9DSyhlbmNfcmVzY3VlX2xpc3RfbG9jayk7XG4rc3RhdGljIHN0cnVjdCBiaW9fbGlzdCBlbmNfcmVzY3VlX2xpc3Q7XG4rc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCBlbmNfcmVzY3VlX3dvcms7XG4rXG4gLypcbiAgKiBUaGlzIGlzIHRoZSBrZXkgd2Ugc2V0IHdoZW4gZXZpY3RpbmcgYSBrZXlzbG90LiBUaGlzICpzaG91bGQqIGJlIHRoZSBhbGwgMCdzXG4gICoga2V5LCBidXQgQUVTLVhUUyByZWplY3RzIHRoYXQga2V5LCBzbyB3ZSB1c2Ugc29tZSByYW5kb20gYnl0ZXMgaW5zdGVhZC5cbkBAIC0xNzIsMTMgKzE3NiwyNiBAQCBzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfZW5kaW8oc3RydWN0IGJpbyAqZW5jX2JpbylcbiBzdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXG4gXHRcdHVuc2lnbmVkIGludCBucl9zZWdzLCBzdHJ1Y3QgcGFnZSAqKipwYWdlc19yZXQpXG4ge1xuLVx0dW5zaWduZWQgaW50IG1lbWZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG4gXHR1bnNpZ25lZCBpbnQgbnJfYWxsb2NhdGVkO1xuIFx0c3RydWN0IHBhZ2UgKipwYWdlcztcbiBcdHN0cnVjdCBiaW8gKmJpbztcbitcdGdmcF90IGdmcF9tYXNrO1xuK1xuK1x0LypcbitcdCAqIER1cmluZyByZWN1cnNpdmUgYmlvIHN1Ym1pc3Npb24gKGN1cnJlbnQtXHUwMDNlYmlvX2xpc3QgIT0gTlVMTCkgYW55XG4rXHQgKiBzdWJtaXR0ZWQgYm91bmNlIGJpb3MganVzdCBnZXQgYWRkZWQgdG8gY3VycmVudC1cdTAwM2ViaW9fbGlzdDsgdGhleVxuK1x0ICogY2Fubm90IGNvbXBsZXRlIGFuZCByZWxlYXNlIHJlc291cmNlcyB5ZXQuICBUaGVyZWZvcmUsIHRvIGF2b2lkXG4rXHQgKiBkZWFkbG9ja3MsIGRvbid0IHdhaXQgaW5kZWZpbml0ZWx5IGZvciBhZGRpdGlvbmFsIHJlc291cmNlcy5cbitcdCAqL1xuK1x0aWYgKGN1cnJlbnQtXHUwMDNlYmlvX2xpc3QpXG4rXHRcdGdmcF9tYXNrID0gR0ZQX05PV0FJVDtcbitcdGVsc2VcbitcdFx0Z2ZwX21hc2sgPSBHRlBfTk9JTztcbiBcbiBcdGJpbyA9IGJpb19hbGxvY19iaW9zZXQoYmlvX3NyYy1cdTAwM2ViaV9iZGV2LCBucl9zZWdzLCBiaW9fc3JjLVx1MDAzZWJpX29wZixcbi1cdFx0XHRHRlBfTk9JTywgXHUwMDI2ZW5jX2Jpb19zZXQpO1xuK1x0XHRcdCAgICAgICBnZnBfbWFzaywgXHUwMDI2ZW5jX2Jpb19zZXQpO1xuK1x0aWYgKHVubGlrZWx5KCFiaW8pKVxuK1x0XHRyZXR1cm4gTlVMTDtcbiBcdGlmIChiaW9fZmxhZ2dlZChiaW9fc3JjLCBCSU9fUkVNQVBQRUQpKVxuIFx0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpO1xuIFx0YmlvLVx1MDAzZWJpX3ByaXZhdGVcdFx0PSBiaW9fc3JjO1xuQEAgLTIwNiwxMiArMjIzLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYmlvICpibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3RydWN0IGJpbyAqYmlvX3NyYyxcbiBcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuIFx0ICovXG4gXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuLVx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XG4tXHRpZiAobnJfYWxsb2NhdGVkIFx1MDAzYyBucl9zZWdzKVxuLVx0XHRtZW1wb29sX2FsbG9jX2J1bGsoYmxrX2NyeXB0b19ib3VuY2VfcGFnZV9wb29sLFxuK1x0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnBfbWFzaywgbnJfc2VncywgcGFnZXMpO1xuK1x0aWYgKHVubGlrZWx5KG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfc2VncykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1lbXBvb2xfYWxsb2NfYnVsayhibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2wsXG4gXHRcdFx0XHQodm9pZCAqKilwYWdlcyArIG5yX2FsbG9jYXRlZCxcbi1cdFx0XHRcdG5yX3NlZ3MgLSBucl9hbGxvY2F0ZWQpO1xuLVx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG1lbWZsYWdzKTtcbitcdFx0XHRcdG5yX3NlZ3MgLSBucl9hbGxvY2F0ZWQsIGdmcF9tYXNrKSkge1xuK1x0XHRmcmVlX3BhZ2VzX2J1bGsocGFnZXMsIG5yX2FsbG9jYXRlZCk7XG4rXHRcdGJpb19wdXQoYmlvKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4gXHQqcGFnZXNfcmV0ID0gcGFnZXM7XG4gXHRyZXR1cm4gYmlvO1xuIH1cbkBAIC0yMzksNiArMjU5LDI1IEBAIHN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZHVuX3RvX2l2KGNvbnN0IHU2NCBkdW5bQkxLX0NSWVBUT19EVU5fQVJSQVlfU0laRV0sXG4gXHRcdGl2LVx1MDAzZWR1bltpXSA9IGNwdV90b19sZTY0KGR1bltpXSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2Jpbyk7XG4rXG4rLyogRW5jcnlwdCBhIGxpc3Qgb2YgYmlvcyB3aG9zZSBlbmNyeXB0aW9uIHdhcyBwdW50ZWQgdG8gYSBrd29ya2VyLiAqL1xuK3N0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgYmlvX2xpc3QgbGlzdDtcbitcdHN0cnVjdCBiaW8gKnNyY19iaW87XG4rXG4rXHRXQVJOX09OX09OQ0UoY3VycmVudC1cdTAwM2ViaW9fbGlzdCk7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0X2xvY2spO1xuK1x0bGlzdCA9IGVuY19yZXNjdWVfbGlzdDtcbitcdGJpb19saXN0X2luaXQoXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmVuY19yZXNjdWVfbGlzdF9sb2NrKTtcbitcbitcdHdoaWxlICgoc3JjX2JpbyA9IGJpb19saXN0X3BvcChcdTAwMjZsaXN0KSkpXG4rXHRcdGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3JjX2Jpbyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvLFxuIFx0XHRzdHJ1Y3QgY3J5cHRvX3N5bmNfc2tjaXBoZXIgKnRmbSlcbiB7XG5AQCAtMjczLDYgKzMxMiwyMyBAQCBzdGF0aWMgdm9pZCBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbyxcbiBuZXdfYmlvOlxuIFx0bnJfZW5jX3BhZ2VzID0gbWluKGJpb19zZWdtZW50cyhzcmNfYmlvKSwgQklPX01BWF9WRUNTKTtcbiBcdGVuY19iaW8gPSBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3JjX2JpbywgbnJfZW5jX3BhZ2VzLCBcdTAwMjZlbmNfcGFnZXMpO1xuK1x0aWYgKHVubGlrZWx5KCFlbmNfYmlvKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBGYWlsZWQgdG8gYWxsb2NhdGUgYSBib3VuY2UgYmlvIGR1cmluZyByZWN1cnNpdmUgYmlvXG4rXHRcdCAqIHN1Ym1pc3Npb24uICBXZSBtaWdodCBiZSBibG9ja2VkIG9uIGJpb3MgaW4gY3VycmVudC1cdTAwM2ViaW9fbGlzdFxuK1x0XHQgKiBob2xkaW5nIG1lbXBvb2wgZWxlbWVudHMuICBUbyBlbmFibGUgZm9yd2FyZCBwcm9ncmVzcywgcHVudFxuK1x0XHQgKiB0aGUgcmVtYWluaW5nIGVuY3J5cHRpb24gd29yayBmb3Igc3JjX2JpbyB0byBhIGt3b3JrZXIuXG4rXHRcdCAqXG4rXHRcdCAqIFRoZSBEVU4gbWF5IGhhdmUgYmVlbiBhZHZhbmNlZCwgc28gbWFrZSBzdXJlIHRvIHVwZGF0ZSBpdC5cbitcdFx0ICovXG4rXHRcdFdBUk5fT05fT05DRSghY3VycmVudC1cdTAwM2ViaW9fbGlzdCk7XG4rXHRcdG1lbWNweShiYy1cdTAwM2ViY19kdW4sIGN1cnJfZHVuLCBzaXplb2YoY3Vycl9kdW4pKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNmVuY19yZXNjdWVfbGlzdF9sb2NrKTtcbitcdFx0YmlvX2xpc3RfYWRkKFx1MDAyNmVuY19yZXNjdWVfbGlzdCwgc3JjX2Jpbyk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmVuY19yZXNjdWVfbGlzdF9sb2NrKTtcbitcdFx0cXVldWVfd29yayhibGtfY3J5cHRvX3dxLCBcdTAwMjZlbmNfcmVzY3VlX3dvcmspO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4gXHRlbmNfaWR4ID0gMDtcbiBcdGZvciAoOzspIHtcbiBcdFx0c3RydWN0IGJpb192ZWMgc3JjX2J2ID1cbkBAIC01OTEsNiArNjQ3LDggQEAgc3RhdGljIGludCBibGtfY3J5cHRvX2ZhbGxiYWNrX2luaXQodm9pZClcbiBcdGlmICghYmlvX2ZhbGxiYWNrX2NyeXB0X2N0eF9wb29sKVxuIFx0XHRnb3RvIGZhaWxfZnJlZV9jcnlwdF9jdHhfY2FjaGU7XG4gXG4rXHRJTklUX1dPUksoXHUwMDI2ZW5jX3Jlc2N1ZV93b3JrLCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbik7XG4rXG4gXHRibGtfY3J5cHRvX2ZhbGxiYWNrX2luaXRlZCA9IHRydWU7XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oXG5pbmRleCBhMGZhNmQ0M2UwZGM0Li5mNzg5OGNkMTUxMmJhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oXG5AQCAtNjUsOCArNjUsOCBAQCB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7XG4gdm9pZCAqbWVtcG9vbF9hbGxvY19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGdmcF90IGdmcF9tYXNrKSBfX21hbGxvYztcbiAjZGVmaW5lIG1lbXBvb2xfYWxsb2MoLi4uKVx0XHRcdFx0XHRcdFxcXG4gXHRhbGxvY19ob29rcyhtZW1wb29sX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXG4taW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtLFxuLVx0XHR1bnNpZ25lZCBpbnQgY291bnQpO1xuK2Jvb2wgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW0sXG4rXHRcdHVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spO1xuICNkZWZpbmUgbWVtcG9vbF9hbGxvY19idWxrKC4uLilcdFx0XHRcdFx0XHRcXFxuIFx0YWxsb2NfaG9va3MobWVtcG9vbF9hbGxvY19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9vbC5jIGIvbW0vbWVtcG9vbC5jXG5pbmRleCA0NzNhMDI5ZmEzMWZkLi5kNzQxZTVmNjI1NTQzIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9vbC5jXG4rKysgYi9tbS9tZW1wb29sLmNcbkBAIC00MDksNyArNDA5LDcgQEAgaW50IG1lbXBvb2xfcmVzaXplKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbmV3X21pbl9ucilcbiB9XG4gRVhQT1JUX1NZTUJPTChtZW1wb29sX3Jlc2l6ZSk7XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxuK3N0YXRpYyBib29sIG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXG4gXHRcdHVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgaW50IGFsbG9jYXRlZCxcbiBcdFx0Z2ZwX3QgZ2ZwX21hc2spXG4ge1xuQEAgLTQzMiw3ICs0MzIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXG4gXHQgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpKyspXG4gXHRcdGttZW1sZWFrX3VwZGF0ZV90cmFjZShlbGVtc1tpXSk7XG4tXHRyZXR1cm4gYWxsb2NhdGVkO1xuK1x0cmV0dXJuIHRydWU7XG4gXG4gZmFpbDpcbiBcdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU0pIHtcbkBAIC00NTQsNyArNDU0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGFsbG9jYXRlZDtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gLypcbkBAIC00NzMsMjUgKzQ3MywyOCBAQCBzdGF0aWMgaW5saW5lIGdmcF90IG1lbXBvb2xfYWRqdXN0X2dmcChnZnBfdCAqZ2ZwX21hc2spXG4gLyoqXG4gICogbWVtcG9vbF9hbGxvY19idWxrIC0gYWxsb2NhdGUgbXVsdGlwbGUgZWxlbWVudHMgZnJvbSBhIG1lbW9yeSBwb29sXG4gICogQHBvb2w6XHRwb2ludGVyIHRvIHRoZSBtZW1vcnkgcG9vbFxuLSAqIEBlbGVtczpcdHBhcnRpYWxseSBvciBmdWxseSBwb3B1bGF0ZWQgZWxlbWVudHMgYXJyYXlcbi0gKiBAY291bnQ6XHRudW1iZXIgb2YgZW50cmllcyBpbiBAZWxlbSB0aGF0IG5lZWQgdG8gYmUgYWxsb2NhdGVkXG4rICogQGVsZW1zOlx0cG9pbnRlciB0byBhcnJheSBpbnRvIHdoaWNoIHRoZSBlbGVtZW50IHBvaW50ZXJzIHdpbGwgYmUgc3RvcmVkXG4rICogQGNvdW50Olx0bnVtYmVyIG9mIGVsZW1lbnRzIHRvIGFsbG9jYXRlXG4rICogQGdmcF9tYXNrOlx0R0ZQXyogZmxhZ3MuICAlX19HRlBfWkVSTyBpcyBub3Qgc3VwcG9ydGVkLiAgSWYgdGhpcyBtYXNrXG4rICpcdFx0aW5jbHVkZXMgJV9fR0ZQX0RJUkVDVF9SRUNMQUlNLCB0aGVuIHRoZSBhbGxvY2F0aW9uIGlzIHJldHJpZWRcbisgKlx0XHRpbmRlZmluaXRlbHkgdW50aWwgaXQgc3VjY2VlZHMgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgYWx3YXlzXG4rICpcdFx0JXRydWUuICBJZiB0aGUgbWFzayBkb2Vzbid0IGluY2x1ZGUgJV9fR0ZQX0RJUkVDVF9SRUNMQUlNLCB0aGVuXG4rICpcdFx0ZmFpbHVyZSBpcyBhbGxvd2VkIGFuZCAlZmFsc2UgY2FuIGJlIHJldHVybmVkLlxuICAqXG4gICogQWxsb2NhdGUgQGNvdW50IGVsZW1lbnRzIGludG8gQGVsZW1zLiAgVGhpcyBpcyBkb25lIGJ5IGZpcnN0IGNhbGxpbmcgaW50byB0aGVcbiAgKiBhbGxvY19mbiBzdXBwbGllZCBhdCBwb29sIGluaXRpYWxpemF0aW9uIHRpbWUsIGFuZCBkaXBwaW5nIGludG8gdGhlIHJlc2VydmVkXG4tICogcG9vbCB3aGVuIGFsbG9jX2ZuIGZhaWxzIHRvIGFsbG9jYXRlIGFuIGVsZW1lbnQuXG4tICpcbi0gKiBPbiByZXR1cm4gYWxsIEBjb3VudCBlbGVtZW50cyBpbiBAZWxlbXMgd2lsbCBiZSBwb3B1bGF0ZWQuXG4rICogcG9vbCB0byBhdG9taWNhbGx5IGFsbG9jYXRlIHRoZSByZW1haW5pbmcgZWxlbWVudHMgaWYgYWxsb2NfZm4gZmFpbHMuXG4gICpcbi0gKiBSZXR1cm46IEFsd2F5cyAwLiAgSWYgaXQgd2Fzbid0IGZvciAlJCNeJCBhbGxvYyB0YWdzLCBpdCB3b3VsZCByZXR1cm4gdm9pZC5cbisgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSBhbGxvY2F0aW9uIHN1Y2NlZWRlZCwgb3IgJWZhbHNlIGlmIGl0IGZhaWxlZC5cbiAgKi9cbi1pbnQgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxuLVx0XHR1bnNpZ25lZCBpbnQgY291bnQpXG4rYm9vbCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXG4rXHRcdHVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spXG4ge1xuLVx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xuIFx0Z2ZwX3QgZ2ZwX3RlbXAgPSBtZW1wb29sX2FkanVzdF9nZnAoXHUwMDI2Z2ZwX21hc2spO1xuIFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoY291bnQgXHUwMDNlIHBvb2wtXHUwMDNlbWluX25yKTtcbitcdFZNX1dBUk5fT05fT05DRShnZnBfbWFzayBcdTAwMjYgX19HRlBfWkVSTyk7XG4gXHRtaWdodF9hbGxvYyhnZnBfbWFzayk7XG4gXG4gXHQvKlxuQEAgLTUxNiwxMyArNTE5LDI2IEBAIGludCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXG4gXHRcdGFsbG9jYXRlZCsrO1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gdHJ1ZTtcbiBcbiB1c2VfcG9vbDpcbi1cdGFsbG9jYXRlZCA9IG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHBvb2wsIGVsZW1zLCBjb3VudCwgYWxsb2NhdGVkLFxuLVx0XHRcdGdmcF90ZW1wKTtcbi1cdGdmcF90ZW1wID0gZ2ZwX21hc2s7XG4tXHRnb3RvIHJlcGVhdF9hbGxvYztcbitcdC8qIFRyeSB0byBhdG9taWNhbGx5IGFsbG9jYXRlIHRoZSByZW1haW5pbmcgZWxlbWVudHMgZnJvbSB0aGUgcG9vbC4gKi9cbitcdGlmIChtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChwb29sLCBlbGVtcywgY291bnQsIGFsbG9jYXRlZCwgZ2ZwX3RlbXApKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdC8qIFJldHJ5IGlmIHRoaXMgd2FzIGp1c3QgdGhlIG9wcG9ydHVuaXN0aWMgZmlyc3QgcGFzcy4gKi9cbitcdGlmIChnZnBfdGVtcCAhPSBnZnBfbWFzaykge1xuK1x0XHRnZnBfdGVtcCA9IGdmcF9tYXNrO1xuK1x0XHRnb3RvIHJlcGVhdF9hbGxvYztcbitcdH1cbitcdC8qIFJldHJ5IGluZGVmaW5pdGVseSBpZiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBpcyBzZXQuICovXG4rXHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKVxuK1x0XHRnb3RvIHJlcGVhdF9hbGxvYztcbitcdC8qIE9uIGZhaWx1cmUsIHJvbGwgYmFjayBhbnkgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9ucyBmcm9tIC1cdTAwM2VhbGxvYygpLiAqL1xuK1x0d2hpbGUgKGFsbG9jYXRlZC0tKSB7XG4rXHRcdHBvb2wtXHUwMDNlZnJlZShlbGVtc1thbGxvY2F0ZWRdLCBwb29sLVx1MDAzZXBvb2xfZGF0YSk7XG4rXHRcdGVsZW1zW2FsbG9jYXRlZF0gPSBOVUxMO1xuK1x0fVxuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjA1OjM1LjAwMTk5Nzg3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDc5NzkzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IEJsb2NrIENyeXB0byBGYWxsYmFjayBhbmQgTWVtb3J5IFBvb2wgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCdzIHRvdWNoaW5nIGBibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmNgIGFuZCBgbW0vbWVtcG9vbC5jYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBhbnl0aW1lIHdlJ3JlIG1lc3Npbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgdGhlIGJsb2NrIGxheWVyLCBJIHBheSBjbG9zZSBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgZnVuY3Rpb24uIFByZXZpb3VzbHksIGl0IGp1c3QgKmFsd2F5cyogc3VjY2VlZGVkIGFuZCByZXR1cm5lZCAwLCBidXQgbm93IGl0J3MgZ29pbmcgdG8gdGFrZSBhIGBnZnBfbWFza2AgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgd2UgaGFuZGxlIG1lbW9yeSBwb29sIGFsbG9jYXRpb24uIEl0J3MgYSBub24tdHJpdmlhbCBjaGFuZ2UuXG5cbk5vdywgaXQgdXBkYXRlcyBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCB0byB1c2UgdGhlIG5ldyBgbWVtcG9vbF9hbGxvY19idWxrYCBzaWduYXR1cmUuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIGhvdyB0aGUgcGF0Y2ggaGFuZGxlcyBhbGxvY2F0aW9uIGZhaWx1cmVzLiBJbnN0ZWFkIG9mIGp1c3QgY2h1Z2dpbmcgYWxvbmcsIGlmIHRoZSBgbWVtcG9vbF9hbGxvY19idWxrYCBjYWxsIGZhaWxzLCBpdCBub3cgcHVudHMgdG8gYSB3b3JrcXVldWUsIGBlbmNfcmVzY3VlX3dvcmtgLCBidXQgKm9ubHkqIGlmIGBjdXJyZW50LVx1MDAzZWJpb19saXN0YCBpc24ndCBudWxsLiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGUgY2hlY2sgZm9yIHRoZSBgYmlvX2xpc3RgIGhlbHBzIGF2b2lkIGEgZGVhZGxvY2sgc2NlbmFyaW8uIFRoYXQncyBhIGNsYXNzaWMgc3RyYXRlZ3kgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHJlc291cmNlIGNvbnRlbnRpb24uIFRoYXQncyBhIGdvb2Qgd2F5IHRvIGhhbmRsZSBhIGNyaXRpY2FsIGZhaWx1cmUuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0byBibG9jayBjcnlwdG8gZmFsbGJhY2sgYW5kIG1lbXBvb2wgYWxsb2NhdGlvbiwgYW5kIGl0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBldmFsdWF0ZS4gTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IFFFTVUgY291bGQgYWN0dWFsbHkgaGl0LiBXZSdyZSB0YWxraW5nIGFib3V0IGJsb2NrIGNyeXB0byBmYWxsYmFjaywgc28gSSdsbCBuZWVkIHRvIGtub3cgaWYgYENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIEtjb25maWcgY2hlY2sgdG8gbWFrZSBzdXJlIGl0J3MgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNTo0MC4xMDk5Nzk5NjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0OTMwNzA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9MTk1PWNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05cXG4tLVxcbmJsb2NrL0tjb25maWctMjAxLVxcbmJsb2NrL0tjb25maWc6MjAyOmNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcXG5ibG9jay9LY29uZmlnLTIwMy1cXHRib29sIFxcXCJFbmFibGUgY3J5cHRvIEFQSSBmYWxsYmFjayBmb3IgYmxrLWNyeXB0b1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDU6NDEuOTU5MjkyOTczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0MTA3NjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEVuY3J5cHRpb24gRmFsbGJhY2sgTWVjaGFuaXNtKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLYCBvcHRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYGJsb2NrL0tjb25maWdgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgc3Vic3lzdGVtLiBJIGtub3cgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZGVmaW5pdGlvbiwgZGVwZW5kZW5jaWVzLCBhbmQgbGlrZWx5IHNvbWUgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyBhYm91dCB3aGF0IHRoaXMgZmFsbGJhY2sgbWVjaGFuaXNtIGlzIGludGVuZGVkIHRvIGRvLiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIGVudHJ5IHdpbGwgYWxzbyBnaXZlIG1lIGNsdWVzIGFib3V0ICp3aHkqIHdlIG1pZ2h0IG5lZWQgYSBmYWxsYmFjayBmb3IgaW5saW5lIGVuY3J5cHRpb24uIFRoaXMgY291bGQgaW52b2x2ZSBsb29raW5nIGF0IGFueSBkZXBlbmRlbmNpZXMgYW5kIGV4YW1pbmluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIEknbSBleHBlY3RpbmcgdGhpcyBgS2NvbmZpZ2AgZmlsZSB0byBwcm92aWRlIHRoZSBuZWNlc3NhcnkgZnJhbWV3b3JrIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBjaG9pY2VzIGJlaGluZCB0aGUgZmVhdHVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZHJpbGwgZG93biBpbnRvIHRoZSB1bmRlcmx5aW5nIGNvZGUgaWYgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDU6NDUuMTAwMzcyMjc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTlxcbiAxOTY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGlubGluZSBlbmNyeXB0aW9uIHN1cHBvcnQgaW4gYmxvY2sgbGF5ZXJcXFwiXFxuIDE5NzpcXHRcXHRoZWxwXFxuIDE5ODpcXHRcXHQgIEJ1aWxkIHRoZSBibGstY3J5cHRvIHN1YnN5c3RlbS4gRW5hYmxpbmcgdGhpcyBsZXRzIHRoZVxcbiAxOTk6XFx0XFx0ICBibG9jayBsYXllciBoYW5kbGUgZW5jcnlwdGlvbiwgc28gdXNlcnMgY2FuIHRha2VcXG4gMjAwOlxcdFxcdCAgYWR2YW50YWdlIG9mIGlubGluZSBlbmNyeXB0aW9uIGhhcmR3YXJlIGlmIHByZXNlbnQuXFxuIDIwMTpcXHRcXG4gMjAyOlxcdGNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcXG4gMjAzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBjcnlwdG8gQVBJIGZhbGxiYWNrIGZvciBibGstY3J5cHRvXFxcIlxcbiAyMDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfSU5MSU5FX0VOQ1JZUFRJT05cXG4gMjA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gMjA2OlxcdFxcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcXG4gMjA3OlxcdFxcdGhlbHBcXG4gMjA4OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBsZXRzIHRoZSBibG9jayBsYXllciBoYW5kbGUgaW5saW5lIGVuY3J5cHRpb25cXG4gMjA5OlxcdFxcdCAgYnkgZmFsbGluZyBiYWNrIHRvIHRoZSBrZXJuZWwgY3J5cHRvIEFQSSB3aGVuIGlubGluZVxcbiAyMTA6XFx0XFx0ICBlbmNyeXB0aW9uIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50LlxcbiAyMTE6XFx0XFxuIDIxMjpcXHRzb3VyY2UgXFxcImJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ1xcXCJcXG4gMjEzOlxcdFxcbiAyMTQ6XFx0Y29uZmlnIEJMS19QTVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNTo0NS4xMDA0MzA5NjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIwNTc5Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIHRoZSBDcnlwdG9ncmFwaGljIEJsb2NrIERldmljZSBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlIGltbWVkaWF0ZSBuZWVkIGlzIHRvIGltcGxlbWVudCBib3RoIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05gIGFuZCBgQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIEhvbGQgb24sIHRoZSBwYXRjaCB0b3VjaGVzIGBtbS9tZW1wb29sLmNgIHRvby4gSW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaXQgbW9kaWZpZXMgdGhlIGBtZW1wb29sX2FsbG9jX2J1bGtgIGZ1bmN0aW9uLCBhbmQgdGhhdCdzIHVzZWQgYnkgYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBXaGF0IG90aGVyIHN1YnN5c3RlbXMgb3IgZHJpdmVycyByZWx5IG9uIGBtZW1wb29sX2FsbG9jX2J1bGtgPyBJIG5lZWQgdG8gcmV2aWV3ICphbGwqIG9mIHRoZSBgbWVtcG9vbF9hbGxvY19idWxrYCB1c2VzLiBJIGRvbid0IHdhbnQgdG8gYnJlYWsgc29tZXRoaW5nIHVucmVsYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDU6NDguMzIxMDE4OTcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTY5OTA3NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9vbF9hbGxvY19idWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzY9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxOS1cXHQgKiBUcnkgYSBidWxrIGFsbG9jYXRpb24gZmlyc3QuICBUaGlzIG1pZ2h0IG5vdCBmaWxsIGFsbCBhbGxvY2F0ZWRcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjIwOlxcdCAqIHBhZ2VzLCBidXQgd2UnbGwgZml4IHRoYXQgdXAgbGF0ZXIgaW4gbWVtcG9vbF9hbGxvY19idWxrLlxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMjEtXFx0ICpcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMjctXFx0aWYgKHVubGlrZWx5KG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3NlZ3MpIFxcdTAwMjZcXHUwMDI2XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIyODpcXHQgICAgIW1lbXBvb2xfYWxsb2NfYnVsayhibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2wsXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIyOS1cXHRcXHRcXHRcXHQodm9pZCAqKilwYWdlcyArIG5yX2FsbG9jYXRlZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oPTY1PXZvaWQgKm1lbXBvb2xfYWxsb2Nfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCBnZnBfdCBnZnBfbWFzaykgX19tYWxsb2M7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC02Ny1cXHRhbGxvY19ob29rcyhtZW1wb29sX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6Njg6Ym9vbCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbSxcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC02OS1cXHRcXHR1bnNpZ25lZCBpbnQgY291bnQsIGdmcF90IGdmcF9tYXNrKTtcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo3MDojZGVmaW5lIG1lbXBvb2xfYWxsb2NfYnVsayguLi4pXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oOjcxOlxcdGFsbG9jX2hvb2tzKG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTcyLVxcbi0tXFxubW0vbWVtcG9vbC5jPTIxPXN0YXRpYyBERUNMQVJFX0ZBVUxUX0FUVFIoZmFpbF9tZW1wb29sX2FsbG9jKTtcXG5tbS9tZW1wb29sLmM6MjI6c3RhdGljIERFQ0xBUkVfRkFVTFRfQVRUUihmYWlsX21lbXBvb2xfYWxsb2NfYnVsayk7XFxubW0vbWVtcG9vbC5jLTIzLVxcbm1tL21lbXBvb2wuYz0yND1zdGF0aWMgaW50IF9faW5pdCBtZW1wb29sX2ZhdWxfaW5qZWN0X2luaXQodm9pZClcXG4tLVxcbm1tL21lbXBvb2wuYy0zNC1cXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKFxcbm1tL21lbXBvb2wuYzozNTpcXHRcXHRmYXVsdF9jcmVhdGVfZGVidWdmc19hdHRyKFxcXCJmYWlsX21lbXBvb2xfYWxsb2NfYnVsa1xcXCIsIE5VTEwsXFxubW0vbWVtcG9vbC5jOjM2OlxcdFxcdFxcdTAwMjZmYWlsX21lbXBvb2xfYWxsb2NfYnVsaykpO1xcbm1tL21lbXBvb2wuYy0zNy19XFxuLS1cXG5tbS9tZW1wb29sLmM9NDY3PXN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWVtcG9vbF9hZGp1c3RfZ2ZwKGdmcF90ICpnZnBfbWFzaylcXG4tLVxcbm1tL21lbXBvb2wuYy00NzMtLyoqXFxubW0vbWVtcG9vbC5jOjQ3NDogKiBtZW1wb29sX2FsbG9jX2J1bGsgLSBhbGxvY2F0ZSBtdWx0aXBsZSBlbGVtZW50cyBmcm9tIGEgbWVtb3J5IHBvb2xcXG5tbS9tZW1wb29sLmMtNDc1LSAqIEBwb29sOlxcdHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBwb29sXFxuLS1cXG5tbS9tZW1wb29sLmMtNDg5LSAqL1xcbm1tL21lbXBvb2wuYzo0OTA6Ym9vbCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXFxubW0vbWVtcG9vbC5jLTQ5MS1cXHRcXHR1bnNpZ25lZCBpbnQgY291bnQsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtcG9vbC5jLTUwMy1cXHQgKi9cXG5tbS9tZW1wb29sLmM6NTA0OlxcdGlmIChzaG91bGRfZmFpbF9leChcXHUwMDI2ZmFpbF9tZW1wb29sX2FsbG9jX2J1bGssIDEsIEZBVUxUX05PV0FSTikpIHtcXG5tbS9tZW1wb29sLmMtNTA1LVxcdFxcdHByX2luZm8oXFxcImZvcmNpbmcgbWVtcG9vbCB1c2FnZSBmb3IgJXBTXFxcXG5cXFwiLFxcbi0tXFxubW0vbWVtcG9vbC5jLTU0Mi19XFxubW0vbWVtcG9vbC5jOjU0MzpFWFBPUlRfU1lNQk9MX0dQTChtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKTtcXG5tbS9tZW1wb29sLmMtNTQ0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNTo1MC4yMTgwMTg1NjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjIyNTA1NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCbG9jayBDcnlwdG8gRmFsbGJhY2sgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBibG9jayBjcnlwdG8gZmFsbGJhY2sgaW1wbGVtZW50YXRpb24uIEl0IGxvb2tzIGxpa2UgYG1lbXBvb2xfYWxsb2NfYnVsa2AgaXMgZXhjbHVzaXZlbHkgdXNlZCB3aXRoaW4gYGJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGlzIG1vZHVsZSBpbnRyb2R1Y2VzIGEgbmV3IHdvcmtxdWV1ZSwgYGVuY19yZXNjdWVfd29ya2AsIGFuZCB0aGUgYXNzb2NpYXRlZCB3b3JrZXIgZnVuY3Rpb24gYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYC4gVGhlIGNvcmUgY2hhbmdlIGlzIGluIGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gLiBJdCBub3cgYXR0ZW1wdHMgYSBub24tYmxvY2tpbmcgYWxsb2NhdGlvbiAoYEdGUF9OT1dBSVRgKSB1c2luZyBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgaWYgYGN1cnJlbnQtXHUwMDNlYmlvX2xpc3RgIGlzIHBvcHVsYXRlZCwgYW5kIGlmIHRoYXQgZmFpbHMsIGl0IG9mZmxvYWRzIHRoZSByZXF1ZXN0IHRvIHRoZSBuZXcgd29ya3F1ZXVlLiBUaGlzIGZhbGxiYWNrIGxvZ2ljIGtpY2tzIGluIGR1cmluZyBibG9jayBjcnlwdG8gb3BlcmF0aW9ucywgb2YgY291cnNlLlxuXG5UbyB0ZXN0IHRoaXMgdGhvcm91Z2hseSwgSSBzaG91bGQgZW5hYmxlIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tgLiBUaGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzIGFyZTogYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCwgYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AsIGFuZCBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAuXG5cbkhhbmcgb24sIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYCBpcyBhIGNvcmUgZnVuY3Rpb24sIGJ1dCBpdCdzIG9ubHkgdXNlZCBieSBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQsIHdoaWNoIGlzIHdvcnRoIG5vdGluZy4gTm93LCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gTGV0IG1lIHNlZS4uLiBgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm5gICppcyogc3RhdGljLi4uIEJ1dCB3YWl0LCBpdCdzIHBhc3NlZCB0byBgSU5JVF9XT1JLYC4gVGhpcyBtZWFucyBpdCBpc24ndCBpbmxpbmVkLCBpdCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhhdCBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50LCB0aGFua2Z1bGx5LiBOb3csIGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgbGVzcyBpZGVhbCwgYnV0IGl0J3MgY2FsbGVkIGJ5IGBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW9gIHdoaWNoIGlzIGFsc28gc3RhdGljLiBMZXQncyBkaWcgZGVlcGVyIHRvIGZpbmQgdGhlICphY3R1YWwqIGVudHJ5IHBvaW50cyBmb3IgdGhlIGJsb2NrIGNyeXB0byBmYWxsYmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY4MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNTo1Ni40NDA1Mjc0NzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTEwMzIwOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0yNjU9c3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTI4MC1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjgxOnN0YXRpYyB2b2lkIF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvLFxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yODItXFx0XFx0c3RydWN0IGNyeXB0b19zeW5jX3NrY2lwaGVyICp0Zm0pXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9NDEyPXN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbylcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy00MjMtXFx0fVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo0MjQ6XFx0X19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHNyY19iaW8sXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQyNS1cXHRcXHRcXHRibGtfY3J5cHRvX2ZhbGxiYWNrX3RmbShzbG90KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjA1OjU4LjQzMTU2ODg2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA1Nzc3MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW9gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW9gIGlzIGFjdHVhbGx5IHVzZWQuIFRoaXMgZnVuY3Rpb24gbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGEgZmFsbGJhY2sgZW5jcnlwdGlvbiBtZWNoYW5pc20sIGxpa2VseSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLCBhbmQgcHJvYmFibHkgdGllZCB0byBzb21lIEJJTyAoQnVmZmVyZWQgSS9PKSBzdHJ1Y3R1cmUuIFRoYXQgbWVhbnMgaXTigJlzIGhhbmRsaW5nIGRhdGEgbW92aW5nIGluIGFuZCBvdXQgb2YgYmxvY2sgZGV2aWNlcywgcG90ZW50aWFsbHkgd2hlbiBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaXNuJ3QgYXZhaWxhYmxlIG9yIGNvbmZpZ3VyZWQuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdG8gaGFuZGxlIHRoaXMgZmFsbGJhY2ssIHNpbmNlIGl0J3MgYW4gaW1wb3J0YW50IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb24sIGFuZCBtaWdodCBoaW50IGF0IHdoZXJlIGFjY2VsZXJhdGlvbiBpcyBleHBlY3RlZC4gSeKAmWxsIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGNhbGxzIHRvIGdldCBhIGdyYXNwIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIEkvTyBmbG93LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY2FsbCBncmFwaCFcblxuXG4iLCJJbnB1dFRva2VucyI6ODc3NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjA2OjAxLjYzNzM0ODI3NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NjU0NDE1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0yNTM9c3RhdGljIHZvaWQgYmxrX2NyeXB0b19kdW5fdG9faXYoY29uc3QgdTY0IGR1bltCTEtfQ1JZUFRPX0RVTl9BUlJBWV9TSVpFXSxcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yNjEtXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjI2MjpzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHN0cnVjdCBiaW8gKnNyY19iaW8pO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yNjMtXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9MjY1PXN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yNzctXFx0d2hpbGUgKChzcmNfYmlvID0gYmlvX2xpc3RfcG9wKFxcdTAwMjZsaXN0KSkpXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjI3ODpcXHRcXHRibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHNyY19iaW8pO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yNzktfVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yODAtXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjI4MTpzdGF0aWMgdm9pZCBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbyxcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjgyLVxcdFxcdHN0cnVjdCBjcnlwdG9fc3luY19za2NpcGhlciAqdGZtKVxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQxMS0gKi9cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6NDEyOnN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbylcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNDEzLXtcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy00MjMtXFx0fVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo0MjQ6XFx0X19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHNyY19iaW8sXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQyNS1cXHRcXHRcXHRibGtfY3J5cHRvX2ZhbGxiYWNrX3RmbShzbG90KSk7XFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9NTQ0PWJvb2wgYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcChzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTYxLVxcdGlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkge1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo1NjI6XFx0XFx0YmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhiaW8pO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy01NjMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjowMy40MDM4OTczNzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MDM5ODgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IGl0OlxuXG4qKkFuYWx5emluZyB0aGUgRW50cnkgUG9pbnQ6IGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCoqXG5cblJpZ2h0LCBzbyBgYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcGAgaXMgdGhlIGRlc2lnbmF0ZWQgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgcHJvY2Vzcy4gVGhhdCdzIHRoZSBzdGFydGluZyBndW4sIHRoZSBmaXJzdCBwbGFjZSBleGVjdXRpb24gaGl0cy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcmVhbGx5IGRpZyBpbnRvIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBpdCBkb2VzLCB0aGUgcGFyYW1ldGVycyBpdCB1c2VzLCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAuIEkgd2FudCB0byBzZWUgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kIGNyeXB0byBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgdGhlIGZhbGxiYWNrIGhlcmUgaXMgY3J1Y2lhbC4gV2hhdCBpcyB0aGlzIGZ1bmN0aW9uIGEgXCJmYWxsYmFja1wiICpmcm9tKj8gQW5kLCBpZiBzbywgd2hpY2ggb3RoZXIgZnVuY3Rpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NzIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjowNi40ODQyOTg2NjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTEyMjg4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9NTA3PXN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZGVjcnlwdF9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTI2LS8qKlxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo1Mjc6ICogYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcCAtIFByZXBhcmUgYSBiaW8gdG8gdXNlIGZhbGxiYWNrIGVuL2RlY3J5cHRpb25cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTI4LSAqIEBiaW86IGJpbyB0byBwcmVwYXJlXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTQzLSAqL1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo1NDQ6Ym9vbCBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwKHN0cnVjdCBiaW8gKmJpbylcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTQ1LXtcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8taW50ZXJuYWwuaD0yMTM9c3RhdGljIGlubGluZSBpbnQgYmxrX2NyeXB0b19ycV9iaW9fcHJlcChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8taW50ZXJuYWwuaC0yMjAtXFxuYmxvY2svYmxrLWNyeXB0by1pbnRlcm5hbC5oOjIyMTpib29sIGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAoc3RydWN0IGJpbyAqYmlvKTtcXG5ibG9jay9ibGstY3J5cHRvLWludGVybmFsLmgtMjIyLVxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by5jPTI1Mj1ib29sIF9fYmxrX2NyeXB0b19zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8uYy0yNzMtXFx0XFx0fVxcbmJsb2NrL2Jsay1jcnlwdG8uYzoyNzQ6XFx0XFx0cmV0dXJuIGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAoYmlvKTtcXG5ibG9jay9ibGstY3J5cHRvLmMtMjc1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDY6MDguMjM1NTMxNzg3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTI0NTgzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJsb2NrIENyeXB0byBQYXRjaCBmb3IgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBfX2Jsa19jcnlwdG9fc3VibWl0X2Jpb2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGJsb2NrIGNyeXB0byBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHNvbWUga2V5IGZ1bmN0aW9uczogYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AsIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbmAsIGFuZCBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAuXG5cbkxldCBtZSBxdWlja2x5IHZlcmlmeSBpZiBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgaXMgZXZlbiB2aXNpYmxlIGV4dGVybmFsbHkuIEFoLCB5ZXAsIGl0J3MgYEVYUE9SVF9TWU1CT0xfR1BMYCdkLCBzbyBpdCdzIGEgbGVnaXRpbWF0ZSB0YXJnZXQgZm9yIGludmVzdGlnYXRpb24uIEdpdmVuIHRoYXQsIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCBhbmQgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCBhcmUgYWxzbyB3b3J0aCBhIGxvb2suXG5cbldhaXQgYSBzZWNvbmQsIEkgc2VlIHRoZSBjb3JlIGlzc3VlIOKAkyB0aGlzIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgZGVhZGxvY2tzIGR1cmluZyByZWN1cnNpdmUgYmlvIHN1Ym1pc3Npb25zIGJ5IHNoaWZ0aW5nIG9wZXJhdGlvbnMgdG8gYSB3b3JrcXVldWUuIE9rYXksIHRoYXQgY29udGV4dCBpcyBlc3NlbnRpYWwuIFRoZSBgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm5gIGlzIGRlZmluaXRlbHkgYSBuZXcgZnVuY3Rpb24gaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBUaGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIGdpdmVuIGl0cyBuZXcgbmF0dXJlLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgdG8gYWNjb3VudCBmb3IgYGdmcF9tYXNrYCBhbmQgaGFuZGxlIGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAgd2hpY2ggY291bGQgaGF2ZSBpbnRlcmVzdGluZyBjb25zZXF1ZW5jZXMuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQncyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gdG8gdHJpZ2dlciB0aGlzIGJlaGF2aW9yPyBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS2AuIERvZXMgaXQgaGF2ZSBhbnkgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgaW1wYWN0IGl0cyBmdW5jdGlvbj8gQWxyaWdodCwgaXQgZGVwZW5kcyBvbiBgQkxLX0lOTElORV9FTkNSWVBUSU9OYC4gVGltZSB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0lOTElORV9FTkNSWVBUSU9OYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxODEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDY6MTQuMjg3OTkzMjE3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE0NzEyODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0xODU9Y29uZmlnIEJMS19TRURfT1BBTFxcbi0tXFxuYmxvY2svS2NvbmZpZy0xOTQtXFxuYmxvY2svS2NvbmZpZzoxOTU6Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTlxcbmJsb2NrL0tjb25maWctMTk2LVxcdGJvb2wgXFxcIkVuYWJsZSBpbmxpbmUgZW5jcnlwdGlvbiBzdXBwb3J0IGluIGJsb2NrIGxheWVyXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0yMDEtXFxuYmxvY2svS2NvbmZpZzoyMDI6Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS1xcbmJsb2NrL0tjb25maWctMjAzLVxcdGJvb2wgXFxcIkVuYWJsZSBjcnlwdG8gQVBJIGZhbGxiYWNrIGZvciBibGstY3J5cHRvXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjoxNi4wMDI3MTA4NjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ0NzY3NzMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqUmV2aWV3aW5nIGBibG9jay9LY29uZmlnYCoqXG5cbk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgdG8gYGJsb2NrL0tjb25maWdgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcm91bmQgbGluZSAxOTUuIEkgcmVjYWxsIHdlIGhhZCBkaXNjdXNzZWQgdGhpcyBzZWN0aW9uIHByZXZpb3VzbHksIGFuZCBJIHdhbnQgdG8gcmUtZXZhbHVhdGUgaXQgd2l0aCBmcmVzaCBleWVzLCBjb25zaWRlcmluZyB0aGUgbGF0ZXN0IGRpc2N1c3Npb25zIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgaXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjoxOC40NTAzOTA2MzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTA6XFx0XFx0aGVscFxcbiAxOTE6XFx0XFx0QnVpbGRzIExvZ2ljIGZvciBpbnRlcmZhY2luZyB3aXRoIE9wYWwgZW5hYmxlZCBjb250cm9sbGVycy5cXG4gMTkyOlxcdFxcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdXNlcnMgdG8gc2V0dXAvdW5sb2NrL2xvY2tcXG4gMTkzOlxcdFxcdExvY2tpbmcgcmFuZ2VzIGZvciBTRUQgZGV2aWNlcyB1c2luZyB0aGUgT3BhbCBwcm90b2NvbC5cXG4gMTk0OlxcdFxcbiAxOTU6XFx0Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTlxcbiAxOTY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGlubGluZSBlbmNyeXB0aW9uIHN1cHBvcnQgaW4gYmxvY2sgbGF5ZXJcXFwiXFxuIDE5NzpcXHRcXHRoZWxwXFxuIDE5ODpcXHRcXHQgIEJ1aWxkIHRoZSBibGstY3J5cHRvIHN1YnN5c3RlbS4gRW5hYmxpbmcgdGhpcyBsZXRzIHRoZVxcbiAxOTk6XFx0XFx0ICBibG9jayBsYXllciBoYW5kbGUgZW5jcnlwdGlvbiwgc28gdXNlcnMgY2FuIHRha2VcXG4gMjAwOlxcdFxcdCAgYWR2YW50YWdlIG9mIGlubGluZSBlbmNyeXB0aW9uIGhhcmR3YXJlIGlmIHByZXNlbnQuXFxuIDIwMTpcXHRcXG4gMjAyOlxcdGNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcXG4gMjAzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBjcnlwdG8gQVBJIGZhbGxiYWNrIGZvciBibGstY3J5cHRvXFxcIlxcbiAyMDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfSU5MSU5FX0VOQ1JZUFRJT05cXG4gMjA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gMjA2OlxcdFxcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcXG4gMjA3OlxcdFxcdGhlbHBcXG4gMjA4OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBsZXRzIHRoZSBibG9jayBsYXllciBoYW5kbGUgaW5saW5lIGVuY3J5cHRpb25cXG4gMjA5OlxcdFxcdCAgYnkgZmFsbGluZyBiYWNrIHRvIHRoZSBrZXJuZWwgY3J5cHRvIEFQSSB3aGVuIGlubGluZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjoxOC40NTA0NTI4NzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzNDQ5MjM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMuIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05gIGlzIHNlbGYtY29udGFpbmVkLCBubyBkZXBlbmRlbmNpZXMuIEJ1dCwgYEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS2AgYnVpbGRzIHVwb24gdGhhdCwgcmlnaHQ/IEdvb2QuIEp1c3QgZG91YmxlLWNoZWNraW5nLCBhbmQgeWVwLCBgQ09ORklHX0NSWVBUT2AgYW5kIGBDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSYCBhcmUgc2VsZWN0ZWQgYXMgd2VsbC5cblxuU28gd2UgaGF2ZSB0aGUgdHdvIG1haW4gY29uZmlnczogYEJMS19JTkxJTkVfRU5DUllQVElPTmAgYW5kIGl0cyBmYWxsYmFjay4gTm93LCBsZXQncyBkaXZlIGRlZXBlci4gSSdtIHdvbmRlcmluZyBpZiBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgY2FuIGJlIHJlYWNoZWQgd2l0aG91dCB0aGUgYmxvY2sgY3J5cHRvIHBhdGguIEFoLCBpdCAqaXMqIGV4cG9ydGVkLCBidXQgY3VycmVudGx5IHNlZW1zIHRvIGJlIHVzZWQgb25seSBieSB0aGUgYmxvY2sgY3J5cHRvIGZhbGxiYWNrLiBIYW5nIG9uLCB0aGF0J3MgYSAqY29yZSogbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24hIFRoYXQncyBkZWZpbml0ZWx5IHdvcnRoIHNvbWUgc2VyaW91cyBmdXp6aW5nIGF0dGVudGlvbi5cblxuQWxyaWdodCwgdGhlIGNvcmUgZm9jdXMgdGhlbiB3aWxsIGJlOlxuXG4qICAgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIC0gdGhhdCdzIGEgcHJpb3JpdHkuXG4qICAgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCAtIHRoYXQncyBhIGdvb2QgZW50cnkgcG9pbnQuXG4qICAgYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AgLSBJJ20gbm90aW5nIHRoaXMgb25lLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gTGV0J3MgaW5jbHVkZSBpdCBpbiB0aGUgaW5pdGlhbCBjb3ZlcmFnZSwgb3IgY29uc2lkZXIgYWxzbyBpdHMgbm9uLXN0YXRpYyBlcXVpdmFsZW50IGBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW9gLlxuXG5XYWl0IGEgbWludXRlLCBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0IG1pZ2h0IGJlIGlubGluZWQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0OyBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgaXQncyBhY3R1YWxseSBpbmxpbmVkIGJlZm9yZSBJIGZpbmFsaXplIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBwYXJ0aWN1bGFyIHN5bWJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjoyMy41ODQ5NDc4NDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzU3ODI5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNDg9c3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2VuZGlvKHN0cnVjdCBiaW8gKmVuY19iaW8pXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMTc1LVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoxNzY6c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0xNzctXFx0XFx0dW5zaWduZWQgaW50IG5yX3NlZ3MsIHN0cnVjdCBwYWdlICoqKnBhZ2VzX3JldClcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0yODE9c3RhdGljIHZvaWQgX19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHN0cnVjdCBiaW8gKnNyY19iaW8sXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMzEzLVxcdG5yX2VuY19wYWdlcyA9IG1pbihiaW9fc2VnbWVudHMoc3JjX2JpbyksIEJJT19NQVhfVkVDUyk7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjMxNDpcXHRlbmNfYmlvID0gYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHNyY19iaW8sIG5yX2VuY19wYWdlcywgXFx1MDAyNmVuY19wYWdlcyk7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTMxNS1cXHRpZiAodW5saWtlbHkoIWVuY19iaW8pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjA2OjI1LjM2MDc0NzI0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk0MzUyNzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDcnlwdG9ncmFwaGljIEJJTyBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCBmdW5jdGlvbi4gSXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIGZpbmUsIGJ1dCBpdCdzIGEgcHJldHR5IGhlZnR5IGNodW5rIG9mIGNvZGUuIEknbSB3b25kZXJpbmcgaWYgdGhlIGNvbXBpbGVyIHdpbGwgYWN0dWFsbHkgaW5saW5lIGl0LCBnaXZlbiB0aGF0IGl0IGhhbmRsZXMgYmlvIGFsbG9jYXRpb24gYW5kIHBhZ2UgYWxsb2NhdGlvbiDigJMgdGhhdCdzIG9mdGVuIGEgYml0IHRvbyBtdWNoIGZvciBhIHNpbXBsZSBpbmxpbmluZy5cblxuVGhlbiB0aGVyZSdzIGBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW9gLCB3aGljaCBpcyAqYWxzbyogc3RhdGljLiBIbW0uIFRoZSByZWFsIGVudHJ5IHBvaW50IGlzIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCwgYW5kIHRoYXQgb25lICppc24ndCogc3RhdGljLiBSaWdodCwgdGhhdCdzIHRoZSBvbmUgd2Ugd2FudCB0byBmb2N1cyBvbi4gSSB0aGluayB3ZSBjYW4gbGV2ZXJhZ2UgYGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXBgLCBhbG9uZyB3aXRoIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbmAgYW5kIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYCB0byBnZXQgdGhlIGRlc2lyZWQgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIGJlY2F1c2UgdGhhdCdzIGFsd2F5cyBnb29kIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGluIGRldGFpbC4gVGltZSB0byBjaGVjayBgbW0vbWVtcG9vbC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDY6MjkuNjU1MTAyMjAyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbXBvb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0ODA6XFx0ICpcXHRcXHRpbmRlZmluaXRlbHkgdW50aWwgaXQgc3VjY2VlZHMgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgYWx3YXlzXFxuIDQ4MTpcXHQgKlxcdFxcdCV0cnVlLiAgSWYgdGhlIG1hc2sgZG9lc24ndCBpbmNsdWRlICVfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgdGhlblxcbiA0ODI6XFx0ICpcXHRcXHRmYWlsdXJlIGlzIGFsbG93ZWQgYW5kICVmYWxzZSBjYW4gYmUgcmV0dXJuZWQuXFxuIDQ4MzpcXHQgKlxcbiA0ODQ6XFx0ICogQWxsb2NhdGUgQGNvdW50IGVsZW1lbnRzIGludG8gQGVsZW1zLiAgVGhpcyBpcyBkb25lIGJ5IGZpcnN0IGNhbGxpbmcgaW50byB0aGVcXG4gNDg1OlxcdCAqIGFsbG9jX2ZuIHN1cHBsaWVkIGF0IHBvb2wgaW5pdGlhbGl6YXRpb24gdGltZSwgYW5kIGRpcHBpbmcgaW50byB0aGUgcmVzZXJ2ZWRcXG4gNDg2OlxcdCAqIHBvb2wgdG8gYXRvbWljYWxseSBhbGxvY2F0ZSB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGlmIGFsbG9jX2ZuIGZhaWxzLlxcbiA0ODc6XFx0ICpcXG4gNDg4OlxcdCAqIFJldHVybjogJXRydWUgaWYgdGhlIGFsbG9jYXRpb24gc3VjY2VlZGVkLCBvciAlZmFsc2UgaWYgaXQgZmFpbGVkLlxcbiA0ODk6XFx0ICovXFxuIDQ5MDpcXHRib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcXG4gNDkxOlxcdFxcdFxcdHVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spXFxuIDQ5MjpcXHR7XFxuIDQ5MzpcXHRcXHRnZnBfdCBnZnBfdGVtcCA9IG1lbXBvb2xfYWRqdXN0X2dmcChcXHUwMDI2Z2ZwX21hc2spO1xcbiA0OTQ6XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZCA9IDA7XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdFxcdFZNX1dBUk5fT05fT05DRShjb3VudCBcXHUwMDNlIHBvb2wtXFx1MDAzZW1pbl9ucik7XFxuIDQ5NzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9aRVJPKTtcXG4gNDk4OlxcdFxcdG1pZ2h0X2FsbG9jKGdmcF9tYXNrKTtcXG4gNDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjoyOS42NTUxOTkzMTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ5OTAzNDgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBCbG9jayBDcnlwdG8gRmFsbGJhY2sqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggYSBsb29rIGZvciBmdXp6aW5nLiBJdCdzIGZ1bmN0aW9uYWwsIG1lYW5pbmcgaXQgYWN0dWFsbHkgY2hhbmdlcyBob3cgdGhpbmdzICp3b3JrKuKAlGFuZCBpdCB0b3VjaGVzIHNvbWUga2V5IGFyZWFzLCBzcGVjaWZpY2FsbHkgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSBibG9jayBjcnlwdG8gZmFsbGJhY2sgbG9naWMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIG92ZXJhbGwgc3lzdGVtIGludGVncml0eS4gVGhlIGZhY3QgdGhhdCBpdCdzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbWFrZXMgaXQgZXZlbiBtb3JlIGF0dHJhY3RpdmUgZm9yIHRlc3RpbmcuXG5cbkknbSBmbGFnZ2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkknbGwgYmUgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGVzZSBzeW1ib2xzOiBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAsIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbmAsIGFuZCBgYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcGAuIEZvY3VzaW5nIG9uIHRoZXNlIHNob3VsZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2gncyBjaGFuZ2VzIGFuZCB0ZXN0IHRoZSBuZXcgbG9naWMuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCwgdGhhdCB3b3VsZCBiZSBgQkxLX0lOTElORV9FTkNSWVBUSU9OYCBhbmQgYEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS2AuXG5cblRoZSByZWFzb25pbmcgaXMgcHJldHR5IGNsZWFyOiBUaGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgYmVoYXZlcy4gSXQgbm93IHRha2VzIGEgYGdmcF9tYXNrYCBhbmQgaGFuZGxlcyBhbGxvY2F0aW9uIGZhaWx1cmVzIGJldHRlci4gTW9yZSBpbXBvcnRhbnRseSwgaXQgaW50ZWdyYXRlcyB0aGlzIGNoYW5nZSBpbnRvIHRoZSBgYmxrLWNyeXB0by1mYWxsYmFja2Agc3Vic3lzdGVtLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgZW5jX3Jlc2N1ZV93b3JrYCB3b3JrcXVldWUgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyByZWN1cnNpdmUgYmlvIHN1Ym1pc3Npb25zIHN1Z2dlc3RzIGEgc3VidGxlIGJ1dCBjcnVjaWFsIGZpeC4gSXQncyBhYm91dCBwdW50aW5nIGVuY3J5cHRpb24gd29yayB3aGVuIGBjdXJyZW50LVx1MDAzZWJpb19saXN0YCBpcyBub24tbnVsbCwgd2hpY2ggaXMgYSBjb21tb24gc2NlbmFyaW8gaW4gYmxvY2sgbGF5ZXIgb3BlcmF0aW9ucy4gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBmaXghIE15IGd1ZXNzIGlzIHRoYXQgdGhlIHdvcmtxdWV1ZSB3aWxsIGludHJvZHVjZSBhIG5ldyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjcwLCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjA2OjM1LjE1NDIzNzczOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDMyMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfSU5MSU5FX0VOQ1JZUFRJT05cIixcbiAgICBcIkJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZcIixcbiAgICBcImJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuXCIsXG4gICAgXCJibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIHRvIGFjY2VwdCBhIGBnZnBfbWFza2AgYW5kIGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzIHByb3Blcmx5LiBJdCBhbHNvIHVwZGF0ZXMgYGJsay1jcnlwdG8tZmFsbGJhY2tgIHRvIHVzZSB0aGlzIG5ldyBzaWduYXR1cmUgYW5kIGludHJvZHVjZXMgYSB3b3JrcXVldWUgKGBlbmNfcmVzY3VlX3dvcmtgKSB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjdXJzaXZlIGJpbyBzdWJtaXNzaW9ucyBieSBwdW50aW5nIGVuY3J5cHRpb24gd29yayB3aGVuIGBjdXJyZW50LVxcdTAwM2ViaW9fbGlzdGAgaXMgbm9uLW51bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBibG9jayBsYXllciBjcnlwdG8gZmFsbGJhY2sgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0lOTElORV9FTkNSWVBUSU9OXCIsXG4gICAgXCJCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mXCIsXG4gICAgXCJibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mblwiLFxuICAgIFwiYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYCB0byBhY2NlcHQgYSBgZ2ZwX21hc2tgIGFuZCBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcyBwcm9wZXJseS4gSXQgYWxzbyB1cGRhdGVzIGBibGstY3J5cHRvLWZhbGxiYWNrYCB0byB1c2UgdGhpcyBuZXcgc2lnbmF0dXJlIGFuZCBpbnRyb2R1Y2VzIGEgd29ya3F1ZXVlIChgZW5jX3Jlc2N1ZV93b3JrYCkgdG8gcHJldmVudCBkZWFkbG9ja3MgZHVyaW5nIHJlY3Vyc2l2ZSBiaW8gc3VibWlzc2lvbnMgYnkgcHVudGluZyBlbmNyeXB0aW9uIHdvcmsgd2hlbiBgY3VycmVudC1cXHUwMDNlYmlvX2xpc3RgIGlzIG5vbi1udWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYmxvY2sgbGF5ZXIgY3J5cHRvIGZhbGxiYWNrIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtkct6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 02:03:39 +0000 UTC FinishedAt: 2026-08-07 02:06:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0d839570765118029aa8bf4a95444c6a11aacf85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_INLINE_ENCRYPTION", "BLK_INLINE_ENCRYPTION_FALLBACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0d839570765118029aa8bf4a95444c6a11aacf85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_INLINE_ENCRYPTION", "BLK_INLINE_ENCRYPTION_FALLBACK" ], "series_id": "d369b433-7bb2-49c5-b096-9248d33bf304" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "mempool_alloc_bulk_noprof", "blk_crypto_fallback_encrypt_work_fn", "blk_crypto_fallback_bio_prep" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19JTkxJTkVfRU5DUllQVElPTiYjMzQ7LAogICAgJiMzNDtCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mJiMzNDssCiAgICAmIzM0O2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuJiMzNDssCiAgICAmIzM0O2Jsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIHRvIGFjY2VwdCBhIGBnZnBfbWFza2AgYW5kIGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzIHByb3Blcmx5LiBJdCBhbHNvIHVwZGF0ZXMgYGJsay1jcnlwdG8tZmFsbGJhY2tgIHRvIHVzZSB0aGlzIG5ldyBzaWduYXR1cmUgYW5kIGludHJvZHVjZXMgYSB3b3JrcXVldWUgKGBlbmNfcmVzY3VlX3dvcmtgKSB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjdXJzaXZlIGJpbyBzdWJtaXNzaW9ucyBieSBwdW50aW5nIGVuY3J5cHRpb24gd29yayB3aGVuIGBjdXJyZW50LVx1MDAzZWJpb19saXN0YCBpcyBub24tbnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIGNyeXB0byBmYWxsYmFjayBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGExMmE1MmJjMTU0ZDlhZGQ4MjM3Mzc2NTk0NThlNjg4MjBmZmQ1MDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDAyOjA1OjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYyBiL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY1xuaW5kZXggMmE1YzUyYWI3NGI0Yy4uOTczMzk5MDExZDVhMiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jXG5AQCAtODMsNiAmIzQzOzgzLDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYmxrX2NyeXB0b193cTtcbiBzdGF0aWMgbWVtcG9vbF90ICpibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2w7XG4gc3RhdGljIHN0cnVjdCBiaW9fc2V0IGVuY19iaW9fc2V0O1xuIFxuJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGVuY19yZXNjdWVfbGlzdF9sb2NrKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBiaW9fbGlzdCBlbmNfcmVzY3VlX2xpc3Q7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgZW5jX3Jlc2N1ZV93b3JrO1xuJiM0MztcbiAvKlxuICAqIFRoaXMgaXMgdGhlIGtleSB3ZSBzZXQgd2hlbiBldmljdGluZyBhIGtleXNsb3QuIFRoaXMgKnNob3VsZCogYmUgdGhlIGFsbCAwJiMzOTtzXG4gICoga2V5LCBidXQgQUVTLVhUUyByZWplY3RzIHRoYXQga2V5LCBzbyB3ZSB1c2Ugc29tZSByYW5kb20gYnl0ZXMgaW5zdGVhZC5cbkBAIC0xNzIsMTMgJiM0MzsxNzYsMjYgQEAgc3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2VuZGlvKHN0cnVjdCBiaW8gKmVuY19iaW8pXG4gc3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuIFx0XHR1bnNpZ25lZCBpbnQgbnJfc2Vncywgc3RydWN0IHBhZ2UgKioqcGFnZXNfcmV0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBtZW1mbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuIFx0dW5zaWduZWQgaW50IG5yX2FsbG9jYXRlZDtcbiBcdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4gXHRzdHJ1Y3QgYmlvICpiaW87XG4mIzQzO1x0Z2ZwX3QgZ2ZwX21hc2s7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRHVyaW5nIHJlY3Vyc2l2ZSBiaW8gc3VibWlzc2lvbiAoY3VycmVudC1cdTAwM2ViaW9fbGlzdCAhPSBOVUxMKSBhbnlcbiYjNDM7XHQgKiBzdWJtaXR0ZWQgYm91bmNlIGJpb3MganVzdCBnZXQgYWRkZWQgdG8gY3VycmVudC1cdTAwM2ViaW9fbGlzdDsgdGhleVxuJiM0MztcdCAqIGNhbm5vdCBjb21wbGV0ZSBhbmQgcmVsZWFzZSByZXNvdXJjZXMgeWV0LiAgVGhlcmVmb3JlLCB0byBhdm9pZFxuJiM0MztcdCAqIGRlYWRsb2NrcywgZG9uJiMzOTt0IHdhaXQgaW5kZWZpbml0ZWx5IGZvciBhZGRpdGlvbmFsIHJlc291cmNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY3VycmVudC1cdTAwM2ViaW9fbGlzdClcbiYjNDM7XHRcdGdmcF9tYXNrID0gR0ZQX05PV0FJVDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRnZnBfbWFzayA9IEdGUF9OT0lPO1xuIFxuIFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiaW9fc3JjLVx1MDAzZWJpX2JkZXYsIG5yX3NlZ3MsIGJpb19zcmMtXHUwMDNlYmlfb3BmLFxuLVx0XHRcdEdGUF9OT0lPLCBcdTAwMjZlbmNfYmlvX3NldCk7XG4mIzQzO1x0XHRcdCAgICAgICBnZnBfbWFzaywgXHUwMDI2ZW5jX2Jpb19zZXQpO1xuJiM0MztcdGlmICh1bmxpa2VseSghYmlvKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuIFx0aWYgKGJpb19mbGFnZ2VkKGJpb19zcmMsIEJJT19SRU1BUFBFRCkpXG4gXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19SRU1BUFBFRCk7XG4gXHRiaW8tXHUwMDNlYmlfcHJpdmF0ZVx0XHQ9IGJpb19zcmM7XG5AQCAtMjA2LDEyICYjNDM7MjIzLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYmlvICpibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3RydWN0IGJpbyAqYmlvX3NyYyxcbiBcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuIFx0ICovXG4gXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuLVx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XG4tXHRpZiAobnJfYWxsb2NhdGVkIFx1MDAzYyBucl9zZWdzKVxuLVx0XHRtZW1wb29sX2FsbG9jX2J1bGsoYmxrX2NyeXB0b19ib3VuY2VfcGFnZV9wb29sLFxuJiM0MztcdG5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3NlZ3MsIHBhZ2VzKTtcbiYjNDM7XHRpZiAodW5saWtlbHkobnJfYWxsb2NhdGVkIFx1MDAzYyBucl9zZWdzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1lbXBvb2xfYWxsb2NfYnVsayhibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2wsXG4gXHRcdFx0XHQodm9pZCAqKilwYWdlcyAmIzQzOyBucl9hbGxvY2F0ZWQsXG4tXHRcdFx0XHRucl9zZWdzIC0gbnJfYWxsb2NhdGVkKTtcbi1cdG1lbWFsbG9jX25vaW9fcmVzdG9yZShtZW1mbGFncyk7XG4mIzQzO1x0XHRcdFx0bnJfc2VncyAtIG5yX2FsbG9jYXRlZCwgZ2ZwX21hc2spKSB7XG4mIzQzO1x0XHRmcmVlX3BhZ2VzX2J1bGsocGFnZXMsIG5yX2FsbG9jYXRlZCk7XG4mIzQzO1x0XHRiaW9fcHV0KGJpbyk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXHQqcGFnZXNfcmV0ID0gcGFnZXM7XG4gXHRyZXR1cm4gYmlvO1xuIH1cbkBAIC0yMzksNiAmIzQzOzI1OSwyNSBAQCBzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2R1bl90b19pdihjb25zdCB1NjQgZHVuW0JMS19DUllQVE9fRFVOX0FSUkFZX1NJWkVdLFxuIFx0XHRpdi1cdTAwM2VkdW5baV0gPSBjcHVfdG9fbGU2NChkdW5baV0pO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvKTtcbiYjNDM7XG4mIzQzOy8qIEVuY3J5cHQgYSBsaXN0IG9mIGJpb3Mgd2hvc2UgZW5jcnlwdGlvbiB3YXMgcHVudGVkIHRvIGEga3dvcmtlci4gKi9cbiYjNDM7c3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpb19saXN0IGxpc3Q7XG4mIzQzO1x0c3RydWN0IGJpbyAqc3JjX2JpbztcbiYjNDM7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKGN1cnJlbnQtXHUwMDNlYmlvX2xpc3QpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0X2xvY2spO1xuJiM0MztcdGxpc3QgPSBlbmNfcmVzY3VlX2xpc3Q7XG4mIzQzO1x0YmlvX2xpc3RfaW5pdChcdTAwMjZlbmNfcmVzY3VlX2xpc3QpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmVuY19yZXNjdWVfbGlzdF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChzcmNfYmlvID0gYmlvX2xpc3RfcG9wKFx1MDAyNmxpc3QpKSlcbiYjNDM7XHRcdGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3JjX2Jpbyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgX19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHN0cnVjdCBiaW8gKnNyY19iaW8sXG4gXHRcdHN0cnVjdCBjcnlwdG9fc3luY19za2NpcGhlciAqdGZtKVxuIHtcbkBAIC0yNzMsNiAmIzQzOzMxMiwyMyBAQCBzdGF0aWMgdm9pZCBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbyxcbiBuZXdfYmlvOlxuIFx0bnJfZW5jX3BhZ2VzID0gbWluKGJpb19zZWdtZW50cyhzcmNfYmlvKSwgQklPX01BWF9WRUNTKTtcbiBcdGVuY19iaW8gPSBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3JjX2JpbywgbnJfZW5jX3BhZ2VzLCBcdTAwMjZlbmNfcGFnZXMpO1xuJiM0MztcdGlmICh1bmxpa2VseSghZW5jX2JpbykpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBGYWlsZWQgdG8gYWxsb2NhdGUgYSBib3VuY2UgYmlvIGR1cmluZyByZWN1cnNpdmUgYmlvXG4mIzQzO1x0XHQgKiBzdWJtaXNzaW9uLiAgV2UgbWlnaHQgYmUgYmxvY2tlZCBvbiBiaW9zIGluIGN1cnJlbnQtXHUwMDNlYmlvX2xpc3RcbiYjNDM7XHRcdCAqIGhvbGRpbmcgbWVtcG9vbCBlbGVtZW50cy4gIFRvIGVuYWJsZSBmb3J3YXJkIHByb2dyZXNzLCBwdW50XG4mIzQzO1x0XHQgKiB0aGUgcmVtYWluaW5nIGVuY3J5cHRpb24gd29yayBmb3Igc3JjX2JpbyB0byBhIGt3b3JrZXIuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogVGhlIERVTiBtYXkgaGF2ZSBiZWVuIGFkdmFuY2VkLCBzbyBtYWtlIHN1cmUgdG8gdXBkYXRlIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRXQVJOX09OX09OQ0UoIWN1cnJlbnQtXHUwMDNlYmlvX2xpc3QpO1xuJiM0MztcdFx0bWVtY3B5KGJjLVx1MDAzZWJjX2R1biwgY3Vycl9kdW4sIHNpemVvZihjdXJyX2R1bikpO1xuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNmVuY19yZXNjdWVfbGlzdF9sb2NrKTtcbiYjNDM7XHRcdGJpb19saXN0X2FkZChcdTAwMjZlbmNfcmVzY3VlX2xpc3QsIHNyY19iaW8pO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0X2xvY2spO1xuJiM0MztcdFx0cXVldWVfd29yayhibGtfY3J5cHRvX3dxLCBcdTAwMjZlbmNfcmVzY3VlX3dvcmspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcdGVuY19pZHggPSAwO1xuIFx0Zm9yICg7Oykge1xuIFx0XHRzdHJ1Y3QgYmlvX3ZlYyBzcmNfYnYgPVxuQEAgLTU5MSw2ICYjNDM7NjQ3LDggQEAgc3RhdGljIGludCBibGtfY3J5cHRvX2ZhbGxiYWNrX2luaXQodm9pZClcbiBcdGlmICghYmlvX2ZhbGxiYWNrX2NyeXB0X2N0eF9wb29sKVxuIFx0XHRnb3RvIGZhaWxfZnJlZV9jcnlwdF9jdHhfY2FjaGU7XG4gXG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNmVuY19yZXNjdWVfd29yaywgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm4pO1xuJiM0MztcbiBcdGJsa19jcnlwdG9fZmFsbGJhY2tfaW5pdGVkID0gdHJ1ZTtcbiBcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oIGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcbmluZGV4IGEwZmE2ZDQzZTBkYzQuLmY3ODk4Y2QxNTEyYmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcbkBAIC02NSw4ICYjNDM7NjUsOCBAQCB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7XG4gdm9pZCAqbWVtcG9vbF9hbGxvY19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGdmcF90IGdmcF9tYXNrKSBfX21hbGxvYztcbiAjZGVmaW5lIG1lbXBvb2xfYWxsb2MoLi4uKVx0XHRcdFx0XHRcdFxcXG4gXHRhbGxvY19ob29rcyhtZW1wb29sX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXG4taW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtLFxuLVx0XHR1bnNpZ25lZCBpbnQgY291bnQpO1xuJiM0Mztib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGNvdW50LCBnZnBfdCBnZnBfbWFzayk7XG4gI2RlZmluZSBtZW1wb29sX2FsbG9jX2J1bGsoLi4uKVx0XHRcdFx0XHRcdFxcXG4gXHRhbGxvY19ob29rcyhtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1wb29sLmMgYi9tbS9tZW1wb29sLmNcbmluZGV4IDQ3M2EwMjlmYTMxZmQuLmQ3NDFlNWY2MjU1NDMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbXBvb2wuY1xuQEAgLTQwOSw3ICYjNDM7NDA5LDcgQEAgaW50IG1lbXBvb2xfcmVzaXplKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbmV3X21pbl9ucilcbiB9XG4gRVhQT1JUX1NZTUJPTChtZW1wb29sX3Jlc2l6ZSk7XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxuJiM0MztzdGF0aWMgYm9vbCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxuIFx0XHR1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCBhbGxvY2F0ZWQsXG4gXHRcdGdmcF90IGdmcF9tYXNrKVxuIHtcbkBAIC00MzIsNyAmIzQzOzQzMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2woc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcbiBcdCAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkmIzQzOyYjNDM7KVxuIFx0XHRrbWVtbGVha191cGRhdGVfdHJhY2UoZWxlbXNbaV0pO1xuLVx0cmV0dXJuIGFsbG9jYXRlZDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiBcbiBmYWlsOlxuIFx0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSkge1xuQEAgLTQ1NCw3ICYjNDM7NDU0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGFsbG9jYXRlZDtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIC8qXG5AQCAtNDczLDI1ICYjNDM7NDczLDI4IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWVtcG9vbF9hZGp1c3RfZ2ZwKGdmcF90ICpnZnBfbWFzaylcbiAvKipcbiAgKiBtZW1wb29sX2FsbG9jX2J1bGsgLSBhbGxvY2F0ZSBtdWx0aXBsZSBlbGVtZW50cyBmcm9tIGEgbWVtb3J5IHBvb2xcbiAgKiBAcG9vbDpcdHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBwb29sXG4tICogQGVsZW1zOlx0cGFydGlhbGx5IG9yIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50cyBhcnJheVxuLSAqIEBjb3VudDpcdG51bWJlciBvZiBlbnRyaWVzIGluIEBlbGVtIHRoYXQgbmVlZCB0byBiZSBhbGxvY2F0ZWRcbiYjNDM7ICogQGVsZW1zOlx0cG9pbnRlciB0byBhcnJheSBpbnRvIHdoaWNoIHRoZSBlbGVtZW50IHBvaW50ZXJzIHdpbGwgYmUgc3RvcmVkXG4mIzQzOyAqIEBjb3VudDpcdG51bWJlciBvZiBlbGVtZW50cyB0byBhbGxvY2F0ZVxuJiM0MzsgKiBAZ2ZwX21hc2s6XHRHRlBfKiBmbGFncy4gICVfX0dGUF9aRVJPIGlzIG5vdCBzdXBwb3J0ZWQuICBJZiB0aGlzIG1hc2tcbiYjNDM7ICpcdFx0aW5jbHVkZXMgJV9fR0ZQX0RJUkVDVF9SRUNMQUlNLCB0aGVuIHRoZSBhbGxvY2F0aW9uIGlzIHJldHJpZWRcbiYjNDM7ICpcdFx0aW5kZWZpbml0ZWx5IHVudGlsIGl0IHN1Y2NlZWRzIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIGFsd2F5c1xuJiM0MzsgKlx0XHQldHJ1ZS4gIElmIHRoZSBtYXNrIGRvZXNuJiMzOTt0IGluY2x1ZGUgJV9fR0ZQX0RJUkVDVF9SRUNMQUlNLCB0aGVuXG4mIzQzOyAqXHRcdGZhaWx1cmUgaXMgYWxsb3dlZCBhbmQgJWZhbHNlIGNhbiBiZSByZXR1cm5lZC5cbiAgKlxuICAqIEFsbG9jYXRlIEBjb3VudCBlbGVtZW50cyBpbnRvIEBlbGVtcy4gIFRoaXMgaXMgZG9uZSBieSBmaXJzdCBjYWxsaW5nIGludG8gdGhlXG4gICogYWxsb2NfZm4gc3VwcGxpZWQgYXQgcG9vbCBpbml0aWFsaXphdGlvbiB0aW1lLCBhbmQgZGlwcGluZyBpbnRvIHRoZSByZXNlcnZlZFxuLSAqIHBvb2wgd2hlbiBhbGxvY19mbiBmYWlscyB0byBhbGxvY2F0ZSBhbiBlbGVtZW50LlxuLSAqXG4tICogT24gcmV0dXJuIGFsbCBAY291bnQgZWxlbWVudHMgaW4gQGVsZW1zIHdpbGwgYmUgcG9wdWxhdGVkLlxuJiM0MzsgKiBwb29sIHRvIGF0b21pY2FsbHkgYWxsb2NhdGUgdGhlIHJlbWFpbmluZyBlbGVtZW50cyBpZiBhbGxvY19mbiBmYWlscy5cbiAgKlxuLSAqIFJldHVybjogQWx3YXlzIDAuICBJZiBpdCB3YXNuJiMzOTt0IGZvciAlJCNeJCBhbGxvYyB0YWdzLCBpdCB3b3VsZCByZXR1cm4gdm9pZC5cbiYjNDM7ICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgYWxsb2NhdGlvbiBzdWNjZWVkZWQsIG9yICVmYWxzZSBpZiBpdCBmYWlsZWQuXG4gICovXG4taW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcbi1cdFx0dW5zaWduZWQgaW50IGNvdW50KVxuJiM0Mztib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spXG4ge1xuLVx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xuIFx0Z2ZwX3QgZ2ZwX3RlbXAgPSBtZW1wb29sX2FkanVzdF9nZnAoXHUwMDI2Z2ZwX21hc2spO1xuIFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoY291bnQgXHUwMDNlIHBvb2wtXHUwMDNlbWluX25yKTtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1pFUk8pO1xuIFx0bWlnaHRfYWxsb2MoZ2ZwX21hc2spO1xuIFxuIFx0LypcbkBAIC01MTYsMTMgJiM0Mzs1MTksMjYgQEAgaW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcbiBcdFx0YWxsb2NhdGVkJiM0MzsmIzQzOztcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiB0cnVlO1xuIFxuIHVzZV9wb29sOlxuLVx0YWxsb2NhdGVkID0gbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2wocG9vbCwgZWxlbXMsIGNvdW50LCBhbGxvY2F0ZWQsXG4tXHRcdFx0Z2ZwX3RlbXApO1xuLVx0Z2ZwX3RlbXAgPSBnZnBfbWFzaztcbi1cdGdvdG8gcmVwZWF0X2FsbG9jO1xuJiM0MztcdC8qIFRyeSB0byBhdG9taWNhbGx5IGFsbG9jYXRlIHRoZSByZW1haW5pbmcgZWxlbWVudHMgZnJvbSB0aGUgcG9vbC4gKi9cbiYjNDM7XHRpZiAobWVtcG9vbF9hbGxvY19mcm9tX3Bvb2wocG9vbCwgZWxlbXMsIGNvdW50LCBhbGxvY2F0ZWQsIGdmcF90ZW1wKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdC8qIFJldHJ5IGlmIHRoaXMgd2FzIGp1c3QgdGhlIG9wcG9ydHVuaXN0aWMgZmlyc3QgcGFzcy4gKi9cbiYjNDM7XHRpZiAoZ2ZwX3RlbXAgIT0gZ2ZwX21hc2spIHtcbiYjNDM7XHRcdGdmcF90ZW1wID0gZ2ZwX21hc2s7XG4mIzQzO1x0XHRnb3RvIHJlcGVhdF9hbGxvYztcbiYjNDM7XHR9XG4mIzQzO1x0LyogUmV0cnkgaW5kZWZpbml0ZWx5IGlmIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIGlzIHNldC4gKi9cbiYjNDM7XHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKVxuJiM0MztcdFx0Z290byByZXBlYXRfYWxsb2M7XG4mIzQzO1x0LyogT24gZmFpbHVyZSwgcm9sbCBiYWNrIGFueSBzdWNjZXNzZnVsIGFsbG9jYXRpb25zIGZyb20gLVx1MDAzZWFsbG9jKCkuICovXG4mIzQzO1x0d2hpbGUgKGFsbG9jYXRlZC0tKSB7XG4mIzQzO1x0XHRwb29sLVx1MDAzZWZyZWUoZWxlbXNbYWxsb2NhdGVkXSwgcG9vbC1cdTAwM2Vwb29sX2RhdGEpO1xuJiM0MztcdFx0ZWxlbXNbYWxsb2NhdGVkXSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWVtcG9vbF9hbGxvY19idWxrX25vcHJvZik7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19JTkxJTkVfRU5DUllQVElPTiYjMzQ7LAogICAgJiMzNDtCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mJiMzNDssCiAgICAmIzM0O2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuJiMzNDssCiAgICAmIzM0O2Jsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIHRvIGFjY2VwdCBhIGBnZnBfbWFza2AgYW5kIGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzIHByb3Blcmx5LiBJdCBhbHNvIHVwZGF0ZXMgYGJsay1jcnlwdG8tZmFsbGJhY2tgIHRvIHVzZSB0aGlzIG5ldyBzaWduYXR1cmUgYW5kIGludHJvZHVjZXMgYSB3b3JrcXVldWUgKGBlbmNfcmVzY3VlX3dvcmtgKSB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjdXJzaXZlIGJpbyBzdWJtaXNzaW9ucyBieSBwdW50aW5nIGVuY3J5cHRpb24gd29yayB3aGVuIGBjdXJyZW50LVx1MDAzZWJpb19saXN0YCBpcyBub24tbnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIGNyeXB0byBmYWxsYmFjayBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGExMmE1MmJjMTU0ZDlhZGQ4MjM3Mzc2NTk0NThlNjg4MjBmZmQ1MDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDAyOjA1OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jIGIvYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jCmluZGV4IDJhNWM1MmFiNzRiNGMuLjk3MzM5OTAxMWQ1YTIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMKQEAgLTgzLDYgJiM0Mzs4MywxMCBAQCBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJsa19jcnlwdG9fd3E7CiBzdGF0aWMgbWVtcG9vbF90ICpibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2w7CiBzdGF0aWMgc3RydWN0IGJpb19zZXQgZW5jX2Jpb19zZXQ7CiAKJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGVuY19yZXNjdWVfbGlzdF9sb2NrKTsKJiM0MztzdGF0aWMgc3RydWN0IGJpb19saXN0IGVuY19yZXNjdWVfbGlzdDsKJiM0MztzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IGVuY19yZXNjdWVfd29yazsKJiM0MzsKIC8qCiAgKiBUaGlzIGlzIHRoZSBrZXkgd2Ugc2V0IHdoZW4gZXZpY3RpbmcgYSBrZXlzbG90LiBUaGlzICpzaG91bGQqIGJlIHRoZSBhbGwgMCYjMzk7cwogICoga2V5LCBidXQgQUVTLVhUUyByZWplY3RzIHRoYXQga2V5LCBzbyB3ZSB1c2Ugc29tZSByYW5kb20gYnl0ZXMgaW5zdGVhZC4KQEAgLTE3MiwxMyAmIzQzOzE3NiwyNiBAQCBzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfZW5kaW8oc3RydWN0IGJpbyAqZW5jX2JpbykKIHN0YXRpYyBzdHJ1Y3QgYmlvICpibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3RydWN0IGJpbyAqYmlvX3NyYywKIAkJdW5zaWduZWQgaW50IG5yX3NlZ3MsIHN0cnVjdCBwYWdlICoqKnBhZ2VzX3JldCkKIHsKLQl1bnNpZ25lZCBpbnQgbWVtZmxhZ3MgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTsKIAl1bnNpZ25lZCBpbnQgbnJfYWxsb2NhdGVkOwogCXN0cnVjdCBwYWdlICoqcGFnZXM7CiAJc3RydWN0IGJpbyAqYmlvOwomIzQzOwlnZnBfdCBnZnBfbWFzazsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRHVyaW5nIHJlY3Vyc2l2ZSBiaW8gc3VibWlzc2lvbiAoY3VycmVudC0mZ3Q7YmlvX2xpc3QgIT0gTlVMTCkgYW55CiYjNDM7CSAqIHN1Ym1pdHRlZCBib3VuY2UgYmlvcyBqdXN0IGdldCBhZGRlZCB0byBjdXJyZW50LSZndDtiaW9fbGlzdDsgdGhleQomIzQzOwkgKiBjYW5ub3QgY29tcGxldGUgYW5kIHJlbGVhc2UgcmVzb3VyY2VzIHlldC4gIFRoZXJlZm9yZSwgdG8gYXZvaWQKJiM0MzsJICogZGVhZGxvY2tzLCBkb24mIzM5O3Qgd2FpdCBpbmRlZmluaXRlbHkgZm9yIGFkZGl0aW9uYWwgcmVzb3VyY2VzLgomIzQzOwkgKi8KJiM0MzsJaWYgKGN1cnJlbnQtJmd0O2Jpb19saXN0KQomIzQzOwkJZ2ZwX21hc2sgPSBHRlBfTk9XQUlUOwomIzQzOwllbHNlCiYjNDM7CQlnZnBfbWFzayA9IEdGUF9OT0lPOwogCiAJYmlvID0gYmlvX2FsbG9jX2Jpb3NldChiaW9fc3JjLSZndDtiaV9iZGV2LCBucl9zZWdzLCBiaW9fc3JjLSZndDtiaV9vcGYsCi0JCQlHRlBfTk9JTywgJmFtcDtlbmNfYmlvX3NldCk7CiYjNDM7CQkJICAgICAgIGdmcF9tYXNrLCAmYW1wO2VuY19iaW9fc2V0KTsKJiM0MzsJaWYgKHVubGlrZWx5KCFiaW8pKQomIzQzOwkJcmV0dXJuIE5VTEw7CiAJaWYgKGJpb19mbGFnZ2VkKGJpb19zcmMsIEJJT19SRU1BUFBFRCkpCiAJCWJpb19zZXRfZmxhZyhiaW8sIEJJT19SRU1BUFBFRCk7CiAJYmlvLSZndDtiaV9wcml2YXRlCQk9IGJpb19zcmM7CkBAIC0yMDYsMTIgJiM0MzsyMjMsMTUgQEAgc3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLAogCSAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLgogCSAqLwogCW1lbXNldChwYWdlcywgMCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnJfc2Vncyk7Ci0JbnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7Ci0JaWYgKG5yX2FsbG9jYXRlZCAmbHQ7IG5yX3NlZ3MpCi0JCW1lbXBvb2xfYWxsb2NfYnVsayhibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2wsCiYjNDM7CW5yX2FsbG9jYXRlZCA9IGFsbG9jX3BhZ2VzX2J1bGsoZ2ZwX21hc2ssIG5yX3NlZ3MsIHBhZ2VzKTsKJiM0MzsJaWYgKHVubGlrZWx5KG5yX2FsbG9jYXRlZCAmbHQ7IG5yX3NlZ3MpICZhbXA7JmFtcDsKJiM0MzsJICAgICFtZW1wb29sX2FsbG9jX2J1bGsoYmxrX2NyeXB0b19ib3VuY2VfcGFnZV9wb29sLAogCQkJCSh2b2lkICoqKXBhZ2VzICYjNDM7IG5yX2FsbG9jYXRlZCwKLQkJCQlucl9zZWdzIC0gbnJfYWxsb2NhdGVkKTsKLQltZW1hbGxvY19ub2lvX3Jlc3RvcmUobWVtZmxhZ3MpOwomIzQzOwkJCQlucl9zZWdzIC0gbnJfYWxsb2NhdGVkLCBnZnBfbWFzaykpIHsKJiM0MzsJCWZyZWVfcGFnZXNfYnVsayhwYWdlcywgbnJfYWxsb2NhdGVkKTsKJiM0MzsJCWJpb19wdXQoYmlvKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiAJKnBhZ2VzX3JldCA9IHBhZ2VzOwogCXJldHVybiBiaW87CiB9CkBAIC0yMzksNiAmIzQzOzI1OSwyNSBAQCBzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2R1bl90b19pdihjb25zdCB1NjQgZHVuW0JMS19DUllQVE9fRFVOX0FSUkFZX1NJWkVdLAogCQlpdi0mZ3Q7ZHVuW2ldID0gY3B1X3RvX2xlNjQoZHVuW2ldKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2Jpbyk7CiYjNDM7CiYjNDM7LyogRW5jcnlwdCBhIGxpc3Qgb2YgYmlvcyB3aG9zZSBlbmNyeXB0aW9uIHdhcyBwdW50ZWQgdG8gYSBrd29ya2VyLiAqLwomIzQzO3N0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaW9fbGlzdCBsaXN0OwomIzQzOwlzdHJ1Y3QgYmlvICpzcmNfYmlvOwomIzQzOwomIzQzOwlXQVJOX09OX09OQ0UoY3VycmVudC0mZ3Q7YmlvX2xpc3QpOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtlbmNfcmVzY3VlX2xpc3RfbG9jayk7CiYjNDM7CWxpc3QgPSBlbmNfcmVzY3VlX2xpc3Q7CiYjNDM7CWJpb19saXN0X2luaXQoJmFtcDtlbmNfcmVzY3VlX2xpc3QpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2VuY19yZXNjdWVfbGlzdF9sb2NrKTsKJiM0MzsKJiM0MzsJd2hpbGUgKChzcmNfYmlvID0gYmlvX2xpc3RfcG9wKCZhbXA7bGlzdCkpKQomIzQzOwkJYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzcmNfYmlvKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbywKIAkJc3RydWN0IGNyeXB0b19zeW5jX3NrY2lwaGVyICp0Zm0pCiB7CkBAIC0yNzMsNiAmIzQzOzMxMiwyMyBAQCBzdGF0aWMgdm9pZCBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbywKIG5ld19iaW86CiAJbnJfZW5jX3BhZ2VzID0gbWluKGJpb19zZWdtZW50cyhzcmNfYmlvKSwgQklPX01BWF9WRUNTKTsKIAllbmNfYmlvID0gYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHNyY19iaW8sIG5yX2VuY19wYWdlcywgJmFtcDtlbmNfcGFnZXMpOwomIzQzOwlpZiAodW5saWtlbHkoIWVuY19iaW8pKSB7CiYjNDM7CQkvKgomIzQzOwkJICogRmFpbGVkIHRvIGFsbG9jYXRlIGEgYm91bmNlIGJpbyBkdXJpbmcgcmVjdXJzaXZlIGJpbwomIzQzOwkJICogc3VibWlzc2lvbi4gIFdlIG1pZ2h0IGJlIGJsb2NrZWQgb24gYmlvcyBpbiBjdXJyZW50LSZndDtiaW9fbGlzdAomIzQzOwkJICogaG9sZGluZyBtZW1wb29sIGVsZW1lbnRzLiAgVG8gZW5hYmxlIGZvcndhcmQgcHJvZ3Jlc3MsIHB1bnQKJiM0MzsJCSAqIHRoZSByZW1haW5pbmcgZW5jcnlwdGlvbiB3b3JrIGZvciBzcmNfYmlvIHRvIGEga3dvcmtlci4KJiM0MzsJCSAqCiYjNDM7CQkgKiBUaGUgRFVOIG1heSBoYXZlIGJlZW4gYWR2YW5jZWQsIHNvIG1ha2Ugc3VyZSB0byB1cGRhdGUgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCVdBUk5fT05fT05DRSghY3VycmVudC0mZ3Q7YmlvX2xpc3QpOwomIzQzOwkJbWVtY3B5KGJjLSZndDtiY19kdW4sIGN1cnJfZHVuLCBzaXplb2YoY3Vycl9kdW4pKTsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO2VuY19yZXNjdWVfbGlzdF9sb2NrKTsKJiM0MzsJCWJpb19saXN0X2FkZCgmYW1wO2VuY19yZXNjdWVfbGlzdCwgc3JjX2Jpbyk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2VuY19yZXNjdWVfbGlzdF9sb2NrKTsKJiM0MzsJCXF1ZXVlX3dvcmsoYmxrX2NyeXB0b193cSwgJmFtcDtlbmNfcmVzY3VlX3dvcmspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAJZW5jX2lkeCA9IDA7CiAJZm9yICg7OykgewogCQlzdHJ1Y3QgYmlvX3ZlYyBzcmNfYnYgPQpAQCAtNTkxLDYgJiM0Mzs2NDcsOCBAQCBzdGF0aWMgaW50IGJsa19jcnlwdG9fZmFsbGJhY2tfaW5pdCh2b2lkKQogCWlmICghYmlvX2ZhbGxiYWNrX2NyeXB0X2N0eF9wb29sKQogCQlnb3RvIGZhaWxfZnJlZV9jcnlwdF9jdHhfY2FjaGU7CiAKJiM0MzsJSU5JVF9XT1JLKCZhbXA7ZW5jX3Jlc2N1ZV93b3JrLCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbik7CiYjNDM7CiAJYmxrX2NyeXB0b19mYWxsYmFja19pbml0ZWQgPSB0cnVlOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oCmluZGV4IGEwZmE2ZDQzZTBkYzQuLmY3ODk4Y2QxNTEyYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oCkBAIC02NSw4ICYjNDM7NjUsOCBAQCB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7CiB2b2lkICptZW1wb29sX2FsbG9jX25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwX21hc2spIF9fbWFsbG9jOwogI2RlZmluZSBtZW1wb29sX2FsbG9jKC4uLikJCQkJCQlcCiAJYWxsb2NfaG9va3MobWVtcG9vbF9hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKQotaW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtLAotCQl1bnNpZ25lZCBpbnQgY291bnQpOwomIzQzO2Jvb2wgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW0sCiYjNDM7CQl1bnNpZ25lZCBpbnQgY291bnQsIGdmcF90IGdmcF9tYXNrKTsKICNkZWZpbmUgbWVtcG9vbF9hbGxvY19idWxrKC4uLikJCQkJCQlcCiAJYWxsb2NfaG9va3MobWVtcG9vbF9hbGxvY19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpCiAKZGlmZiAtLWdpdCBhL21tL21lbXBvb2wuYyBiL21tL21lbXBvb2wuYwppbmRleCA0NzNhMDI5ZmEzMWZkLi5kNzQxZTVmNjI1NTQzIDEwMDY0NAotLS0gYS9tbS9tZW1wb29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9vbC5jCkBAIC00MDksNyAmIzQzOzQwOSw3IEBAIGludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpCiB9CiBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfcmVzaXplKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLAomIzQzO3N0YXRpYyBib29sIG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsCiAJCXVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgaW50IGFsbG9jYXRlZCwKIAkJZ2ZwX3QgZ2ZwX21hc2spCiB7CkBAIC00MzIsNyAmIzQzOzQzMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2woc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcywKIAkgKi8KIAlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQ7IGkmIzQzOyYjNDM7KQogCQlrbWVtbGVha191cGRhdGVfdHJhY2UoZWxlbXNbaV0pOwotCXJldHVybiBhbGxvY2F0ZWQ7CiYjNDM7CXJldHVybiB0cnVlOwogCiBmYWlsOgogCWlmIChnZnBfbWFzayAmYW1wOyBfX0dGUF9ESVJFQ1RfUkVDTEFJTSkgewpAQCAtNDU0LDcgJiM0Mzs0NTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwb29sLSZndDtsb2NrLCBmbGFncyk7CiAJfQogCi0JcmV0dXJuIGFsbG9jYXRlZDsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCiAvKgpAQCAtNDczLDI1ICYjNDM7NDczLDI4IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWVtcG9vbF9hZGp1c3RfZ2ZwKGdmcF90ICpnZnBfbWFzaykKIC8qKgogICogbWVtcG9vbF9hbGxvY19idWxrIC0gYWxsb2NhdGUgbXVsdGlwbGUgZWxlbWVudHMgZnJvbSBhIG1lbW9yeSBwb29sCiAgKiBAcG9vbDoJcG9pbnRlciB0byB0aGUgbWVtb3J5IHBvb2wKLSAqIEBlbGVtczoJcGFydGlhbGx5IG9yIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50cyBhcnJheQotICogQGNvdW50OgludW1iZXIgb2YgZW50cmllcyBpbiBAZWxlbSB0aGF0IG5lZWQgdG8gYmUgYWxsb2NhdGVkCiYjNDM7ICogQGVsZW1zOglwb2ludGVyIHRvIGFycmF5IGludG8gd2hpY2ggdGhlIGVsZW1lbnQgcG9pbnRlcnMgd2lsbCBiZSBzdG9yZWQKJiM0MzsgKiBAY291bnQ6CW51bWJlciBvZiBlbGVtZW50cyB0byBhbGxvY2F0ZQomIzQzOyAqIEBnZnBfbWFzazoJR0ZQXyogZmxhZ3MuICAlX19HRlBfWkVSTyBpcyBub3Qgc3VwcG9ydGVkLiAgSWYgdGhpcyBtYXNrCiYjNDM7ICoJCWluY2x1ZGVzICVfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgdGhlbiB0aGUgYWxsb2NhdGlvbiBpcyByZXRyaWVkCiYjNDM7ICoJCWluZGVmaW5pdGVseSB1bnRpbCBpdCBzdWNjZWVkcyBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyBhbHdheXMKJiM0MzsgKgkJJXRydWUuICBJZiB0aGUgbWFzayBkb2VzbiYjMzk7dCBpbmNsdWRlICVfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgdGhlbgomIzQzOyAqCQlmYWlsdXJlIGlzIGFsbG93ZWQgYW5kICVmYWxzZSBjYW4gYmUgcmV0dXJuZWQuCiAgKgogICogQWxsb2NhdGUgQGNvdW50IGVsZW1lbnRzIGludG8gQGVsZW1zLiAgVGhpcyBpcyBkb25lIGJ5IGZpcnN0IGNhbGxpbmcgaW50byB0aGUKICAqIGFsbG9jX2ZuIHN1cHBsaWVkIGF0IHBvb2wgaW5pdGlhbGl6YXRpb24gdGltZSwgYW5kIGRpcHBpbmcgaW50byB0aGUgcmVzZXJ2ZWQKLSAqIHBvb2wgd2hlbiBhbGxvY19mbiBmYWlscyB0byBhbGxvY2F0ZSBhbiBlbGVtZW50LgotICoKLSAqIE9uIHJldHVybiBhbGwgQGNvdW50IGVsZW1lbnRzIGluIEBlbGVtcyB3aWxsIGJlIHBvcHVsYXRlZC4KJiM0MzsgKiBwb29sIHRvIGF0b21pY2FsbHkgYWxsb2NhdGUgdGhlIHJlbWFpbmluZyBlbGVtZW50cyBpZiBhbGxvY19mbiBmYWlscy4KICAqCi0gKiBSZXR1cm46IEFsd2F5cyAwLiAgSWYgaXQgd2FzbiYjMzk7dCBmb3IgJSQjXiQgYWxsb2MgdGFncywgaXQgd291bGQgcmV0dXJuIHZvaWQuCiYjNDM7ICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgYWxsb2NhdGlvbiBzdWNjZWVkZWQsIG9yICVmYWxzZSBpZiBpdCBmYWlsZWQuCiAgKi8KLWludCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsCi0JCXVuc2lnbmVkIGludCBjb3VudCkKJiM0Mztib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcywKJiM0MzsJCXVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0JZ2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMOwogCWdmcF90IGdmcF90ZW1wID0gbWVtcG9vbF9hZGp1c3RfZ2ZwKCZhbXA7Z2ZwX21hc2spOwogCXVuc2lnbmVkIGludCBhbGxvY2F0ZWQgPSAwOwogCiAJVk1fV0FSTl9PTl9PTkNFKGNvdW50ICZndDsgcG9vbC0mZ3Q7bWluX25yKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdmcF9tYXNrICZhbXA7IF9fR0ZQX1pFUk8pOwogCW1pZ2h0X2FsbG9jKGdmcF9tYXNrKTsKIAogCS8qCkBAIC01MTYsMTMgJiM0Mzs1MTksMjYgQEAgaW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcywKIAkJYWxsb2NhdGVkJiM0MzsmIzQzOzsKIAl9CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHRydWU7CiAKIHVzZV9wb29sOgotCWFsbG9jYXRlZCA9IG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHBvb2wsIGVsZW1zLCBjb3VudCwgYWxsb2NhdGVkLAotCQkJZ2ZwX3RlbXApOwotCWdmcF90ZW1wID0gZ2ZwX21hc2s7Ci0JZ290byByZXBlYXRfYWxsb2M7CiYjNDM7CS8qIFRyeSB0byBhdG9taWNhbGx5IGFsbG9jYXRlIHRoZSByZW1haW5pbmcgZWxlbWVudHMgZnJvbSB0aGUgcG9vbC4gKi8KJiM0MzsJaWYgKG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHBvb2wsIGVsZW1zLCBjb3VudCwgYWxsb2NhdGVkLCBnZnBfdGVtcCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJLyogUmV0cnkgaWYgdGhpcyB3YXMganVzdCB0aGUgb3Bwb3J0dW5pc3RpYyBmaXJzdCBwYXNzLiAqLwomIzQzOwlpZiAoZ2ZwX3RlbXAgIT0gZ2ZwX21hc2spIHsKJiM0MzsJCWdmcF90ZW1wID0gZ2ZwX21hc2s7CiYjNDM7CQlnb3RvIHJlcGVhdF9hbGxvYzsKJiM0MzsJfQomIzQzOwkvKiBSZXRyeSBpbmRlZmluaXRlbHkgaWYgX19HRlBfRElSRUNUX1JFQ0xBSU0gaXMgc2V0LiAqLwomIzQzOwlpZiAoZ2ZwX21hc2sgJmFtcDsgX19HRlBfRElSRUNUX1JFQ0xBSU0pCiYjNDM7CQlnb3RvIHJlcGVhdF9hbGxvYzsKJiM0MzsJLyogT24gZmFpbHVyZSwgcm9sbCBiYWNrIGFueSBzdWNjZXNzZnVsIGFsbG9jYXRpb25zIGZyb20gLSZndDthbGxvYygpLiAqLwomIzQzOwl3aGlsZSAoYWxsb2NhdGVkLS0pIHsKJiM0MzsJCXBvb2wtJmd0O2ZyZWUoZWxlbXNbYWxsb2NhdGVkXSwgcG9vbC0mZ3Q7cG9vbF9kYXRhKTsKJiM0MzsJCWVsZW1zW2FsbG9jYXRlZF0gPSBOVUxMOwomIzQzOwl9CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2YpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEJsb2NrIENyeXB0byBGYWxsYmFjayBhbmQgTWVtb3J5IFBvb2wgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmNgIGFuZCBgbW0vbWVtcG9vbC5jYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBhbnl0aW1lIHdlJiMzOTtyZSBtZXNzaW5nIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIHRoZSBibG9jayBsYXllciwgSSBwYXkgY2xvc2UgYXR0ZW50aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIGZ1bmN0aW9uLiBQcmV2aW91c2x5LCBpdCBqdXN0ICphbHdheXMqIHN1Y2NlZWRlZCBhbmQgcmV0dXJuZWQgMCwgYnV0IG5vdyBpdCYjMzk7cyBnb2luZyB0byB0YWtlIGEgYGdmcF9tYXNrYCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgYW5kIHJldHVybiBhIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgd2UgaGFuZGxlIG1lbW9yeSBwb29sIGFsbG9jYXRpb24uIEl0JiMzOTtzIGEgbm9uLXRyaXZpYWwgY2hhbmdlLgoKTm93LCBpdCB1cGRhdGVzIGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gIHRvIHVzZSB0aGUgbmV3IGBtZW1wb29sX2FsbG9jX2J1bGtgIHNpZ25hdHVyZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgaW1wb3J0YW50IHBhcnQgaXMgaG93IHRoZSBwYXRjaCBoYW5kbGVzIGFsbG9jYXRpb24gZmFpbHVyZXMuIEluc3RlYWQgb2YganVzdCBjaHVnZ2luZyBhbG9uZywgaWYgdGhlIGBtZW1wb29sX2FsbG9jX2J1bGtgIGNhbGwgZmFpbHMsIGl0IG5vdyBwdW50cyB0byBhIHdvcmtxdWV1ZSwgYGVuY19yZXNjdWVfd29ya2AsIGJ1dCAqb25seSogaWYgYGN1cnJlbnQtJmd0O2Jpb19saXN0YCBpc24mIzM5O3QgbnVsbC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHRoZSBjaGVjayBmb3IgdGhlIGBiaW9fbGlzdGAgaGVscHMgYXZvaWQgYSBkZWFkbG9jayBzY2VuYXJpby4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc3RyYXRlZ3kgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHJlc291cmNlIGNvbnRlbnRpb24uIFRoYXQmIzM5O3MgYSBnb29kIHdheSB0byBoYW5kbGUgYSBjcml0aWNhbCBmYWlsdXJlLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRvIGJsb2NrIGNyeXB0byBmYWxsYmFjayBhbmQgbWVtcG9vbCBhbGxvY2F0aW9uLCBhbmQgaXQmIzM5O3Mgc29tZXRoaW5nIEkgbmVlZCB0byBldmFsdWF0ZS4gTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IFFFTVUgY291bGQgYWN0dWFsbHkgaGl0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBibG9jayBjcnlwdG8gZmFsbGJhY2ssIHNvIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBpZiBgQ09ORklHX0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS2AgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgS2NvbmZpZyBjaGVjayB0byBtYWtlIHN1cmUgaXQmIzM5O3MgcG9zc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTE5NT1jb25maWcgQkxLX0lOTElORV9FTkNSWVBUSU9OXG4tLVxuYmxvY2svS2NvbmZpZy0yMDEtXG5ibG9jay9LY29uZmlnOjIwMjpjb25maWcgQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLXG5ibG9jay9LY29uZmlnLTIwMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIGNyeXB0byBBUEkgZmFsbGJhY2sgZm9yIGJsay1jcnlwdG9cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODgwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBFbmNyeXB0aW9uIEZhbGxiYWNrIE1lY2hhbmlzbSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tgIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgYmxvY2svS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgc3Vic3lzdGVtLiBJIGtub3cgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aW9uLCBkZXBlbmRlbmNpZXMsIGFuZCBsaWtlbHkgc29tZSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIGFib3V0IHdoYXQgdGhpcyBmYWxsYmFjayBtZWNoYW5pc20gaXMgaW50ZW5kZWQgdG8gZG8uIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZW50cnkgd2lsbCBhbHNvIGdpdmUgbWUgY2x1ZXMgYWJvdXQgKndoeSogd2UgbWlnaHQgbmVlZCBhIGZhbGxiYWNrIGZvciBpbmxpbmUgZW5jcnlwdGlvbi4gVGhpcyBjb3VsZCBpbnZvbHZlIGxvb2tpbmcgYXQgYW55IGRlcGVuZGVuY2llcyBhbmQgZXhhbWluaW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBmZWF0dXJlcyBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBgS2NvbmZpZ2AgZmlsZSB0byBwcm92aWRlIHRoZSBuZWNlc3NhcnkgZnJhbWV3b3JrIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBjaG9pY2VzIGJlaGluZCB0aGUgZmVhdHVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZHJpbGwgZG93biBpbnRvIHRoZSB1bmRlcmx5aW5nIGNvZGUgaWYgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTk1Olx0Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTlxuIDE5NjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgaW5saW5lIGVuY3J5cHRpb24gc3VwcG9ydCBpbiBibG9jayBsYXllclwmIzM0O1xuIDE5NzpcdFx0aGVscFxuIDE5ODpcdFx0ICBCdWlsZCB0aGUgYmxrLWNyeXB0byBzdWJzeXN0ZW0uIEVuYWJsaW5nIHRoaXMgbGV0cyB0aGVcbiAxOTk6XHRcdCAgYmxvY2sgbGF5ZXIgaGFuZGxlIGVuY3J5cHRpb24sIHNvIHVzZXJzIGNhbiB0YWtlXG4gMjAwOlx0XHQgIGFkdmFudGFnZSBvZiBpbmxpbmUgZW5jcnlwdGlvbiBoYXJkd2FyZSBpZiBwcmVzZW50LlxuIDIwMTpcdFxuIDIwMjpcdGNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcbiAyMDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGNyeXB0byBBUEkgZmFsbGJhY2sgZm9yIGJsay1jcnlwdG9cJiMzNDtcbiAyMDQ6XHRcdGRlcGVuZHMgb24gQkxLX0lOTElORV9FTkNSWVBUSU9OXG4gMjA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gMjA2Olx0XHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXG4gMjA3Olx0XHRoZWxwXG4gMjA4Olx0XHQgIEVuYWJsaW5nIHRoaXMgbGV0cyB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlIGlubGluZSBlbmNyeXB0aW9uXG4gMjA5Olx0XHQgIGJ5IGZhbGxpbmcgYmFjayB0byB0aGUga2VybmVsIGNyeXB0byBBUEkgd2hlbiBpbmxpbmVcbiAyMTA6XHRcdCAgZW5jcnlwdGlvbiBoYXJkd2FyZSBpcyBub3QgcHJlc2VudC5cbiAyMTE6XHRcbiAyMTI6XHRzb3VyY2UgXCYjMzQ7YmxvY2svcGFydGl0aW9ucy9LY29uZmlnXCYjMzQ7XG4gMjEzOlx0XG4gMjE0Olx0Y29uZmlnIEJMS19QTVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NDAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyB0aGUgQ3J5cHRvZ3JhcGhpYyBCbG9jayBEZXZpY2UgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGUgaW1tZWRpYXRlIG5lZWQgaXMgdG8gaW1wbGVtZW50IGJvdGggYEJMS19JTkxJTkVfRU5DUllQVElPTmAgYW5kIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4gSG9sZCBvbiwgdGhlIHBhdGNoIHRvdWNoZXMgYG1tL21lbXBvb2wuY2AgdG9vLiBJbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCBpdCBtb2RpZmllcyB0aGUgYG1lbXBvb2xfYWxsb2NfYnVsa2AgZnVuY3Rpb24sIGFuZCB0aGF0JiMzOTtzIHVzZWQgYnkgYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBXaGF0IG90aGVyIHN1YnN5c3RlbXMgb3IgZHJpdmVycyByZWx5IG9uIGBtZW1wb29sX2FsbG9jX2J1bGtgPyBJIG5lZWQgdG8gcmV2aWV3ICphbGwqIG9mIHRoZSBgbWVtcG9vbF9hbGxvY19idWxrYCB1c2VzLiBJIGRvbiYjMzk7dCB3YW50IHRvIGJyZWFrIHNvbWV0aGluZyB1bnJlbGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtcG9vbF9hbGxvY19idWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzY9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMTktXHQgKiBUcnkgYSBidWxrIGFsbG9jYXRpb24gZmlyc3QuICBUaGlzIG1pZ2h0IG5vdCBmaWxsIGFsbCBhbGxvY2F0ZWRcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyMjA6XHQgKiBwYWdlcywgYnV0IHdlJiMzOTtsbCBmaXggdGhhdCB1cCBsYXRlciBpbiBtZW1wb29sX2FsbG9jX2J1bGsuXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjIxLVx0ICpcbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjI3LVx0aWYgKHVubGlrZWx5KG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfc2VncykgXHUwMDI2XHUwMDI2XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjI4Olx0ICAgICFtZW1wb29sX2FsbG9jX2J1bGsoYmxrX2NyeXB0b19ib3VuY2VfcGFnZV9wb29sLFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIyOS1cdFx0XHRcdCh2b2lkICoqKXBhZ2VzICYjNDM7IG5yX2FsbG9jYXRlZCxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaD02NT12b2lkICptZW1wb29sX2FsbG9jX25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwX21hc2spIF9fbWFsbG9jO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTY3LVx0YWxsb2NfaG9va3MobWVtcG9vbF9hbGxvY19ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6Njg6Ym9vbCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbSxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTY5LVx0XHR1bnNpZ25lZCBpbnQgY291bnQsIGdmcF90IGdmcF9tYXNrKTtcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oOjcwOiNkZWZpbmUgbWVtcG9vbF9hbGxvY19idWxrKC4uLilcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6NzE6XHRhbGxvY19ob29rcyhtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTcyLVxuLS1cbm1tL21lbXBvb2wuYz0yMT1zdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKGZhaWxfbWVtcG9vbF9hbGxvYyk7XG5tbS9tZW1wb29sLmM6MjI6c3RhdGljIERFQ0xBUkVfRkFVTFRfQVRUUihmYWlsX21lbXBvb2xfYWxsb2NfYnVsayk7XG5tbS9tZW1wb29sLmMtMjMtXG5tbS9tZW1wb29sLmM9MjQ9c3RhdGljIGludCBfX2luaXQgbWVtcG9vbF9mYXVsX2luamVjdF9pbml0KHZvaWQpXG4tLVxubW0vbWVtcG9vbC5jLTM0LVx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhcbm1tL21lbXBvb2wuYzozNTpcdFx0ZmF1bHRfY3JlYXRlX2RlYnVnZnNfYXR0cihcJiMzNDtmYWlsX21lbXBvb2xfYWxsb2NfYnVsa1wmIzM0OywgTlVMTCxcbm1tL21lbXBvb2wuYzozNjpcdFx0XHUwMDI2ZmFpbF9tZW1wb29sX2FsbG9jX2J1bGspKTtcbm1tL21lbXBvb2wuYy0zNy19XG4tLVxubW0vbWVtcG9vbC5jPTQ2Nz1zdGF0aWMgaW5saW5lIGdmcF90IG1lbXBvb2xfYWRqdXN0X2dmcChnZnBfdCAqZ2ZwX21hc2spXG4tLVxubW0vbWVtcG9vbC5jLTQ3My0vKipcbm1tL21lbXBvb2wuYzo0NzQ6ICogbWVtcG9vbF9hbGxvY19idWxrIC0gYWxsb2NhdGUgbXVsdGlwbGUgZWxlbWVudHMgZnJvbSBhIG1lbW9yeSBwb29sXG5tbS9tZW1wb29sLmMtNDc1LSAqIEBwb29sOlx0cG9pbnRlciB0byB0aGUgbWVtb3J5IHBvb2xcbi0tXG5tbS9tZW1wb29sLmMtNDg5LSAqL1xubW0vbWVtcG9vbC5jOjQ5MDpib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcbm1tL21lbXBvb2wuYy00OTEtXHRcdHVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vbWVtcG9vbC5jLTUwMy1cdCAqL1xubW0vbWVtcG9vbC5jOjUwNDpcdGlmIChzaG91bGRfZmFpbF9leChcdTAwMjZmYWlsX21lbXBvb2xfYWxsb2NfYnVsaywgMSwgRkFVTFRfTk9XQVJOKSkge1xubW0vbWVtcG9vbC5jLTUwNS1cdFx0cHJfaW5mbyhcJiMzNDtmb3JjaW5nIG1lbXBvb2wgdXNhZ2UgZm9yICVwU1xcblwmIzM0Oyxcbi0tXG5tbS9tZW1wb29sLmMtNTQyLX1cbm1tL21lbXBvb2wuYzo1NDM6RVhQT1JUX1NZTUJPTF9HUEwobWVtcG9vbF9hbGxvY19idWxrX25vcHJvZik7XG5tbS9tZW1wb29sLmMtNTQ0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJsb2NrIENyeXB0byBGYWxsYmFjayBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYmxvY2sgY3J5cHRvIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uLiBJdCBsb29rcyBsaWtlIGBtZW1wb29sX2FsbG9jX2J1bGtgIGlzIGV4Y2x1c2l2ZWx5IHVzZWQgd2l0aGluIGBibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhpcyBtb2R1bGUgaW50cm9kdWNlcyBhIG5ldyB3b3JrcXVldWUsIGBlbmNfcmVzY3VlX3dvcmtgLCBhbmQgdGhlIGFzc29jaWF0ZWQgd29ya2VyIGZ1bmN0aW9uIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbmAuIFRoZSBjb3JlIGNoYW5nZSBpcyBpbiBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYC4gSXQgbm93IGF0dGVtcHRzIGEgbm9uLWJsb2NraW5nIGFsbG9jYXRpb24gKGBHRlBfTk9XQUlUYCkgdXNpbmcgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIGlmIGBjdXJyZW50LSZndDtiaW9fbGlzdGAgaXMgcG9wdWxhdGVkLCBhbmQgaWYgdGhhdCBmYWlscywgaXQgb2ZmbG9hZHMgdGhlIHJlcXVlc3QgdG8gdGhlIG5ldyB3b3JrcXVldWUuIFRoaXMgZmFsbGJhY2sgbG9naWMga2lja3MgaW4gZHVyaW5nIGJsb2NrIGNyeXB0byBvcGVyYXRpb25zLCBvZiBjb3Vyc2UuCgpUbyB0ZXN0IHRoaXMgdGhvcm91Z2hseSwgSSBzaG91bGQgZW5hYmxlIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tgLiBUaGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzIGFyZTogYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCwgYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AsIGFuZCBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAuCgpIYW5nIG9uLCBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgaXMgYSBjb3JlIGZ1bmN0aW9uLCBidXQgaXQmIzM5O3Mgb25seSB1c2VkIGJ5IGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dCwgd2hpY2ggaXMgd29ydGggbm90aW5nLiBOb3csIHRoZSBwcm9tcHQgc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBMZXQgbWUgc2VlLi4uIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbmAgKmlzKiBzdGF0aWMuLi4gQnV0IHdhaXQsIGl0JiMzOTtzIHBhc3NlZCB0byBgSU5JVF9XT1JLYC4gVGhpcyBtZWFucyBpdCBpc24mIzM5O3QgaW5saW5lZCwgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQgc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCwgdGhhbmtmdWxseS4gTm93LCBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IGxlc3MgaWRlYWwsIGJ1dCBpdCYjMzk7cyBjYWxsZWQgYnkgYF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2Jpb2Agd2hpY2ggaXMgYWxzbyBzdGF0aWMuIExldCYjMzk7cyBkaWcgZGVlcGVyIHRvIGZpbmQgdGhlICphY3R1YWwqIGVudHJ5IHBvaW50cyBmb3IgdGhlIGJsb2NrIGNyeXB0byBmYWxsYmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0yNjU9c3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yODAtXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjgxOnN0YXRpYyB2b2lkIF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvLFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTI4Mi1cdFx0c3RydWN0IGNyeXB0b19zeW5jX3NrY2lwaGVyICp0Zm0pXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTQxMj1zdGF0aWMgdm9pZCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHN0cnVjdCBiaW8gKnNyY19iaW8pXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQyMy1cdH1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo0MjQ6XHRfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3JjX2JpbyxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy00MjUtXHRcdFx0YmxrX2NyeXB0b19mYWxsYmFja190Zm0oc2xvdCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Nzc0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2Jpb2AgaXMgYWN0dWFsbHkgdXNlZC4gVGhpcyBmdW5jdGlvbiBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIGEgZmFsbGJhY2sgZW5jcnlwdGlvbiBtZWNoYW5pc20sIGxpa2VseSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLCBhbmQgcHJvYmFibHkgdGllZCB0byBzb21lIEJJTyAoQnVmZmVyZWQgSS9PKSBzdHJ1Y3R1cmUuIFRoYXQgbWVhbnMgaXTigJlzIGhhbmRsaW5nIGRhdGEgbW92aW5nIGluIGFuZCBvdXQgb2YgYmxvY2sgZGV2aWNlcywgcG90ZW50aWFsbHkgd2hlbiBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaXNuJiMzOTt0IGF2YWlsYWJsZSBvciBjb25maWd1cmVkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSB0aGlzIGZhbGxiYWNrLCBzaW5jZSBpdCYjMzk7cyBhbiBpbXBvcnRhbnQgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbiwgYW5kIG1pZ2h0IGhpbnQgYXQgd2hlcmUgYWNjZWxlcmF0aW9uIGlzIGV4cGVjdGVkLiBJ4oCZbGwgc3RhcnQgYnkgdHJhY2luZyBpdHMgY2FsbHMgdG8gZ2V0IGEgZ3Jhc3Agb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgSS9PIGZsb3cuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjYWxsIGdyYXBoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0yNTM9c3RhdGljIHZvaWQgYmxrX2NyeXB0b19kdW5fdG9faXYoY29uc3QgdTY0IGR1bltCTEtfQ1JZUFRPX0RVTl9BUlJBWV9TSVpFXSxcbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjYxLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjI2MjpzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHN0cnVjdCBiaW8gKnNyY19iaW8pO1xuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTI2My1cbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9MjY1PXN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjc3LVx0d2hpbGUgKChzcmNfYmlvID0gYmlvX2xpc3RfcG9wKFx1MDAyNmxpc3QpKSlcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoyNzg6XHRcdGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3JjX2Jpbyk7XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjc5LX1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yODAtXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjgxOnN0YXRpYyB2b2lkIF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvLFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTI4Mi1cdFx0c3RydWN0IGNyeXB0b19zeW5jX3NrY2lwaGVyICp0Zm0pXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQxMS0gKi9cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo0MTI6c3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvKVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQxMy17XG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQyMy1cdH1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo0MjQ6XHRfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3JjX2JpbyxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy00MjUtXHRcdFx0YmxrX2NyeXB0b19mYWxsYmFja190Zm0oc2xvdCkpO1xuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz01NDQ9Ym9vbCBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTYxLVx0aWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB7XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6NTYyOlx0XHRibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKGJpbyk7XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTYzLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NzIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0OgoKKipBbmFseXppbmcgdGhlIEVudHJ5IFBvaW50OiBgYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcGAqKgoKUmlnaHQsIHNvIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCBpcyB0aGUgZGVzaWduYXRlZCBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBwcm9jZXNzLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBndW4sIHRoZSBmaXJzdCBwbGFjZSBleGVjdXRpb24gaGl0cy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcmVhbGx5IGRpZyBpbnRvIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBpdCBkb2VzLCB0aGUgcGFyYW1ldGVycyBpdCB1c2VzLCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAuIEkgd2FudCB0byBzZWUgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kIGNyeXB0byBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgdGhlIGZhbGxiYWNrIGhlcmUgaXMgY3J1Y2lhbC4gV2hhdCBpcyB0aGlzIGZ1bmN0aW9uIGEgJiMzNDtmYWxsYmFjayYjMzQ7ICpmcm9tKj8gQW5kLCBpZiBzbywgd2hpY2ggb3RoZXIgZnVuY3Rpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTUwNz1zdGF0aWMgdm9pZCBibGtfY3J5cHRvX2ZhbGxiYWNrX2RlY3J5cHRfZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy01MjYtLyoqXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6NTI3OiAqIGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAgLSBQcmVwYXJlIGEgYmlvIHRvIHVzZSBmYWxsYmFjayBlbi9kZWNyeXB0aW9uXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTI4LSAqIEBiaW86IGJpbyB0byBwcmVwYXJlXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTU0My0gKi9cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo1NDQ6Ym9vbCBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwKHN0cnVjdCBiaW8gKmJpbylcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy01NDUte1xuLS1cbmJsb2NrL2Jsay1jcnlwdG8taW50ZXJuYWwuaD0yMTM9c3RhdGljIGlubGluZSBpbnQgYmxrX2NyeXB0b19ycV9iaW9fcHJlcChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbyxcbi0tXG5ibG9jay9ibGstY3J5cHRvLWludGVybmFsLmgtMjIwLVxuYmxvY2svYmxrLWNyeXB0by1pbnRlcm5hbC5oOjIyMTpib29sIGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAoc3RydWN0IGJpbyAqYmlvKTtcbmJsb2NrL2Jsay1jcnlwdG8taW50ZXJuYWwuaC0yMjItXG4tLVxuYmxvY2svYmxrLWNyeXB0by5jPTI1Mj1ib29sIF9fYmxrX2NyeXB0b19zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGstY3J5cHRvLmMtMjczLVx0XHR9XG5ibG9jay9ibGstY3J5cHRvLmM6Mjc0Olx0XHRyZXR1cm4gYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcChiaW8pO1xuYmxvY2svYmxrLWNyeXB0by5jLTI3NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxODEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJsb2NrIENyeXB0byBQYXRjaCBmb3IgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYF9fYmxrX2NyeXB0b19zdWJtaXRfYmlvYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgYmxvY2sgY3J5cHRvIG9wZXJhdGlvbnMuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgc29tZSBrZXkgZnVuY3Rpb25zOiBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCwgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCwgYW5kIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYC4KCkxldCBtZSBxdWlja2x5IHZlcmlmeSBpZiBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgaXMgZXZlbiB2aXNpYmxlIGV4dGVybmFsbHkuIEFoLCB5ZXAsIGl0JiMzOTtzIGBFWFBPUlRfU1lNQk9MX0dQTGAmIzM5O2QsIHNvIGl0JiMzOTtzIGEgbGVnaXRpbWF0ZSB0YXJnZXQgZm9yIGludmVzdGlnYXRpb24uIEdpdmVuIHRoYXQsIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCBhbmQgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCBhcmUgYWxzbyB3b3J0aCBhIGxvb2suCgpXYWl0IGEgc2Vjb25kLCBJIHNlZSB0aGUgY29yZSBpc3N1ZSDigJMgdGhpcyBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjdXJzaXZlIGJpbyBzdWJtaXNzaW9ucyBieSBzaGlmdGluZyBvcGVyYXRpb25zIHRvIGEgd29ya3F1ZXVlLiBPa2F5LCB0aGF0IGNvbnRleHQgaXMgZXNzZW50aWFsLiBUaGUgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCBpcyBkZWZpbml0ZWx5IGEgbmV3IGZ1bmN0aW9uIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gVGhpcyBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZyBnaXZlbiBpdHMgbmV3IG5hdHVyZS4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIHRvIGFjY291bnQgZm9yIGBnZnBfbWFza2AgYW5kIGhhbmRsZSBgX19HRlBfRElSRUNUX1JFQ0xBSU1gIHdoaWNoIGNvdWxkIGhhdmUgaW50ZXJlc3RpbmcgY29uc2VxdWVuY2VzLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQmIzM5O3MgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIHRvIHRyaWdnZXIgdGhpcyBiZWhhdmlvcj8gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tgLiBEb2VzIGl0IGhhdmUgYW55IHVwc3RyZWFtIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGltcGFjdCBpdHMgZnVuY3Rpb24/IEFscmlnaHQsIGl0IGRlcGVuZHMgb24gYEJMS19JTkxJTkVfRU5DUllQVElPTmAuIFRpbWUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJMS19JTkxJTkVfRU5DUllQVElPTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz0xODU9Y29uZmlnIEJMS19TRURfT1BBTFxuLS1cbmJsb2NrL0tjb25maWctMTk0LVxuYmxvY2svS2NvbmZpZzoxOTU6Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTlxuYmxvY2svS2NvbmZpZy0xOTYtXHRib29sIFwmIzM0O0VuYWJsZSBpbmxpbmUgZW5jcnlwdGlvbiBzdXBwb3J0IGluIGJsb2NrIGxheWVyXCYjMzQ7XG4tLVxuYmxvY2svS2NvbmZpZy0yMDEtXG5ibG9jay9LY29uZmlnOjIwMjpjb25maWcgQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLXG5ibG9jay9LY29uZmlnLTIwMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIGNyeXB0byBBUEkgZmFsbGJhY2sgZm9yIGJsay1jcnlwdG9cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipSZXZpZXdpbmcgYGJsb2NrL0tjb25maWdgKioKCk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgdG8gYGJsb2NrL0tjb25maWdgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcm91bmQgbGluZSAxOTUuIEkgcmVjYWxsIHdlIGhhZCBkaXNjdXNzZWQgdGhpcyBzZWN0aW9uIHByZXZpb3VzbHksIGFuZCBJIHdhbnQgdG8gcmUtZXZhbHVhdGUgaXQgd2l0aCBmcmVzaCBleWVzLCBjb25zaWRlcmluZyB0aGUgbGF0ZXN0IGRpc2N1c3Npb25zIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgaXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHRcdGhlbHBcbiAxOTE6XHRcdEJ1aWxkcyBMb2dpYyBmb3IgaW50ZXJmYWNpbmcgd2l0aCBPcGFsIGVuYWJsZWQgY29udHJvbGxlcnMuXG4gMTkyOlx0XHRFbmFibGluZyB0aGlzIG9wdGlvbiBlbmFibGVzIHVzZXJzIHRvIHNldHVwL3VubG9jay9sb2NrXG4gMTkzOlx0XHRMb2NraW5nIHJhbmdlcyBmb3IgU0VEIGRldmljZXMgdXNpbmcgdGhlIE9wYWwgcHJvdG9jb2wuXG4gMTk0Olx0XG4gMTk1Olx0Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTlxuIDE5NjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgaW5saW5lIGVuY3J5cHRpb24gc3VwcG9ydCBpbiBibG9jayBsYXllclwmIzM0O1xuIDE5NzpcdFx0aGVscFxuIDE5ODpcdFx0ICBCdWlsZCB0aGUgYmxrLWNyeXB0byBzdWJzeXN0ZW0uIEVuYWJsaW5nIHRoaXMgbGV0cyB0aGVcbiAxOTk6XHRcdCAgYmxvY2sgbGF5ZXIgaGFuZGxlIGVuY3J5cHRpb24sIHNvIHVzZXJzIGNhbiB0YWtlXG4gMjAwOlx0XHQgIGFkdmFudGFnZSBvZiBpbmxpbmUgZW5jcnlwdGlvbiBoYXJkd2FyZSBpZiBwcmVzZW50LlxuIDIwMTpcdFxuIDIwMjpcdGNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcbiAyMDM6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGNyeXB0byBBUEkgZmFsbGJhY2sgZm9yIGJsay1jcnlwdG9cJiMzNDtcbiAyMDQ6XHRcdGRlcGVuZHMgb24gQkxLX0lOTElORV9FTkNSWVBUSU9OXG4gMjA1Olx0XHRzZWxlY3QgQ1JZUFRPXG4gMjA2Olx0XHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXG4gMjA3Olx0XHRoZWxwXG4gMjA4Olx0XHQgIEVuYWJsaW5nIHRoaXMgbGV0cyB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlIGlubGluZSBlbmNyeXB0aW9uXG4gMjA5Olx0XHQgIGJ5IGZhbGxpbmcgYmFjayB0byB0aGUga2VybmVsIGNyeXB0byBBUEkgd2hlbiBpbmxpbmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MDIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMuIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05gIGlzIHNlbGYtY29udGFpbmVkLCBubyBkZXBlbmRlbmNpZXMuIEJ1dCwgYEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS2AgYnVpbGRzIHVwb24gdGhhdCwgcmlnaHQ/IEdvb2QuIEp1c3QgZG91YmxlLWNoZWNraW5nLCBhbmQgeWVwLCBgQ09ORklHX0NSWVBUT2AgYW5kIGBDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSYCBhcmUgc2VsZWN0ZWQgYXMgd2VsbC4KClNvIHdlIGhhdmUgdGhlIHR3byBtYWluIGNvbmZpZ3M6IGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05gIGFuZCBpdHMgZmFsbGJhY2suIE5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyLiBJJiMzOTttIHdvbmRlcmluZyBpZiBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgY2FuIGJlIHJlYWNoZWQgd2l0aG91dCB0aGUgYmxvY2sgY3J5cHRvIHBhdGguIEFoLCBpdCAqaXMqIGV4cG9ydGVkLCBidXQgY3VycmVudGx5IHNlZW1zIHRvIGJlIHVzZWQgb25seSBieSB0aGUgYmxvY2sgY3J5cHRvIGZhbGxiYWNrLiBIYW5nIG9uLCB0aGF0JiMzOTtzIGEgKmNvcmUqIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uISBUaGF0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggc29tZSBzZXJpb3VzIGZ1enppbmcgYXR0ZW50aW9uLgoKQWxyaWdodCwgdGhlIGNvcmUgZm9jdXMgdGhlbiB3aWxsIGJlOgoKKiAgIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYCAtIHRoYXQmIzM5O3MgYSBwcmlvcml0eS4KKiAgIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbmAgLSB0aGF0JiMzOTtzIGEgZ29vZCBlbnRyeSBwb2ludC4KKiAgIGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gIC0gSSYjMzk7bSBub3RpbmcgdGhpcyBvbmUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gTGV0JiMzOTtzIGluY2x1ZGUgaXQgaW4gdGhlIGluaXRpYWwgY292ZXJhZ2UsIG9yIGNvbnNpZGVyIGFsc28gaXRzIG5vbi1zdGF0aWMgZXF1aXZhbGVudCBgX19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvYC4KCldhaXQgYSBtaW51dGUsIGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgbWlnaHQgYmUgaW5saW5lZC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQ7IEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgaXQmIzM5O3MgYWN0dWFsbHkgaW5saW5lZCBiZWZvcmUgSSBmaW5hbGl6ZSB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgcGFydGljdWxhciBzeW1ib2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9MTQ4PXN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9lbmRpbyhzdHJ1Y3QgYmlvICplbmNfYmlvKVxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0xNzUtXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MTc2OnN0YXRpYyBzdHJ1Y3QgYmlvICpibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3RydWN0IGJpbyAqYmlvX3NyYyxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0xNzctXHRcdHVuc2lnbmVkIGludCBucl9zZWdzLCBzdHJ1Y3QgcGFnZSAqKipwYWdlc19yZXQpXG4tLVxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jPTI4MT1zdGF0aWMgdm9pZCBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2Jpbyxcbi0tXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMzEzLVx0bnJfZW5jX3BhZ2VzID0gbWluKGJpb19zZWdtZW50cyhzcmNfYmlvKSwgQklPX01BWF9WRUNTKTtcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzozMTQ6XHRlbmNfYmlvID0gYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHNyY19iaW8sIG5yX2VuY19wYWdlcywgXHUwMDI2ZW5jX3BhZ2VzKTtcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0zMTUtXHRpZiAodW5saWtlbHkoIWVuY19iaW8pKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDcnlwdG9ncmFwaGljIEJJTyBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gIGZ1bmN0aW9uLiBJdCYjMzk7cyBtYXJrZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIGZpbmUsIGJ1dCBpdCYjMzk7cyBhIHByZXR0eSBoZWZ0eSBjaHVuayBvZiBjb2RlLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGUgY29tcGlsZXIgd2lsbCBhY3R1YWxseSBpbmxpbmUgaXQsIGdpdmVuIHRoYXQgaXQgaGFuZGxlcyBiaW8gYWxsb2NhdGlvbiBhbmQgcGFnZSBhbGxvY2F0aW9uIOKAkyB0aGF0JiMzOTtzIG9mdGVuIGEgYml0IHRvbyBtdWNoIGZvciBhIHNpbXBsZSBpbmxpbmluZy4KClRoZW4gdGhlcmUmIzM5O3MgYF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2Jpb2AsIHdoaWNoIGlzICphbHNvKiBzdGF0aWMuIEhtbS4gVGhlIHJlYWwgZW50cnkgcG9pbnQgaXMgYGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXBgLCBhbmQgdGhhdCBvbmUgKmlzbiYjMzk7dCogc3RhdGljLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgb25lIHdlIHdhbnQgdG8gZm9jdXMgb24uIEkgdGhpbmsgd2UgY2FuIGxldmVyYWdlIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCwgYWxvbmcgd2l0aCBgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm5gIGFuZCBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgdG8gZ2V0IHRoZSBkZXNpcmVkIGZ1bmN0aW9uYWxpdHkuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIGJlY2F1c2UgdGhhdCYjMzk7cyBhbHdheXMgZ29vZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSBpbiBkZXRhaWwuIFRpbWUgdG8gY2hlY2sgYG1tL21lbXBvb2wuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtcG9vbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODA6XHQgKlx0XHRpbmRlZmluaXRlbHkgdW50aWwgaXQgc3VjY2VlZHMgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgYWx3YXlzXG4gNDgxOlx0ICpcdFx0JXRydWUuICBJZiB0aGUgbWFzayBkb2VzbiYjMzk7dCBpbmNsdWRlICVfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgdGhlblxuIDQ4MjpcdCAqXHRcdGZhaWx1cmUgaXMgYWxsb3dlZCBhbmQgJWZhbHNlIGNhbiBiZSByZXR1cm5lZC5cbiA0ODM6XHQgKlxuIDQ4NDpcdCAqIEFsbG9jYXRlIEBjb3VudCBlbGVtZW50cyBpbnRvIEBlbGVtcy4gIFRoaXMgaXMgZG9uZSBieSBmaXJzdCBjYWxsaW5nIGludG8gdGhlXG4gNDg1Olx0ICogYWxsb2NfZm4gc3VwcGxpZWQgYXQgcG9vbCBpbml0aWFsaXphdGlvbiB0aW1lLCBhbmQgZGlwcGluZyBpbnRvIHRoZSByZXNlcnZlZFxuIDQ4NjpcdCAqIHBvb2wgdG8gYXRvbWljYWxseSBhbGxvY2F0ZSB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGlmIGFsbG9jX2ZuIGZhaWxzLlxuIDQ4NzpcdCAqXG4gNDg4Olx0ICogUmV0dXJuOiAldHJ1ZSBpZiB0aGUgYWxsb2NhdGlvbiBzdWNjZWVkZWQsIG9yICVmYWxzZSBpZiBpdCBmYWlsZWQuXG4gNDg5Olx0ICovXG4gNDkwOlx0Ym9vbCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXG4gNDkxOlx0XHRcdHVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spXG4gNDkyOlx0e1xuIDQ5MzpcdFx0Z2ZwX3QgZ2ZwX3RlbXAgPSBtZW1wb29sX2FkanVzdF9nZnAoXHUwMDI2Z2ZwX21hc2spO1xuIDQ5NDpcdFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZCA9IDA7XG4gNDk1Olx0XG4gNDk2Olx0XHRWTV9XQVJOX09OX09OQ0UoY291bnQgXHUwMDNlIHBvb2wtXHUwMDNlbWluX25yKTtcbiA0OTc6XHRcdFZNX1dBUk5fT05fT05DRShnZnBfbWFzayBcdTAwMjYgX19HRlBfWkVSTyk7XG4gNDk4Olx0XHRtaWdodF9hbGxvYyhnZnBfbWFzayk7XG4gNDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjcwCgkJCQkJCQlvdXRwdXQ6IDIwMgoJCQkJCQkJdGhvdWdodHM6IDIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBCbG9jayBDcnlwdG8gRmFsbGJhY2sqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgbG9vayBmb3IgZnV6emluZy4gSXQmIzM5O3MgZnVuY3Rpb25hbCwgbWVhbmluZyBpdCBhY3R1YWxseSBjaGFuZ2VzIGhvdyB0aGluZ3MgKndvcmsq4oCUYW5kIGl0IHRvdWNoZXMgc29tZSBrZXkgYXJlYXMsIHNwZWNpZmljYWxseSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIGJsb2NrIGNyeXB0byBmYWxsYmFjayBsb2dpYywgd2hpY2ggaXMgY3J1Y2lhbCBmb3Igb3ZlcmFsbCBzeXN0ZW0gaW50ZWdyaXR5LiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbWFrZXMgaXQgZXZlbiBtb3JlIGF0dHJhY3RpdmUgZm9yIHRlc3RpbmcuCgpJJiMzOTttIGZsYWdnaW5nIHRoaXMgYXMgYFdvcnRoRnV6emluZz10cnVlYC4KCkkmIzM5O2xsIGJlIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlc2Ugc3ltYm9sczogYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgLCBgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm5gLCBhbmQgYGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXBgLiBGb2N1c2luZyBvbiB0aGVzZSBzaG91bGQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgYW5kIHRlc3QgdGhlIG5ldyBsb2dpYy4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCwgdGhhdCB3b3VsZCBiZSBgQkxLX0lOTElORV9FTkNSWVBUSU9OYCBhbmQgYEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS2AuCgpUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjbGVhcjogVGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIGJlaGF2ZXMuIEl0IG5vdyB0YWtlcyBhIGBnZnBfbWFza2AgYW5kIGhhbmRsZXMgYWxsb2NhdGlvbiBmYWlsdXJlcyBiZXR0ZXIuIE1vcmUgaW1wb3J0YW50bHksIGl0IGludGVncmF0ZXMgdGhpcyBjaGFuZ2UgaW50byB0aGUgYGJsay1jcnlwdG8tZmFsbGJhY2tgIHN1YnN5c3RlbS4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYGVuY19yZXNjdWVfd29ya2Agd29ya3F1ZXVlIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgcmVjdXJzaXZlIGJpbyBzdWJtaXNzaW9ucyBzdWdnZXN0cyBhIHN1YnRsZSBidXQgY3J1Y2lhbCBmaXguIEl0JiMzOTtzIGFib3V0IHB1bnRpbmcgZW5jcnlwdGlvbiB3b3JrIHdoZW4gYGN1cnJlbnQtJmd0O2Jpb19saXN0YCBpcyBub24tbnVsbCwgd2hpY2ggaXMgYSBjb21tb24gc2NlbmFyaW8gaW4gYmxvY2sgbGF5ZXIgb3BlcmF0aW9ucy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gZml4ISBNeSBndWVzcyBpcyB0aGF0IHRoZSB3b3JrcXVldWUgd2lsbCBpbnRyb2R1Y2UgYSBuZXcgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0lOTElORV9FTkNSWVBUSU9OJiMzNDssCiAgICAmIzM0O0JMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2YmIzM0OywKICAgICYjMzQ7YmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm4mIzM0OywKICAgICYjMzQ7YmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgdG8gYWNjZXB0IGEgYGdmcF9tYXNrYCBhbmQgaGFuZGxlIGFsbG9jYXRpb24gZmFpbHVyZXMgcHJvcGVybHkuIEl0IGFsc28gdXBkYXRlcyBgYmxrLWNyeXB0by1mYWxsYmFja2AgdG8gdXNlIHRoaXMgbmV3IHNpZ25hdHVyZSBhbmQgaW50cm9kdWNlcyBhIHdvcmtxdWV1ZSAoYGVuY19yZXNjdWVfd29ya2ApIHRvIHByZXZlbnQgZGVhZGxvY2tzIGR1cmluZyByZWN1cnNpdmUgYmlvIHN1Ym1pc3Npb25zIGJ5IHB1bnRpbmcgZW5jcnlwdGlvbiB3b3JrIHdoZW4gYGN1cnJlbnQtXHUwMDNlYmlvX2xpc3RgIGlzIG5vbi1udWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYmxvY2sgbGF5ZXIgY3J5cHRvIGZhbGxiYWNrIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfSU5MSU5FX0VOQ1JZUFRJT04mIzM0OywKICAgICYjMzQ7QkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtcG9vbF9hbGxvY19idWxrX25vcHJvZiYjMzQ7LAogICAgJiMzNDtibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbiYjMzQ7LAogICAgJiMzNDtibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYCB0byBhY2NlcHQgYSBgZ2ZwX21hc2tgIGFuZCBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcyBwcm9wZXJseS4gSXQgYWxzbyB1cGRhdGVzIGBibGstY3J5cHRvLWZhbGxiYWNrYCB0byB1c2UgdGhpcyBuZXcgc2lnbmF0dXJlIGFuZCBpbnRyb2R1Y2VzIGEgd29ya3F1ZXVlIChgZW5jX3Jlc2N1ZV93b3JrYCkgdG8gcHJldmVudCBkZWFkbG9ja3MgZHVyaW5nIHJlY3Vyc2l2ZSBiaW8gc3VibWlzc2lvbnMgYnkgcHVudGluZyBlbmNyeXB0aW9uIHdvcmsgd2hlbiBgY3VycmVudC1cdTAwM2ViaW9fbGlzdGAgaXMgbm9uLW51bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBibG9jayBsYXllciBjcnlwdG8gZmFsbGJhY2sgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNTozNC41NjUzNDUzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNjY2OTM1OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19JTkxJTkVfRU5DUllQVElPTlwiLFxuICAgIFwiQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtcG9vbF9hbGxvY19idWxrX25vcHJvZlwiLFxuICAgIFwiYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm5cIixcbiAgICBcImJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgdG8gYWNjZXB0IGEgYGdmcF9tYXNrYCBhbmQgaGFuZGxlIGFsbG9jYXRpb24gZmFpbHVyZXMgcHJvcGVybHkuIEl0IGFsc28gdXBkYXRlcyBgYmxrLWNyeXB0by1mYWxsYmFja2AgdG8gdXNlIHRoaXMgbmV3IHNpZ25hdHVyZSBhbmQgaW50cm9kdWNlcyBhIHdvcmtxdWV1ZSAoYGVuY19yZXNjdWVfd29ya2ApIHRvIHByZXZlbnQgZGVhZGxvY2tzIGR1cmluZyByZWN1cnNpdmUgYmlvIHN1Ym1pc3Npb25zIGJ5IHB1bnRpbmcgZW5jcnlwdGlvbiB3b3JrIHdoZW4gYGN1cnJlbnQtXFx1MDAzZWJpb19saXN0YCBpcyBub24tbnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJsb2NrIGxheWVyIGNyeXB0byBmYWxsYmFjayBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDU6MzQuNTY1MzUxMDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTgxNTgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGExMmE1MmJjMTU0ZDlhZGQ4MjM3Mzc2NTk0NThlNjg4MjBmZmQ1MDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAwMjowNTozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMgYi9ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmNcXG5pbmRleCAyYTVjNTJhYjc0YjRjLi45NzMzOTkwMTFkNWEyIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY1xcbisrKyBiL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY1xcbkBAIC04Myw2ICs4MywxMCBAQCBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJsa19jcnlwdG9fd3E7XFxuIHN0YXRpYyBtZW1wb29sX3QgKmJsa19jcnlwdG9fYm91bmNlX3BhZ2VfcG9vbDtcXG4gc3RhdGljIHN0cnVjdCBiaW9fc2V0IGVuY19iaW9fc2V0O1xcbiBcXG4rc3RhdGljIERFRklORV9TUElOTE9DSyhlbmNfcmVzY3VlX2xpc3RfbG9jayk7XFxuK3N0YXRpYyBzdHJ1Y3QgYmlvX2xpc3QgZW5jX3Jlc2N1ZV9saXN0O1xcbitzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IGVuY19yZXNjdWVfd29yaztcXG4rXFxuIC8qXFxuICAqIFRoaXMgaXMgdGhlIGtleSB3ZSBzZXQgd2hlbiBldmljdGluZyBhIGtleXNsb3QuIFRoaXMgKnNob3VsZCogYmUgdGhlIGFsbCAwJ3NcXG4gICoga2V5LCBidXQgQUVTLVhUUyByZWplY3RzIHRoYXQga2V5LCBzbyB3ZSB1c2Ugc29tZSByYW5kb20gYnl0ZXMgaW5zdGVhZC5cXG5AQCAtMTcyLDEzICsxNzYsMjYgQEAgc3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2VuZGlvKHN0cnVjdCBiaW8gKmVuY19iaW8pXFxuIHN0YXRpYyBzdHJ1Y3QgYmlvICpibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3RydWN0IGJpbyAqYmlvX3NyYyxcXG4gXFx0XFx0dW5zaWduZWQgaW50IG5yX3NlZ3MsIHN0cnVjdCBwYWdlICoqKnBhZ2VzX3JldClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3MgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTtcXG4gXFx0dW5zaWduZWQgaW50IG5yX2FsbG9jYXRlZDtcXG4gXFx0c3RydWN0IHBhZ2UgKipwYWdlcztcXG4gXFx0c3RydWN0IGJpbyAqYmlvO1xcbitcXHRnZnBfdCBnZnBfbWFzaztcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIER1cmluZyByZWN1cnNpdmUgYmlvIHN1Ym1pc3Npb24gKGN1cnJlbnQtXFx1MDAzZWJpb19saXN0ICE9IE5VTEwpIGFueVxcbitcXHQgKiBzdWJtaXR0ZWQgYm91bmNlIGJpb3MganVzdCBnZXQgYWRkZWQgdG8gY3VycmVudC1cXHUwMDNlYmlvX2xpc3Q7IHRoZXlcXG4rXFx0ICogY2Fubm90IGNvbXBsZXRlIGFuZCByZWxlYXNlIHJlc291cmNlcyB5ZXQuICBUaGVyZWZvcmUsIHRvIGF2b2lkXFxuK1xcdCAqIGRlYWRsb2NrcywgZG9uJ3Qgd2FpdCBpbmRlZmluaXRlbHkgZm9yIGFkZGl0aW9uYWwgcmVzb3VyY2VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGN1cnJlbnQtXFx1MDAzZWJpb19saXN0KVxcbitcXHRcXHRnZnBfbWFzayA9IEdGUF9OT1dBSVQ7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Z2ZwX21hc2sgPSBHRlBfTk9JTztcXG4gXFxuIFxcdGJpbyA9IGJpb19hbGxvY19iaW9zZXQoYmlvX3NyYy1cXHUwMDNlYmlfYmRldiwgbnJfc2VncywgYmlvX3NyYy1cXHUwMDNlYmlfb3BmLFxcbi1cXHRcXHRcXHRHRlBfTk9JTywgXFx1MDAyNmVuY19iaW9fc2V0KTtcXG4rXFx0XFx0XFx0ICAgICAgIGdmcF9tYXNrLCBcXHUwMDI2ZW5jX2Jpb19zZXQpO1xcbitcXHRpZiAodW5saWtlbHkoIWJpbykpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRpZiAoYmlvX2ZsYWdnZWQoYmlvX3NyYywgQklPX1JFTUFQUEVEKSlcXG4gXFx0XFx0YmlvX3NldF9mbGFnKGJpbywgQklPX1JFTUFQUEVEKTtcXG4gXFx0YmlvLVxcdTAwM2ViaV9wcml2YXRlXFx0XFx0PSBiaW9fc3JjO1xcbkBAIC0yMDYsMTIgKzIyMywxNSBAQCBzdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXFxuIFxcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxcbiBcXHQgKi9cXG4gXFx0bWVtc2V0KHBhZ2VzLCAwLCBzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9zZWdzKTtcXG4tXFx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XFxuLVxcdGlmIChucl9hbGxvY2F0ZWQgXFx1MDAzYyBucl9zZWdzKVxcbi1cXHRcXHRtZW1wb29sX2FsbG9jX2J1bGsoYmxrX2NyeXB0b19ib3VuY2VfcGFnZV9wb29sLFxcbitcXHRucl9hbGxvY2F0ZWQgPSBhbGxvY19wYWdlc19idWxrKGdmcF9tYXNrLCBucl9zZWdzLCBwYWdlcyk7XFxuK1xcdGlmICh1bmxpa2VseShucl9hbGxvY2F0ZWQgXFx1MDAzYyBucl9zZWdzKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1lbXBvb2xfYWxsb2NfYnVsayhibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2wsXFxuIFxcdFxcdFxcdFxcdCh2b2lkICoqKXBhZ2VzICsgbnJfYWxsb2NhdGVkLFxcbi1cXHRcXHRcXHRcXHRucl9zZWdzIC0gbnJfYWxsb2NhdGVkKTtcXG4tXFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG1lbWZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0bnJfc2VncyAtIG5yX2FsbG9jYXRlZCwgZ2ZwX21hc2spKSB7XFxuK1xcdFxcdGZyZWVfcGFnZXNfYnVsayhwYWdlcywgbnJfYWxsb2NhdGVkKTtcXG4rXFx0XFx0YmlvX3B1dChiaW8pO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbiBcXHQqcGFnZXNfcmV0ID0gcGFnZXM7XFxuIFxcdHJldHVybiBiaW87XFxuIH1cXG5AQCAtMjM5LDYgKzI1OSwyNSBAQCBzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2R1bl90b19pdihjb25zdCB1NjQgZHVuW0JMS19DUllQVE9fRFVOX0FSUkFZX1NJWkVdLFxcbiBcXHRcXHRpdi1cXHUwMDNlZHVuW2ldID0gY3B1X3RvX2xlNjQoZHVuW2ldKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvKTtcXG4rXFxuKy8qIEVuY3J5cHQgYSBsaXN0IG9mIGJpb3Mgd2hvc2UgZW5jcnlwdGlvbiB3YXMgcHVudGVkIHRvIGEga3dvcmtlci4gKi9cXG4rc3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBiaW9fbGlzdCBsaXN0O1xcbitcXHRzdHJ1Y3QgYmlvICpzcmNfYmlvO1xcbitcXG4rXFx0V0FSTl9PTl9PTkNFKGN1cnJlbnQtXFx1MDAzZWJpb19saXN0KTtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0X2xvY2spO1xcbitcXHRsaXN0ID0gZW5jX3Jlc2N1ZV9saXN0O1xcbitcXHRiaW9fbGlzdF9pbml0KFxcdTAwMjZlbmNfcmVzY3VlX2xpc3QpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0X2xvY2spO1xcbitcXG4rXFx0d2hpbGUgKChzcmNfYmlvID0gYmlvX2xpc3RfcG9wKFxcdTAwMjZsaXN0KSkpXFxuK1xcdFxcdGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3JjX2Jpbyk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvLFxcbiBcXHRcXHRzdHJ1Y3QgY3J5cHRvX3N5bmNfc2tjaXBoZXIgKnRmbSlcXG4ge1xcbkBAIC0yNzMsNiArMzEyLDIzIEBAIHN0YXRpYyB2b2lkIF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvLFxcbiBuZXdfYmlvOlxcbiBcXHRucl9lbmNfcGFnZXMgPSBtaW4oYmlvX3NlZ21lbnRzKHNyY19iaW8pLCBCSU9fTUFYX1ZFQ1MpO1xcbiBcXHRlbmNfYmlvID0gYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHNyY19iaW8sIG5yX2VuY19wYWdlcywgXFx1MDAyNmVuY19wYWdlcyk7XFxuK1xcdGlmICh1bmxpa2VseSghZW5jX2JpbykpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRmFpbGVkIHRvIGFsbG9jYXRlIGEgYm91bmNlIGJpbyBkdXJpbmcgcmVjdXJzaXZlIGJpb1xcbitcXHRcXHQgKiBzdWJtaXNzaW9uLiAgV2UgbWlnaHQgYmUgYmxvY2tlZCBvbiBiaW9zIGluIGN1cnJlbnQtXFx1MDAzZWJpb19saXN0XFxuK1xcdFxcdCAqIGhvbGRpbmcgbWVtcG9vbCBlbGVtZW50cy4gIFRvIGVuYWJsZSBmb3J3YXJkIHByb2dyZXNzLCBwdW50XFxuK1xcdFxcdCAqIHRoZSByZW1haW5pbmcgZW5jcnlwdGlvbiB3b3JrIGZvciBzcmNfYmlvIHRvIGEga3dvcmtlci5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogVGhlIERVTiBtYXkgaGF2ZSBiZWVuIGFkdmFuY2VkLCBzbyBtYWtlIHN1cmUgdG8gdXBkYXRlIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0V0FSTl9PTl9PTkNFKCFjdXJyZW50LVxcdTAwM2ViaW9fbGlzdCk7XFxuK1xcdFxcdG1lbWNweShiYy1cXHUwMDNlYmNfZHVuLCBjdXJyX2R1biwgc2l6ZW9mKGN1cnJfZHVuKSk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0X2xvY2spO1xcbitcXHRcXHRiaW9fbGlzdF9hZGQoXFx1MDAyNmVuY19yZXNjdWVfbGlzdCwgc3JjX2Jpbyk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZlbmNfcmVzY3VlX2xpc3RfbG9jayk7XFxuK1xcdFxcdHF1ZXVlX3dvcmsoYmxrX2NyeXB0b193cSwgXFx1MDAyNmVuY19yZXNjdWVfd29yayk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXHRlbmNfaWR4ID0gMDtcXG4gXFx0Zm9yICg7Oykge1xcbiBcXHRcXHRzdHJ1Y3QgYmlvX3ZlYyBzcmNfYnYgPVxcbkBAIC01OTEsNiArNjQ3LDggQEAgc3RhdGljIGludCBibGtfY3J5cHRvX2ZhbGxiYWNrX2luaXQodm9pZClcXG4gXFx0aWYgKCFiaW9fZmFsbGJhY2tfY3J5cHRfY3R4X3Bvb2wpXFxuIFxcdFxcdGdvdG8gZmFpbF9mcmVlX2NyeXB0X2N0eF9jYWNoZTtcXG4gXFxuK1xcdElOSVRfV09SSyhcXHUwMDI2ZW5jX3Jlc2N1ZV93b3JrLCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbik7XFxuK1xcbiBcXHRibGtfY3J5cHRvX2ZhbGxiYWNrX2luaXRlZCA9IHRydWU7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1wb29sLmggYi9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaFxcbmluZGV4IGEwZmE2ZDQzZTBkYzQuLmY3ODk4Y2QxNTEyYmEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaFxcbkBAIC02NSw4ICs2NSw4IEBAIHZvaWQgbWVtcG9vbF9kZXN0cm95KHN0cnVjdCBtZW1wb29sICpwb29sKTtcXG4gdm9pZCAqbWVtcG9vbF9hbGxvY19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGdmcF90IGdmcF9tYXNrKSBfX21hbGxvYztcXG4gI2RlZmluZSBtZW1wb29sX2FsbG9jKC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGFsbG9jX2hvb2tzKG1lbXBvb2xfYWxsb2Nfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG4taW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtLFxcbi1cXHRcXHR1bnNpZ25lZCBpbnQgY291bnQpO1xcbitib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQsIGdmcF90IGdmcF9tYXNrKTtcXG4gI2RlZmluZSBtZW1wb29sX2FsbG9jX2J1bGsoLi4uKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0YWxsb2NfaG9va3MobWVtcG9vbF9hbGxvY19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1wb29sLmMgYi9tbS9tZW1wb29sLmNcXG5pbmRleCA0NzNhMDI5ZmEzMWZkLi5kNzQxZTVmNjI1NTQzIDEwMDY0NFxcbi0tLSBhL21tL21lbXBvb2wuY1xcbisrKyBiL21tL21lbXBvb2wuY1xcbkBAIC00MDksNyArNDA5LDcgQEAgaW50IG1lbXBvb2xfcmVzaXplKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbmV3X21pbl9ucilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfcmVzaXplKTtcXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2woc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcXG4rc3RhdGljIGJvb2wgbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2woc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcXG4gXFx0XFx0dW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgYWxsb2NhdGVkLFxcbiBcXHRcXHRnZnBfdCBnZnBfbWFzaylcXG4ge1xcbkBAIC00MzIsNyArNDMyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxcbiBcXHQgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspXFxuIFxcdFxcdGttZW1sZWFrX3VwZGF0ZV90cmFjZShlbGVtc1tpXSk7XFxuLVxcdHJldHVybiBhbGxvY2F0ZWQ7XFxuK1xcdHJldHVybiB0cnVlO1xcbiBcXG4gZmFpbDpcXG4gXFx0aWYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU0pIHtcXG5AQCAtNDU0LDcgKzQ1NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2woc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cG9vbC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gYWxsb2NhdGVkO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTQ3MywyNSArNDczLDI4IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWVtcG9vbF9hZGp1c3RfZ2ZwKGdmcF90ICpnZnBfbWFzaylcXG4gLyoqXFxuICAqIG1lbXBvb2xfYWxsb2NfYnVsayAtIGFsbG9jYXRlIG11bHRpcGxlIGVsZW1lbnRzIGZyb20gYSBtZW1vcnkgcG9vbFxcbiAgKiBAcG9vbDpcXHRwb2ludGVyIHRvIHRoZSBtZW1vcnkgcG9vbFxcbi0gKiBAZWxlbXM6XFx0cGFydGlhbGx5IG9yIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50cyBhcnJheVxcbi0gKiBAY291bnQ6XFx0bnVtYmVyIG9mIGVudHJpZXMgaW4gQGVsZW0gdGhhdCBuZWVkIHRvIGJlIGFsbG9jYXRlZFxcbisgKiBAZWxlbXM6XFx0cG9pbnRlciB0byBhcnJheSBpbnRvIHdoaWNoIHRoZSBlbGVtZW50IHBvaW50ZXJzIHdpbGwgYmUgc3RvcmVkXFxuKyAqIEBjb3VudDpcXHRudW1iZXIgb2YgZWxlbWVudHMgdG8gYWxsb2NhdGVcXG4rICogQGdmcF9tYXNrOlxcdEdGUF8qIGZsYWdzLiAgJV9fR0ZQX1pFUk8gaXMgbm90IHN1cHBvcnRlZC4gIElmIHRoaXMgbWFza1xcbisgKlxcdFxcdGluY2x1ZGVzICVfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgdGhlbiB0aGUgYWxsb2NhdGlvbiBpcyByZXRyaWVkXFxuKyAqXFx0XFx0aW5kZWZpbml0ZWx5IHVudGlsIGl0IHN1Y2NlZWRzIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIGFsd2F5c1xcbisgKlxcdFxcdCV0cnVlLiAgSWYgdGhlIG1hc2sgZG9lc24ndCBpbmNsdWRlICVfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgdGhlblxcbisgKlxcdFxcdGZhaWx1cmUgaXMgYWxsb3dlZCBhbmQgJWZhbHNlIGNhbiBiZSByZXR1cm5lZC5cXG4gICpcXG4gICogQWxsb2NhdGUgQGNvdW50IGVsZW1lbnRzIGludG8gQGVsZW1zLiAgVGhpcyBpcyBkb25lIGJ5IGZpcnN0IGNhbGxpbmcgaW50byB0aGVcXG4gICogYWxsb2NfZm4gc3VwcGxpZWQgYXQgcG9vbCBpbml0aWFsaXphdGlvbiB0aW1lLCBhbmQgZGlwcGluZyBpbnRvIHRoZSByZXNlcnZlZFxcbi0gKiBwb29sIHdoZW4gYWxsb2NfZm4gZmFpbHMgdG8gYWxsb2NhdGUgYW4gZWxlbWVudC5cXG4tICpcXG4tICogT24gcmV0dXJuIGFsbCBAY291bnQgZWxlbWVudHMgaW4gQGVsZW1zIHdpbGwgYmUgcG9wdWxhdGVkLlxcbisgKiBwb29sIHRvIGF0b21pY2FsbHkgYWxsb2NhdGUgdGhlIHJlbWFpbmluZyBlbGVtZW50cyBpZiBhbGxvY19mbiBmYWlscy5cXG4gICpcXG4tICogUmV0dXJuOiBBbHdheXMgMC4gIElmIGl0IHdhc24ndCBmb3IgJSQjXiQgYWxsb2MgdGFncywgaXQgd291bGQgcmV0dXJuIHZvaWQuXFxuKyAqIFJldHVybjogJXRydWUgaWYgdGhlIGFsbG9jYXRpb24gc3VjY2VlZGVkLCBvciAlZmFsc2UgaWYgaXQgZmFpbGVkLlxcbiAgKi9cXG4taW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcXG4tXFx0XFx0dW5zaWduZWQgaW50IGNvdW50KVxcbitib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcXG4rXFx0XFx0dW5zaWduZWQgaW50IGNvdW50LCBnZnBfdCBnZnBfbWFzaylcXG4ge1xcbi1cXHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XFxuIFxcdGdmcF90IGdmcF90ZW1wID0gbWVtcG9vbF9hZGp1c3RfZ2ZwKFxcdTAwMjZnZnBfbWFzayk7XFxuIFxcdHVuc2lnbmVkIGludCBhbGxvY2F0ZWQgPSAwO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKGNvdW50IFxcdTAwM2UgcG9vbC1cXHUwMDNlbWluX25yKTtcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfWkVSTyk7XFxuIFxcdG1pZ2h0X2FsbG9jKGdmcF9tYXNrKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTUxNiwxMyArNTE5LDI2IEBAIGludCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXFxuIFxcdFxcdGFsbG9jYXRlZCsrO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuIFxcbiB1c2VfcG9vbDpcXG4tXFx0YWxsb2NhdGVkID0gbWVtcG9vbF9hbGxvY19mcm9tX3Bvb2wocG9vbCwgZWxlbXMsIGNvdW50LCBhbGxvY2F0ZWQsXFxuLVxcdFxcdFxcdGdmcF90ZW1wKTtcXG4tXFx0Z2ZwX3RlbXAgPSBnZnBfbWFzaztcXG4tXFx0Z290byByZXBlYXRfYWxsb2M7XFxuK1xcdC8qIFRyeSB0byBhdG9taWNhbGx5IGFsbG9jYXRlIHRoZSByZW1haW5pbmcgZWxlbWVudHMgZnJvbSB0aGUgcG9vbC4gKi9cXG4rXFx0aWYgKG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHBvb2wsIGVsZW1zLCBjb3VudCwgYWxsb2NhdGVkLCBnZnBfdGVtcCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHQvKiBSZXRyeSBpZiB0aGlzIHdhcyBqdXN0IHRoZSBvcHBvcnR1bmlzdGljIGZpcnN0IHBhc3MuICovXFxuK1xcdGlmIChnZnBfdGVtcCAhPSBnZnBfbWFzaykge1xcbitcXHRcXHRnZnBfdGVtcCA9IGdmcF9tYXNrO1xcbitcXHRcXHRnb3RvIHJlcGVhdF9hbGxvYztcXG4rXFx0fVxcbitcXHQvKiBSZXRyeSBpbmRlZmluaXRlbHkgaWYgX19HRlBfRElSRUNUX1JFQ0xBSU0gaXMgc2V0LiAqL1xcbitcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSlcXG4rXFx0XFx0Z290byByZXBlYXRfYWxsb2M7XFxuK1xcdC8qIE9uIGZhaWx1cmUsIHJvbGwgYmFjayBhbnkgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9ucyBmcm9tIC1cXHUwMDNlYWxsb2MoKS4gKi9cXG4rXFx0d2hpbGUgKGFsbG9jYXRlZC0tKSB7XFxuK1xcdFxcdHBvb2wtXFx1MDAzZWZyZWUoZWxlbXNbYWxsb2NhdGVkXSwgcG9vbC1cXHUwMDNlcG9vbF9kYXRhKTtcXG4rXFx0XFx0ZWxlbXNbYWxsb2NhdGVkXSA9IE5VTEw7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2YpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDU6MzUuMDAxOTk2NjE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjAyMzAyNzYyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0lOTElORV9FTkNSWVBUSU9OXCIsXG4gICAgXCJCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mXCIsXG4gICAgXCJibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mblwiLFxuICAgIFwiYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYCB0byBhY2NlcHQgYSBgZ2ZwX21hc2tgIGFuZCBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcyBwcm9wZXJseS4gSXQgYWxzbyB1cGRhdGVzIGBibGstY3J5cHRvLWZhbGxiYWNrYCB0byB1c2UgdGhpcyBuZXcgc2lnbmF0dXJlIGFuZCBpbnRyb2R1Y2VzIGEgd29ya3F1ZXVlIChgZW5jX3Jlc2N1ZV93b3JrYCkgdG8gcHJldmVudCBkZWFkbG9ja3MgZHVyaW5nIHJlY3Vyc2l2ZSBiaW8gc3VibWlzc2lvbnMgYnkgcHVudGluZyBlbmNyeXB0aW9uIHdvcmsgd2hlbiBgY3VycmVudC1cXHUwMDNlYmlvX2xpc3RgIGlzIG5vbi1udWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYmxvY2sgbGF5ZXIgY3J5cHRvIGZhbGxiYWNrIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMTJhNTJiYzE1NGQ5YWRkODIzNzM3NjU5NDU4ZTY4ODIwZmZkNTA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMjowNTozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYyBiL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY1xuaW5kZXggMmE1YzUyYWI3NGI0Yy4uOTczMzk5MDExZDVhMiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY1xuKysrIGIvYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jXG5AQCAtODMsNiArODMsMTAgQEAgc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpibGtfY3J5cHRvX3dxO1xuIHN0YXRpYyBtZW1wb29sX3QgKmJsa19jcnlwdG9fYm91bmNlX3BhZ2VfcG9vbDtcbiBzdGF0aWMgc3RydWN0IGJpb19zZXQgZW5jX2Jpb19zZXQ7XG4gXG4rc3RhdGljIERFRklORV9TUElOTE9DSyhlbmNfcmVzY3VlX2xpc3RfbG9jayk7XG4rc3RhdGljIHN0cnVjdCBiaW9fbGlzdCBlbmNfcmVzY3VlX2xpc3Q7XG4rc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCBlbmNfcmVzY3VlX3dvcms7XG4rXG4gLypcbiAgKiBUaGlzIGlzIHRoZSBrZXkgd2Ugc2V0IHdoZW4gZXZpY3RpbmcgYSBrZXlzbG90LiBUaGlzICpzaG91bGQqIGJlIHRoZSBhbGwgMCdzXG4gICoga2V5LCBidXQgQUVTLVhUUyByZWplY3RzIHRoYXQga2V5LCBzbyB3ZSB1c2Ugc29tZSByYW5kb20gYnl0ZXMgaW5zdGVhZC5cbkBAIC0xNzIsMTMgKzE3NiwyNiBAQCBzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfZW5kaW8oc3RydWN0IGJpbyAqZW5jX2JpbylcbiBzdGF0aWMgc3RydWN0IGJpbyAqYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHN0cnVjdCBiaW8gKmJpb19zcmMsXG4gXHRcdHVuc2lnbmVkIGludCBucl9zZWdzLCBzdHJ1Y3QgcGFnZSAqKipwYWdlc19yZXQpXG4ge1xuLVx0dW5zaWduZWQgaW50IG1lbWZsYWdzID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG4gXHR1bnNpZ25lZCBpbnQgbnJfYWxsb2NhdGVkO1xuIFx0c3RydWN0IHBhZ2UgKipwYWdlcztcbiBcdHN0cnVjdCBiaW8gKmJpbztcbitcdGdmcF90IGdmcF9tYXNrO1xuK1xuK1x0LypcbitcdCAqIER1cmluZyByZWN1cnNpdmUgYmlvIHN1Ym1pc3Npb24gKGN1cnJlbnQtXHUwMDNlYmlvX2xpc3QgIT0gTlVMTCkgYW55XG4rXHQgKiBzdWJtaXR0ZWQgYm91bmNlIGJpb3MganVzdCBnZXQgYWRkZWQgdG8gY3VycmVudC1cdTAwM2ViaW9fbGlzdDsgdGhleVxuK1x0ICogY2Fubm90IGNvbXBsZXRlIGFuZCByZWxlYXNlIHJlc291cmNlcyB5ZXQuICBUaGVyZWZvcmUsIHRvIGF2b2lkXG4rXHQgKiBkZWFkbG9ja3MsIGRvbid0IHdhaXQgaW5kZWZpbml0ZWx5IGZvciBhZGRpdGlvbmFsIHJlc291cmNlcy5cbitcdCAqL1xuK1x0aWYgKGN1cnJlbnQtXHUwMDNlYmlvX2xpc3QpXG4rXHRcdGdmcF9tYXNrID0gR0ZQX05PV0FJVDtcbitcdGVsc2VcbitcdFx0Z2ZwX21hc2sgPSBHRlBfTk9JTztcbiBcbiBcdGJpbyA9IGJpb19hbGxvY19iaW9zZXQoYmlvX3NyYy1cdTAwM2ViaV9iZGV2LCBucl9zZWdzLCBiaW9fc3JjLVx1MDAzZWJpX29wZixcbi1cdFx0XHRHRlBfTk9JTywgXHUwMDI2ZW5jX2Jpb19zZXQpO1xuK1x0XHRcdCAgICAgICBnZnBfbWFzaywgXHUwMDI2ZW5jX2Jpb19zZXQpO1xuK1x0aWYgKHVubGlrZWx5KCFiaW8pKVxuK1x0XHRyZXR1cm4gTlVMTDtcbiBcdGlmIChiaW9fZmxhZ2dlZChiaW9fc3JjLCBCSU9fUkVNQVBQRUQpKVxuIFx0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpO1xuIFx0YmlvLVx1MDAzZWJpX3ByaXZhdGVcdFx0PSBiaW9fc3JjO1xuQEAgLTIwNiwxMiArMjIzLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgYmlvICpibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3RydWN0IGJpbyAqYmlvX3NyYyxcbiBcdCAqIGFueSBub24temVybyBzbG90IGFscmVhZHkgY29udGFpbnMgYSB2YWxpZCBhbGxvY2F0aW9uLlxuIFx0ICovXG4gXHRtZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3NlZ3MpO1xuLVx0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhHRlBfS0VSTkVMLCBucl9zZWdzLCBwYWdlcyk7XG4tXHRpZiAobnJfYWxsb2NhdGVkIFx1MDAzYyBucl9zZWdzKVxuLVx0XHRtZW1wb29sX2FsbG9jX2J1bGsoYmxrX2NyeXB0b19ib3VuY2VfcGFnZV9wb29sLFxuK1x0bnJfYWxsb2NhdGVkID0gYWxsb2NfcGFnZXNfYnVsayhnZnBfbWFzaywgbnJfc2VncywgcGFnZXMpO1xuK1x0aWYgKHVubGlrZWx5KG5yX2FsbG9jYXRlZCBcdTAwM2MgbnJfc2VncykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW1lbXBvb2xfYWxsb2NfYnVsayhibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2wsXG4gXHRcdFx0XHQodm9pZCAqKilwYWdlcyArIG5yX2FsbG9jYXRlZCxcbi1cdFx0XHRcdG5yX3NlZ3MgLSBucl9hbGxvY2F0ZWQpO1xuLVx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG1lbWZsYWdzKTtcbitcdFx0XHRcdG5yX3NlZ3MgLSBucl9hbGxvY2F0ZWQsIGdmcF9tYXNrKSkge1xuK1x0XHRmcmVlX3BhZ2VzX2J1bGsocGFnZXMsIG5yX2FsbG9jYXRlZCk7XG4rXHRcdGJpb19wdXQoYmlvKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4gXHQqcGFnZXNfcmV0ID0gcGFnZXM7XG4gXHRyZXR1cm4gYmlvO1xuIH1cbkBAIC0yMzksNiArMjU5LDI1IEBAIHN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZHVuX3RvX2l2KGNvbnN0IHU2NCBkdW5bQkxLX0NSWVBUT19EVU5fQVJSQVlfU0laRV0sXG4gXHRcdGl2LVx1MDAzZWR1bltpXSA9IGNwdV90b19sZTY0KGR1bltpXSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2Jpbyk7XG4rXG4rLyogRW5jcnlwdCBhIGxpc3Qgb2YgYmlvcyB3aG9zZSBlbmNyeXB0aW9uIHdhcyBwdW50ZWQgdG8gYSBrd29ya2VyLiAqL1xuK3N0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgYmlvX2xpc3QgbGlzdDtcbitcdHN0cnVjdCBiaW8gKnNyY19iaW87XG4rXG4rXHRXQVJOX09OX09OQ0UoY3VycmVudC1cdTAwM2ViaW9fbGlzdCk7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0X2xvY2spO1xuK1x0bGlzdCA9IGVuY19yZXNjdWVfbGlzdDtcbitcdGJpb19saXN0X2luaXQoXHUwMDI2ZW5jX3Jlc2N1ZV9saXN0KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmVuY19yZXNjdWVfbGlzdF9sb2NrKTtcbitcbitcdHdoaWxlICgoc3JjX2JpbyA9IGJpb19saXN0X3BvcChcdTAwMjZsaXN0KSkpXG4rXHRcdGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3JjX2Jpbyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvLFxuIFx0XHRzdHJ1Y3QgY3J5cHRvX3N5bmNfc2tjaXBoZXIgKnRmbSlcbiB7XG5AQCAtMjczLDYgKzMxMiwyMyBAQCBzdGF0aWMgdm9pZCBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbyxcbiBuZXdfYmlvOlxuIFx0bnJfZW5jX3BhZ2VzID0gbWluKGJpb19zZWdtZW50cyhzcmNfYmlvKSwgQklPX01BWF9WRUNTKTtcbiBcdGVuY19iaW8gPSBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW8oc3JjX2JpbywgbnJfZW5jX3BhZ2VzLCBcdTAwMjZlbmNfcGFnZXMpO1xuK1x0aWYgKHVubGlrZWx5KCFlbmNfYmlvKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBGYWlsZWQgdG8gYWxsb2NhdGUgYSBib3VuY2UgYmlvIGR1cmluZyByZWN1cnNpdmUgYmlvXG4rXHRcdCAqIHN1Ym1pc3Npb24uICBXZSBtaWdodCBiZSBibG9ja2VkIG9uIGJpb3MgaW4gY3VycmVudC1cdTAwM2ViaW9fbGlzdFxuK1x0XHQgKiBob2xkaW5nIG1lbXBvb2wgZWxlbWVudHMuICBUbyBlbmFibGUgZm9yd2FyZCBwcm9ncmVzcywgcHVudFxuK1x0XHQgKiB0aGUgcmVtYWluaW5nIGVuY3J5cHRpb24gd29yayBmb3Igc3JjX2JpbyB0byBhIGt3b3JrZXIuXG4rXHRcdCAqXG4rXHRcdCAqIFRoZSBEVU4gbWF5IGhhdmUgYmVlbiBhZHZhbmNlZCwgc28gbWFrZSBzdXJlIHRvIHVwZGF0ZSBpdC5cbitcdFx0ICovXG4rXHRcdFdBUk5fT05fT05DRSghY3VycmVudC1cdTAwM2ViaW9fbGlzdCk7XG4rXHRcdG1lbWNweShiYy1cdTAwM2ViY19kdW4sIGN1cnJfZHVuLCBzaXplb2YoY3Vycl9kdW4pKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNmVuY19yZXNjdWVfbGlzdF9sb2NrKTtcbitcdFx0YmlvX2xpc3RfYWRkKFx1MDAyNmVuY19yZXNjdWVfbGlzdCwgc3JjX2Jpbyk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmVuY19yZXNjdWVfbGlzdF9sb2NrKTtcbitcdFx0cXVldWVfd29yayhibGtfY3J5cHRvX3dxLCBcdTAwMjZlbmNfcmVzY3VlX3dvcmspO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4gXHRlbmNfaWR4ID0gMDtcbiBcdGZvciAoOzspIHtcbiBcdFx0c3RydWN0IGJpb192ZWMgc3JjX2J2ID1cbkBAIC01OTEsNiArNjQ3LDggQEAgc3RhdGljIGludCBibGtfY3J5cHRvX2ZhbGxiYWNrX2luaXQodm9pZClcbiBcdGlmICghYmlvX2ZhbGxiYWNrX2NyeXB0X2N0eF9wb29sKVxuIFx0XHRnb3RvIGZhaWxfZnJlZV9jcnlwdF9jdHhfY2FjaGU7XG4gXG4rXHRJTklUX1dPUksoXHUwMDI2ZW5jX3Jlc2N1ZV93b3JrLCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbik7XG4rXG4gXHRibGtfY3J5cHRvX2ZhbGxiYWNrX2luaXRlZCA9IHRydWU7XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oXG5pbmRleCBhMGZhNmQ0M2UwZGM0Li5mNzg5OGNkMTUxMmJhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oXG5AQCAtNjUsOCArNjUsOCBAQCB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7XG4gdm9pZCAqbWVtcG9vbF9hbGxvY19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGdmcF90IGdmcF9tYXNrKSBfX21hbGxvYztcbiAjZGVmaW5lIG1lbXBvb2xfYWxsb2MoLi4uKVx0XHRcdFx0XHRcdFxcXG4gXHRhbGxvY19ob29rcyhtZW1wb29sX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXG4taW50IG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtLFxuLVx0XHR1bnNpZ25lZCBpbnQgY291bnQpO1xuK2Jvb2wgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW0sXG4rXHRcdHVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spO1xuICNkZWZpbmUgbWVtcG9vbF9hbGxvY19idWxrKC4uLilcdFx0XHRcdFx0XHRcXFxuIFx0YWxsb2NfaG9va3MobWVtcG9vbF9hbGxvY19idWxrX25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9vbC5jIGIvbW0vbWVtcG9vbC5jXG5pbmRleCA0NzNhMDI5ZmEzMWZkLi5kNzQxZTVmNjI1NTQzIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9vbC5jXG4rKysgYi9tbS9tZW1wb29sLmNcbkBAIC00MDksNyArNDA5LDcgQEAgaW50IG1lbXBvb2xfcmVzaXplKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbmV3X21pbl9ucilcbiB9XG4gRVhQT1JUX1NZTUJPTChtZW1wb29sX3Jlc2l6ZSk7XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxuK3N0YXRpYyBib29sIG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXG4gXHRcdHVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgaW50IGFsbG9jYXRlZCxcbiBcdFx0Z2ZwX3QgZ2ZwX21hc2spXG4ge1xuQEAgLTQzMiw3ICs0MzIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXG4gXHQgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpKyspXG4gXHRcdGttZW1sZWFrX3VwZGF0ZV90cmFjZShlbGVtc1tpXSk7XG4tXHRyZXR1cm4gYWxsb2NhdGVkO1xuK1x0cmV0dXJuIHRydWU7XG4gXG4gZmFpbDpcbiBcdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU0pIHtcbkBAIC00NTQsNyArNDU0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGFsbG9jYXRlZDtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gLypcbkBAIC00NzMsMjUgKzQ3MywyOCBAQCBzdGF0aWMgaW5saW5lIGdmcF90IG1lbXBvb2xfYWRqdXN0X2dmcChnZnBfdCAqZ2ZwX21hc2spXG4gLyoqXG4gICogbWVtcG9vbF9hbGxvY19idWxrIC0gYWxsb2NhdGUgbXVsdGlwbGUgZWxlbWVudHMgZnJvbSBhIG1lbW9yeSBwb29sXG4gICogQHBvb2w6XHRwb2ludGVyIHRvIHRoZSBtZW1vcnkgcG9vbFxuLSAqIEBlbGVtczpcdHBhcnRpYWxseSBvciBmdWxseSBwb3B1bGF0ZWQgZWxlbWVudHMgYXJyYXlcbi0gKiBAY291bnQ6XHRudW1iZXIgb2YgZW50cmllcyBpbiBAZWxlbSB0aGF0IG5lZWQgdG8gYmUgYWxsb2NhdGVkXG4rICogQGVsZW1zOlx0cG9pbnRlciB0byBhcnJheSBpbnRvIHdoaWNoIHRoZSBlbGVtZW50IHBvaW50ZXJzIHdpbGwgYmUgc3RvcmVkXG4rICogQGNvdW50Olx0bnVtYmVyIG9mIGVsZW1lbnRzIHRvIGFsbG9jYXRlXG4rICogQGdmcF9tYXNrOlx0R0ZQXyogZmxhZ3MuICAlX19HRlBfWkVSTyBpcyBub3Qgc3VwcG9ydGVkLiAgSWYgdGhpcyBtYXNrXG4rICpcdFx0aW5jbHVkZXMgJV9fR0ZQX0RJUkVDVF9SRUNMQUlNLCB0aGVuIHRoZSBhbGxvY2F0aW9uIGlzIHJldHJpZWRcbisgKlx0XHRpbmRlZmluaXRlbHkgdW50aWwgaXQgc3VjY2VlZHMgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgYWx3YXlzXG4rICpcdFx0JXRydWUuICBJZiB0aGUgbWFzayBkb2Vzbid0IGluY2x1ZGUgJV9fR0ZQX0RJUkVDVF9SRUNMQUlNLCB0aGVuXG4rICpcdFx0ZmFpbHVyZSBpcyBhbGxvd2VkIGFuZCAlZmFsc2UgY2FuIGJlIHJldHVybmVkLlxuICAqXG4gICogQWxsb2NhdGUgQGNvdW50IGVsZW1lbnRzIGludG8gQGVsZW1zLiAgVGhpcyBpcyBkb25lIGJ5IGZpcnN0IGNhbGxpbmcgaW50byB0aGVcbiAgKiBhbGxvY19mbiBzdXBwbGllZCBhdCBwb29sIGluaXRpYWxpemF0aW9uIHRpbWUsIGFuZCBkaXBwaW5nIGludG8gdGhlIHJlc2VydmVkXG4tICogcG9vbCB3aGVuIGFsbG9jX2ZuIGZhaWxzIHRvIGFsbG9jYXRlIGFuIGVsZW1lbnQuXG4tICpcbi0gKiBPbiByZXR1cm4gYWxsIEBjb3VudCBlbGVtZW50cyBpbiBAZWxlbXMgd2lsbCBiZSBwb3B1bGF0ZWQuXG4rICogcG9vbCB0byBhdG9taWNhbGx5IGFsbG9jYXRlIHRoZSByZW1haW5pbmcgZWxlbWVudHMgaWYgYWxsb2NfZm4gZmFpbHMuXG4gICpcbi0gKiBSZXR1cm46IEFsd2F5cyAwLiAgSWYgaXQgd2Fzbid0IGZvciAlJCNeJCBhbGxvYyB0YWdzLCBpdCB3b3VsZCByZXR1cm4gdm9pZC5cbisgKiBSZXR1cm46ICV0cnVlIGlmIHRoZSBhbGxvY2F0aW9uIHN1Y2NlZWRlZCwgb3IgJWZhbHNlIGlmIGl0IGZhaWxlZC5cbiAgKi9cbi1pbnQgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgdm9pZCAqKmVsZW1zLFxuLVx0XHR1bnNpZ25lZCBpbnQgY291bnQpXG4rYm9vbCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXG4rXHRcdHVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spXG4ge1xuLVx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xuIFx0Z2ZwX3QgZ2ZwX3RlbXAgPSBtZW1wb29sX2FkanVzdF9nZnAoXHUwMDI2Z2ZwX21hc2spO1xuIFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoY291bnQgXHUwMDNlIHBvb2wtXHUwMDNlbWluX25yKTtcbitcdFZNX1dBUk5fT05fT05DRShnZnBfbWFzayBcdTAwMjYgX19HRlBfWkVSTyk7XG4gXHRtaWdodF9hbGxvYyhnZnBfbWFzayk7XG4gXG4gXHQvKlxuQEAgLTUxNiwxMyArNTE5LDI2IEBAIGludCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXG4gXHRcdGFsbG9jYXRlZCsrO1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gdHJ1ZTtcbiBcbiB1c2VfcG9vbDpcbi1cdGFsbG9jYXRlZCA9IG1lbXBvb2xfYWxsb2NfZnJvbV9wb29sKHBvb2wsIGVsZW1zLCBjb3VudCwgYWxsb2NhdGVkLFxuLVx0XHRcdGdmcF90ZW1wKTtcbi1cdGdmcF90ZW1wID0gZ2ZwX21hc2s7XG4tXHRnb3RvIHJlcGVhdF9hbGxvYztcbitcdC8qIFRyeSB0byBhdG9taWNhbGx5IGFsbG9jYXRlIHRoZSByZW1haW5pbmcgZWxlbWVudHMgZnJvbSB0aGUgcG9vbC4gKi9cbitcdGlmIChtZW1wb29sX2FsbG9jX2Zyb21fcG9vbChwb29sLCBlbGVtcywgY291bnQsIGFsbG9jYXRlZCwgZ2ZwX3RlbXApKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdC8qIFJldHJ5IGlmIHRoaXMgd2FzIGp1c3QgdGhlIG9wcG9ydHVuaXN0aWMgZmlyc3QgcGFzcy4gKi9cbitcdGlmIChnZnBfdGVtcCAhPSBnZnBfbWFzaykge1xuK1x0XHRnZnBfdGVtcCA9IGdmcF9tYXNrO1xuK1x0XHRnb3RvIHJlcGVhdF9hbGxvYztcbitcdH1cbitcdC8qIFJldHJ5IGluZGVmaW5pdGVseSBpZiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBpcyBzZXQuICovXG4rXHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKVxuK1x0XHRnb3RvIHJlcGVhdF9hbGxvYztcbitcdC8qIE9uIGZhaWx1cmUsIHJvbGwgYmFjayBhbnkgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9ucyBmcm9tIC1cdTAwM2VhbGxvYygpLiAqL1xuK1x0d2hpbGUgKGFsbG9jYXRlZC0tKSB7XG4rXHRcdHBvb2wtXHUwMDNlZnJlZShlbGVtc1thbGxvY2F0ZWRdLCBwb29sLVx1MDAzZXBvb2xfZGF0YSk7XG4rXHRcdGVsZW1zW2FsbG9jYXRlZF0gPSBOVUxMO1xuK1x0fVxuK1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjA1OjM1LjAwMTk5Nzg3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDc5NzkzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IEJsb2NrIENyeXB0byBGYWxsYmFjayBhbmQgTWVtb3J5IFBvb2wgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCdzIHRvdWNoaW5nIGBibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmNgIGFuZCBgbW0vbWVtcG9vbC5jYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBhbnl0aW1lIHdlJ3JlIG1lc3Npbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgdGhlIGJsb2NrIGxheWVyLCBJIHBheSBjbG9zZSBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgZnVuY3Rpb24uIFByZXZpb3VzbHksIGl0IGp1c3QgKmFsd2F5cyogc3VjY2VlZGVkIGFuZCByZXR1cm5lZCAwLCBidXQgbm93IGl0J3MgZ29pbmcgdG8gdGFrZSBhIGBnZnBfbWFza2AgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgd2UgaGFuZGxlIG1lbW9yeSBwb29sIGFsbG9jYXRpb24uIEl0J3MgYSBub24tdHJpdmlhbCBjaGFuZ2UuXG5cbk5vdywgaXQgdXBkYXRlcyBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCB0byB1c2UgdGhlIG5ldyBgbWVtcG9vbF9hbGxvY19idWxrYCBzaWduYXR1cmUuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIGhvdyB0aGUgcGF0Y2ggaGFuZGxlcyBhbGxvY2F0aW9uIGZhaWx1cmVzLiBJbnN0ZWFkIG9mIGp1c3QgY2h1Z2dpbmcgYWxvbmcsIGlmIHRoZSBgbWVtcG9vbF9hbGxvY19idWxrYCBjYWxsIGZhaWxzLCBpdCBub3cgcHVudHMgdG8gYSB3b3JrcXVldWUsIGBlbmNfcmVzY3VlX3dvcmtgLCBidXQgKm9ubHkqIGlmIGBjdXJyZW50LVx1MDAzZWJpb19saXN0YCBpc24ndCBudWxsLiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGUgY2hlY2sgZm9yIHRoZSBgYmlvX2xpc3RgIGhlbHBzIGF2b2lkIGEgZGVhZGxvY2sgc2NlbmFyaW8uIFRoYXQncyBhIGNsYXNzaWMgc3RyYXRlZ3kgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsIHJlc291cmNlIGNvbnRlbnRpb24uIFRoYXQncyBhIGdvb2Qgd2F5IHRvIGhhbmRsZSBhIGNyaXRpY2FsIGZhaWx1cmUuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0byBibG9jayBjcnlwdG8gZmFsbGJhY2sgYW5kIG1lbXBvb2wgYWxsb2NhdGlvbiwgYW5kIGl0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBldmFsdWF0ZS4gTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IFFFTVUgY291bGQgYWN0dWFsbHkgaGl0LiBXZSdyZSB0YWxraW5nIGFib3V0IGJsb2NrIGNyeXB0byBmYWxsYmFjaywgc28gSSdsbCBuZWVkIHRvIGtub3cgaWYgYENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGEgc3RyYWlnaHRmb3J3YXJkIEtjb25maWcgY2hlY2sgdG8gbWFrZSBzdXJlIGl0J3MgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNTo0MC4xMDk5Nzk5NjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0OTMwNzA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9MTk1PWNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05cXG4tLVxcbmJsb2NrL0tjb25maWctMjAxLVxcbmJsb2NrL0tjb25maWc6MjAyOmNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcXG5ibG9jay9LY29uZmlnLTIwMy1cXHRib29sIFxcXCJFbmFibGUgY3J5cHRvIEFQSSBmYWxsYmFjayBmb3IgYmxrLWNyeXB0b1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDU6NDEuOTU5MjkyOTczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0MTA3NjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIGFuZCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEVuY3J5cHRpb24gRmFsbGJhY2sgTWVjaGFuaXNtKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLYCBvcHRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYGJsb2NrL0tjb25maWdgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgc3Vic3lzdGVtLiBJIGtub3cgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZGVmaW5pdGlvbiwgZGVwZW5kZW5jaWVzLCBhbmQgbGlrZWx5IHNvbWUgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyBhYm91dCB3aGF0IHRoaXMgZmFsbGJhY2sgbWVjaGFuaXNtIGlzIGludGVuZGVkIHRvIGRvLiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIGVudHJ5IHdpbGwgYWxzbyBnaXZlIG1lIGNsdWVzIGFib3V0ICp3aHkqIHdlIG1pZ2h0IG5lZWQgYSBmYWxsYmFjayBmb3IgaW5saW5lIGVuY3J5cHRpb24uIFRoaXMgY291bGQgaW52b2x2ZSBsb29raW5nIGF0IGFueSBkZXBlbmRlbmNpZXMgYW5kIGV4YW1pbmluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIEknbSBleHBlY3RpbmcgdGhpcyBgS2NvbmZpZ2AgZmlsZSB0byBwcm92aWRlIHRoZSBuZWNlc3NhcnkgZnJhbWV3b3JrIHRvIHVuZGVyc3RhbmQgdGhlIGRlc2lnbiBjaG9pY2VzIGJlaGluZCB0aGUgZmVhdHVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZHJpbGwgZG93biBpbnRvIHRoZSB1bmRlcmx5aW5nIGNvZGUgaWYgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDU6NDUuMTAwMzcyMjc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTlxcbiAxOTY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGlubGluZSBlbmNyeXB0aW9uIHN1cHBvcnQgaW4gYmxvY2sgbGF5ZXJcXFwiXFxuIDE5NzpcXHRcXHRoZWxwXFxuIDE5ODpcXHRcXHQgIEJ1aWxkIHRoZSBibGstY3J5cHRvIHN1YnN5c3RlbS4gRW5hYmxpbmcgdGhpcyBsZXRzIHRoZVxcbiAxOTk6XFx0XFx0ICBibG9jayBsYXllciBoYW5kbGUgZW5jcnlwdGlvbiwgc28gdXNlcnMgY2FuIHRha2VcXG4gMjAwOlxcdFxcdCAgYWR2YW50YWdlIG9mIGlubGluZSBlbmNyeXB0aW9uIGhhcmR3YXJlIGlmIHByZXNlbnQuXFxuIDIwMTpcXHRcXG4gMjAyOlxcdGNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcXG4gMjAzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBjcnlwdG8gQVBJIGZhbGxiYWNrIGZvciBibGstY3J5cHRvXFxcIlxcbiAyMDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfSU5MSU5FX0VOQ1JZUFRJT05cXG4gMjA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gMjA2OlxcdFxcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcXG4gMjA3OlxcdFxcdGhlbHBcXG4gMjA4OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBsZXRzIHRoZSBibG9jayBsYXllciBoYW5kbGUgaW5saW5lIGVuY3J5cHRpb25cXG4gMjA5OlxcdFxcdCAgYnkgZmFsbGluZyBiYWNrIHRvIHRoZSBrZXJuZWwgY3J5cHRvIEFQSSB3aGVuIGlubGluZVxcbiAyMTA6XFx0XFx0ICBlbmNyeXB0aW9uIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50LlxcbiAyMTE6XFx0XFxuIDIxMjpcXHRzb3VyY2UgXFxcImJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ1xcXCJcXG4gMjEzOlxcdFxcbiAyMTQ6XFx0Y29uZmlnIEJMS19QTVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNTo0NS4xMDA0MzA5NjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIwNTc5Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIHRoZSBDcnlwdG9ncmFwaGljIEJsb2NrIERldmljZSBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlIGltbWVkaWF0ZSBuZWVkIGlzIHRvIGltcGxlbWVudCBib3RoIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05gIGFuZCBgQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIEhvbGQgb24sIHRoZSBwYXRjaCB0b3VjaGVzIGBtbS9tZW1wb29sLmNgIHRvby4gSW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgaXQgbW9kaWZpZXMgdGhlIGBtZW1wb29sX2FsbG9jX2J1bGtgIGZ1bmN0aW9uLCBhbmQgdGhhdCdzIHVzZWQgYnkgYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBXaGF0IG90aGVyIHN1YnN5c3RlbXMgb3IgZHJpdmVycyByZWx5IG9uIGBtZW1wb29sX2FsbG9jX2J1bGtgPyBJIG5lZWQgdG8gcmV2aWV3ICphbGwqIG9mIHRoZSBgbWVtcG9vbF9hbGxvY19idWxrYCB1c2VzLiBJIGRvbid0IHdhbnQgdG8gYnJlYWsgc29tZXRoaW5nIHVucmVsYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDU6NDguMzIxMDE4OTcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTY5OTA3NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9vbF9hbGxvY19idWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzY9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIxOS1cXHQgKiBUcnkgYSBidWxrIGFsbG9jYXRpb24gZmlyc3QuICBUaGlzIG1pZ2h0IG5vdCBmaWxsIGFsbCBhbGxvY2F0ZWRcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjIwOlxcdCAqIHBhZ2VzLCBidXQgd2UnbGwgZml4IHRoYXQgdXAgbGF0ZXIgaW4gbWVtcG9vbF9hbGxvY19idWxrLlxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMjEtXFx0ICpcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yMjctXFx0aWYgKHVubGlrZWx5KG5yX2FsbG9jYXRlZCBcXHUwMDNjIG5yX3NlZ3MpIFxcdTAwMjZcXHUwMDI2XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjIyODpcXHQgICAgIW1lbXBvb2xfYWxsb2NfYnVsayhibGtfY3J5cHRvX2JvdW5jZV9wYWdlX3Bvb2wsXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTIyOS1cXHRcXHRcXHRcXHQodm9pZCAqKilwYWdlcyArIG5yX2FsbG9jYXRlZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oPTY1PXZvaWQgKm1lbXBvb2xfYWxsb2Nfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCBnZnBfdCBnZnBfbWFzaykgX19tYWxsb2M7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC02Ny1cXHRhbGxvY19ob29rcyhtZW1wb29sX2FsbG9jX25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6Njg6Ym9vbCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbSxcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC02OS1cXHRcXHR1bnNpZ25lZCBpbnQgY291bnQsIGdmcF90IGdmcF9tYXNrKTtcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo3MDojZGVmaW5lIG1lbXBvb2xfYWxsb2NfYnVsayguLi4pXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oOjcxOlxcdGFsbG9jX2hvb2tzKG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTcyLVxcbi0tXFxubW0vbWVtcG9vbC5jPTIxPXN0YXRpYyBERUNMQVJFX0ZBVUxUX0FUVFIoZmFpbF9tZW1wb29sX2FsbG9jKTtcXG5tbS9tZW1wb29sLmM6MjI6c3RhdGljIERFQ0xBUkVfRkFVTFRfQVRUUihmYWlsX21lbXBvb2xfYWxsb2NfYnVsayk7XFxubW0vbWVtcG9vbC5jLTIzLVxcbm1tL21lbXBvb2wuYz0yND1zdGF0aWMgaW50IF9faW5pdCBtZW1wb29sX2ZhdWxfaW5qZWN0X2luaXQodm9pZClcXG4tLVxcbm1tL21lbXBvb2wuYy0zNC1cXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKFxcbm1tL21lbXBvb2wuYzozNTpcXHRcXHRmYXVsdF9jcmVhdGVfZGVidWdmc19hdHRyKFxcXCJmYWlsX21lbXBvb2xfYWxsb2NfYnVsa1xcXCIsIE5VTEwsXFxubW0vbWVtcG9vbC5jOjM2OlxcdFxcdFxcdTAwMjZmYWlsX21lbXBvb2xfYWxsb2NfYnVsaykpO1xcbm1tL21lbXBvb2wuYy0zNy19XFxuLS1cXG5tbS9tZW1wb29sLmM9NDY3PXN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWVtcG9vbF9hZGp1c3RfZ2ZwKGdmcF90ICpnZnBfbWFzaylcXG4tLVxcbm1tL21lbXBvb2wuYy00NzMtLyoqXFxubW0vbWVtcG9vbC5jOjQ3NDogKiBtZW1wb29sX2FsbG9jX2J1bGsgLSBhbGxvY2F0ZSBtdWx0aXBsZSBlbGVtZW50cyBmcm9tIGEgbWVtb3J5IHBvb2xcXG5tbS9tZW1wb29sLmMtNDc1LSAqIEBwb29sOlxcdHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBwb29sXFxuLS1cXG5tbS9tZW1wb29sLmMtNDg5LSAqL1xcbm1tL21lbXBvb2wuYzo0OTA6Ym9vbCBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCB2b2lkICoqZWxlbXMsXFxubW0vbWVtcG9vbC5jLTQ5MS1cXHRcXHR1bnNpZ25lZCBpbnQgY291bnQsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtcG9vbC5jLTUwMy1cXHQgKi9cXG5tbS9tZW1wb29sLmM6NTA0OlxcdGlmIChzaG91bGRfZmFpbF9leChcXHUwMDI2ZmFpbF9tZW1wb29sX2FsbG9jX2J1bGssIDEsIEZBVUxUX05PV0FSTikpIHtcXG5tbS9tZW1wb29sLmMtNTA1LVxcdFxcdHByX2luZm8oXFxcImZvcmNpbmcgbWVtcG9vbCB1c2FnZSBmb3IgJXBTXFxcXG5cXFwiLFxcbi0tXFxubW0vbWVtcG9vbC5jLTU0Mi19XFxubW0vbWVtcG9vbC5jOjU0MzpFWFBPUlRfU1lNQk9MX0dQTChtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mKTtcXG5tbS9tZW1wb29sLmMtNTQ0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNTo1MC4yMTgwMTg1NjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjIyNTA1NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCbG9jayBDcnlwdG8gRmFsbGJhY2sgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBibG9jayBjcnlwdG8gZmFsbGJhY2sgaW1wbGVtZW50YXRpb24uIEl0IGxvb2tzIGxpa2UgYG1lbXBvb2xfYWxsb2NfYnVsa2AgaXMgZXhjbHVzaXZlbHkgdXNlZCB3aXRoaW4gYGJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGlzIG1vZHVsZSBpbnRyb2R1Y2VzIGEgbmV3IHdvcmtxdWV1ZSwgYGVuY19yZXNjdWVfd29ya2AsIGFuZCB0aGUgYXNzb2NpYXRlZCB3b3JrZXIgZnVuY3Rpb24gYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYC4gVGhlIGNvcmUgY2hhbmdlIGlzIGluIGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gLiBJdCBub3cgYXR0ZW1wdHMgYSBub24tYmxvY2tpbmcgYWxsb2NhdGlvbiAoYEdGUF9OT1dBSVRgKSB1c2luZyBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgaWYgYGN1cnJlbnQtXHUwMDNlYmlvX2xpc3RgIGlzIHBvcHVsYXRlZCwgYW5kIGlmIHRoYXQgZmFpbHMsIGl0IG9mZmxvYWRzIHRoZSByZXF1ZXN0IHRvIHRoZSBuZXcgd29ya3F1ZXVlLiBUaGlzIGZhbGxiYWNrIGxvZ2ljIGtpY2tzIGluIGR1cmluZyBibG9jayBjcnlwdG8gb3BlcmF0aW9ucywgb2YgY291cnNlLlxuXG5UbyB0ZXN0IHRoaXMgdGhvcm91Z2hseSwgSSBzaG91bGQgZW5hYmxlIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tgLiBUaGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzIGFyZTogYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCwgYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AsIGFuZCBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAuXG5cbkhhbmcgb24sIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYCBpcyBhIGNvcmUgZnVuY3Rpb24sIGJ1dCBpdCdzIG9ubHkgdXNlZCBieSBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQsIHdoaWNoIGlzIHdvcnRoIG5vdGluZy4gTm93LCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gTGV0IG1lIHNlZS4uLiBgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm5gICppcyogc3RhdGljLi4uIEJ1dCB3YWl0LCBpdCdzIHBhc3NlZCB0byBgSU5JVF9XT1JLYC4gVGhpcyBtZWFucyBpdCBpc24ndCBpbmxpbmVkLCBpdCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gVGhhdCBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50LCB0aGFua2Z1bGx5LiBOb3csIGBibGtfY3J5cHRvX2FsbG9jX2VuY19iaW9gIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgbGVzcyBpZGVhbCwgYnV0IGl0J3MgY2FsbGVkIGJ5IGBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW9gIHdoaWNoIGlzIGFsc28gc3RhdGljLiBMZXQncyBkaWcgZGVlcGVyIHRvIGZpbmQgdGhlICphY3R1YWwqIGVudHJ5IHBvaW50cyBmb3IgdGhlIGJsb2NrIGNyeXB0byBmYWxsYmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY4MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNTo1Ni40NDA1Mjc0NzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTEwMzIwOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0yNjU9c3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTI4MC1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MjgxOnN0YXRpYyB2b2lkIF9fYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhzdHJ1Y3QgYmlvICpzcmNfYmlvLFxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yODItXFx0XFx0c3RydWN0IGNyeXB0b19zeW5jX3NrY2lwaGVyICp0Zm0pXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9NDEyPXN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbylcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy00MjMtXFx0fVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo0MjQ6XFx0X19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHNyY19iaW8sXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQyNS1cXHRcXHRcXHRibGtfY3J5cHRvX2ZhbGxiYWNrX3RmbShzbG90KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjA1OjU4LjQzMTU2ODg2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA1Nzc3MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW9gKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW9gIGlzIGFjdHVhbGx5IHVzZWQuIFRoaXMgZnVuY3Rpb24gbmFtZSBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGEgZmFsbGJhY2sgZW5jcnlwdGlvbiBtZWNoYW5pc20sIGxpa2VseSB3aXRoaW4gdGhlIGJsb2NrIGxheWVyLCBhbmQgcHJvYmFibHkgdGllZCB0byBzb21lIEJJTyAoQnVmZmVyZWQgSS9PKSBzdHJ1Y3R1cmUuIFRoYXQgbWVhbnMgaXTigJlzIGhhbmRsaW5nIGRhdGEgbW92aW5nIGluIGFuZCBvdXQgb2YgYmxvY2sgZGV2aWNlcywgcG90ZW50aWFsbHkgd2hlbiBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaXNuJ3QgYXZhaWxhYmxlIG9yIGNvbmZpZ3VyZWQuIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdG8gaGFuZGxlIHRoaXMgZmFsbGJhY2ssIHNpbmNlIGl0J3MgYW4gaW1wb3J0YW50IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb24sIGFuZCBtaWdodCBoaW50IGF0IHdoZXJlIGFjY2VsZXJhdGlvbiBpcyBleHBlY3RlZC4gSeKAmWxsIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGNhbGxzIHRvIGdldCBhIGdyYXNwIG9mIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIEkvTyBmbG93LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY2FsbCBncmFwaCFcblxuXG4iLCJJbnB1dFRva2VucyI6ODc3NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjA2OjAxLjYzNzM0ODI3NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NjU0NDE1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0yNTM9c3RhdGljIHZvaWQgYmxrX2NyeXB0b19kdW5fdG9faXYoY29uc3QgdTY0IGR1bltCTEtfQ1JZUFRPX0RVTl9BUlJBWV9TSVpFXSxcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yNjEtXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjI2MjpzdGF0aWMgdm9pZCBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHN0cnVjdCBiaW8gKnNyY19iaW8pO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yNjMtXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9MjY1PXN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yNzctXFx0d2hpbGUgKChzcmNfYmlvID0gYmlvX2xpc3RfcG9wKFxcdTAwMjZsaXN0KSkpXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjI3ODpcXHRcXHRibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHNyY19iaW8pO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yNzktfVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0yODAtXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjI4MTpzdGF0aWMgdm9pZCBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbyxcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMjgyLVxcdFxcdHN0cnVjdCBjcnlwdG9fc3luY19za2NpcGhlciAqdGZtKVxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQxMS0gKi9cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6NDEyOnN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW8oc3RydWN0IGJpbyAqc3JjX2JpbylcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNDEzLXtcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy00MjMtXFx0fVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo0MjQ6XFx0X19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHNyY19iaW8sXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTQyNS1cXHRcXHRcXHRibGtfY3J5cHRvX2ZhbGxiYWNrX3RmbShzbG90KSk7XFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9NTQ0PWJvb2wgYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcChzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTYxLVxcdGlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkge1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo1NjI6XFx0XFx0YmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2JpbyhiaW8pO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy01NjMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjowMy40MDM4OTczNzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MDM5ODgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IGl0OlxuXG4qKkFuYWx5emluZyB0aGUgRW50cnkgUG9pbnQ6IGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCoqXG5cblJpZ2h0LCBzbyBgYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcGAgaXMgdGhlIGRlc2lnbmF0ZWQgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgcHJvY2Vzcy4gVGhhdCdzIHRoZSBzdGFydGluZyBndW4sIHRoZSBmaXJzdCBwbGFjZSBleGVjdXRpb24gaGl0cy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcmVhbGx5IGRpZyBpbnRvIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBpdCBkb2VzLCB0aGUgcGFyYW1ldGVycyBpdCB1c2VzLCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAuIEkgd2FudCB0byBzZWUgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYW5kIGNyeXB0byBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgdGhlIGZhbGxiYWNrIGhlcmUgaXMgY3J1Y2lhbC4gV2hhdCBpcyB0aGlzIGZ1bmN0aW9uIGEgXCJmYWxsYmFja1wiICpmcm9tKj8gQW5kLCBpZiBzbywgd2hpY2ggb3RoZXIgZnVuY3Rpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NzIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjowNi40ODQyOTg2NjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTEyMjg4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM9NTA3PXN0YXRpYyB2b2lkIGJsa19jcnlwdG9fZmFsbGJhY2tfZGVjcnlwdF9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTI2LS8qKlxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo1Mjc6ICogYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcCAtIFByZXBhcmUgYSBiaW8gdG8gdXNlIGZhbGxiYWNrIGVuL2RlY3J5cHRpb25cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTI4LSAqIEBiaW86IGJpbyB0byBwcmVwYXJlXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTQzLSAqL1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzo1NDQ6Ym9vbCBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwKHN0cnVjdCBiaW8gKmJpbylcXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtNTQ1LXtcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8taW50ZXJuYWwuaD0yMTM9c3RhdGljIGlubGluZSBpbnQgYmxrX2NyeXB0b19ycV9iaW9fcHJlcChzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8taW50ZXJuYWwuaC0yMjAtXFxuYmxvY2svYmxrLWNyeXB0by1pbnRlcm5hbC5oOjIyMTpib29sIGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAoc3RydWN0IGJpbyAqYmlvKTtcXG5ibG9jay9ibGstY3J5cHRvLWludGVybmFsLmgtMjIyLVxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by5jPTI1Mj1ib29sIF9fYmxrX2NyeXB0b19zdWJtaXRfYmlvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8uYy0yNzMtXFx0XFx0fVxcbmJsb2NrL2Jsay1jcnlwdG8uYzoyNzQ6XFx0XFx0cmV0dXJuIGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXAoYmlvKTtcXG5ibG9jay9ibGstY3J5cHRvLmMtMjc1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDY6MDguMjM1NTMxNzg3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNTI0NTgzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJsb2NrIENyeXB0byBQYXRjaCBmb3IgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBfX2Jsa19jcnlwdG9fc3VibWl0X2Jpb2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGJsb2NrIGNyeXB0byBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHNvbWUga2V5IGZ1bmN0aW9uczogYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AsIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbmAsIGFuZCBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAuXG5cbkxldCBtZSBxdWlja2x5IHZlcmlmeSBpZiBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgaXMgZXZlbiB2aXNpYmxlIGV4dGVybmFsbHkuIEFoLCB5ZXAsIGl0J3MgYEVYUE9SVF9TWU1CT0xfR1BMYCdkLCBzbyBpdCdzIGEgbGVnaXRpbWF0ZSB0YXJnZXQgZm9yIGludmVzdGlnYXRpb24uIEdpdmVuIHRoYXQsIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCBhbmQgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCBhcmUgYWxzbyB3b3J0aCBhIGxvb2suXG5cbldhaXQgYSBzZWNvbmQsIEkgc2VlIHRoZSBjb3JlIGlzc3VlIOKAkyB0aGlzIGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgZGVhZGxvY2tzIGR1cmluZyByZWN1cnNpdmUgYmlvIHN1Ym1pc3Npb25zIGJ5IHNoaWZ0aW5nIG9wZXJhdGlvbnMgdG8gYSB3b3JrcXVldWUuIE9rYXksIHRoYXQgY29udGV4dCBpcyBlc3NlbnRpYWwuIFRoZSBgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X3dvcmtfZm5gIGlzIGRlZmluaXRlbHkgYSBuZXcgZnVuY3Rpb24gaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBUaGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIGdpdmVuIGl0cyBuZXcgbmF0dXJlLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgdG8gYWNjb3VudCBmb3IgYGdmcF9tYXNrYCBhbmQgaGFuZGxlIGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAgd2hpY2ggY291bGQgaGF2ZSBpbnRlcmVzdGluZyBjb25zZXF1ZW5jZXMuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQncyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gdG8gdHJpZ2dlciB0aGlzIGJlaGF2aW9yPyBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS2AuIERvZXMgaXQgaGF2ZSBhbnkgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgaW1wYWN0IGl0cyBmdW5jdGlvbj8gQWxyaWdodCwgaXQgZGVwZW5kcyBvbiBgQkxLX0lOTElORV9FTkNSWVBUSU9OYC4gVGltZSB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0lOTElORV9FTkNSWVBUSU9OYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxODEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDY6MTQuMjg3OTkzMjE3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE0NzEyODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0xODU9Y29uZmlnIEJMS19TRURfT1BBTFxcbi0tXFxuYmxvY2svS2NvbmZpZy0xOTQtXFxuYmxvY2svS2NvbmZpZzoxOTU6Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTlxcbmJsb2NrL0tjb25maWctMTk2LVxcdGJvb2wgXFxcIkVuYWJsZSBpbmxpbmUgZW5jcnlwdGlvbiBzdXBwb3J0IGluIGJsb2NrIGxheWVyXFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZy0yMDEtXFxuYmxvY2svS2NvbmZpZzoyMDI6Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS1xcbmJsb2NrL0tjb25maWctMjAzLVxcdGJvb2wgXFxcIkVuYWJsZSBjcnlwdG8gQVBJIGZhbGxiYWNrIGZvciBibGstY3J5cHRvXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjoxNi4wMDI3MTA4NjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ0NzY3NzMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqUmV2aWV3aW5nIGBibG9jay9LY29uZmlnYCoqXG5cbk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgdG8gYGJsb2NrL0tjb25maWdgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcm91bmQgbGluZSAxOTUuIEkgcmVjYWxsIHdlIGhhZCBkaXNjdXNzZWQgdGhpcyBzZWN0aW9uIHByZXZpb3VzbHksIGFuZCBJIHdhbnQgdG8gcmUtZXZhbHVhdGUgaXQgd2l0aCBmcmVzaCBleWVzLCBjb25zaWRlcmluZyB0aGUgbGF0ZXN0IGRpc2N1c3Npb25zIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgYXQgaXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjoxOC40NTAzOTA2MzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTA6XFx0XFx0aGVscFxcbiAxOTE6XFx0XFx0QnVpbGRzIExvZ2ljIGZvciBpbnRlcmZhY2luZyB3aXRoIE9wYWwgZW5hYmxlZCBjb250cm9sbGVycy5cXG4gMTkyOlxcdFxcdEVuYWJsaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdXNlcnMgdG8gc2V0dXAvdW5sb2NrL2xvY2tcXG4gMTkzOlxcdFxcdExvY2tpbmcgcmFuZ2VzIGZvciBTRUQgZGV2aWNlcyB1c2luZyB0aGUgT3BhbCBwcm90b2NvbC5cXG4gMTk0OlxcdFxcbiAxOTU6XFx0Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTlxcbiAxOTY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGlubGluZSBlbmNyeXB0aW9uIHN1cHBvcnQgaW4gYmxvY2sgbGF5ZXJcXFwiXFxuIDE5NzpcXHRcXHRoZWxwXFxuIDE5ODpcXHRcXHQgIEJ1aWxkIHRoZSBibGstY3J5cHRvIHN1YnN5c3RlbS4gRW5hYmxpbmcgdGhpcyBsZXRzIHRoZVxcbiAxOTk6XFx0XFx0ICBibG9jayBsYXllciBoYW5kbGUgZW5jcnlwdGlvbiwgc28gdXNlcnMgY2FuIHRha2VcXG4gMjAwOlxcdFxcdCAgYWR2YW50YWdlIG9mIGlubGluZSBlbmNyeXB0aW9uIGhhcmR3YXJlIGlmIHByZXNlbnQuXFxuIDIwMTpcXHRcXG4gMjAyOlxcdGNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcXG4gMjAzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBjcnlwdG8gQVBJIGZhbGxiYWNrIGZvciBibGstY3J5cHRvXFxcIlxcbiAyMDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfSU5MSU5FX0VOQ1JZUFRJT05cXG4gMjA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gMjA2OlxcdFxcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcXG4gMjA3OlxcdFxcdGhlbHBcXG4gMjA4OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBsZXRzIHRoZSBibG9jayBsYXllciBoYW5kbGUgaW5saW5lIGVuY3J5cHRpb25cXG4gMjA5OlxcdFxcdCAgYnkgZmFsbGluZyBiYWNrIHRvIHRoZSBrZXJuZWwgY3J5cHRvIEFQSSB3aGVuIGlubGluZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjoxOC40NTA0NTI4NzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzNDQ5MjM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMuIGBCTEtfSU5MSU5FX0VOQ1JZUFRJT05gIGlzIHNlbGYtY29udGFpbmVkLCBubyBkZXBlbmRlbmNpZXMuIEJ1dCwgYEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS2AgYnVpbGRzIHVwb24gdGhhdCwgcmlnaHQ/IEdvb2QuIEp1c3QgZG91YmxlLWNoZWNraW5nLCBhbmQgeWVwLCBgQ09ORklHX0NSWVBUT2AgYW5kIGBDT05GSUdfQ1JZUFRPX1NLQ0lQSEVSYCBhcmUgc2VsZWN0ZWQgYXMgd2VsbC5cblxuU28gd2UgaGF2ZSB0aGUgdHdvIG1haW4gY29uZmlnczogYEJMS19JTkxJTkVfRU5DUllQVElPTmAgYW5kIGl0cyBmYWxsYmFjay4gTm93LCBsZXQncyBkaXZlIGRlZXBlci4gSSdtIHdvbmRlcmluZyBpZiBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgY2FuIGJlIHJlYWNoZWQgd2l0aG91dCB0aGUgYmxvY2sgY3J5cHRvIHBhdGguIEFoLCBpdCAqaXMqIGV4cG9ydGVkLCBidXQgY3VycmVudGx5IHNlZW1zIHRvIGJlIHVzZWQgb25seSBieSB0aGUgYmxvY2sgY3J5cHRvIGZhbGxiYWNrLiBIYW5nIG9uLCB0aGF0J3MgYSAqY29yZSogbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24hIFRoYXQncyBkZWZpbml0ZWx5IHdvcnRoIHNvbWUgc2VyaW91cyBmdXp6aW5nIGF0dGVudGlvbi5cblxuQWxyaWdodCwgdGhlIGNvcmUgZm9jdXMgdGhlbiB3aWxsIGJlOlxuXG4qICAgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIC0gdGhhdCdzIGEgcHJpb3JpdHkuXG4qICAgYGJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuYCAtIHRoYXQncyBhIGdvb2QgZW50cnkgcG9pbnQuXG4qICAgYGJsa19jcnlwdG9fYWxsb2NfZW5jX2Jpb2AgLSBJJ20gbm90aW5nIHRoaXMgb25lLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gTGV0J3MgaW5jbHVkZSBpdCBpbiB0aGUgaW5pdGlhbCBjb3ZlcmFnZSwgb3IgY29uc2lkZXIgYWxzbyBpdHMgbm9uLXN0YXRpYyBlcXVpdmFsZW50IGBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW9gLlxuXG5XYWl0IGEgbWludXRlLCBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0IG1pZ2h0IGJlIGlubGluZWQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0OyBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgaXQncyBhY3R1YWxseSBpbmxpbmVkIGJlZm9yZSBJIGZpbmFsaXplIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBwYXJ0aWN1bGFyIHN5bWJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjoyMy41ODQ5NDc4NDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzU3ODI5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNDg9c3RhdGljIHZvaWQgYmxrX2NyeXB0b19mYWxsYmFja19lbmNyeXB0X2VuZGlvKHN0cnVjdCBiaW8gKmVuY19iaW8pXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMTc1LVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYzoxNzY6c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0xNzctXFx0XFx0dW5zaWduZWQgaW50IG5yX3NlZ3MsIHN0cnVjdCBwYWdlICoqKnBhZ2VzX3JldClcXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0yODE9c3RhdGljIHZvaWQgX19ibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfYmlvKHN0cnVjdCBiaW8gKnNyY19iaW8sXFxuLS1cXG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmMtMzEzLVxcdG5yX2VuY19wYWdlcyA9IG1pbihiaW9fc2VnbWVudHMoc3JjX2JpbyksIEJJT19NQVhfVkVDUyk7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjMxNDpcXHRlbmNfYmlvID0gYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvKHNyY19iaW8sIG5yX2VuY19wYWdlcywgXFx1MDAyNmVuY19wYWdlcyk7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTMxNS1cXHRpZiAodW5saWtlbHkoIWVuY19iaW8pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjA2OjI1LjM2MDc0NzI0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk0MzUyNzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDcnlwdG9ncmFwaGljIEJJTyBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYmxrX2NyeXB0b19hbGxvY19lbmNfYmlvYCBmdW5jdGlvbi4gSXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIGZpbmUsIGJ1dCBpdCdzIGEgcHJldHR5IGhlZnR5IGNodW5rIG9mIGNvZGUuIEknbSB3b25kZXJpbmcgaWYgdGhlIGNvbXBpbGVyIHdpbGwgYWN0dWFsbHkgaW5saW5lIGl0LCBnaXZlbiB0aGF0IGl0IGhhbmRsZXMgYmlvIGFsbG9jYXRpb24gYW5kIHBhZ2UgYWxsb2NhdGlvbiDigJMgdGhhdCdzIG9mdGVuIGEgYml0IHRvbyBtdWNoIGZvciBhIHNpbXBsZSBpbmxpbmluZy5cblxuVGhlbiB0aGVyZSdzIGBfX2Jsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF9iaW9gLCB3aGljaCBpcyAqYWxzbyogc3RhdGljLiBIbW0uIFRoZSByZWFsIGVudHJ5IHBvaW50IGlzIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwYCwgYW5kIHRoYXQgb25lICppc24ndCogc3RhdGljLiBSaWdodCwgdGhhdCdzIHRoZSBvbmUgd2Ugd2FudCB0byBmb2N1cyBvbi4gSSB0aGluayB3ZSBjYW4gbGV2ZXJhZ2UgYGJsa19jcnlwdG9fZmFsbGJhY2tfYmlvX3ByZXBgLCBhbG9uZyB3aXRoIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbmAgYW5kIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYCB0byBnZXQgdGhlIGRlc2lyZWQgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIGJlY2F1c2UgdGhhdCdzIGFsd2F5cyBnb29kIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGluIGRldGFpbC4gVGltZSB0byBjaGVjayBgbW0vbWVtcG9vbC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MDY6MjkuNjU1MTAyMjAyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbXBvb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0ODA6XFx0ICpcXHRcXHRpbmRlZmluaXRlbHkgdW50aWwgaXQgc3VjY2VlZHMgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgYWx3YXlzXFxuIDQ4MTpcXHQgKlxcdFxcdCV0cnVlLiAgSWYgdGhlIG1hc2sgZG9lc24ndCBpbmNsdWRlICVfX0dGUF9ESVJFQ1RfUkVDTEFJTSwgdGhlblxcbiA0ODI6XFx0ICpcXHRcXHRmYWlsdXJlIGlzIGFsbG93ZWQgYW5kICVmYWxzZSBjYW4gYmUgcmV0dXJuZWQuXFxuIDQ4MzpcXHQgKlxcbiA0ODQ6XFx0ICogQWxsb2NhdGUgQGNvdW50IGVsZW1lbnRzIGludG8gQGVsZW1zLiAgVGhpcyBpcyBkb25lIGJ5IGZpcnN0IGNhbGxpbmcgaW50byB0aGVcXG4gNDg1OlxcdCAqIGFsbG9jX2ZuIHN1cHBsaWVkIGF0IHBvb2wgaW5pdGlhbGl6YXRpb24gdGltZSwgYW5kIGRpcHBpbmcgaW50byB0aGUgcmVzZXJ2ZWRcXG4gNDg2OlxcdCAqIHBvb2wgdG8gYXRvbWljYWxseSBhbGxvY2F0ZSB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGlmIGFsbG9jX2ZuIGZhaWxzLlxcbiA0ODc6XFx0ICpcXG4gNDg4OlxcdCAqIFJldHVybjogJXRydWUgaWYgdGhlIGFsbG9jYXRpb24gc3VjY2VlZGVkLCBvciAlZmFsc2UgaWYgaXQgZmFpbGVkLlxcbiA0ODk6XFx0ICovXFxuIDQ5MDpcXHRib29sIG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIHZvaWQgKiplbGVtcyxcXG4gNDkxOlxcdFxcdFxcdHVuc2lnbmVkIGludCBjb3VudCwgZ2ZwX3QgZ2ZwX21hc2spXFxuIDQ5MjpcXHR7XFxuIDQ5MzpcXHRcXHRnZnBfdCBnZnBfdGVtcCA9IG1lbXBvb2xfYWRqdXN0X2dmcChcXHUwMDI2Z2ZwX21hc2spO1xcbiA0OTQ6XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZCA9IDA7XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdFxcdFZNX1dBUk5fT05fT05DRShjb3VudCBcXHUwMDNlIHBvb2wtXFx1MDAzZW1pbl9ucik7XFxuIDQ5NzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9aRVJPKTtcXG4gNDk4OlxcdFxcdG1pZ2h0X2FsbG9jKGdmcF9tYXNrKTtcXG4gNDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjowNjoyOS42NTUxOTkzMTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ5OTAzNDgzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBCbG9jayBDcnlwdG8gRmFsbGJhY2sqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggYSBsb29rIGZvciBmdXp6aW5nLiBJdCdzIGZ1bmN0aW9uYWwsIG1lYW5pbmcgaXQgYWN0dWFsbHkgY2hhbmdlcyBob3cgdGhpbmdzICp3b3JrKuKAlGFuZCBpdCB0b3VjaGVzIHNvbWUga2V5IGFyZWFzLCBzcGVjaWZpY2FsbHkgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSBibG9jayBjcnlwdG8gZmFsbGJhY2sgbG9naWMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIG92ZXJhbGwgc3lzdGVtIGludGVncml0eS4gVGhlIGZhY3QgdGhhdCBpdCdzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbWFrZXMgaXQgZXZlbiBtb3JlIGF0dHJhY3RpdmUgZm9yIHRlc3RpbmcuXG5cbkknbSBmbGFnZ2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkknbGwgYmUgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGVzZSBzeW1ib2xzOiBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAsIGBibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mbmAsIGFuZCBgYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcGAuIEZvY3VzaW5nIG9uIHRoZXNlIHNob3VsZCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2gncyBjaGFuZ2VzIGFuZCB0ZXN0IHRoZSBuZXcgbG9naWMuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCwgdGhhdCB3b3VsZCBiZSBgQkxLX0lOTElORV9FTkNSWVBUSU9OYCBhbmQgYEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS2AuXG5cblRoZSByZWFzb25pbmcgaXMgcHJldHR5IGNsZWFyOiBUaGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyBgbWVtcG9vbF9hbGxvY19idWxrX25vcHJvZmAgYmVoYXZlcy4gSXQgbm93IHRha2VzIGEgYGdmcF9tYXNrYCBhbmQgaGFuZGxlcyBhbGxvY2F0aW9uIGZhaWx1cmVzIGJldHRlci4gTW9yZSBpbXBvcnRhbnRseSwgaXQgaW50ZWdyYXRlcyB0aGlzIGNoYW5nZSBpbnRvIHRoZSBgYmxrLWNyeXB0by1mYWxsYmFja2Agc3Vic3lzdGVtLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgZW5jX3Jlc2N1ZV93b3JrYCB3b3JrcXVldWUgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyByZWN1cnNpdmUgYmlvIHN1Ym1pc3Npb25zIHN1Z2dlc3RzIGEgc3VidGxlIGJ1dCBjcnVjaWFsIGZpeC4gSXQncyBhYm91dCBwdW50aW5nIGVuY3J5cHRpb24gd29yayB3aGVuIGBjdXJyZW50LVx1MDAzZWJpb19saXN0YCBpcyBub24tbnVsbCwgd2hpY2ggaXMgYSBjb21tb24gc2NlbmFyaW8gaW4gYmxvY2sgbGF5ZXIgb3BlcmF0aW9ucy4gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBmaXghIE15IGd1ZXNzIGlzIHRoYXQgdGhlIHdvcmtxdWV1ZSB3aWxsIGludHJvZHVjZSBhIG5ldyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjcwLCJPdXRwdXRUb2tlbnMiOjIwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjA2OjM1LjE1NDIzNzczOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDMyMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfSU5MSU5FX0VOQ1JZUFRJT05cIixcbiAgICBcIkJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZcIixcbiAgICBcImJsa19jcnlwdG9fZmFsbGJhY2tfZW5jcnlwdF93b3JrX2ZuXCIsXG4gICAgXCJibGtfY3J5cHRvX2ZhbGxiYWNrX2Jpb19wcmVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG1lbXBvb2xfYWxsb2NfYnVsa19ub3Byb2ZgIHRvIGFjY2VwdCBhIGBnZnBfbWFza2AgYW5kIGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzIHByb3Blcmx5LiBJdCBhbHNvIHVwZGF0ZXMgYGJsay1jcnlwdG8tZmFsbGJhY2tgIHRvIHVzZSB0aGlzIG5ldyBzaWduYXR1cmUgYW5kIGludHJvZHVjZXMgYSB3b3JrcXVldWUgKGBlbmNfcmVzY3VlX3dvcmtgKSB0byBwcmV2ZW50IGRlYWRsb2NrcyBkdXJpbmcgcmVjdXJzaXZlIGJpbyBzdWJtaXNzaW9ucyBieSBwdW50aW5nIGVuY3J5cHRpb24gd29yayB3aGVuIGBjdXJyZW50LVxcdTAwM2ViaW9fbGlzdGAgaXMgbm9uLW51bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBibG9jayBsYXllciBjcnlwdG8gZmFsbGJhY2sgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0lOTElORV9FTkNSWVBUSU9OXCIsXG4gICAgXCJCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mXCIsXG4gICAgXCJibGtfY3J5cHRvX2ZhbGxiYWNrX2VuY3J5cHRfd29ya19mblwiLFxuICAgIFwiYmxrX2NyeXB0b19mYWxsYmFja19iaW9fcHJlcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBtZW1wb29sX2FsbG9jX2J1bGtfbm9wcm9mYCB0byBhY2NlcHQgYSBgZ2ZwX21hc2tgIGFuZCBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcyBwcm9wZXJseS4gSXQgYWxzbyB1cGRhdGVzIGBibGstY3J5cHRvLWZhbGxiYWNrYCB0byB1c2UgdGhpcyBuZXcgc2lnbmF0dXJlIGFuZCBpbnRyb2R1Y2VzIGEgd29ya3F1ZXVlIChgZW5jX3Jlc2N1ZV93b3JrYCkgdG8gcHJldmVudCBkZWFkbG9ja3MgZHVyaW5nIHJlY3Vyc2l2ZSBiaW8gc3VibWlzc2lvbnMgYnkgcHVudGluZyBlbmNyeXB0aW9uIHdvcmsgd2hlbiBgY3VycmVudC1cXHUwMDNlYmlvX2xpc3RgIGlzIG5vbi1udWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYmxvY2sgbGF5ZXIgY3J5cHRvIGZhbGxiYWNrIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtkct6[1] Phase: Succeeded StartedAt: 2026-08-07 02:06:46 +0000 UTC FinishedAt: 2026-08-07 02:06:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 02:06:46 +0000 UTC FinishedAt: 2026-08-07 02:06:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2] Phase: Succeeded StartedAt: 2026-08-07 02:06:46 +0000 UTC FinishedAt: 2026-08-07 05:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 02:06:46 +0000 UTC FinishedAt: 2026-08-07 05:50:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 02:06:46 +0000 UTC FinishedAt: 2026-08-07 02:06:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 02:06:46 +0000 UTC FinishedAt: 2026-08-07 02:06:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtkct6/series-workflowtkct6-convert-artifact-2656822691/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 02:06:56 +0000 UTC FinishedAt: 2026-08-07 02:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 02:06:56 +0000 UTC FinishedAt: 2026-08-07 02:23:11 +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:*17d9734d-36a7-4454-84d8-e2d7071f210a,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-workflowtkct6/series-workflowtkct6-convert-artifact-2656822691/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": "2547983d-b13e-4c20-b395-e2aaaeee96d3", "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-workflowtkct6/series-workflowtkct6-build-action-1041652241/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 02:06:56 +0000 UTC FinishedAt: 2026-08-07 02:23:01 +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:*17d9734d-36a7-4454-84d8-e2d7071f210a,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-workflowtkct6/series-workflowtkct6-convert-artifact-2656822691/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": "2547983d-b13e-4c20-b395-e2aaaeee96d3", "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-workflowtkct6/series-workflowtkct6-build-action-1041652241/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 02:23:11 +0000 UTC FinishedAt: 2026-08-07 02:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 02:23:11 +0000 UTC FinishedAt: 2026-08-07 02:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 02:23:11 +0000 UTC FinishedAt: 2026-08-07 02:23:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 02:23:11 +0000 UTC FinishedAt: 2026-08-07 02:23:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtkct6/series-workflowtkct6-convert-artifact-2140314330/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 02:23:21 +0000 UTC FinishedAt: 2026-08-07 02:25:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 02:23:21 +0000 UTC FinishedAt: 2026-08-07 02:25:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2547983d-b13e-4c20-b395-e2aaaeee96d3,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-workflowtkct6/series-workflowtkct6-build-action-1041652241/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-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 02:25:23 +0000 UTC FinishedAt: 2026-08-07 02:25:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 02:25:23 +0000 UTC FinishedAt: 2026-08-07 02:25:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 02:25:23 +0000 UTC FinishedAt: 2026-08-07 02:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 02:25:23 +0000 UTC FinishedAt: 2026-08-07 02:44:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*17d9734d-36a7-4454-84d8-e2d7071f210a,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-workflowtkct6/series-workflowtkct6-convert-artifact-2140314330/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": "43fd6b6a-02b9-48c5-811a-ddbf94825b89", "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-workflowtkct6/series-workflowtkct6-build-action-4108707774/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 02:25:23 +0000 UTC FinishedAt: 2026-08-07 02:44:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*17d9734d-36a7-4454-84d8-e2d7071f210a,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-workflowtkct6/series-workflowtkct6-convert-artifact-2140314330/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": "43fd6b6a-02b9-48c5-811a-ddbf94825b89", "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-workflowtkct6/series-workflowtkct6-build-action-4108707774/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 02:44:19 +0000 UTC FinishedAt: 2026-08-07 02:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 02:44:19 +0000 UTC FinishedAt: 2026-08-07 02:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 02:44:19 +0000 UTC FinishedAt: 2026-08-07 02:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 02:44:19 +0000 UTC FinishedAt: 2026-08-07 02:46:06 +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:*43fd6b6a-02b9-48c5-811a-ddbf94825b89,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-workflowtkct6/series-workflowtkct6-build-action-4108707774/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-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 02:46:16 +0000 UTC FinishedAt: 2026-08-07 05:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 02:46:16 +0000 UTC FinishedAt: 2026-08-07 05:50:17 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},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:*2547983d-b13e-4c20-b395-e2aaaeee96d3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*43fd6b6a-02b9-48c5-811a-ddbf94825b89,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-workflowtkct6/series-workflowtkct6-build-action-1041652241/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-workflowtkct6/series-workflowtkct6-build-action-4108707774/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 02:46:16 +0000 UTC FinishedAt: 2026-08-07 02:46:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 02:46:16 +0000 UTC FinishedAt: 2026-08-07 02:46:22 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},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-workflowtkct6/series-workflowtkct6-convert-artifact-392652431/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 02:46:16 +0000 UTC FinishedAt: 2026-08-07 02:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 02:46:16 +0000 UTC FinishedAt: 2026-08-07 02:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 02:46:16 +0000 UTC FinishedAt: 2026-08-07 02:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 02:46:26 +0000 UTC FinishedAt: 2026-08-07 05:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkct6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_alloc_bulk_noprof","blk_crypto_fallback_encrypt_work_fn","blk_crypto_fallback_bio_prep"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0d839570765118029aa8bf4a95444c6a11aacf85","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_INLINE_ENCRYPTION","BLK_INLINE_ENCRYPTION_FALLBACK"],"series_id":"d369b433-7bb2-49c5-b096-9248d33bf304","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 02:46:26 +0000 UTC FinishedAt: 2026-08-07 05:50:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2547983d-b13e-4c20-b395-e2aaaeee96d3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*43fd6b6a-02b9-48c5-811a-ddbf94825b89,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-workflowtkct6/series-workflowtkct6-build-action-1041652241/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-workflowtkct6/series-workflowtkct6-build-action-4108707774/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-workflowtkct6/series-workflowtkct6-convert-artifact-392652431/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,}