Name: series-workflow4xlr8 Phase: Succeeded StartedAt: 2026-08-17 10:46:09 +0000 UTC FinishedAt: 2026-08-17 14:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[0] Phase: Succeeded StartedAt: 2026-08-17 10:46:09 +0000 UTC FinishedAt: 2026-08-17 11:04:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 10:46:09 +0000 UTC FinishedAt: 2026-08-17 11:04:13 +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": "1351c159c59b04195647917c5a5f0e5467f44bb0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "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": "1351c159c59b04195647917c5a5f0e5467f44bb0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "9d606f4f-34cc-4ae9-974d-ef66197733f3" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_xattr_set", "ext4_xattr_set_handle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSBjbGVhbiB1cCBhIG5ld2x5IGFsbG9jYXRlZCB4YXR0ciBibG9jayBpZiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgY2FjaGUgZW50cnkgbWFuYWdlbWVudCwgcXVvdGEgcmVsZWFzaW5nLCBhbmQgYmxvY2sgZnJlZWluZy4gVGhlc2Ugb3BlcmF0aW9ucyBwcmltYXJpbHkgcmlzayB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG1lbW9yeSBsZWFrcywgb3IgaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBhIG5ldyBmdW5jdGlvbiBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgdG8gcHJvcGVybHkgcmVsZWFzZSByZXNvdXJjZXMgKHJlZmVyZW5jZXMsIGJsb2NrLCBxdW90YSkgd2hlbiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzIG9uIGEgbmV3bHkgYWxsb2NhdGVkIHhhdHRyIGJsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHJlY292ZXJ5IHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzg3NWIxNmZjMzQxMmNjZWY2NDM3YmI3YTMxMDVjOWRkMmRlZGU3NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDExOjAzOjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyOC4uZTA4NmM4Mzk1MDQyYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTM2Miw2ICYjNDM7MTM2Miw2MyBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybjtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFVuZG8gdGhlIHNldHVwIG9mIGEgbmV3IHhhdHRyIGJsb2NrIHRoYXQgZmFpbGVkIHRvIGJlIHdyaXR0ZW4gb3V0OiBkcm9wXG4mIzQzOyAqIHRoZSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKCkgcmVmZXJlbmNlcywgZnJlZSB0aGUgYmxvY2ssIGFuZFxuJiM0MzsgKiByZWxlYXNlIHRoZSBxdW90YSB0aGlzIG9wZXJhdGlvbiBjaGFyZ2VkIGZvciB0aGUgbmV3IHZhbHVlIChxdW90YV9sZW4sXG4mIzQzOyAqIHplcm8gd2hlbiB0aGUgdmFsdWUgaXMgbm90IGluIGFuIEVBIGlub2RlKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCxcbiYjNDM7XHRcdFx0XHQgICAgICBzaXplX3QgcXVvdGFfbGVuLCBpbnQgZXJyb3IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqb2U7XG4mIzQzO1x0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0ZXh0NF9lcnJvcl9pbm9kZShpbm9kZSwgX19mdW5jX18sIF9fTElORV9fLCAwLFxuJiM0MztcdFx0XHQgXCYjMzQ7eGF0dHIgYmxvY2sgZGlydHkgZmFpbGVkOiAlZFwmIzM0OywgZXJyb3IpO1xuJiM0MztcdGxvY2tfYnVmZmVyKG5ld19iaCk7XG4mIzQzO3JldHJ5X293bmVyOlxuJiM0MztcdGlmIChsZTMyX3RvX2NwdShCSERSKG5ld19iaCktXHUwMDNlaF9yZWZjb3VudCkgIT0gMSkge1xuJiM0MztcdFx0dW5sb2NrX2J1ZmZlcihuZXdfYmgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZWFfYmxvY2tfY2FjaGUpIHtcbiYjNDM7XHRcdG9lID0gbWJfY2FjaGVfZW50cnlfZGVsZXRlX29yX2dldChlYV9ibG9ja19jYWNoZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBsZTMyX3RvX2NwdShCSERSKG5ld19iaCktXHUwMDNlaF9oYXNoKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBuZXdfYmgtXHUwMDNlYl9ibG9ja25yKTtcbiYjNDM7XHRcdGlmIChvZSkge1xuJiM0MztcdFx0XHR1bmxvY2tfYnVmZmVyKG5ld19iaCk7XG4mIzQzO1x0XHRcdG1iX2NhY2hlX2VudHJ5X3dhaXRfdW51c2VkKG9lKTtcbiYjNDM7XHRcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBvZSk7XG4mIzQzO1x0XHRcdGxvY2tfYnVmZmVyKG5ld19iaCk7XG4mIzQzO1x0XHRcdGdvdG8gcmV0cnlfb3duZXI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGdldF9iaChuZXdfYmgpO1xuJiM0MztcdHVubG9ja19idWZmZXIobmV3X2JoKTtcbiYjNDM7XG4mIzQzO1x0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBuZXdfYmgsXG4mIzQzO1x0XHRcdFx0ICAgICBFTlRSWShCSERSKG5ld19iaCkgJiM0MzsgMSksXG4mIzQzO1x0XHRcdFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbiYjNDM7XHRcdFx0XHQgICAgIDAgLyogZXh0cmFfY3JlZGl0cyAqLyxcbiYjNDM7XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4mIzQzO1x0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiYjNDM7XHRpZiAocXVvdGFfbGVuKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmV2ZXJzZXMgdGhpcyBvcGVyYXRpb24mIzM5O3Mgb3duIGV4dDRfeGF0dHJfaW5vZGVfYWxsb2NfcXVvdGEoKVxuJiM0MztcdFx0ICogY2hhcmdlLCBzbyBubyBFQSBpbm9kZSBwb2ludGVyIGlzIG5lZWRlZCBoZXJlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHF1b3RhX2xlbik7XG4mIzQzO1x0XHRleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0fVxuJiM0MztcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgbmV3X2JoLCAwLCAxLFxuJiM0MztcdFx0XHQgRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQSB8XG4mIzQzO1x0XHRcdCBFWFQ0X0ZSRUVfQkxPQ0tTX0ZPUkdFVCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBGaW5kIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSBmb3IgRUFzLiBUaGlzIGFsc28gcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mXG4gICogYnl0ZXMgdXNlZCBieSBFQSBlbnRyaWVzLlxuQEAgLTIxNjksOCAmIzQzOzIyMjYsMTMgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2Jsb2NrX2NhY2hlX2luc2VydChlYV9ibG9ja19jYWNoZSwgbmV3X2JoKTtcbiBcdFx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgICBuZXdfYmgpO1xuLVx0XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0aWYgKGVycm9yKSB7XG4mIzQzO1x0XHRcdFx0ZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbChoYW5kbGUsIGlub2RlLCBuZXdfYmgsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBpLVx1MDAzZWluX2lub2RlID9cbiYjNDM7XHRcdFx0XHRcdFx0XHQgIGktXHUwMDNldmFsdWVfbGVuIDogMCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIGVycm9yKTtcbiBcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTE6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIGEgbmV3IGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSByZWxlYXNlIHJlc291cmNlcyAocmVmZXJlbmNlcywgYmxvY2ssIHF1b3RhKSB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMgb24gYSBuZXdseSBhbGxvY2F0ZWQgeGF0dHIgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcmVjb3Zlcnkgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ODc1YjE2ZmMzNDEyY2NlZjY0MzdiYjdhMzEwNWM5ZGQyZGVkZTc2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTE6MDM6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggOTgyYTFmODMxZTIyOC4uZTA4NmM4Mzk1MDQyYSAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtMTM2Miw2ICYjNDM7MTM2Miw2MyBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAlyZXR1cm47CiB9CiAKJiM0MzsvKgomIzQzOyAqIFVuZG8gdGhlIHNldHVwIG9mIGEgbmV3IHhhdHRyIGJsb2NrIHRoYXQgZmFpbGVkIHRvIGJlIHdyaXR0ZW4gb3V0OiBkcm9wCiYjNDM7ICogdGhlIGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoKSByZWZlcmVuY2VzLCBmcmVlIHRoZSBibG9jaywgYW5kCiYjNDM7ICogcmVsZWFzZSB0aGUgcXVvdGEgdGhpcyBvcGVyYXRpb24gY2hhcmdlZCBmb3IgdGhlIG5ldyB2YWx1ZSAocXVvdGFfbGVuLAomIzQzOyAqIHplcm8gd2hlbiB0aGUgdmFsdWUgaXMgbm90IGluIGFuIEVBIGlub2RlKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLAomIzQzOwkJCQkgICAgICBzaXplX3QgcXVvdGFfbGVuLCBpbnQgZXJyb3IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpOwomIzQzOwlzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKm9lOwomIzQzOwlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMOwomIzQzOwomIzQzOwlleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBfX2Z1bmNfXywgX19MSU5FX18sIDAsCiYjNDM7CQkJICYjMzQ7eGF0dHIgYmxvY2sgZGlydHkgZmFpbGVkOiAlZCYjMzQ7LCBlcnJvcik7CiYjNDM7CWxvY2tfYnVmZmVyKG5ld19iaCk7CiYjNDM7cmV0cnlfb3duZXI6CiYjNDM7CWlmIChsZTMyX3RvX2NwdShCSERSKG5ld19iaCktJmd0O2hfcmVmY291bnQpICE9IDEpIHsKJiM0MzsJCXVubG9ja19idWZmZXIobmV3X2JoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlpZiAoZWFfYmxvY2tfY2FjaGUpIHsKJiM0MzsJCW9lID0gbWJfY2FjaGVfZW50cnlfZGVsZXRlX29yX2dldChlYV9ibG9ja19jYWNoZSwKJiM0MzsJCQkJCQkgIGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS0mZ3Q7aF9oYXNoKSwKJiM0MzsJCQkJCQkgIG5ld19iaC0mZ3Q7Yl9ibG9ja25yKTsKJiM0MzsJCWlmIChvZSkgewomIzQzOwkJCXVubG9ja19idWZmZXIobmV3X2JoKTsKJiM0MzsJCQltYl9jYWNoZV9lbnRyeV93YWl0X3VudXNlZChvZSk7CiYjNDM7CQkJbWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBvZSk7CiYjNDM7CQkJbG9ja19idWZmZXIobmV3X2JoKTsKJiM0MzsJCQlnb3RvIHJldHJ5X293bmVyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWdldF9iaChuZXdfYmgpOwomIzQzOwl1bmxvY2tfYnVmZmVyKG5ld19iaCk7CiYjNDM7CiYjNDM7CWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgbmV3X2JoLAomIzQzOwkJCQkgICAgIEVOVFJZKEJIRFIobmV3X2JoKSAmIzQzOyAxKSwKJiM0MzsJCQkJICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sCiYjNDM7CQkJCSAgICAgJmFtcDtlYV9pbm9kZV9hcnJheSwKJiM0MzsJCQkJICAgICAwIC8qIGV4dHJhX2NyZWRpdHMgKi8sCiYjNDM7CQkJCSAgICAgdHJ1ZSAvKiBza2lwX3F1b3RhICovKTsKJiM0MzsJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKJiM0MzsJaWYgKHF1b3RhX2xlbikgewomIzQzOwkJLyoKJiM0MzsJCSAqIFJldmVyc2VzIHRoaXMgb3BlcmF0aW9uJiMzOTtzIG93biBleHQ0X3hhdHRyX2lub2RlX2FsbG9jX3F1b3RhKCkKJiM0MzsJCSAqIGNoYXJnZSwgc28gbm8gRUEgaW5vZGUgcG9pbnRlciBpcyBuZWVkZWQgaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCBxdW90YV9sZW4pOwomIzQzOwkJZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwomIzQzOwl9CiYjNDM7CWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgbmV3X2JoLCAwLCAxLAomIzQzOwkJCSBFWFQ0X0ZSRUVfQkxPQ0tTX01FVEFEQVRBIHwKJiM0MzsJCQkgRVhUNF9GUkVFX0JMT0NLU19GT1JHRVQpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBGaW5kIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSBmb3IgRUFzLiBUaGlzIGFsc28gcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mCiAgKiBieXRlcyB1c2VkIGJ5IEVBIGVudHJpZXMuCkBAIC0yMTY5LDggJiM0MzsyMjI2LDEzIEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2Jsb2NrX2NhY2hlX2luc2VydChlYV9ibG9ja19jYWNoZSwgbmV3X2JoKTsKIAkJCWVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwKIAkJCQkJCQkgICBuZXdfYmgpOwotCQkJaWYgKGVycm9yKQomIzQzOwkJCWlmIChlcnJvcikgewomIzQzOwkJCQlleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwKJiM0MzsJCQkJCQkJICBpLSZndDtpbl9pbm9kZSA/CiYjNDM7CQkJCQkJCSAgaS0mZ3Q7dmFsdWVfbGVuIDogMCwKJiM0MzsJCQkJCQkJICBlcnJvcik7CiAJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJCX0KIAkJfQogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnMvZXh0NC94YXR0ci5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBuZXcgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyAqZGVmaW5pdGVseSogYW4gZXJyb3IgaGFuZGxpbmcgcGF0aC4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0aGVyZSB0byBjbGVhbiB1cCBhZnRlciBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzIHdpdGhpbiBgZXh0NF94YXR0cl9ibG9ja19zZXRgLiBUaGF0IGNvcmUgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGlzIGtleSBmb3IgYWN0dWFsbHkgc2V0dGluZyBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIGV4dDQuIEJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBmaXggYW5kICpkZWZpbml0ZWx5KiBzb21ldGhpbmcgdGhhdCYjMzk7cyB3b3J0aCBoaXR0aW5nIHdpdGggc29tZSBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyBhbmQgaWRlbnRpZnkgdGhlIGJlc3QgcGxhY2UgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGFuZCBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgYXJlIHRoZSB0d28gbWFpbiBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGdldHMgY2FsbGVkIGZyb20gYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgaXMgc3RhdGljLiBBbHJpZ2h0LCB0aGF0IG1lYW5zIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgcHJvYmFibHkgYSBnb29kIGVudHJ5IHBvaW50IHRvIHN0YXJ0IHdpdGgsIG9yIG1heWJlIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIHNpbmNlIGl0IGNhbGxzIGl0LgoKSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBmcy9leHQ0L3hhdHRyLmNgIHRvIGNvbmZpcm0gd2hldGhlciBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGlzIHN0YXRpYywganVzdCB0byBiZSBzdXJlLiBUaGF0IHdvdWxkIGFmZmVjdCBob3cgYWNjZXNzaWJsZSBpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9MTI3Mj1leHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTI5NC1cdFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcbmZzL2V4dDQveGF0dHIuYzoxMjk1Olx0XHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBmcmVlZCBibG9ja1xuZnMvZXh0NC94YXR0ci5jLTEyOTYtXHRcdCAqL1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xOTU1PXN0YXRpYyBpbnRcbmZzL2V4dDQveGF0dHIuYzoxOTU2OmV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTk1Ny1cdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMDAxLVx0XHRcdCAqIFRoaXMgbXVzdCBoYXBwZW4gdW5kZXIgYnVmZmVyIGxvY2sgZm9yXG5mcy9leHQ0L3hhdHRyLmM6MjAwMjpcdFx0XHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBtb2RpZmllZFxuZnMvZXh0NC94YXR0ci5jLTIwMDMtXHRcdFx0ICogYmxvY2tcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjQxMT1leHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI0OTQtXHRcdGVsc2UgaWYgKCFicy5zLm5vdF9mb3VuZClcbmZzL2V4dDQveGF0dHIuYzoyNDk1Olx0XHRcdGVycm9yID0gZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aSwgXHUwMDI2YnMpO1xuZnMvZXh0NC94YXR0ci5jLTI0OTYtXHR9IGVsc2Uge1xuLS1cbmZzL2V4dDQveGF0dHIuYy0yNTExLVx0XHRcdGkudmFsdWUgPSBOVUxMO1xuZnMvZXh0NC94YXR0ci5jOjI1MTI6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZicyk7XG5mcy9leHQ0L3hhdHRyLmMtMjUxMy1cdFx0fSBlbHNlIGlmIChlcnJvciA9PSAtRU5PU1BDKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTI1MjAtXHRcdFx0fVxuZnMvZXh0NC94YXR0ci5jOjI1MjE6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZicyk7XG5mcy9leHQ0L3hhdHRyLmMtMjUyMi1cdFx0XHRpZiAoIWVycm9yIFx1MDAyNlx1MDAyNiAhaXMucy5ub3RfZm91bmQpIHtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjY2Nz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNzMyLVx0LyogTW92ZSBlYSBlbnRyeSBmcm9tIHRoZSBpbm9kZSBpbnRvIHRoZSBibG9jayAqL1xuZnMvZXh0NC94YXR0ci5jOjI3MzM6XHRlcnJvciA9IGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmksIGJzKTtcbmZzL2V4dDQveGF0dHIuYy0yNzM0LVx0aWYgKGVycm9yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgZXh0NCBFeHRlbmRlZCBBdHRyaWJ1dGUgSGFuZGxpbmcqKgoKQWxyaWdodCwgc28gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IG9wZXJhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQgdXN1YWxseSBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIGluIHNjb3BlLCBsaWtlbHkgb25seSB2aXNpYmxlIGFuZCB1c2FibGUgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQgb3Igc291cmNlIGZpbGUuIE1ha2VzIHNlbnNlIGZvciBzb21lIGxvdy1sZXZlbCBibG9jay1zZXR0aW5nIG9wZXJhdGlvbiwgcHJvYmFibHkuIE5vdywgbGV0JiMzOTtzIHNlZSwgd2hhdCBhYm91dCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYD8gQWgsIGl0JiMzOTtzICpub3QqIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgaGludHMgdGhhdCBpdCBpcyBkZXNpZ25lZCB0byBiZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGV4dDQgZmlsZSBzeXN0ZW0gY29kZS4gT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYC4gVGltZSB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB3aGF0IGl0cyByb2xlIGlzIGluIHRoZSBlbnRpcmUgYXR0cmlidXRlIHNldHRpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jPTIzODA9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF94YXR0cl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjM5OC0vKlxuZnMvZXh0NC94YXR0ci5jOjIzOTk6ICogZXh0NF94YXR0cl9zZXRfaGFuZGxlKClcbmZzL2V4dDQveGF0dHIuYy0yNDAwLSAqXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI0MTA9aW50XG5mcy9leHQ0L3hhdHRyLmM6MjQxMTpleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXG5mcy9leHQ0L3hhdHRyLmMtMjQxMi1cdFx0ICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI1NjM9aW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjU5Mi0gKlxuZnMvZXh0NC94YXR0ci5jOjI1OTM6ICogTGlrZSBleHQ0X3hhdHRyX3NldF9oYW5kbGUsIGJ1dCBzdGFydCBmcm9tIGFuIGlub2RlLiBUaGlzIGV4dGVuZGVkXG5mcy9leHQ0L3hhdHRyLmMtMjU5NC0gKiBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIGlzIGEgZmlsZXN5c3RlbSB0cmFuc2FjdGlvbiBieSBpdHNlbGYuXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI1OTk9ZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI2MjItXG5mcy9leHQ0L3hhdHRyLmM6MjYyMzpcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSxcbmZzL2V4dDQveGF0dHIuYy0yNjI0LVx0XHRcdFx0XHQgICAgICB2YWx1ZSwgdmFsdWVfbGVuLCBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBleHQ0IEF0dHJpYnV0ZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGFuZCBgZXh0NF94YXR0cl9zZXRgIGZ1bmN0aW9ucywgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gbm90aW5nIHNvbWV0aGluZy4gVGhleSBhcmVuJiMzOTt0IHN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm9uLXN0YXRpYyBmdW5jdGlvbnMgc3VnZ2VzdCB0aGVzZSBhcmUgbGlrZWx5IGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiBwb3RlbnRpYWxseSBmcm9tIHVzZXIgc3BhY2UgKHRob3VnaCwgb2YgY291cnNlLCBwcm9wZXIgc2VjdXJpdHkgY2hlY2tzIHdvdWxkIGJlIGluIHBsYWNlKS4gSXQgaW1wbGllcyBhIGJyb2FkZXIsIG1vcmUgYWNjZXNzaWJsZSByb2xlIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIG1vZHVsZSwgYmV5b25kIGp1c3QgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4KClRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBhcmUgYmVpbmcgdXNlZCwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMgc3BlY2lmaWMgdG8gZXh0NC4gSSBuZWVkIHRvIHNlZSB3aGljaCBjb25maWd1cmF0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSBleHRlbmRlZCBhdHRyaWJ1dGUgc3VwcG9ydCB3aXRoaW4gZXh0NCwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgd2l0aGluIHdoaWNoIHRoZXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBjb21waWxlZCBhbmQgcG90ZW50aWFsbHkgY2FsbGVkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgdGhlIHBvc3NpYmxlIGRlcGVuZGVuY2llcyB0aGF0IGltcGFjdCB0aGVzZSBmdW5jdGlvbnMmIzM5OyBhdmFpbGFiaWxpdHkgYW5kIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgRVhUNCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBiYXNlIGZpbGVzeXN0ZW0gY29uZmlnIGlzIGRlZmluaXRlbHkgc2V0IHRvIGBFWFQ0X0ZTYC4gTm93IEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBtYWtlIHN1cmUgYWxsIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBzZXQgdXAgcHJvcGVybHkuIElzIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcyB3aXRoaW4gdGhlIEVYVDQgZmlsZXN5c3RlbSBpdHNlbGY/IFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBhbmQgbG9vayBhdCB0aGUgYGZzL2V4dDQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSYjMzk7cyBhIHJlbGF0ZWQgYFhBVFRSYCBvcHRpb24gZGVmaW5lZCB0aGVyZSBhbmQgY29uZmlybSBpdHMgc3RhdHVzLiBHb3R0YSBiZSB0aG9yb3VnaCB3aXRoIHRoZXNlIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbnMsIHlvdSBrbm93PyBPbmUgbWlzc2VkIGJpdCBhbmQgaXQgY291bGQgYWxsIGNvbWUgY3Jhc2hpbmcgZG93biBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEV4dDQgRXh0ZW5kZWQgQXR0cmlidXRlcyoqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGV4dDQgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgZXh0ZW5kZWQgYXR0cmlidXRlcyByZWNlbnRseSwgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IEkgc2hvdWxkIGZpbmQgdGhlIGBYQVRUUmAgb3B0aW9uIHdpdGhpbiB0aGUgYGZzL2V4dDQvS2NvbmZpZ2AgZmlsZSwgYnV0IGl0IHNlZW1zIHRoZXJlJiMzOTtzIG5vIHN1Y2ggb3B0aW9uIGRlZmluZWQgdGhlcmUuIEhtbSwgdGhhdCYjMzk7cyB1bnVzdWFsLiBEaWQgSSByZW1lbWJlciBpbmNvcnJlY3RseT8gT3IgcGVyaGFwcyBpcyBpdCBhbHdheXMgZW5hYmxlZCwgbGlrZSB0aGUgZmlsZSBpbmRpY2F0ZXM/CgpMZXQgbWUgZG91YmxlLWNoZWNrLiBUaGUgYEtjb25maWdgIGZpbGUgaXMgbm90IGFsd2F5cyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG1vZHVsZS4gSXQmIzM5O3Mgb2Z0ZW4gYmV0dGVyIHRvIGdvIGRlZXBlci4gTWF5YmUgdGhlIGJ1aWxkIHN5c3RlbSBpdHNlbGYgaXMgbWFuYWdpbmcgdGhlIGRlcGVuZGVuY2llcy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGZzL2V4dDQvTWFrZWZpbGVgIGZpbGUgdG8gc2VlIGhvdyB0aG9zZSBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLiBIb3BlZnVsbHksIHRoZSBgTWFrZWZpbGVgIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiBleHRlbmRlZCBhdHRyaWJ1dGUgc3VwcG9ydCBhbmQgY2xhcmlmeSB3aGV0aGVyIGl0JiMzOTtzIHN0YXRpY2FsbHkgY29tcGlsZWQgb3IgZGVwZW5kZW50IG9uIG90aGVyIHNldHRpbmdzLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoIGZvciB0aGUgdGFzayBhdCBoYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcbi0tXG5mcy9leHQ0L01ha2VmaWxlLTExLVx0XHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTI6XHRcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEzOlx0XHR4YXR0cl91c2VyLm8gZmFzdF9jb21taXQubyBvcnBoYW4ub1xuZnMvZXh0NC9NYWtlZmlsZS0xNC1cbmZzL2V4dDQvTWFrZWZpbGU9MTU9ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcdCYjNDM7PSBhY2wub1xuZnMvZXh0NC9NYWtlZmlsZToxNjpleHQ0LSQoQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkpXHRcdCYjNDM7PSB4YXR0cl9zZWN1cml0eS5vXG5mcy9leHQ0L01ha2VmaWxlLTE3LWV4dDQtdGVzdC1vYmpzXHRcdFx0XHQmIzQzOz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMDEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBleHQ0X3hhdHRyYCBDb21waWxhdGlvbiBhbmQgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHhhdHRyLm9gIGlzIGluZGVlZCBhbHdheXMgY29tcGlsZWQgd2hlbiBgRVhUNF9GU2AgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kLCB0aGF0IG1lYW5zIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50IGlzIHNpbXBsZToganVzdCBgRVhUNF9GU2AuIEkmIzM5O2xsIGtlZXAgYW4gZXllIG9uIGBleHQ0X3hhdHRyX3NldGAgYW5kIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgLCB0aGV5IHNlZW0gbGlrZSBrZXkgZnVuY3Rpb25zIGhlcmUuCgpXYWl0IGEgc2Vjb25kLCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGRlYWxpbmcgd2l0aCBhbiAqZXJyb3IqIHBhdGgsIHNwZWNpZmljYWxseSBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAuIEl0IGdldHMgY2FsbGVkIHdoZW4gYGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCBmYWlscywgbWVhbmluZyBpdCYjMzk7cyBjbGVhbmluZyB1cCBhZnRlciBhIHByb2JsZW0gZHVyaW5nIHRoZSBzZXR1cCBvZiBhIG5ldyB4YXR0ciBibG9jay4gVGhhdCBtYWtlcyB0aGlzIGEgKnJlYWxseSogaW50ZXJlc3RpbmcgdGFyZ2V0IGZvciBmdXp6aW5nLiBFcnJvciBoYW5kbGluZyBwYXRocyBhcmUgb2Z0ZW4gd2hlcmUgYnVncyBsdXJrLiBJIHNob3VsZCBkZWZpbml0ZWx5IGdpdmUgdGhpcyBhIGNsb3NlciBsb29rIQoKTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IHJlbGF0ZWQgZnVuY3Rpb25zLiBBaCwgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpcyBzdGF0aWMsIHNvIGxpa2VseSBub3QgZGlyZWN0bHkgZXhwb3NlZC4gYGV4dDRfeGF0dHJfc2V0YCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBhbm90aGVyIGZ1bmN0aW9uIEkgc2hvdWxkIGFkZCB0byBteSBsaXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmV4dDRfeGF0dHJfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipVbnBhY2tpbmcgdGhlIE5vbi1TdGF0aWMsIE5vbi1FeHBvcnRlZCBFbmlnbWEqKgoKSG1tLCBpbnRlcmVzdGluZy4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSwgYW5kIGl0JiMzOTtzIGdvdCBtZSB0aGlua2luZy4gSXQmIzM5O3MgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1lYW5zIGl0ICpjb3VsZCogYmUgdXNlZCBleHRlcm5hbGx5LCBidXQgdGhlIGNvbXBpbGVyIGRpZG4mIzM5O3QgZmxhZyBpdCBhcyBleHBvcnRlZCBlaXRoZXIuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNpdHVhdGlvbiB0aGF0IHVzdWFsbHkgbWVhbnMgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBub3csIEkmIzM5O20gY2hlY2tpbmcsIGFuZCBgZXh0NF94YXR0cl9zZXRgIGlzICpkZWZpbml0ZWx5KiBub3QgZXhwbGljaXRseSBleHBvcnRlZCBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UsIGJ1dCBJJiMzOTt2ZSBkZWZpbml0ZWx5IHNlZW4gaXQgdXNlZCBmcm9tIHdpdGhpbiBvdGhlciBwYXJ0cyBvZiB0aGUgZmlsZXN5c3RlbSBjb2RlLiBUaGF0IG1lYW5zIHRoZXJlJiMzOTtzIHNvbWUgc29ydCBvZiBub24tc3RhbmRhcmQgdXNhZ2UsIG9yIGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkIHZpYSBhbiBpbmRpcmVjdCBtZXRob2QsIHBvc3NpYmx5IHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIG9yIGEgbWFjcm8gZXhwYW5zaW9uLCByYXRoZXIgdGhhbiBhIGRpcmVjdCwgZXhwbGljaXQgZGVjbGFyYXRpb24uIEdvdHRhIHVuZGVyc3RhbmQgdGhlIGxpbmtpbmcgYmVoYXZpb3IgYXJvdW5kIGBleHQ0X3hhdHRyX3NldGAuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgYmVpbmcgYWNjZXNzZWQgYW5kIHdoeSB0aGUgZXhwb3J0IGlzbiYjMzk7dCBvYnZpb3VzLiBUaGlzIGNvdWxkIGJlIGludGVudGlvbmFsIGRlc2lnbiwgb3IgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBvciBpbmNsdWRlIHBhdGhzLiBUaW1lIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvYWNsLmM9MTg5PV9fZXh0NF9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxuLS1cbmZzL2V4dDQvYWNsLmMtMjE2LVxuZnMvZXh0NC9hY2wuYzoyMTc6XHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBuYW1lX2luZGV4LCBcJiMzNDtcJiMzNDssXG5mcy9leHQ0L2FjbC5jLTIxOC1cdFx0XHRcdCAgICAgIHZhbHVlLCBzaXplLCB4YXR0cl9mbGFncyk7XG4tLVxuZnMvZXh0NC9hY2wuYz0yMjg9ZXh0NF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvZXh0NC9hY2wuYy0yNDEtcmV0cnk6XG5mcy9leHQ0L2FjbC5jOjI0MjpcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZSwgYWNsX3NpemUsIGZhbHNlIC8qIGlzX2NyZWF0ZSAqLyxcbmZzL2V4dDQvYWNsLmMtMjQzLVx0XHRcdFx0ICAgICAgIFx1MDAyNmNyZWRpdHMpO1xuLS1cbmZzL2V4dDQvY3J5cHRvLmM9MTMyPXN0YXRpYyBpbnQgZXh0NF9zZXRfY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICpjdHgsIHNpemVfdCBsZW4sXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy0xNzItXHRcdCAqL1xuZnMvZXh0NC9jcnlwdG8uYzoxNzM6XHRcdHJlcyA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLFxuZnMvZXh0NC9jcnlwdG8uYy0xNzQtXHRcdFx0XHRcdCAgICBFWFQ0X1hBVFRSX0lOREVYX0VOQ1JZUFRJT04sXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy0xOTMtcmV0cnk6XG5mcy9leHQ0L2NyeXB0by5jOjE5NDpcdHJlcyA9IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoaW5vZGUsIGxlbiwgZmFsc2UgLyogaXNfY3JlYXRlICovLFxuZnMvZXh0NC9jcnlwdG8uYy0xOTUtXHRcdFx0XHQgICAgIFx1MDAyNmNyZWRpdHMpO1xuLS1cbmZzL2V4dDQvY3J5cHRvLmMtMjAyLVxuZnMvZXh0NC9jcnlwdG8uYzoyMDM6XHRyZXMgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9FTkNSWVBUSU9OLFxuZnMvZXh0NC9jcnlwdG8uYy0yMDQtXHRcdFx0XHQgICAgRVhUNF9YQVRUUl9OQU1FX0VOQ1JZUFRJT05fQ09OVEVYVCxcbi0tXG5mcy9leHQ0L2lhbGxvYy5jPTg3Nj1zdGF0aWMgaW50IGV4dDRfeGF0dHJfY3JlZGl0c19mb3JfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBtb2RlX3QgbW9kZSxcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTg4OS1cdFx0bmJsb2NrcyAmIzQzOz0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKlxuZnMvZXh0NC9pYWxsb2MuYzo4OTA6XHRcdFx0X19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHNiLCBOVUxMIC8qIGlub2RlICovLFxuZnMvZXh0NC9pYWxsb2MuYy04OTEtXHRcdFx0XHRcdFx0IE5VTEwgLyogYmxvY2tfYmggKi8sIGFjbF9zaXplLFxuLS1cbmZzL2V4dDQvaWFsbG9jLmMtOTA4LVx0XHRuYmxvY2tzICYjNDM7PSBudW1fc2VjdXJpdHlfeGF0dHJzICpcbmZzL2V4dDQvaWFsbG9jLmM6OTA5Olx0XHRcdF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzYiwgTlVMTCAvKiBpbm9kZSAqLyxcbmZzL2V4dDQvaWFsbG9jLmMtOTEwLVx0XHRcdFx0XHRcdCBOVUxMIC8qIGJsb2NrX2JoICovLCAxMDI0LFxuLS1cbmZzL2V4dDQvaWFsbG9jLmMtOTE0LVx0aWYgKGVuY3J5cHQpXG5mcy9leHQ0L2lhbGxvYy5jOjkxNTpcdFx0bmJsb2NrcyAmIzQzOz0gX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHNiLFxuZnMvZXh0NC9pYWxsb2MuYy05MTYtXHRcdFx0XHRcdFx0ICAgIE5VTEwgLyogaW5vZGUgKi8sXG4tLVxuZnMvZXh0NC94YXR0ci5jPTkyOD1zdGF0aWMgdm9pZCBleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoc3RydWN0IGlub2RlICpwYXJlbnQsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTkzOC1cbmZzL2V4dDQveGF0dHIuYzo5Mzk6aW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC94YXR0ci5jLTk0MC1cdFx0XHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmxvY2tfYmgsIHNpemVfdCB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE2MzU9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTE2ODUtXG5mcy9leHQ0L3hhdHRyLmM6MTY4NjpzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXG5mcy9leHQ0L3hhdHRyLmMtMTY4Ny1cdFx0XHRcdHN0cnVjdCBleHQ0X3hhdHRyX3NlYXJjaCAqcyxcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTk1Nj1leHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMDE5LVx0XHRcdGVhX2JkZWJ1Zyhicy1cdTAwM2ViaCwgXCYjMzQ7bW9kaWZ5aW5nIGluLXBsYWNlXCYjMzQ7KTtcbmZzL2V4dDQveGF0dHIuYzoyMDIwOlx0XHRcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfZW50cnkoaSwgcywgaGFuZGxlLCBpbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0yMDIxLVx0XHRcdFx0XHQgICAgIGVhX2lub2RlLCB0cnVlIC8qIGlzX2Jsb2NrICovKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjA0Ny1cdFx0ICogSWYgZXhpc3RpbmcgZW50cnkgcG9pbnRzIHRvIGFuIHhhdHRyIGlub2RlLCB3ZSBuZWVkXG5mcy9leHQ0L3hhdHRyLmM6MjA0ODpcdFx0ICogdG8gcHJldmVudCBleHQ0X3hhdHRyX3NldF9lbnRyeSgpIGZyb20gZGVjcmVtZW50aW5nXG5mcy9leHQ0L3hhdHRyLmMtMjA0OS1cdFx0ICogcmVmIGNvdW50IG9uIGl0IGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBiZWxvbmdzIHRvIHRoZVxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMDg4LVxuZnMvZXh0NC94YXR0ci5jOjIwODk6XHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2VudHJ5KGksIHMsIGhhbmRsZSwgaW5vZGUsIGVhX2lub2RlLFxuZnMvZXh0NC94YXR0ci5jLTIwOTAtXHRcdFx0XHQgICAgIHRydWUgLyogaXNfYmxvY2sgKi8pO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yMzE2PWludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMzM2LVx0fVxuZnMvZXh0NC94YXR0ci5jOjIzMzc6XHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2VudHJ5KGksIHMsIGhhbmRsZSwgaW5vZGUsIGVhX2lub2RlLFxuZnMvZXh0NC94YXR0ci5jLTIzMzgtXHRcdFx0XHQgICAgIGZhbHNlIC8qIGlzX2Jsb2NrICovKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjM4MD1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X3hhdHRyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMzk4LS8qXG5mcy9leHQ0L3hhdHRyLmM6MjM5OTogKiBleHQ0X3hhdHRyX3NldF9oYW5kbGUoKVxuZnMvZXh0NC94YXR0ci5jLTI0MDAtICpcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjQxMD1pbnRcbmZzL2V4dDQveGF0dHIuYzoyNDExOmV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmFtZV9pbmRleCxcbmZzL2V4dDQveGF0dHIuYy0yNDEyLVx0XHQgICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbixcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjQ0OC1cbmZzL2V4dDQveGF0dHIuYzoyNDQ5Olx0XHRjcmVkaXRzID0gX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLCBiaCxcbmZzL2V4dDQveGF0dHIuYy0yNDUwLVx0XHRcdFx0XHRcdCAgIHZhbHVlX2xlbixcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjU2Mi1cbmZzL2V4dDQveGF0dHIuYzoyNTYzOmludCBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCB2YWx1ZV9sZW4sXG5mcy9leHQ0L3hhdHRyLmMtMjU2NC1cdFx0XHQgICBib29sIGlzX2NyZWF0ZSwgaW50ICpjcmVkaXRzKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNTc5LVx0fSBlbHNlIHtcbmZzL2V4dDQveGF0dHIuYzoyNTgwOlx0XHQqY3JlZGl0cyA9IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZSwgYmgsXG5mcy9leHQ0L3hhdHRyLmMtMjU4MS1cdFx0XHRcdFx0XHQgICAgdmFsdWVfbGVuLCBpc19jcmVhdGUpO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0yNTkwLS8qXG5mcy9leHQ0L3hhdHRyLmM6MjU5MTogKiBleHQ0X3hhdHRyX3NldCgpXG5mcy9leHQ0L3hhdHRyLmMtMjU5Mi0gKlxuZnMvZXh0NC94YXR0ci5jOjI1OTM6ICogTGlrZSBleHQ0X3hhdHRyX3NldF9oYW5kbGUsIGJ1dCBzdGFydCBmcm9tIGFuIGlub2RlLiBUaGlzIGV4dGVuZGVkXG5mcy9leHQ0L3hhdHRyLmMtMjU5NC0gKiBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIGlzIGEgZmlsZXN5c3RlbSB0cmFuc2FjdGlvbiBieSBpdHNlbGYuXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI1OTg9aW50XG5mcy9leHQ0L3hhdHRyLmM6MjU5OTpleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmFtZV9pbmRleCwgY29uc3QgY2hhciAqbmFtZSxcbmZzL2V4dDQveGF0dHIuYy0yNjAwLVx0ICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuLCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI2MTEtcmV0cnk6XG5mcy9leHQ0L3hhdHRyLmM6MjYxMjpcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZSwgdmFsdWVfbGVuLCBmbGFncyBcdTAwMjYgWEFUVFJfQ1JFQVRFLFxuZnMvZXh0NC94YXR0ci5jLTI2MTMtXHRcdFx0XHQgICAgICAgXHUwMDI2Y3JlZGl0cyk7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTI2MjItXG5mcy9leHQ0L3hhdHRyLmM6MjYyMzpcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSxcbmZzL2V4dDQveGF0dHIuYy0yNjI0LVx0XHRcdFx0XHQgICAgICB2YWx1ZSwgdmFsdWVfbGVuLCBmbGFncyk7XG4tLVxuZnMvZXh0NC94YXR0ci5oPTE4MD1leHRlcm4gaW50IGV4dDRfeGF0dHJfZ2V0KHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpO1xuZnMvZXh0NC94YXR0ci5oOjE4MTpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7XG5mcy9leHQ0L3hhdHRyLmg6MTgyOmV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7XG5mcy9leHQ0L3hhdHRyLmg6MTgzOmV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3QgdmFsdWVfbGVuLFxuZnMvZXh0NC94YXR0ci5oLTE4NC1cdFx0XHRcdCAgYm9vbCBpc19jcmVhdGUsIGludCAqY3JlZGl0cyk7XG5mcy9leHQ0L3hhdHRyLmg6MTg1OmV4dGVybiBpbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmgtMTg2LVx0XHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpibG9ja19iaCwgc2l6ZV90IHZhbHVlX2xlbixcbi0tXG5mcy9leHQ0L3hhdHRyX2h1cmQuYz0zND1leHQ0X3hhdHRyX2h1cmRfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxuLS1cbmZzL2V4dDQveGF0dHJfaHVyZC5jLTQyLVxuZnMvZXh0NC94YXR0cl9odXJkLmM6NDM6XHRyZXR1cm4gZXh0NF94YXR0cl9zZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfSFVSRCxcbmZzL2V4dDQveGF0dHJfaHVyZC5jLTQ0LVx0XHRcdCAgICAgIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7XG4tLVxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jPTI1PWV4dDRfeGF0dHJfc2VjdXJpdHlfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxuLS1cbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYy0zMC17XG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM6MzE6XHRyZXR1cm4gZXh0NF94YXR0cl9zZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFksXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMtMzItXHRcdFx0ICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbi0tXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM9MzY9ZXh0NF9pbml0eGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCB4YXR0ciAqeGF0dHJfYXJyYXksXG4tLVxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTQzLVx0Zm9yICh4YXR0ciA9IHhhdHRyX2FycmF5OyB4YXR0ci1cdTAwM2VuYW1lICE9IE5VTEw7IHhhdHRyJiM0MzsmIzQzOykge1xuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jOjQ0Olx0XHRlcnIgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSxcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYy00NS1cdFx0XHRcdFx0ICAgIEVYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFksXG4tLVxuZnMvZXh0NC94YXR0cl90cnVzdGVkLmM9MzI9ZXh0NF94YXR0cl90cnVzdGVkX3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYy0zNy17XG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYzozODpcdHJldHVybiBleHQ0X3hhdHRyX3NldChpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9UUlVTVEVELFxuZnMvZXh0NC94YXR0cl90cnVzdGVkLmMtMzktXHRcdFx0ICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbi0tXG5mcy9leHQ0L3hhdHRyX3VzZXIuYz0zMz1leHQ0X3hhdHRyX3VzZXJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxuLS1cbmZzL2V4dDQveGF0dHJfdXNlci5jLTQwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5mcy9leHQ0L3hhdHRyX3VzZXIuYzo0MTpcdHJldHVybiBleHQ0X3hhdHRyX3NldChpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9VU0VSLFxuZnMvZXh0NC94YXR0cl91c2VyLmMtNDItXHRcdFx0ICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODgKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IFhhdHRyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGV4dDQgcGF0Y2ggcmVsYXRlZCB0byBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpLiBUaGUga2V5IGZ1bmN0aW9ucyBoZXJlLCB0aGUgb25lcyBJIHdhbnQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcsIGFyZSBgZXh0NF94YXR0cl9zZXRgIGFuZCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYC4gVGhleSYjMzk7cmUgZXhwb3J0ZWQgaW4gYGZzL2V4dDQveGF0dHIuaGAsIHNvIHRoZXkmIzM5O3JlIHByZXR0eSBjZW50cmFsIHRvIHRoZSB3aG9sZSB4YXR0ciBzdWJzeXN0ZW0uIFRoZXNlIGFyZSBnb29kIGZvY2FsIHBvaW50cy4KCkZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudC4gVGhlIG1haW4gb25lLCBvYnZpb3VzbHksIGlzIGBFWFQ0X0ZTYCwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gaGF2aW5nIGFuIGV4dDQgZmlsZXN5c3RlbSBhdCBhbGwuIEl0IGxvb2tzIGxpa2UgYEVYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFsc28gdXNlIHhhdHRycywgc28gdGhleSBtaWdodCBiZSB0YW5nZW50aWFsbHkgaW52b2x2ZWQsIGJ1dCB0aGUgY29yZSBpc3N1ZSBzaG91bGQgYmUgdHJpZ2dlcmVkIHdpdGgganVzdCBgRVhUNF9GU2AuIFNpbmNlIHRoZSBpc3N1ZSBpcyB3aXRoaW4gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgd2hpY2ggaXMgY2FsbGVkIGZvciBhbnkgeGF0dHIsIHRoaXMgY29uZmlybXMgYEVYVDRfRlNgIGFzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEkgc2VlIGEgbmV3IGZ1bmN0aW9uLCBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgc3BlY2lmaWNhbGx5IHdoZW4gYGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCByZXR1cm5zIGFuIGVycm9yOgoKYGBgYwomIzQzO3N0YXRpYyB2b2lkIGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmgsCiYjNDM7CQkJCSAgICAgIHNpemVfdCBxdW90YV9sZW4sIGludCBlcnJvcikKYGBgCgpUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWxgIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoLiBUaGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludHJvZHVjZWQgdG8gaGFuZGxlIGNhc2VzIHdoZW4gYGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCBmYWlscy4gV2hhdCB0aGF0IGltcGxpZXMgaXMgdGhhdCB0aGVyZSB3YXMgcHJldmlvdXNseSBhIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrIG9yIGluY29ycmVjdCBzdGF0ZSBpbiB0aGUgZXZlbnQgb2YgdGhpcyBmYWlsdXJlLCBhbmQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhhdC4gVGhlIG5ldyBmdW5jdGlvbiBsaWtlbHkgZG9lcyB0aGluZ3MgbGlrZSByZWxlYXNpbmcgcmVmZXJlbmNlcywgZnJlZWluZyB0aGUgYmxvY2ssIGFuZCBoYW5kbGluZyBxdW90YSBhY2NvdW50aW5nIHdoZW4gdGhlcmUgaXMgYSBtZXRhZGF0YSBlcnJvci4KClRoaXMgaXMgZXhhY3RseSB0aGUgdHlwZSBvZiB0aGluZyB0aGF0ICpuZWVkcyogdG8gYmUgZnV6emVkLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gYSBjb3JlIGV4dDQgZnVuY3Rpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGVycm9yIHJlY292ZXJ5IGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIGRvdWJsZSBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZXMuIFRoaXMgbG9va3MgbGlrZSBhIGRlZmluaXRlIHdpbiBmb3IgZnV6emluZy4KClRoZXJlZm9yZSwgZm9yIHNldC1yZXN1bHRzLCBJJiMzOTtsbCBzcGVjaWZ5OgoKRm9jdXMgc3ltYm9sczoKLSBgZXh0NF94YXR0cl9zZXRgCi0gYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAKCkVuYWJsZUNvbmZpZ3M6Ci0gYEVYVDRfRlNgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXRfaGFuZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBhIG5ldyBmdW5jdGlvbiBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgdG8gcHJvcGVybHkgcmVsZWFzZSByZXNvdXJjZXMgKHJlZmVyZW5jZXMsIGJsb2NrLCBxdW90YSkgd2hlbiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzIG9uIGEgbmV3bHkgYWxsb2NhdGVkIHhhdHRyIGJsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHJlY292ZXJ5IHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXRfaGFuZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBhIG5ldyBmdW5jdGlvbiBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgdG8gcHJvcGVybHkgcmVsZWFzZSByZXNvdXJjZXMgKHJlZmVyZW5jZXMsIGJsb2NrLCBxdW90YSkgd2hlbiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzIG9uIGEgbmV3bHkgYWxsb2NhdGVkIHhhdHRyIGJsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHJlY292ZXJ5IHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXJyb3IgaGFuZGxpbmcgZnVuY3Rpb24gYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWxgIHRvIHByb3Blcmx5IGNsZWFuIHVwIGEgbmV3bHkgYWxsb2NhdGVkIHhhdHRyIGJsb2NrIGlmIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nLCBjYWNoZSBlbnRyeSBtYW5hZ2VtZW50LCBxdW90YSByZWxlYXNpbmcsIGFuZCBibG9jayBmcmVlaW5nLiBUaGVzZSBvcGVyYXRpb25zIHByaW1hcmlseSByaXNrIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzg3NWIxNmZjMzQxMmNjZWY2NDM3YmI3YTMxMDVjOWRkMmRlZGU3NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDExOjAzOjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jCmluZGV4IDk4MmExZjgzMWUyMjguLmUwODZjODM5NTA0MmEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmMKQEAgLTEzNjIsNiAmIzQzOzEzNjIsNjMgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuOwogfQogCiYjNDM7LyoKJiM0MzsgKiBVbmRvIHRoZSBzZXR1cCBvZiBhIG5ldyB4YXR0ciBibG9jayB0aGF0IGZhaWxlZCB0byBiZSB3cml0dGVuIG91dDogZHJvcAomIzQzOyAqIHRoZSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKCkgcmVmZXJlbmNlcywgZnJlZSB0aGUgYmxvY2ssIGFuZAomIzQzOyAqIHJlbGVhc2UgdGhlIHF1b3RhIHRoaXMgb3BlcmF0aW9uIGNoYXJnZWQgZm9yIHRoZSBuZXcgdmFsdWUgKHF1b3RhX2xlbiwKJiM0MzsgKiB6ZXJvIHdoZW4gdGhlIHZhbHVlIGlzIG5vdCBpbiBhbiBFQSBpbm9kZSkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCwKJiM0MzsJCQkJICAgICAgc2l6ZV90IHF1b3RhX2xlbiwgaW50IGVycm9yKQomIzQzO3sKJiM0MzsJc3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTsKJiM0MzsJc3RydWN0IG1iX2NhY2hlX2VudHJ5ICpvZTsKJiM0MzsJc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDsKJiM0MzsKJiM0MzsJZXh0NF9lcnJvcl9pbm9kZShpbm9kZSwgX19mdW5jX18sIF9fTElORV9fLCAwLAomIzQzOwkJCSAmIzM0O3hhdHRyIGJsb2NrIGRpcnR5IGZhaWxlZDogJWQmIzM0OywgZXJyb3IpOwomIzQzOwlsb2NrX2J1ZmZlcihuZXdfYmgpOwomIzQzO3JldHJ5X293bmVyOgomIzQzOwlpZiAobGUzMl90b19jcHUoQkhEUihuZXdfYmgpLSZndDtoX3JlZmNvdW50KSAhPSAxKSB7CiYjNDM7CQl1bmxvY2tfYnVmZmVyKG5ld19iaCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJaWYgKGVhX2Jsb2NrX2NhY2hlKSB7CiYjNDM7CQlvZSA9IG1iX2NhY2hlX2VudHJ5X2RlbGV0ZV9vcl9nZXQoZWFfYmxvY2tfY2FjaGUsCiYjNDM7CQkJCQkJICBsZTMyX3RvX2NwdShCSERSKG5ld19iaCktJmd0O2hfaGFzaCksCiYjNDM7CQkJCQkJICBuZXdfYmgtJmd0O2JfYmxvY2tucik7CiYjNDM7CQlpZiAob2UpIHsKJiM0MzsJCQl1bmxvY2tfYnVmZmVyKG5ld19iaCk7CiYjNDM7CQkJbWJfY2FjaGVfZW50cnlfd2FpdF91bnVzZWQob2UpOwomIzQzOwkJCW1iX2NhY2hlX2VudHJ5X3B1dChlYV9ibG9ja19jYWNoZSwgb2UpOwomIzQzOwkJCWxvY2tfYnVmZmVyKG5ld19iaCk7CiYjNDM7CQkJZ290byByZXRyeV9vd25lcjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlnZXRfYmgobmV3X2JoKTsKJiM0MzsJdW5sb2NrX2J1ZmZlcihuZXdfYmgpOwomIzQzOwomIzQzOwlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwKJiM0MzsJCQkJICAgICBFTlRSWShCSERSKG5ld19iaCkgJiM0MzsgMSksCiYjNDM7CQkJCSAgICAgdHJ1ZSAvKiBibG9ja19jc3VtICovLAomIzQzOwkJCQkgICAgICZhbXA7ZWFfaW5vZGVfYXJyYXksCiYjNDM7CQkJCSAgICAgMCAvKiBleHRyYV9jcmVkaXRzICovLAomIzQzOwkJCQkgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7CiYjNDM7CWV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7CiYjNDM7CWlmIChxdW90YV9sZW4pIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZXZlcnNlcyB0aGlzIG9wZXJhdGlvbiYjMzk7cyBvd24gZXh0NF94YXR0cl9pbm9kZV9hbGxvY19xdW90YSgpCiYjNDM7CQkgKiBjaGFyZ2UsIHNvIG5vIEVBIGlub2RlIHBvaW50ZXIgaXMgbmVlZGVkIGhlcmUuCiYjNDM7CQkgKi8KJiM0MzsJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgcXVvdGFfbGVuKTsKJiM0MzsJCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKJiM0MzsJfQomIzQzOwlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwgMCwgMSwKJiM0MzsJCQkgRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQSB8CiYjNDM7CQkJIEVYVDRfRlJFRV9CTE9DS1NfRk9SR0VUKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogRmluZCB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UgZm9yIEVBcy4gVGhpcyBhbHNvIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZgogICogYnl0ZXMgdXNlZCBieSBFQSBlbnRyaWVzLgpAQCAtMjE2OSw4ICYjNDM7MjIyNiwxMyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJZXh0NF94YXR0cl9ibG9ja19jYWNoZV9pbnNlcnQoZWFfYmxvY2tfY2FjaGUsIG5ld19iaCk7CiAJCQllcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsCiAJCQkJCQkJICAgbmV3X2JoKTsKLQkJCWlmIChlcnJvcikKJiM0MzsJCQlpZiAoZXJyb3IpIHsKJiM0MzsJCQkJZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbChoYW5kbGUsIGlub2RlLCBuZXdfYmgsCiYjNDM7CQkJCQkJCSAgaS0mZ3Q7aW5faW5vZGUgPwomIzQzOwkJCQkJCQkgIGktJmd0O3ZhbHVlX2xlbiA6IDAsCiYjNDM7CQkJCQkJCSAgZXJyb3IpOwogCQkJCWdvdG8gY2xlYW51cDsKJiM0MzsJCQl9CiAJCX0KIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTcKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCwgd2l0aGluIGBmcy9leHQ0L3hhdHRyLmNgLiBNeSBpbml0aWFsIHJlYWQgaXMgdGhhdCB0aGlzIGlzIGVycm9yIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2xlYW4gdXAgYWZ0ZXIgYSBmYWlsdXJlIGR1cmluZyB0aGUgd3JpdGluZyBvZiBhIG5ldyBleHRlbmRlZCBhdHRyaWJ1dGUgKHhhdHRyKSBibG9jay4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgcmV0dXJucyBhbiBlcnJvci4gVGhlIGtleSBoZXJlIGlzIHByb3BlciBjbGVhbnVwLCB3aGljaCBpbmNsdWRlcyByZWxlYXNpbmcgYmxvY2sgcmVmZXJlbmNlcywgZnJlZWluZyB0aGUgYmxvY2sgaXRzZWxmLCBhbmQgaGFuZGxpbmcgcXVvdGEgYWRqdXN0bWVudHMuCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzIHdpdGggZXJyb3IgcGF0aHMsIGlzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUgc2NlbmFyaW9zLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcuIEhvd2V2ZXIsIHRoZSBkZXNjcmlwdGlvbiBzdGF0ZXMgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgaW4gcGxhY2UgdG8gY2F0Y2ggdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMsIHdoaWNoIGlzIGdvb2QuICBJdCBhbHNvIHNwZWNpZmljYWxseSBjYWxscyBvdXQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIGNyaXRpY2FsIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24uIFRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaXMgYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWwoaGFuZGxlLCBpbm9kZSwgbmV3X2JoLCBxdW90YV9sZW4sIGVycm9yKWAuIEkgcmVjb2duaXplIGFsbCB0aGUgcGFyYW1ldGVyczogdGhlIHRyYW5zYWN0aW9uIGhhbmRsZSwgdGhlIGlub2RlLCB0aGUgbmV3IGJ1ZmZlciBoZWFkLCB0aGUgcXVvdGEgbGVuZ3RoLCBhbmQgdGhlIGVycm9yIGNvZGUuIEkmIzM5O20gc2VlaW5nIHN0YW5kYXJkIGV4dDQgbWV0YWRhdGEgb3BlcmF0aW9ucyBiZWluZyBwZXJmb3JtZWQgd2l0aGluOiBgZXh0NF9lcnJvcl9pbm9kZWAsIGBsb2NrX2J1ZmZlcmAsIGBtYl9jYWNoZV9lbnRyeV9kZWxldGVfb3JfZ2V0YCwgYG1iX2NhY2hlX2VudHJ5X3dhaXRfdW51c2VkYCwgYG1iX2NhY2hlX2VudHJ5X3B1dGAsIGBnZXRfYmhgLCBgdW5sb2NrX2J1ZmZlcmAsIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZWAsIGBleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGFgLCBgZXh0NF9tYXJrX2lub2RlX2RpcnR5YCwgYW5kIGBleHQ0X2ZyZWVfYmxvY2tzYC4gIE5vdGhpbmcgdW51c3VhbCB0aGVyZTsgdGhlc2UgYXJlIGFsbCB3ZWxsLXVuZGVyc3Rvb2QsIHN0YW5kYXJkIGV4dDQgcHJpbWl0aXZlcy4KCkkmIzM5O20gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBhbmQgdXNhZ2UuIGBlYV9pbm9kZV9hcnJheWAgaXMgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIGFuZCBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgd2hpY2ggZWl0aGVyIHBvcHVsYXRlcyBpdCwgb3IgbGVhdmVzIGl0IE5VTEwsIGFuZCAqdGhlbiogaXQmIzM5O3MgZnJlZWQuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHBhdHRlcm4gdGhhdCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBqdW1wIG91dCBhdCBtZSBhcyBwcm9ibGVtYXRpYy4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGVycm9yIGNhc2Ugd2l0aCBhIHdlbGwtZGVmaW5lZCBjbGVhbnVwIHByb2NlZHVyZSB0aGF0IHV0aWxpemVzIHN0YW5kYXJkLCB0ZXN0ZWQgZXh0NCBmdW5jdGlvbnMsIGFuZCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIG90aGVyIEtNU0FOLXNwZWNpZmljIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSBjbGVhbiB1cCBhIG5ld2x5IGFsbG9jYXRlZCB4YXR0ciBibG9jayBpZiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgY2FjaGUgZW50cnkgbWFuYWdlbWVudCwgcXVvdGEgcmVsZWFzaW5nLCBhbmQgYmxvY2sgZnJlZWluZy4gVGhlc2Ugb3BlcmF0aW9ucyBwcmltYXJpbHkgcmlzayB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG1lbW9yeSBsZWFrcywgb3IgaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSBjbGVhbiB1cCBhIG5ld2x5IGFsbG9jYXRlZCB4YXR0ciBibG9jayBpZiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgY2FjaGUgZW50cnkgbWFuYWdlbWVudCwgcXVvdGEgcmVsZWFzaW5nLCBhbmQgYmxvY2sgZnJlZWluZy4gVGhlc2Ugb3BlcmF0aW9ucyBwcmltYXJpbHkgcmlzayB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG1lbW9yeSBsZWFrcywgb3IgaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjA5LjcwODg0MjU3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzMzMjQ3MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3hhdHRyX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSBjbGVhbiB1cCBhIG5ld2x5IGFsbG9jYXRlZCB4YXR0ciBibG9jayBpZiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgY2FjaGUgZW50cnkgbWFuYWdlbWVudCwgcXVvdGEgcmVsZWFzaW5nLCBhbmQgYmxvY2sgZnJlZWluZy4gVGhlc2Ugb3BlcmF0aW9ucyBwcmltYXJpbHkgcmlzayB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG1lbW9yeSBsZWFrcywgb3IgaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIGEgbmV3IGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSByZWxlYXNlIHJlc291cmNlcyAocmVmZXJlbmNlcywgYmxvY2ssIHF1b3RhKSB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMgb24gYSBuZXdseSBhbGxvY2F0ZWQgeGF0dHIgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcmVjb3Zlcnkgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MDkuNzA4ODUwNDc3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTM1Njg4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ODc1YjE2ZmMzNDEyY2NlZjY0MzdiYjdhMzEwNWM5ZGQyZGVkZTc2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDExOjAzOjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xcbmluZGV4IDk4MmExZjgzMWUyMjguLmUwODZjODM5NTA0MmEgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXFxuKysrIGIvZnMvZXh0NC94YXR0ci5jXFxuQEAgLTEzNjIsNiArMTM2Miw2MyBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuO1xcbiB9XFxuIFxcbisvKlxcbisgKiBVbmRvIHRoZSBzZXR1cCBvZiBhIG5ldyB4YXR0ciBibG9jayB0aGF0IGZhaWxlZCB0byBiZSB3cml0dGVuIG91dDogZHJvcFxcbisgKiB0aGUgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbCgpIHJlZmVyZW5jZXMsIGZyZWUgdGhlIGJsb2NrLCBhbmRcXG4rICogcmVsZWFzZSB0aGUgcXVvdGEgdGhpcyBvcGVyYXRpb24gY2hhcmdlZCBmb3IgdGhlIG5ldyB2YWx1ZSAocXVvdGFfbGVuLFxcbisgKiB6ZXJvIHdoZW4gdGhlIHZhbHVlIGlzIG5vdCBpbiBhbiBFQSBpbm9kZSkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLFxcbitcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgcXVvdGFfbGVuLCBpbnQgZXJyb3IpXFxuK3tcXG4rXFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcXG4rXFx0c3RydWN0IG1iX2NhY2hlX2VudHJ5ICpvZTtcXG4rXFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcXG4rXFxuK1xcdGV4dDRfZXJyb3JfaW5vZGUoaW5vZGUsIF9fZnVuY19fLCBfX0xJTkVfXywgMCxcXG4rXFx0XFx0XFx0IFxcXCJ4YXR0ciBibG9jayBkaXJ0eSBmYWlsZWQ6ICVkXFxcIiwgZXJyb3IpO1xcbitcXHRsb2NrX2J1ZmZlcihuZXdfYmgpO1xcbityZXRyeV9vd25lcjpcXG4rXFx0aWYgKGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS1cXHUwMDNlaF9yZWZjb3VudCkgIT0gMSkge1xcbitcXHRcXHR1bmxvY2tfYnVmZmVyKG5ld19iaCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRpZiAoZWFfYmxvY2tfY2FjaGUpIHtcXG4rXFx0XFx0b2UgPSBtYl9jYWNoZV9lbnRyeV9kZWxldGVfb3JfZ2V0KGVhX2Jsb2NrX2NhY2hlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS1cXHUwMDNlaF9oYXNoKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBuZXdfYmgtXFx1MDAzZWJfYmxvY2tucik7XFxuK1xcdFxcdGlmIChvZSkge1xcbitcXHRcXHRcXHR1bmxvY2tfYnVmZmVyKG5ld19iaCk7XFxuK1xcdFxcdFxcdG1iX2NhY2hlX2VudHJ5X3dhaXRfdW51c2VkKG9lKTtcXG4rXFx0XFx0XFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBvZSk7XFxuK1xcdFxcdFxcdGxvY2tfYnVmZmVyKG5ld19iaCk7XFxuK1xcdFxcdFxcdGdvdG8gcmV0cnlfb3duZXI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRnZXRfYmgobmV3X2JoKTtcXG4rXFx0dW5sb2NrX2J1ZmZlcihuZXdfYmgpO1xcbitcXG4rXFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBuZXdfYmgsXFxuK1xcdFxcdFxcdFxcdCAgICAgRU5UUlkoQkhEUihuZXdfYmgpICsgMSksXFxuK1xcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBibG9ja19jc3VtICovLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZlYV9pbm9kZV9hcnJheSxcXG4rXFx0XFx0XFx0XFx0ICAgICAwIC8qIGV4dHJhX2NyZWRpdHMgKi8sXFxuK1xcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBza2lwX3F1b3RhICovKTtcXG4rXFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcXG4rXFx0aWYgKHF1b3RhX2xlbikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZXZlcnNlcyB0aGlzIG9wZXJhdGlvbidzIG93biBleHQ0X3hhdHRyX2lub2RlX2FsbG9jX3F1b3RhKClcXG4rXFx0XFx0ICogY2hhcmdlLCBzbyBubyBFQSBpbm9kZSBwb2ludGVyIGlzIG5lZWRlZCBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCBxdW90YV9sZW4pO1xcbitcXHRcXHRleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XFxuK1xcdH1cXG4rXFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBuZXdfYmgsIDAsIDEsXFxuK1xcdFxcdFxcdCBFWFQ0X0ZSRUVfQkxPQ0tTX01FVEFEQVRBIHxcXG4rXFx0XFx0XFx0IEVYVDRfRlJFRV9CTE9DS1NfRk9SR0VUKTtcXG4rfVxcbitcXG4gLypcXG4gICogRmluZCB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UgZm9yIEVBcy4gVGhpcyBhbHNvIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZlxcbiAgKiBieXRlcyB1c2VkIGJ5IEVBIGVudHJpZXMuXFxuQEAgLTIxNjksOCArMjIyNiwxMyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2Jsb2NrX2NhY2hlX2luc2VydChlYV9ibG9ja19jYWNoZSwgbmV3X2JoKTtcXG4gXFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfYmgpO1xcbi1cXHRcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdGlmIChlcnJvcikge1xcbitcXHRcXHRcXHRcXHRleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsKGhhbmRsZSwgaW5vZGUsIG5ld19iaCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpLVxcdTAwM2Vpbl9pbm9kZSA/XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaS1cXHUwMDNldmFsdWVfbGVuIDogMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBlcnJvcik7XFxuIFxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjEwLjA2MzEzMDUxNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQyNTI3MTYzOTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3hhdHRyX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIGEgbmV3IGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSByZWxlYXNlIHJlc291cmNlcyAocmVmZXJlbmNlcywgYmxvY2ssIHF1b3RhKSB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMgb24gYSBuZXdseSBhbGxvY2F0ZWQgeGF0dHIgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcmVjb3Zlcnkgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzg3NWIxNmZjMzQxMmNjZWY2NDM3YmI3YTMxMDVjOWRkMmRlZGU3NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDExOjAzOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Li5lMDg2YzgzOTUwNDJhIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcbkBAIC0xMzYyLDYgKzEzNjIsNjMgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm47XG4gfVxuIFxuKy8qXG4rICogVW5kbyB0aGUgc2V0dXAgb2YgYSBuZXcgeGF0dHIgYmxvY2sgdGhhdCBmYWlsZWQgdG8gYmUgd3JpdHRlbiBvdXQ6IGRyb3BcbisgKiB0aGUgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbCgpIHJlZmVyZW5jZXMsIGZyZWUgdGhlIGJsb2NrLCBhbmRcbisgKiByZWxlYXNlIHRoZSBxdW90YSB0aGlzIG9wZXJhdGlvbiBjaGFyZ2VkIGZvciB0aGUgbmV3IHZhbHVlIChxdW90YV9sZW4sXG4rICogemVybyB3aGVuIHRoZSB2YWx1ZSBpcyBub3QgaW4gYW4gRUEgaW5vZGUpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLFxuK1x0XHRcdFx0ICAgICAgc2l6ZV90IHF1b3RhX2xlbiwgaW50IGVycm9yKVxuK3tcbitcdHN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7XG4rXHRzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKm9lO1xuK1x0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbitcbitcdGV4dDRfZXJyb3JfaW5vZGUoaW5vZGUsIF9fZnVuY19fLCBfX0xJTkVfXywgMCxcbitcdFx0XHQgXCJ4YXR0ciBibG9jayBkaXJ0eSBmYWlsZWQ6ICVkXCIsIGVycm9yKTtcbitcdGxvY2tfYnVmZmVyKG5ld19iaCk7XG4rcmV0cnlfb3duZXI6XG4rXHRpZiAobGUzMl90b19jcHUoQkhEUihuZXdfYmgpLVx1MDAzZWhfcmVmY291bnQpICE9IDEpIHtcbitcdFx0dW5sb2NrX2J1ZmZlcihuZXdfYmgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRpZiAoZWFfYmxvY2tfY2FjaGUpIHtcbitcdFx0b2UgPSBtYl9jYWNoZV9lbnRyeV9kZWxldGVfb3JfZ2V0KGVhX2Jsb2NrX2NhY2hlLFxuK1x0XHRcdFx0XHRcdCAgbGUzMl90b19jcHUoQkhEUihuZXdfYmgpLVx1MDAzZWhfaGFzaCksXG4rXHRcdFx0XHRcdFx0ICBuZXdfYmgtXHUwMDNlYl9ibG9ja25yKTtcbitcdFx0aWYgKG9lKSB7XG4rXHRcdFx0dW5sb2NrX2J1ZmZlcihuZXdfYmgpO1xuK1x0XHRcdG1iX2NhY2hlX2VudHJ5X3dhaXRfdW51c2VkKG9lKTtcbitcdFx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIG9lKTtcbitcdFx0XHRsb2NrX2J1ZmZlcihuZXdfYmgpO1xuK1x0XHRcdGdvdG8gcmV0cnlfb3duZXI7XG4rXHRcdH1cbitcdH1cbitcdGdldF9iaChuZXdfYmgpO1xuK1x0dW5sb2NrX2J1ZmZlcihuZXdfYmgpO1xuK1xuK1x0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBuZXdfYmgsXG4rXHRcdFx0XHQgICAgIEVOVFJZKEJIRFIobmV3X2JoKSArIDEpLFxuK1x0XHRcdFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXG4rXHRcdFx0XHQgICAgIFx1MDAyNmVhX2lub2RlX2FycmF5LFxuK1x0XHRcdFx0ICAgICAwIC8qIGV4dHJhX2NyZWRpdHMgKi8sXG4rXHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4rXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuK1x0aWYgKHF1b3RhX2xlbikge1xuK1x0XHQvKlxuK1x0XHQgKiBSZXZlcnNlcyB0aGlzIG9wZXJhdGlvbidzIG93biBleHQ0X3hhdHRyX2lub2RlX2FsbG9jX3F1b3RhKClcbitcdFx0ICogY2hhcmdlLCBzbyBubyBFQSBpbm9kZSBwb2ludGVyIGlzIG5lZWRlZCBoZXJlLlxuK1x0XHQgKi9cbitcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCBxdW90YV9sZW4pO1xuK1x0XHRleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4rXHR9XG4rXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwgMCwgMSxcbitcdFx0XHQgRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQSB8XG4rXHRcdFx0IEVYVDRfRlJFRV9CTE9DS1NfRk9SR0VUKTtcbit9XG4rXG4gLypcbiAgKiBGaW5kIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSBmb3IgRUFzLiBUaGlzIGFsc28gcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mXG4gICogYnl0ZXMgdXNlZCBieSBFQSBlbnRyaWVzLlxuQEAgLTIxNjksOCArMjIyNiwxMyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfYmxvY2tfY2FjaGVfaW5zZXJ0KGVhX2Jsb2NrX2NhY2hlLCBuZXdfYmgpO1xuIFx0XHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSxcbiBcdFx0XHRcdFx0XHRcdCAgIG5ld19iaCk7XG4tXHRcdFx0aWYgKGVycm9yKVxuK1x0XHRcdGlmIChlcnJvcikge1xuK1x0XHRcdFx0ZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbChoYW5kbGUsIGlub2RlLCBuZXdfYmgsXG4rXHRcdFx0XHRcdFx0XHQgIGktXHUwMDNlaW5faW5vZGUgP1xuK1x0XHRcdFx0XHRcdFx0ICBpLVx1MDAzZXZhbHVlX2xlbiA6IDAsXG4rXHRcdFx0XHRcdFx0XHQgIGVycm9yKTtcbiBcdFx0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjEwLjA2MzEzMjk0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMzczOTIyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZzL2V4dDQveGF0dHIuY2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBuZXcgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyAqZGVmaW5pdGVseSogYW4gZXJyb3IgaGFuZGxpbmcgcGF0aC4gSXQgc2VlbXMgbGlrZSBpdCdzIHRoZXJlIHRvIGNsZWFuIHVwIGFmdGVyIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMgd2l0aGluIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAuIFRoYXQgY29yZSBmdW5jdGlvbiwgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgaXMga2V5IGZvciBhY3R1YWxseSBzZXR0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gZXh0NC4gQmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGZpeCBhbmQgKmRlZmluaXRlbHkqIHNvbWV0aGluZyB0aGF0J3Mgd29ydGggaGl0dGluZyB3aXRoIHNvbWUgZnV6emluZy5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGFuZCBpZGVudGlmeSB0aGUgYmVzdCBwbGFjZSB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCBhcmUgdGhlIHR3byBtYWluIGZ1bmN0aW9ucyBpbnZvbHZlZCBoZXJlLiBMZXQncyBzZWUuLi4gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBnZXRzIGNhbGxlZCBmcm9tIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgLCBhbmQgYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWxgIGlzIHN0YXRpYy4gQWxyaWdodCwgdGhhdCBtZWFucyBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGlzIHByb2JhYmx5IGEgZ29vZCBlbnRyeSBwb2ludCB0byBzdGFydCB3aXRoLCBvciBtYXliZSBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBzaW5jZSBpdCBjYWxscyBpdC5cblxuSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGZzL2V4dDQveGF0dHIuY2AgdG8gY29uZmlybSB3aGV0aGVyIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgc3RhdGljLCBqdXN0IHRvIGJlIHN1cmUuIFRoYXQgd291bGQgYWZmZWN0IGhvdyBhY2Nlc3NpYmxlIGl0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MTUuMzAwNTI3NzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MzY4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0xMjcyPWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEyOTQtXFx0XFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcXG5mcy9leHQ0L3hhdHRyLmM6MTI5NTpcXHRcXHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBmcmVlZCBibG9ja1xcbmZzL2V4dDQveGF0dHIuYy0xMjk2LVxcdFxcdCAqL1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE5NTU9c3RhdGljIGludFxcbmZzL2V4dDQveGF0dHIuYzoxOTU2OmV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTE5NTctXFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIwMDEtXFx0XFx0XFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcXG5mcy9leHQ0L3hhdHRyLmM6MjAwMjpcXHRcXHRcXHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBtb2RpZmllZFxcbmZzL2V4dDQveGF0dHIuYy0yMDAzLVxcdFxcdFxcdCAqIGJsb2NrXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjQxMT1leHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjQ5NC1cXHRcXHRlbHNlIGlmICghYnMucy5ub3RfZm91bmQpXFxuZnMvZXh0NC94YXR0ci5jOjI0OTU6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjQ5Ni1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1MTEtXFx0XFx0XFx0aS52YWx1ZSA9IE5VTEw7XFxuZnMvZXh0NC94YXR0ci5jOjI1MTI6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjUxMy1cXHRcXHR9IGVsc2UgaWYgKGVycm9yID09IC1FTk9TUEMpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTIwLVxcdFxcdFxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MjUyMTpcXHRcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZpLCBcXHUwMDI2YnMpO1xcbmZzL2V4dDQveGF0dHIuYy0yNTIyLVxcdFxcdFxcdGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgIWlzLnMubm90X2ZvdW5kKSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjY2Nz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI3MzItXFx0LyogTW92ZSBlYSBlbnRyeSBmcm9tIHRoZSBpbm9kZSBpbnRvIHRoZSBibG9jayAqL1xcbmZzL2V4dDQveGF0dHIuYzoyNzMzOlxcdGVycm9yID0gZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmksIGJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjczNC1cXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjE1LjM0NjE2ODIwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDQyNjA0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBleHQ0IEV4dGVuZGVkIEF0dHJpYnV0ZSBIYW5kbGluZyoqXG5cbkFscmlnaHQsIHNvIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IG9wZXJhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQgdXN1YWxseSBtZWFucyBpdCdzIGxpbWl0ZWQgaW4gc2NvcGUsIGxpa2VseSBvbmx5IHZpc2libGUgYW5kIHVzYWJsZSB3aXRoaW4gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdCBvciBzb3VyY2UgZmlsZS4gTWFrZXMgc2Vuc2UgZm9yIHNvbWUgbG93LWxldmVsIGJsb2NrLXNldHRpbmcgb3BlcmF0aW9uLCBwcm9iYWJseS4gTm93LCBsZXQncyBzZWUsIHdoYXQgYWJvdXQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWA/IEFoLCBpdCdzICpub3QqIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgaGludHMgdGhhdCBpdCBpcyBkZXNpZ25lZCB0byBiZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGV4dDQgZmlsZSBzeXN0ZW0gY29kZS4gT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgLiBUaW1lIHRvIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIHdoYXQgaXRzIHJvbGUgaXMgaW4gdGhlIGVudGlyZSBhdHRyaWJ1dGUgc2V0dGluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjYwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MjAuNDUwNDMwNjE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjA0MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC94YXR0ci5jPTIzODA9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF94YXR0cl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMzk4LS8qXFxuZnMvZXh0NC94YXR0ci5jOjIzOTk6ICogZXh0NF94YXR0cl9zZXRfaGFuZGxlKClcXG5mcy9leHQ0L3hhdHRyLmMtMjQwMC0gKlxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI0MTA9aW50XFxuZnMvZXh0NC94YXR0ci5jOjI0MTE6ZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LFxcbmZzL2V4dDQveGF0dHIuYy0yNDEyLVxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI1NjM9aW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTkyLSAqXFxuZnMvZXh0NC94YXR0ci5jOjI1OTM6ICogTGlrZSBleHQ0X3hhdHRyX3NldF9oYW5kbGUsIGJ1dCBzdGFydCBmcm9tIGFuIGlub2RlLiBUaGlzIGV4dGVuZGVkXFxuZnMvZXh0NC94YXR0ci5jLTI1OTQtICogYXR0cmlidXRlIG1vZGlmaWNhdGlvbiBpcyBhIGZpbGVzeXN0ZW0gdHJhbnNhY3Rpb24gYnkgaXRzZWxmLlxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI1OTk9ZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjYyMi1cXG5mcy9leHQ0L3hhdHRyLmM6MjYyMzpcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLFxcbmZzL2V4dDQveGF0dHIuYy0yNjI0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlLCB2YWx1ZV9sZW4sIGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MjAuNDk0NjM4Nzg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzNzcyNzQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGV4dDQgQXR0cmlidXRlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGFuZCBgZXh0NF94YXR0cl9zZXRgIGZ1bmN0aW9ucywgYW5kIGltbWVkaWF0ZWx5IEknbSBub3Rpbmcgc29tZXRoaW5nLiBUaGV5IGFyZW4ndCBzdGF0aWMuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm9uLXN0YXRpYyBmdW5jdGlvbnMgc3VnZ2VzdCB0aGVzZSBhcmUgbGlrZWx5IGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiBwb3RlbnRpYWxseSBmcm9tIHVzZXIgc3BhY2UgKHRob3VnaCwgb2YgY291cnNlLCBwcm9wZXIgc2VjdXJpdHkgY2hlY2tzIHdvdWxkIGJlIGluIHBsYWNlKS4gSXQgaW1wbGllcyBhIGJyb2FkZXIsIG1vcmUgYWNjZXNzaWJsZSByb2xlIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIG1vZHVsZSwgYmV5b25kIGp1c3QgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy5cblxuVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGFyZSBiZWluZyB1c2VkLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyBzcGVjaWZpYyB0byBleHQ0LiBJIG5lZWQgdG8gc2VlIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSBvciBkaXNhYmxlIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdXBwb3J0IHdpdGhpbiBleHQ0LCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyB3aXRoaW4gd2hpY2ggdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNvbXBpbGVkIGFuZCBwb3RlbnRpYWxseSBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCB0aGUgcG9zc2libGUgZGVwZW5kZW5jaWVzIHRoYXQgaW1wYWN0IHRoZXNlIGZ1bmN0aW9ucycgYXZhaWxhYmlsaXR5IGFuZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk5NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjI0LjczMjM2ODY5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA5NTAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNF9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MjQuNzc3NDY2ODMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4ODg5NTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEVYVDQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBiYXNlIGZpbGVzeXN0ZW0gY29uZmlnIGlzIGRlZmluaXRlbHkgc2V0IHRvIGBFWFQ0X0ZTYC4gTm93IEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBtYWtlIHN1cmUgYWxsIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBzZXQgdXAgcHJvcGVybHkuIElzIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcyB3aXRoaW4gdGhlIEVYVDQgZmlsZXN5c3RlbSBpdHNlbGY/IFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBhbmQgbG9vayBhdCB0aGUgYGZzL2V4dDQvS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlJ3MgYSByZWxhdGVkIGBYQVRUUmAgb3B0aW9uIGRlZmluZWQgdGhlcmUgYW5kIGNvbmZpcm0gaXRzIHN0YXR1cy4gR290dGEgYmUgdGhvcm91Z2ggd2l0aCB0aGVzZSBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb25zLCB5b3Uga25vdz8gT25lIG1pc3NlZCBiaXQgYW5kIGl0IGNvdWxkIGFsbCBjb21lIGNyYXNoaW5nIGRvd24gbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowMzoyOC4yNjYzNjQzODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTYzOTI2MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEFUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowMzoyOC41NDgwMjAxOTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0NzQ3NTIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBFeHQ0IEV4dGVuZGVkIEF0dHJpYnV0ZXMqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBhYm91dCBleHRlbmRlZCBhdHRyaWJ1dGVzIHJlY2VudGx5LCBhbmQgSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgSSBzaG91bGQgZmluZCB0aGUgYFhBVFRSYCBvcHRpb24gd2l0aGluIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlLCBidXQgaXQgc2VlbXMgdGhlcmUncyBubyBzdWNoIG9wdGlvbiBkZWZpbmVkIHRoZXJlLiBIbW0sIHRoYXQncyB1bnVzdWFsLiBEaWQgSSByZW1lbWJlciBpbmNvcnJlY3RseT8gT3IgcGVyaGFwcyBpcyBpdCBhbHdheXMgZW5hYmxlZCwgbGlrZSB0aGUgZmlsZSBpbmRpY2F0ZXM/XG5cbkxldCBtZSBkb3VibGUtY2hlY2suIFRoZSBgS2NvbmZpZ2AgZmlsZSBpcyBub3QgYWx3YXlzIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGEgbW9kdWxlLiBJdCdzIG9mdGVuIGJldHRlciB0byBnbyBkZWVwZXIuIE1heWJlIHRoZSBidWlsZCBzeXN0ZW0gaXRzZWxmIGlzIG1hbmFnaW5nIHRoZSBkZXBlbmRlbmNpZXMuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBmcy9leHQ0L01ha2VmaWxlYCBmaWxlIHRvIHNlZSBob3cgdGhvc2UgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSG9wZWZ1bGx5LCB0aGUgYE1ha2VmaWxlYCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb2YgZXh0ZW5kZWQgYXR0cmlidXRlIHN1cHBvcnQgYW5kIGNsYXJpZnkgd2hldGhlciBpdCdzIHN0YXRpY2FsbHkgY29tcGlsZWQgb3IgZGVwZW5kZW50IG9uIG90aGVyIHNldHRpbmdzLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoIGZvciB0aGUgdGFzayBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzEzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MzMuMzk1NDk4NTI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU5MjQ1NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTI6XFx0XFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTM6XFx0XFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxcbmZzL2V4dDQvTWFrZWZpbGU9MTU9ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcXHQrPSBhY2wub1xcbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVxcdFxcdCs9IHhhdHRyX3NlY3VyaXR5Lm9cXG5mcy9leHQ0L01ha2VmaWxlLTE3LWV4dDQtdGVzdC1vYmpzXFx0XFx0XFx0XFx0Kz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MzMuNTkxNDI5MzAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODgyNTcyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBleHQ0X3hhdHRyYCBDb21waWxhdGlvbiBhbmQgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGB4YXR0ci5vYCBpcyBpbmRlZWQgYWx3YXlzIGNvbXBpbGVkIHdoZW4gYEVYVDRfRlNgIGlzIGVuYWJsZWQuIFRoYXQncyBnb29kLCB0aGF0IG1lYW5zIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50IGlzIHNpbXBsZToganVzdCBgRVhUNF9GU2AuIEknbGwga2VlcCBhbiBleWUgb24gYGV4dDRfeGF0dHJfc2V0YCBhbmQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAsIHRoZXkgc2VlbSBsaWtlIGtleSBmdW5jdGlvbnMgaGVyZS5cblxuV2FpdCBhIHNlY29uZCwgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBkZWFsaW5nIHdpdGggYW4gKmVycm9yKiBwYXRoLCBzcGVjaWZpY2FsbHkgYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWxgLiBJdCBnZXRzIGNhbGxlZCB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMsIG1lYW5pbmcgaXQncyBjbGVhbmluZyB1cCBhZnRlciBhIHByb2JsZW0gZHVyaW5nIHRoZSBzZXR1cCBvZiBhIG5ldyB4YXR0ciBibG9jay4gVGhhdCBtYWtlcyB0aGlzIGEgKnJlYWxseSogaW50ZXJlc3RpbmcgdGFyZ2V0IGZvciBmdXp6aW5nLiBFcnJvciBoYW5kbGluZyBwYXRocyBhcmUgb2Z0ZW4gd2hlcmUgYnVncyBsdXJrLiBJIHNob3VsZCBkZWZpbml0ZWx5IGdpdmUgdGhpcyBhIGNsb3NlciBsb29rIVxuXG5MZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgcmVsYXRlZCBmdW5jdGlvbnMuIEFoLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGlzIHN0YXRpYywgc28gbGlrZWx5IG5vdCBkaXJlY3RseSBleHBvc2VkLiBgZXh0NF94YXR0cl9zZXRgIGlzIGV4cG9ydGVkLCB0aGF0J3MgYW5vdGhlciBmdW5jdGlvbiBJIHNob3VsZCBhZGQgdG8gbXkgbGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMwMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowMzozOC40Nzk2ODk0NDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzIzODc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipleHQ0X3hhdHRyX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjM4LjUzMTQyMDEyNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEzMDYzNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipVbnBhY2tpbmcgdGhlIE5vbi1TdGF0aWMsIE5vbi1FeHBvcnRlZCBFbmlnbWEqKlxuXG5IbW0sIGludGVyZXN0aW5nLiBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCBpdCdzIGdvdCBtZSB0aGlua2luZy4gSXQncyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbWVhbnMgaXQgKmNvdWxkKiBiZSB1c2VkIGV4dGVybmFsbHksIGJ1dCB0aGUgY29tcGlsZXIgZGlkbid0IGZsYWcgaXQgYXMgZXhwb3J0ZWQgZWl0aGVyLiBUaGF0J3MgYSBjbGFzc2ljIHNpdHVhdGlvbiB0aGF0IHVzdWFsbHkgbWVhbnMgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBub3csIEknbSBjaGVja2luZywgYW5kIGBleHQ0X3hhdHRyX3NldGAgaXMgKmRlZmluaXRlbHkqIG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkIGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZSwgYnV0IEkndmUgZGVmaW5pdGVseSBzZWVuIGl0IHVzZWQgZnJvbSB3aXRoaW4gb3RoZXIgcGFydHMgb2YgdGhlIGZpbGVzeXN0ZW0gY29kZS4gVGhhdCBtZWFucyB0aGVyZSdzIHNvbWUgc29ydCBvZiBub24tc3RhbmRhcmQgdXNhZ2UsIG9yIGl0J3MgYmVpbmcgYWNjZXNzZWQgdmlhIGFuIGluZGlyZWN0IG1ldGhvZCwgcG9zc2libHkgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgb3IgYSBtYWNybyBleHBhbnNpb24sIHJhdGhlciB0aGFuIGEgZGlyZWN0LCBleHBsaWNpdCBkZWNsYXJhdGlvbi4gR290dGEgdW5kZXJzdGFuZCB0aGUgbGlua2luZyBiZWhhdmlvciBhcm91bmQgYGV4dDRfeGF0dHJfc2V0YC4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGZpZ3VyZSBvdXQgaG93IGl0J3MgYmVpbmcgYWNjZXNzZWQgYW5kIHdoeSB0aGUgZXhwb3J0IGlzbid0IG9idmlvdXMuIFRoaXMgY291bGQgYmUgaW50ZW50aW9uYWwgZGVzaWduLCBvciBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIG9yIGluY2x1ZGUgcGF0aHMuIFRpbWUgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBiZXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowMzo0Mi42NDQ0ODU2MjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDY1NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfeGF0dHJfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvYWNsLmM9MTg5PV9fZXh0NF9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxcbi0tXFxuZnMvZXh0NC9hY2wuYy0yMTYtXFxuZnMvZXh0NC9hY2wuYzoyMTc6XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgXFxcIlxcXCIsXFxuZnMvZXh0NC9hY2wuYy0yMTgtXFx0XFx0XFx0XFx0ICAgICAgdmFsdWUsIHNpemUsIHhhdHRyX2ZsYWdzKTtcXG4tLVxcbmZzL2V4dDQvYWNsLmM9MjI4PWV4dDRfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZXh0NC9hY2wuYy0yNDEtcmV0cnk6XFxuZnMvZXh0NC9hY2wuYzoyNDI6XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKGlub2RlLCBhY2xfc2l6ZSwgZmFsc2UgLyogaXNfY3JlYXRlICovLFxcbmZzL2V4dDQvYWNsLmMtMjQzLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y3JlZGl0cyk7XFxuLS1cXG5mcy9leHQ0L2NyeXB0by5jPTEzMj1zdGF0aWMgaW50IGV4dDRfc2V0X2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqY3R4LCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYy0xNzItXFx0XFx0ICovXFxuZnMvZXh0NC9jcnlwdG8uYzoxNzM6XFx0XFx0cmVzID0gZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZSwgaW5vZGUsXFxuZnMvZXh0NC9jcnlwdG8uYy0xNzQtXFx0XFx0XFx0XFx0XFx0ICAgIEVYVDRfWEFUVFJfSU5ERVhfRU5DUllQVElPTixcXG4tLVxcbmZzL2V4dDQvY3J5cHRvLmMtMTkzLXJldHJ5OlxcbmZzL2V4dDQvY3J5cHRvLmM6MTk0OlxcdHJlcyA9IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoaW5vZGUsIGxlbiwgZmFsc2UgLyogaXNfY3JlYXRlICovLFxcbmZzL2V4dDQvY3J5cHRvLmMtMTk1LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNyZWRpdHMpO1xcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYy0yMDItXFxuZnMvZXh0NC9jcnlwdG8uYzoyMDM6XFx0cmVzID0gZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZSwgaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfRU5DUllQVElPTixcXG5mcy9leHQ0L2NyeXB0by5jLTIwNC1cXHRcXHRcXHRcXHQgICAgRVhUNF9YQVRUUl9OQU1FX0VOQ1JZUFRJT05fQ09OVEVYVCxcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmM9ODc2PXN0YXRpYyBpbnQgZXh0NF94YXR0cl9jcmVkaXRzX2Zvcl9uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIG1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy04ODktXFx0XFx0bmJsb2NrcyArPSAoU19JU0RJUihtb2RlKSA/IDIgOiAxKSAqXFxuZnMvZXh0NC9pYWxsb2MuYzo4OTA6XFx0XFx0XFx0X19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHNiLCBOVUxMIC8qIGlub2RlICovLFxcbmZzL2V4dDQvaWFsbG9jLmMtODkxLVxcdFxcdFxcdFxcdFxcdFxcdCBOVUxMIC8qIGJsb2NrX2JoICovLCBhY2xfc2l6ZSxcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtOTA4LVxcdFxcdG5ibG9ja3MgKz0gbnVtX3NlY3VyaXR5X3hhdHRycyAqXFxuZnMvZXh0NC9pYWxsb2MuYzo5MDk6XFx0XFx0XFx0X19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHNiLCBOVUxMIC8qIGlub2RlICovLFxcbmZzL2V4dDQvaWFsbG9jLmMtOTEwLVxcdFxcdFxcdFxcdFxcdFxcdCBOVUxMIC8qIGJsb2NrX2JoICovLCAxMDI0LFxcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy05MTQtXFx0aWYgKGVuY3J5cHQpXFxuZnMvZXh0NC9pYWxsb2MuYzo5MTU6XFx0XFx0bmJsb2NrcyArPSBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc2IsXFxuZnMvZXh0NC9pYWxsb2MuYy05MTYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIE5VTEwgLyogaW5vZGUgKi8sXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9OTI4PXN0YXRpYyB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy05MzgtXFxuZnMvZXh0NC94YXR0ci5jOjkzOTppbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTk0MC1cXHRcXHRcXHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmxvY2tfYmgsIHNpemVfdCB2YWx1ZV9sZW4sXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTYzNT1zdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNjg1LVxcbmZzL2V4dDQveGF0dHIuYzoxNjg2OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG5mcy9leHQ0L3hhdHRyLmMtMTY4Ny1cXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9zZWFyY2ggKnMsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTk1Nj1leHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIwMTktXFx0XFx0XFx0ZWFfYmRlYnVnKGJzLVxcdTAwM2ViaCwgXFxcIm1vZGlmeWluZyBpbi1wbGFjZVxcXCIpO1xcbmZzL2V4dDQveGF0dHIuYzoyMDIwOlxcdFxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfZW50cnkoaSwgcywgaGFuZGxlLCBpbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjAyMS1cXHRcXHRcXHRcXHRcXHQgICAgIGVhX2lub2RlLCB0cnVlIC8qIGlzX2Jsb2NrICovKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMDQ3LVxcdFxcdCAqIElmIGV4aXN0aW5nIGVudHJ5IHBvaW50cyB0byBhbiB4YXR0ciBpbm9kZSwgd2UgbmVlZFxcbmZzL2V4dDQveGF0dHIuYzoyMDQ4OlxcdFxcdCAqIHRvIHByZXZlbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoKSBmcm9tIGRlY3JlbWVudGluZ1xcbmZzL2V4dDQveGF0dHIuYy0yMDQ5LVxcdFxcdCAqIHJlZiBjb3VudCBvbiBpdCBiZWNhdXNlIHRoZSByZWZlcmVuY2UgYmVsb25ncyB0byB0aGVcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMDg4LVxcbmZzL2V4dDQveGF0dHIuYzoyMDg5OlxcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfZW50cnkoaSwgcywgaGFuZGxlLCBpbm9kZSwgZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTIwOTAtXFx0XFx0XFx0XFx0ICAgICB0cnVlIC8qIGlzX2Jsb2NrICovKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yMzE2PWludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIzMzYtXFx0fVxcbmZzL2V4dDQveGF0dHIuYzoyMzM3OlxcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfZW50cnkoaSwgcywgaGFuZGxlLCBpbm9kZSwgZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTIzMzgtXFx0XFx0XFx0XFx0ICAgICBmYWxzZSAvKiBpc19ibG9jayAqLyk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjM4MD1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X3hhdHRyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIzOTgtLypcXG5mcy9leHQ0L3hhdHRyLmM6MjM5OTogKiBleHQ0X3hhdHRyX3NldF9oYW5kbGUoKVxcbmZzL2V4dDQveGF0dHIuYy0yNDAwLSAqXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjQxMD1pbnRcXG5mcy9leHQ0L3hhdHRyLmM6MjQxMTpleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXFxuZnMvZXh0NC94YXR0ci5jLTI0MTItXFx0XFx0ICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4sXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjQ0OC1cXG5mcy9leHQ0L3hhdHRyLmM6MjQ0OTpcXHRcXHRjcmVkaXRzID0gX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKGlub2RlLVxcdTAwM2VpX3NiLCBpbm9kZSwgYmgsXFxuZnMvZXh0NC94YXR0ci5jLTI0NTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1NjItXFxuZnMvZXh0NC94YXR0ci5jOjI1NjM6aW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcXG5mcy9leHQ0L3hhdHRyLmMtMjU2NC1cXHRcXHRcXHQgICBib29sIGlzX2NyZWF0ZSwgaW50ICpjcmVkaXRzKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1NzktXFx0fSBlbHNlIHtcXG5mcy9leHQ0L3hhdHRyLmM6MjU4MDpcXHRcXHQqY3JlZGl0cyA9IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUsIGJoLFxcbmZzL2V4dDQveGF0dHIuYy0yNTgxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICB2YWx1ZV9sZW4sIGlzX2NyZWF0ZSk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjU5MC0vKlxcbmZzL2V4dDQveGF0dHIuYzoyNTkxOiAqIGV4dDRfeGF0dHJfc2V0KClcXG5mcy9leHQ0L3hhdHRyLmMtMjU5Mi0gKlxcbmZzL2V4dDQveGF0dHIuYzoyNTkzOiAqIExpa2UgZXh0NF94YXR0cl9zZXRfaGFuZGxlLCBidXQgc3RhcnQgZnJvbSBhbiBpbm9kZS4gVGhpcyBleHRlbmRlZFxcbmZzL2V4dDQveGF0dHIuYy0yNTk0LSAqIGF0dHJpYnV0ZSBtb2RpZmljYXRpb24gaXMgYSBmaWxlc3lzdGVtIHRyYW5zYWN0aW9uIGJ5IGl0c2VsZi5cXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yNTk4PWludFxcbmZzL2V4dDQveGF0dHIuYzoyNTk5OmV4dDRfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LCBjb25zdCBjaGFyICpuYW1lLFxcbmZzL2V4dDQveGF0dHIuYy0yNjAwLVxcdCAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbiwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI2MTEtcmV0cnk6XFxuZnMvZXh0NC94YXR0ci5jOjI2MTI6XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKGlub2RlLCB2YWx1ZV9sZW4sIGZsYWdzIFxcdTAwMjYgWEFUVFJfQ1JFQVRFLFxcbmZzL2V4dDQveGF0dHIuYy0yNjEzLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y3JlZGl0cyk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjYyMi1cXG5mcy9leHQ0L3hhdHRyLmM6MjYyMzpcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLFxcbmZzL2V4dDQveGF0dHIuYy0yNjI0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlLCB2YWx1ZV9sZW4sIGZsYWdzKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuaD0xODA9ZXh0ZXJuIGludCBleHQ0X3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KTtcXG5mcy9leHQ0L3hhdHRyLmg6MTgxOmV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICosIGludCwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTtcXG5mcy9leHQ0L3hhdHRyLmg6MTgyOmV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7XFxuZnMvZXh0NC94YXR0ci5oOjE4MzpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcXG5mcy9leHQ0L3hhdHRyLmgtMTg0LVxcdFxcdFxcdFxcdCAgYm9vbCBpc19jcmVhdGUsIGludCAqY3JlZGl0cyk7XFxuZnMvZXh0NC94YXR0ci5oOjE4NTpleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQveGF0dHIuaC0xODYtXFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpibG9ja19iaCwgc2l6ZV90IHZhbHVlX2xlbixcXG4tLVxcbmZzL2V4dDQveGF0dHJfaHVyZC5jPTM0PWV4dDRfeGF0dHJfaHVyZF9zZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXFxuLS1cXG5mcy9leHQ0L3hhdHRyX2h1cmQuYy00Mi1cXG5mcy9leHQ0L3hhdHRyX2h1cmQuYzo0MzpcXHRyZXR1cm4gZXh0NF94YXR0cl9zZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfSFVSRCxcXG5mcy9leHQ0L3hhdHRyX2h1cmQuYy00NC1cXHRcXHRcXHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jPTI1PWV4dDRfeGF0dHJfc2VjdXJpdHlfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTMwLXtcXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM6MzE6XFx0cmV0dXJuIGV4dDRfeGF0dHJfc2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYy0zMi1cXHRcXHRcXHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jPTM2PWV4dDRfaW5pdHhhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgeGF0dHIgKnhhdHRyX2FycmF5LFxcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTQzLVxcdGZvciAoeGF0dHIgPSB4YXR0cl9hcnJheTsgeGF0dHItXFx1MDAzZW5hbWUgIT0gTlVMTDsgeGF0dHIrKykge1xcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYzo0NDpcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSxcXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMtNDUtXFx0XFx0XFx0XFx0XFx0ICAgIEVYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFksXFxuLS1cXG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYz0zMj1leHQ0X3hhdHRyX3RydXN0ZWRfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0cl90cnVzdGVkLmMtMzcte1xcbmZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jOjM4OlxcdHJldHVybiBleHQ0X3hhdHRyX3NldChpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9UUlVTVEVELFxcbmZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jLTM5LVxcdFxcdFxcdCAgICAgIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyX3VzZXIuYz0zMz1leHQ0X3hhdHRyX3VzZXJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0cl91c2VyLmMtNDAtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmZzL2V4dDQveGF0dHJfdXNlci5jOjQxOlxcdHJldHVybiBleHQ0X3hhdHRyX3NldChpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9VU0VSLFxcbmZzL2V4dDQveGF0dHJfdXNlci5jLTQyLVxcdFxcdFxcdCAgICAgIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjQyLjcwNTk1Mzc1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODA3MzQ0NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IFhhdHRyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBleHQ0IHBhdGNoIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKS4gVGhlIGtleSBmdW5jdGlvbnMgaGVyZSwgdGhlIG9uZXMgSSB3YW50IHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLCBhcmUgYGV4dDRfeGF0dHJfc2V0YCBhbmQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAuIFRoZXkncmUgZXhwb3J0ZWQgaW4gYGZzL2V4dDQveGF0dHIuaGAsIHNvIHRoZXkncmUgcHJldHR5IGNlbnRyYWwgdG8gdGhlIHdob2xlIHhhdHRyIHN1YnN5c3RlbS4gVGhlc2UgYXJlIGdvb2QgZm9jYWwgcG9pbnRzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQuIFRoZSBtYWluIG9uZSwgb2J2aW91c2x5LCBpcyBgRVhUNF9GU2AsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIHRvIGhhdmluZyBhbiBleHQ0IGZpbGVzeXN0ZW0gYXQgYWxsLiBJdCBsb29rcyBsaWtlIGBFWFQ0X0ZTX1BPU0lYX0FDTGAgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBhbHNvIHVzZSB4YXR0cnMsIHNvIHRoZXkgbWlnaHQgYmUgdGFuZ2VudGlhbGx5IGludm9sdmVkLCBidXQgdGhlIGNvcmUgaXNzdWUgc2hvdWxkIGJlIHRyaWdnZXJlZCB3aXRoIGp1c3QgYEVYVDRfRlNgLiBTaW5jZSB0aGUgaXNzdWUgaXMgd2l0aGluIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIHdoaWNoIGlzIGNhbGxlZCBmb3IgYW55IHhhdHRyLCB0aGlzIGNvbmZpcm1zIGBFWFQ0X0ZTYCBhcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSSBzZWUgYSBuZXcgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYC4gSXQncyBjYWxsZWQgZnJvbSBgZXh0NF94YXR0cl9ibG9ja19zZXRgIHNwZWNpZmljYWxseSB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgcmV0dXJucyBhbiBlcnJvcjpcblxuYGBgY1xuK3N0YXRpYyB2b2lkIGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLFxuK1x0XHRcdFx0ICAgICAgc2l6ZV90IHF1b3RhX2xlbiwgaW50IGVycm9yKVxuYGBgXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGguIFRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW50cm9kdWNlZCB0byBoYW5kbGUgY2FzZXMgd2hlbiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzLiBXaGF0IHRoYXQgaW1wbGllcyBpcyB0aGF0IHRoZXJlIHdhcyBwcmV2aW91c2x5IGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgb3IgaW5jb3JyZWN0IHN0YXRlIGluIHRoZSBldmVudCBvZiB0aGlzIGZhaWx1cmUsIGFuZCB0aGlzIHBhdGNoIGFkZHJlc3NlcyB0aGF0LiBUaGUgbmV3IGZ1bmN0aW9uIGxpa2VseSBkb2VzIHRoaW5ncyBsaWtlIHJlbGVhc2luZyByZWZlcmVuY2VzLCBmcmVlaW5nIHRoZSBibG9jaywgYW5kIGhhbmRsaW5nIHF1b3RhIGFjY291bnRpbmcgd2hlbiB0aGVyZSBpcyBhIG1ldGFkYXRhIGVycm9yLlxuXG5UaGlzIGlzIGV4YWN0bHkgdGhlIHR5cGUgb2YgdGhpbmcgdGhhdCAqbmVlZHMqIHRvIGJlIGZ1enplZC4gSXQncyBhIGNyaXRpY2FsIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gYSBjb3JlIGV4dDQgZnVuY3Rpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGVycm9yIHJlY292ZXJ5IGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMsIGxpa2UgZG91YmxlIGZyZWVzIG9yIHVzZS1hZnRlci1mcmVlcy4gVGhpcyBsb29rcyBsaWtlIGEgZGVmaW5pdGUgd2luIGZvciBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIGZvciBzZXQtcmVzdWx0cywgSSdsbCBzcGVjaWZ5OlxuXG5Gb2N1cyBzeW1ib2xzOlxuLSBgZXh0NF94YXR0cl9zZXRgXG4tIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgXG5cbkVuYWJsZUNvbmZpZ3M6XG4tIGBFWFQ0X0ZTYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM4OCwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6NTIuNTEzMzAwODUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5OTA0OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3hhdHRyX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIGEgbmV3IGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSByZWxlYXNlIHJlc291cmNlcyAocmVmZXJlbmNlcywgYmxvY2ssIHF1b3RhKSB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMgb24gYSBuZXdseSBhbGxvY2F0ZWQgeGF0dHIgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcmVjb3Zlcnkgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBhIG5ldyBmdW5jdGlvbiBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgdG8gcHJvcGVybHkgcmVsZWFzZSByZXNvdXJjZXMgKHJlZmVyZW5jZXMsIGJsb2NrLCBxdW90YSkgd2hlbiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzIG9uIGEgbmV3bHkgYWxsb2NhdGVkIHhhdHRyIGJsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHJlY292ZXJ5IHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgbmV3IGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjUyLjU5MDI5ODdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NTE3ODEzNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowMzo1Mi41OTA3NTgwNDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQ1MTMxNzMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBlcnJvciBoYW5kbGluZyBmdW5jdGlvbiBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgdG8gcHJvcGVybHkgY2xlYW4gdXAgYSBuZXdseSBhbGxvY2F0ZWQgeGF0dHIgYmxvY2sgaWYgYGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCBmYWlscy4gVGhlIGNoYW5nZXMgaW52b2x2ZSByZWZlcmVuY2UgY291bnRpbmcsIGNhY2hlIGVudHJ5IG1hbmFnZW1lbnQsIHF1b3RhIHJlbGVhc2luZywgYW5kIGJsb2NrIGZyZWVpbmcuIFRoZXNlIG9wZXJhdGlvbnMgcHJpbWFyaWx5IHJpc2sgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4NzViMTZmYzM0MTJjY2VmNjQzN2JiN2EzMTA1YzlkZDJkZWRlNzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMTowMzowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyOC4uZTA4NmM4Mzk1MDQyYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuKysrIGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTM2Miw2ICsxMzYyLDYzIEBAIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuO1xuIH1cbiBcbisvKlxuKyAqIFVuZG8gdGhlIHNldHVwIG9mIGEgbmV3IHhhdHRyIGJsb2NrIHRoYXQgZmFpbGVkIHRvIGJlIHdyaXR0ZW4gb3V0OiBkcm9wXG4rICogdGhlIGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoKSByZWZlcmVuY2VzLCBmcmVlIHRoZSBibG9jaywgYW5kXG4rICogcmVsZWFzZSB0aGUgcXVvdGEgdGhpcyBvcGVyYXRpb24gY2hhcmdlZCBmb3IgdGhlIG5ldyB2YWx1ZSAocXVvdGFfbGVuLFxuKyAqIHplcm8gd2hlbiB0aGUgdmFsdWUgaXMgbm90IGluIGFuIEVBIGlub2RlKS5cbisgKi9cbitzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCxcbitcdFx0XHRcdCAgICAgIHNpemVfdCBxdW90YV9sZW4sIGludCBlcnJvcilcbit7XG4rXHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpO1xuK1x0c3RydWN0IG1iX2NhY2hlX2VudHJ5ICpvZTtcbitcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4rXG4rXHRleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBfX2Z1bmNfXywgX19MSU5FX18sIDAsXG4rXHRcdFx0IFwieGF0dHIgYmxvY2sgZGlydHkgZmFpbGVkOiAlZFwiLCBlcnJvcik7XG4rXHRsb2NrX2J1ZmZlcihuZXdfYmgpO1xuK3JldHJ5X293bmVyOlxuK1x0aWYgKGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS1cdTAwM2VoX3JlZmNvdW50KSAhPSAxKSB7XG4rXHRcdHVubG9ja19idWZmZXIobmV3X2JoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0aWYgKGVhX2Jsb2NrX2NhY2hlKSB7XG4rXHRcdG9lID0gbWJfY2FjaGVfZW50cnlfZGVsZXRlX29yX2dldChlYV9ibG9ja19jYWNoZSxcbitcdFx0XHRcdFx0XHQgIGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS1cdTAwM2VoX2hhc2gpLFxuK1x0XHRcdFx0XHRcdCAgbmV3X2JoLVx1MDAzZWJfYmxvY2tucik7XG4rXHRcdGlmIChvZSkge1xuK1x0XHRcdHVubG9ja19idWZmZXIobmV3X2JoKTtcbitcdFx0XHRtYl9jYWNoZV9lbnRyeV93YWl0X3VudXNlZChvZSk7XG4rXHRcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBvZSk7XG4rXHRcdFx0bG9ja19idWZmZXIobmV3X2JoKTtcbitcdFx0XHRnb3RvIHJldHJ5X293bmVyO1xuK1x0XHR9XG4rXHR9XG4rXHRnZXRfYmgobmV3X2JoKTtcbitcdHVubG9ja19idWZmZXIobmV3X2JoKTtcbitcbitcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgbmV3X2JoLFxuK1x0XHRcdFx0ICAgICBFTlRSWShCSERSKG5ld19iaCkgKyAxKSxcbitcdFx0XHRcdCAgICAgdHJ1ZSAvKiBibG9ja19jc3VtICovLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbitcdFx0XHRcdCAgICAgMCAvKiBleHRyYV9jcmVkaXRzICovLFxuK1x0XHRcdFx0ICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pO1xuK1x0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbitcdGlmIChxdW90YV9sZW4pIHtcbitcdFx0LypcbitcdFx0ICogUmV2ZXJzZXMgdGhpcyBvcGVyYXRpb24ncyBvd24gZXh0NF94YXR0cl9pbm9kZV9hbGxvY19xdW90YSgpXG4rXHRcdCAqIGNoYXJnZSwgc28gbm8gRUEgaW5vZGUgcG9pbnRlciBpcyBuZWVkZWQgaGVyZS5cbitcdFx0ICovXG4rXHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgcXVvdGFfbGVuKTtcbitcdFx0ZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xuK1x0fVxuK1x0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBuZXdfYmgsIDAsIDEsXG4rXHRcdFx0IEVYVDRfRlJFRV9CTE9DS1NfTUVUQURBVEEgfFxuK1x0XHRcdCBFWFQ0X0ZSRUVfQkxPQ0tTX0ZPUkdFVCk7XG4rfVxuK1xuIC8qXG4gICogRmluZCB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UgZm9yIEVBcy4gVGhpcyBhbHNvIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZlxuICAqIGJ5dGVzIHVzZWQgYnkgRUEgZW50cmllcy5cbkBAIC0yMTY5LDggKzIyMjYsMTMgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2Jsb2NrX2NhY2hlX2luc2VydChlYV9ibG9ja19jYWNoZSwgbmV3X2JoKTtcbiBcdFx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgICBuZXdfYmgpO1xuLVx0XHRcdGlmIChlcnJvcilcbitcdFx0XHRpZiAoZXJyb3IpIHtcbitcdFx0XHRcdGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWwoaGFuZGxlLCBpbm9kZSwgbmV3X2JoLFxuK1x0XHRcdFx0XHRcdFx0ICBpLVx1MDAzZWluX2lub2RlID9cbitcdFx0XHRcdFx0XHRcdCAgaS1cdTAwM2V2YWx1ZV9sZW4gOiAwLFxuK1x0XHRcdFx0XHRcdFx0ICBlcnJvcik7XG4gXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowMzo1Mi41OTA3NTg4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDUxMjk3MjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWxgLCB3aXRoaW4gYGZzL2V4dDQveGF0dHIuY2AuIE15IGluaXRpYWwgcmVhZCBpcyB0aGF0IHRoaXMgaXMgZXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBjbGVhbiB1cCBhZnRlciBhIGZhaWx1cmUgZHVyaW5nIHRoZSB3cml0aW5nIG9mIGEgbmV3IGV4dGVuZGVkIGF0dHJpYnV0ZSAoeGF0dHIpIGJsb2NrLiBJdCdzIGNhbGxlZCBmcm9tIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgd2hlbiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIHJldHVybnMgYW4gZXJyb3IuIFRoZSBrZXkgaGVyZSBpcyBwcm9wZXIgY2xlYW51cCwgd2hpY2ggaW5jbHVkZXMgcmVsZWFzaW5nIGJsb2NrIHJlZmVyZW5jZXMsIGZyZWVpbmcgdGhlIGJsb2NrIGl0c2VsZiwgYW5kIGhhbmRsaW5nIHF1b3RhIGFkanVzdG1lbnRzLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzIHdpdGggZXJyb3IgcGF0aHMsIGlzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUgc2NlbmFyaW9zLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcuIEhvd2V2ZXIsIHRoZSBkZXNjcmlwdGlvbiBzdGF0ZXMgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgaW4gcGxhY2UgdG8gY2F0Y2ggdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMsIHdoaWNoIGlzIGdvb2QuICBJdCBhbHNvIHNwZWNpZmljYWxseSBjYWxscyBvdXQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIGNyaXRpY2FsIHBvaW50LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGlzIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwgcXVvdGFfbGVuLCBlcnJvcilgLiBJIHJlY29nbml6ZSBhbGwgdGhlIHBhcmFtZXRlcnM6IHRoZSB0cmFuc2FjdGlvbiBoYW5kbGUsIHRoZSBpbm9kZSwgdGhlIG5ldyBidWZmZXIgaGVhZCwgdGhlIHF1b3RhIGxlbmd0aCwgYW5kIHRoZSBlcnJvciBjb2RlLiBJJ20gc2VlaW5nIHN0YW5kYXJkIGV4dDQgbWV0YWRhdGEgb3BlcmF0aW9ucyBiZWluZyBwZXJmb3JtZWQgd2l0aGluOiBgZXh0NF9lcnJvcl9pbm9kZWAsIGBsb2NrX2J1ZmZlcmAsIGBtYl9jYWNoZV9lbnRyeV9kZWxldGVfb3JfZ2V0YCwgYG1iX2NhY2hlX2VudHJ5X3dhaXRfdW51c2VkYCwgYG1iX2NhY2hlX2VudHJ5X3B1dGAsIGBnZXRfYmhgLCBgdW5sb2NrX2J1ZmZlcmAsIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZWAsIGBleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGFgLCBgZXh0NF9tYXJrX2lub2RlX2RpcnR5YCwgYW5kIGBleHQ0X2ZyZWVfYmxvY2tzYC4gIE5vdGhpbmcgdW51c3VhbCB0aGVyZTsgdGhlc2UgYXJlIGFsbCB3ZWxsLXVuZGVyc3Rvb2QsIHN0YW5kYXJkIGV4dDQgcHJpbWl0aXZlcy5cblxuSSdtIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlLiBgZWFfaW5vZGVfYXJyYXlgIGlzIGluaXRpYWxpemVkIHRvIGBOVUxMYCBhbmQgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIHdoaWNoIGVpdGhlciBwb3B1bGF0ZXMgaXQsIG9yIGxlYXZlcyBpdCBOVUxMLCBhbmQgKnRoZW4qIGl0J3MgZnJlZWQuIFRoYXQncyBhIHJlYXNvbmFibGUgcGF0dGVybiB0aGF0IGRvZXNuJ3QgaW1tZWRpYXRlbHkganVtcCBvdXQgYXQgbWUgYXMgcHJvYmxlbWF0aWMuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgZXJyb3IgY2FzZSB3aXRoIGEgd2VsbC1kZWZpbmVkIGNsZWFudXAgcHJvY2VkdXJlIHRoYXQgdXRpbGl6ZXMgc3RhbmRhcmQsIHRlc3RlZCBleHQ0IGZ1bmN0aW9ucywgYW5kIGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgb2J2aW91cyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBvdGhlciBLTVNBTi1zcGVjaWZpYyBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NywiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowNDowMi4wNDIwNTkyMloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBlcnJvciBoYW5kbGluZyBmdW5jdGlvbiBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgdG8gcHJvcGVybHkgY2xlYW4gdXAgYSBuZXdseSBhbGxvY2F0ZWQgeGF0dHIgYmxvY2sgaWYgYGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCBmYWlscy4gVGhlIGNoYW5nZXMgaW52b2x2ZSByZWZlcmVuY2UgY291bnRpbmcsIGNhY2hlIGVudHJ5IG1hbmFnZW1lbnQsIHF1b3RhIHJlbGVhc2luZywgYW5kIGJsb2NrIGZyZWVpbmcuIFRoZXNlIG9wZXJhdGlvbnMgcHJpbWFyaWx5IHJpc2sgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXJyb3IgaGFuZGxpbmcgZnVuY3Rpb24gYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWxgIHRvIHByb3Blcmx5IGNsZWFuIHVwIGEgbmV3bHkgYWxsb2NhdGVkIHhhdHRyIGJsb2NrIGlmIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nLCBjYWNoZSBlbnRyeSBtYW5hZ2VtZW50LCBxdW90YSByZWxlYXNpbmcsIGFuZCBibG9jayBmcmVlaW5nLiBUaGVzZSBvcGVyYXRpb25zIHByaW1hcmlseSByaXNrIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4xlr8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 10:46:09 +0000 UTC FinishedAt: 2026-08-17 11:04:03 +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": "1351c159c59b04195647917c5a5f0e5467f44bb0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "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": "1351c159c59b04195647917c5a5f0e5467f44bb0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "9d606f4f-34cc-4ae9-974d-ef66197733f3" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_xattr_set", "ext4_xattr_set_handle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSBjbGVhbiB1cCBhIG5ld2x5IGFsbG9jYXRlZCB4YXR0ciBibG9jayBpZiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgY2FjaGUgZW50cnkgbWFuYWdlbWVudCwgcXVvdGEgcmVsZWFzaW5nLCBhbmQgYmxvY2sgZnJlZWluZy4gVGhlc2Ugb3BlcmF0aW9ucyBwcmltYXJpbHkgcmlzayB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG1lbW9yeSBsZWFrcywgb3IgaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBhIG5ldyBmdW5jdGlvbiBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgdG8gcHJvcGVybHkgcmVsZWFzZSByZXNvdXJjZXMgKHJlZmVyZW5jZXMsIGJsb2NrLCBxdW90YSkgd2hlbiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzIG9uIGEgbmV3bHkgYWxsb2NhdGVkIHhhdHRyIGJsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHJlY292ZXJ5IHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzg3NWIxNmZjMzQxMmNjZWY2NDM3YmI3YTMxMDVjOWRkMmRlZGU3NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDExOjAzOjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyOC4uZTA4NmM4Mzk1MDQyYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTM2Miw2ICYjNDM7MTM2Miw2MyBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybjtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFVuZG8gdGhlIHNldHVwIG9mIGEgbmV3IHhhdHRyIGJsb2NrIHRoYXQgZmFpbGVkIHRvIGJlIHdyaXR0ZW4gb3V0OiBkcm9wXG4mIzQzOyAqIHRoZSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKCkgcmVmZXJlbmNlcywgZnJlZSB0aGUgYmxvY2ssIGFuZFxuJiM0MzsgKiByZWxlYXNlIHRoZSBxdW90YSB0aGlzIG9wZXJhdGlvbiBjaGFyZ2VkIGZvciB0aGUgbmV3IHZhbHVlIChxdW90YV9sZW4sXG4mIzQzOyAqIHplcm8gd2hlbiB0aGUgdmFsdWUgaXMgbm90IGluIGFuIEVBIGlub2RlKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCxcbiYjNDM7XHRcdFx0XHQgICAgICBzaXplX3QgcXVvdGFfbGVuLCBpbnQgZXJyb3IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqb2U7XG4mIzQzO1x0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0ZXh0NF9lcnJvcl9pbm9kZShpbm9kZSwgX19mdW5jX18sIF9fTElORV9fLCAwLFxuJiM0MztcdFx0XHQgXCYjMzQ7eGF0dHIgYmxvY2sgZGlydHkgZmFpbGVkOiAlZFwmIzM0OywgZXJyb3IpO1xuJiM0MztcdGxvY2tfYnVmZmVyKG5ld19iaCk7XG4mIzQzO3JldHJ5X293bmVyOlxuJiM0MztcdGlmIChsZTMyX3RvX2NwdShCSERSKG5ld19iaCktXHUwMDNlaF9yZWZjb3VudCkgIT0gMSkge1xuJiM0MztcdFx0dW5sb2NrX2J1ZmZlcihuZXdfYmgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZWFfYmxvY2tfY2FjaGUpIHtcbiYjNDM7XHRcdG9lID0gbWJfY2FjaGVfZW50cnlfZGVsZXRlX29yX2dldChlYV9ibG9ja19jYWNoZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBsZTMyX3RvX2NwdShCSERSKG5ld19iaCktXHUwMDNlaF9oYXNoKSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBuZXdfYmgtXHUwMDNlYl9ibG9ja25yKTtcbiYjNDM7XHRcdGlmIChvZSkge1xuJiM0MztcdFx0XHR1bmxvY2tfYnVmZmVyKG5ld19iaCk7XG4mIzQzO1x0XHRcdG1iX2NhY2hlX2VudHJ5X3dhaXRfdW51c2VkKG9lKTtcbiYjNDM7XHRcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBvZSk7XG4mIzQzO1x0XHRcdGxvY2tfYnVmZmVyKG5ld19iaCk7XG4mIzQzO1x0XHRcdGdvdG8gcmV0cnlfb3duZXI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGdldF9iaChuZXdfYmgpO1xuJiM0MztcdHVubG9ja19idWZmZXIobmV3X2JoKTtcbiYjNDM7XG4mIzQzO1x0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBuZXdfYmgsXG4mIzQzO1x0XHRcdFx0ICAgICBFTlRSWShCSERSKG5ld19iaCkgJiM0MzsgMSksXG4mIzQzO1x0XHRcdFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbiYjNDM7XHRcdFx0XHQgICAgIDAgLyogZXh0cmFfY3JlZGl0cyAqLyxcbiYjNDM7XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4mIzQzO1x0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiYjNDM7XHRpZiAocXVvdGFfbGVuKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmV2ZXJzZXMgdGhpcyBvcGVyYXRpb24mIzM5O3Mgb3duIGV4dDRfeGF0dHJfaW5vZGVfYWxsb2NfcXVvdGEoKVxuJiM0MztcdFx0ICogY2hhcmdlLCBzbyBubyBFQSBpbm9kZSBwb2ludGVyIGlzIG5lZWRlZCBoZXJlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHF1b3RhX2xlbik7XG4mIzQzO1x0XHRleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0fVxuJiM0MztcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgbmV3X2JoLCAwLCAxLFxuJiM0MztcdFx0XHQgRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQSB8XG4mIzQzO1x0XHRcdCBFWFQ0X0ZSRUVfQkxPQ0tTX0ZPUkdFVCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBGaW5kIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSBmb3IgRUFzLiBUaGlzIGFsc28gcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mXG4gICogYnl0ZXMgdXNlZCBieSBFQSBlbnRyaWVzLlxuQEAgLTIxNjksOCAmIzQzOzIyMjYsMTMgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2Jsb2NrX2NhY2hlX2luc2VydChlYV9ibG9ja19jYWNoZSwgbmV3X2JoKTtcbiBcdFx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgICBuZXdfYmgpO1xuLVx0XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0aWYgKGVycm9yKSB7XG4mIzQzO1x0XHRcdFx0ZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbChoYW5kbGUsIGlub2RlLCBuZXdfYmgsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBpLVx1MDAzZWluX2lub2RlID9cbiYjNDM7XHRcdFx0XHRcdFx0XHQgIGktXHUwMDNldmFsdWVfbGVuIDogMCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIGVycm9yKTtcbiBcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTE6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIGEgbmV3IGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSByZWxlYXNlIHJlc291cmNlcyAocmVmZXJlbmNlcywgYmxvY2ssIHF1b3RhKSB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMgb24gYSBuZXdseSBhbGxvY2F0ZWQgeGF0dHIgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcmVjb3Zlcnkgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ODc1YjE2ZmMzNDEyY2NlZjY0MzdiYjdhMzEwNWM5ZGQyZGVkZTc2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTE6MDM6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggOTgyYTFmODMxZTIyOC4uZTA4NmM4Mzk1MDQyYSAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtMTM2Miw2ICYjNDM7MTM2Miw2MyBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAlyZXR1cm47CiB9CiAKJiM0MzsvKgomIzQzOyAqIFVuZG8gdGhlIHNldHVwIG9mIGEgbmV3IHhhdHRyIGJsb2NrIHRoYXQgZmFpbGVkIHRvIGJlIHdyaXR0ZW4gb3V0OiBkcm9wCiYjNDM7ICogdGhlIGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoKSByZWZlcmVuY2VzLCBmcmVlIHRoZSBibG9jaywgYW5kCiYjNDM7ICogcmVsZWFzZSB0aGUgcXVvdGEgdGhpcyBvcGVyYXRpb24gY2hhcmdlZCBmb3IgdGhlIG5ldyB2YWx1ZSAocXVvdGFfbGVuLAomIzQzOyAqIHplcm8gd2hlbiB0aGUgdmFsdWUgaXMgbm90IGluIGFuIEVBIGlub2RlKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLAomIzQzOwkJCQkgICAgICBzaXplX3QgcXVvdGFfbGVuLCBpbnQgZXJyb3IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpOwomIzQzOwlzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKm9lOwomIzQzOwlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMOwomIzQzOwomIzQzOwlleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBfX2Z1bmNfXywgX19MSU5FX18sIDAsCiYjNDM7CQkJICYjMzQ7eGF0dHIgYmxvY2sgZGlydHkgZmFpbGVkOiAlZCYjMzQ7LCBlcnJvcik7CiYjNDM7CWxvY2tfYnVmZmVyKG5ld19iaCk7CiYjNDM7cmV0cnlfb3duZXI6CiYjNDM7CWlmIChsZTMyX3RvX2NwdShCSERSKG5ld19iaCktJmd0O2hfcmVmY291bnQpICE9IDEpIHsKJiM0MzsJCXVubG9ja19idWZmZXIobmV3X2JoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlpZiAoZWFfYmxvY2tfY2FjaGUpIHsKJiM0MzsJCW9lID0gbWJfY2FjaGVfZW50cnlfZGVsZXRlX29yX2dldChlYV9ibG9ja19jYWNoZSwKJiM0MzsJCQkJCQkgIGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS0mZ3Q7aF9oYXNoKSwKJiM0MzsJCQkJCQkgIG5ld19iaC0mZ3Q7Yl9ibG9ja25yKTsKJiM0MzsJCWlmIChvZSkgewomIzQzOwkJCXVubG9ja19idWZmZXIobmV3X2JoKTsKJiM0MzsJCQltYl9jYWNoZV9lbnRyeV93YWl0X3VudXNlZChvZSk7CiYjNDM7CQkJbWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBvZSk7CiYjNDM7CQkJbG9ja19idWZmZXIobmV3X2JoKTsKJiM0MzsJCQlnb3RvIHJldHJ5X293bmVyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWdldF9iaChuZXdfYmgpOwomIzQzOwl1bmxvY2tfYnVmZmVyKG5ld19iaCk7CiYjNDM7CiYjNDM7CWV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgbmV3X2JoLAomIzQzOwkJCQkgICAgIEVOVFJZKEJIRFIobmV3X2JoKSAmIzQzOyAxKSwKJiM0MzsJCQkJICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sCiYjNDM7CQkJCSAgICAgJmFtcDtlYV9pbm9kZV9hcnJheSwKJiM0MzsJCQkJICAgICAwIC8qIGV4dHJhX2NyZWRpdHMgKi8sCiYjNDM7CQkJCSAgICAgdHJ1ZSAvKiBza2lwX3F1b3RhICovKTsKJiM0MzsJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKJiM0MzsJaWYgKHF1b3RhX2xlbikgewomIzQzOwkJLyoKJiM0MzsJCSAqIFJldmVyc2VzIHRoaXMgb3BlcmF0aW9uJiMzOTtzIG93biBleHQ0X3hhdHRyX2lub2RlX2FsbG9jX3F1b3RhKCkKJiM0MzsJCSAqIGNoYXJnZSwgc28gbm8gRUEgaW5vZGUgcG9pbnRlciBpcyBuZWVkZWQgaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCBxdW90YV9sZW4pOwomIzQzOwkJZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwomIzQzOwl9CiYjNDM7CWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgbmV3X2JoLCAwLCAxLAomIzQzOwkJCSBFWFQ0X0ZSRUVfQkxPQ0tTX01FVEFEQVRBIHwKJiM0MzsJCQkgRVhUNF9GUkVFX0JMT0NLU19GT1JHRVQpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBGaW5kIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSBmb3IgRUFzLiBUaGlzIGFsc28gcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mCiAgKiBieXRlcyB1c2VkIGJ5IEVBIGVudHJpZXMuCkBAIC0yMTY5LDggJiM0MzsyMjI2LDEzIEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2Jsb2NrX2NhY2hlX2luc2VydChlYV9ibG9ja19jYWNoZSwgbmV3X2JoKTsKIAkJCWVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwKIAkJCQkJCQkgICBuZXdfYmgpOwotCQkJaWYgKGVycm9yKQomIzQzOwkJCWlmIChlcnJvcikgewomIzQzOwkJCQlleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwKJiM0MzsJCQkJCQkJICBpLSZndDtpbl9pbm9kZSA/CiYjNDM7CQkJCQkJCSAgaS0mZ3Q7dmFsdWVfbGVuIDogMCwKJiM0MzsJCQkJCQkJICBlcnJvcik7CiAJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJCX0KIAkJfQogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnMvZXh0NC94YXR0ci5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBuZXcgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyAqZGVmaW5pdGVseSogYW4gZXJyb3IgaGFuZGxpbmcgcGF0aC4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0aGVyZSB0byBjbGVhbiB1cCBhZnRlciBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzIHdpdGhpbiBgZXh0NF94YXR0cl9ibG9ja19zZXRgLiBUaGF0IGNvcmUgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGlzIGtleSBmb3IgYWN0dWFsbHkgc2V0dGluZyBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIGV4dDQuIEJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBmaXggYW5kICpkZWZpbml0ZWx5KiBzb21ldGhpbmcgdGhhdCYjMzk7cyB3b3J0aCBoaXR0aW5nIHdpdGggc29tZSBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyBhbmQgaWRlbnRpZnkgdGhlIGJlc3QgcGxhY2UgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGFuZCBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgYXJlIHRoZSB0d28gbWFpbiBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGdldHMgY2FsbGVkIGZyb20gYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgaXMgc3RhdGljLiBBbHJpZ2h0LCB0aGF0IG1lYW5zIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgcHJvYmFibHkgYSBnb29kIGVudHJ5IHBvaW50IHRvIHN0YXJ0IHdpdGgsIG9yIG1heWJlIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIHNpbmNlIGl0IGNhbGxzIGl0LgoKSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBmcy9leHQ0L3hhdHRyLmNgIHRvIGNvbmZpcm0gd2hldGhlciBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGlzIHN0YXRpYywganVzdCB0byBiZSBzdXJlLiBUaGF0IHdvdWxkIGFmZmVjdCBob3cgYWNjZXNzaWJsZSBpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9MTI3Mj1leHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTI5NC1cdFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcbmZzL2V4dDQveGF0dHIuYzoxMjk1Olx0XHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBmcmVlZCBibG9ja1xuZnMvZXh0NC94YXR0ci5jLTEyOTYtXHRcdCAqL1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xOTU1PXN0YXRpYyBpbnRcbmZzL2V4dDQveGF0dHIuYzoxOTU2OmV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTk1Ny1cdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMDAxLVx0XHRcdCAqIFRoaXMgbXVzdCBoYXBwZW4gdW5kZXIgYnVmZmVyIGxvY2sgZm9yXG5mcy9leHQ0L3hhdHRyLmM6MjAwMjpcdFx0XHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBtb2RpZmllZFxuZnMvZXh0NC94YXR0ci5jLTIwMDMtXHRcdFx0ICogYmxvY2tcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjQxMT1leHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI0OTQtXHRcdGVsc2UgaWYgKCFicy5zLm5vdF9mb3VuZClcbmZzL2V4dDQveGF0dHIuYzoyNDk1Olx0XHRcdGVycm9yID0gZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aSwgXHUwMDI2YnMpO1xuZnMvZXh0NC94YXR0ci5jLTI0OTYtXHR9IGVsc2Uge1xuLS1cbmZzL2V4dDQveGF0dHIuYy0yNTExLVx0XHRcdGkudmFsdWUgPSBOVUxMO1xuZnMvZXh0NC94YXR0ci5jOjI1MTI6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZicyk7XG5mcy9leHQ0L3hhdHRyLmMtMjUxMy1cdFx0fSBlbHNlIGlmIChlcnJvciA9PSAtRU5PU1BDKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTI1MjAtXHRcdFx0fVxuZnMvZXh0NC94YXR0ci5jOjI1MjE6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZicyk7XG5mcy9leHQ0L3hhdHRyLmMtMjUyMi1cdFx0XHRpZiAoIWVycm9yIFx1MDAyNlx1MDAyNiAhaXMucy5ub3RfZm91bmQpIHtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjY2Nz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNzMyLVx0LyogTW92ZSBlYSBlbnRyeSBmcm9tIHRoZSBpbm9kZSBpbnRvIHRoZSBibG9jayAqL1xuZnMvZXh0NC94YXR0ci5jOjI3MzM6XHRlcnJvciA9IGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmksIGJzKTtcbmZzL2V4dDQveGF0dHIuYy0yNzM0LVx0aWYgKGVycm9yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgZXh0NCBFeHRlbmRlZCBBdHRyaWJ1dGUgSGFuZGxpbmcqKgoKQWxyaWdodCwgc28gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IG9wZXJhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQgdXN1YWxseSBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIGluIHNjb3BlLCBsaWtlbHkgb25seSB2aXNpYmxlIGFuZCB1c2FibGUgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQgb3Igc291cmNlIGZpbGUuIE1ha2VzIHNlbnNlIGZvciBzb21lIGxvdy1sZXZlbCBibG9jay1zZXR0aW5nIG9wZXJhdGlvbiwgcHJvYmFibHkuIE5vdywgbGV0JiMzOTtzIHNlZSwgd2hhdCBhYm91dCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYD8gQWgsIGl0JiMzOTtzICpub3QqIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgaGludHMgdGhhdCBpdCBpcyBkZXNpZ25lZCB0byBiZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGV4dDQgZmlsZSBzeXN0ZW0gY29kZS4gT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYC4gVGltZSB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB3aGF0IGl0cyByb2xlIGlzIGluIHRoZSBlbnRpcmUgYXR0cmlidXRlIHNldHRpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jPTIzODA9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF94YXR0cl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjM5OC0vKlxuZnMvZXh0NC94YXR0ci5jOjIzOTk6ICogZXh0NF94YXR0cl9zZXRfaGFuZGxlKClcbmZzL2V4dDQveGF0dHIuYy0yNDAwLSAqXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI0MTA9aW50XG5mcy9leHQ0L3hhdHRyLmM6MjQxMTpleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXG5mcy9leHQ0L3hhdHRyLmMtMjQxMi1cdFx0ICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI1NjM9aW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjU5Mi0gKlxuZnMvZXh0NC94YXR0ci5jOjI1OTM6ICogTGlrZSBleHQ0X3hhdHRyX3NldF9oYW5kbGUsIGJ1dCBzdGFydCBmcm9tIGFuIGlub2RlLiBUaGlzIGV4dGVuZGVkXG5mcy9leHQ0L3hhdHRyLmMtMjU5NC0gKiBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIGlzIGEgZmlsZXN5c3RlbSB0cmFuc2FjdGlvbiBieSBpdHNlbGYuXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI1OTk9ZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI2MjItXG5mcy9leHQ0L3hhdHRyLmM6MjYyMzpcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSxcbmZzL2V4dDQveGF0dHIuYy0yNjI0LVx0XHRcdFx0XHQgICAgICB2YWx1ZSwgdmFsdWVfbGVuLCBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBleHQ0IEF0dHJpYnV0ZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGFuZCBgZXh0NF94YXR0cl9zZXRgIGZ1bmN0aW9ucywgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gbm90aW5nIHNvbWV0aGluZy4gVGhleSBhcmVuJiMzOTt0IHN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm9uLXN0YXRpYyBmdW5jdGlvbnMgc3VnZ2VzdCB0aGVzZSBhcmUgbGlrZWx5IGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiBwb3RlbnRpYWxseSBmcm9tIHVzZXIgc3BhY2UgKHRob3VnaCwgb2YgY291cnNlLCBwcm9wZXIgc2VjdXJpdHkgY2hlY2tzIHdvdWxkIGJlIGluIHBsYWNlKS4gSXQgaW1wbGllcyBhIGJyb2FkZXIsIG1vcmUgYWNjZXNzaWJsZSByb2xlIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIG1vZHVsZSwgYmV5b25kIGp1c3QgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4KClRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBhcmUgYmVpbmcgdXNlZCwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMgc3BlY2lmaWMgdG8gZXh0NC4gSSBuZWVkIHRvIHNlZSB3aGljaCBjb25maWd1cmF0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSBleHRlbmRlZCBhdHRyaWJ1dGUgc3VwcG9ydCB3aXRoaW4gZXh0NCwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgd2l0aGluIHdoaWNoIHRoZXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBjb21waWxlZCBhbmQgcG90ZW50aWFsbHkgY2FsbGVkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgdGhlIHBvc3NpYmxlIGRlcGVuZGVuY2llcyB0aGF0IGltcGFjdCB0aGVzZSBmdW5jdGlvbnMmIzM5OyBhdmFpbGFiaWxpdHkgYW5kIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgRVhUNCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBiYXNlIGZpbGVzeXN0ZW0gY29uZmlnIGlzIGRlZmluaXRlbHkgc2V0IHRvIGBFWFQ0X0ZTYC4gTm93IEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBtYWtlIHN1cmUgYWxsIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBzZXQgdXAgcHJvcGVybHkuIElzIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcyB3aXRoaW4gdGhlIEVYVDQgZmlsZXN5c3RlbSBpdHNlbGY/IFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBhbmQgbG9vayBhdCB0aGUgYGZzL2V4dDQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSYjMzk7cyBhIHJlbGF0ZWQgYFhBVFRSYCBvcHRpb24gZGVmaW5lZCB0aGVyZSBhbmQgY29uZmlybSBpdHMgc3RhdHVzLiBHb3R0YSBiZSB0aG9yb3VnaCB3aXRoIHRoZXNlIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbnMsIHlvdSBrbm93PyBPbmUgbWlzc2VkIGJpdCBhbmQgaXQgY291bGQgYWxsIGNvbWUgY3Jhc2hpbmcgZG93biBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEV4dDQgRXh0ZW5kZWQgQXR0cmlidXRlcyoqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGV4dDQgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgZXh0ZW5kZWQgYXR0cmlidXRlcyByZWNlbnRseSwgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IEkgc2hvdWxkIGZpbmQgdGhlIGBYQVRUUmAgb3B0aW9uIHdpdGhpbiB0aGUgYGZzL2V4dDQvS2NvbmZpZ2AgZmlsZSwgYnV0IGl0IHNlZW1zIHRoZXJlJiMzOTtzIG5vIHN1Y2ggb3B0aW9uIGRlZmluZWQgdGhlcmUuIEhtbSwgdGhhdCYjMzk7cyB1bnVzdWFsLiBEaWQgSSByZW1lbWJlciBpbmNvcnJlY3RseT8gT3IgcGVyaGFwcyBpcyBpdCBhbHdheXMgZW5hYmxlZCwgbGlrZSB0aGUgZmlsZSBpbmRpY2F0ZXM/CgpMZXQgbWUgZG91YmxlLWNoZWNrLiBUaGUgYEtjb25maWdgIGZpbGUgaXMgbm90IGFsd2F5cyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIG1vZHVsZS4gSXQmIzM5O3Mgb2Z0ZW4gYmV0dGVyIHRvIGdvIGRlZXBlci4gTWF5YmUgdGhlIGJ1aWxkIHN5c3RlbSBpdHNlbGYgaXMgbWFuYWdpbmcgdGhlIGRlcGVuZGVuY2llcy4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGZzL2V4dDQvTWFrZWZpbGVgIGZpbGUgdG8gc2VlIGhvdyB0aG9zZSBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLiBIb3BlZnVsbHksIHRoZSBgTWFrZWZpbGVgIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiBleHRlbmRlZCBhdHRyaWJ1dGUgc3VwcG9ydCBhbmQgY2xhcmlmeSB3aGV0aGVyIGl0JiMzOTtzIHN0YXRpY2FsbHkgY29tcGlsZWQgb3IgZGVwZW5kZW50IG9uIG90aGVyIHNldHRpbmdzLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoIGZvciB0aGUgdGFzayBhdCBoYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcbi0tXG5mcy9leHQ0L01ha2VmaWxlLTExLVx0XHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTI6XHRcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEzOlx0XHR4YXR0cl91c2VyLm8gZmFzdF9jb21taXQubyBvcnBoYW4ub1xuZnMvZXh0NC9NYWtlZmlsZS0xNC1cbmZzL2V4dDQvTWFrZWZpbGU9MTU9ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcdCYjNDM7PSBhY2wub1xuZnMvZXh0NC9NYWtlZmlsZToxNjpleHQ0LSQoQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkpXHRcdCYjNDM7PSB4YXR0cl9zZWN1cml0eS5vXG5mcy9leHQ0L01ha2VmaWxlLTE3LWV4dDQtdGVzdC1vYmpzXHRcdFx0XHQmIzQzOz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMDEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBleHQ0X3hhdHRyYCBDb21waWxhdGlvbiBhbmQgRnV6emluZyBUYXJnZXQqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHhhdHRyLm9gIGlzIGluZGVlZCBhbHdheXMgY29tcGlsZWQgd2hlbiBgRVhUNF9GU2AgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kLCB0aGF0IG1lYW5zIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50IGlzIHNpbXBsZToganVzdCBgRVhUNF9GU2AuIEkmIzM5O2xsIGtlZXAgYW4gZXllIG9uIGBleHQ0X3hhdHRyX3NldGAgYW5kIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgLCB0aGV5IHNlZW0gbGlrZSBrZXkgZnVuY3Rpb25zIGhlcmUuCgpXYWl0IGEgc2Vjb25kLCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5IGRlYWxpbmcgd2l0aCBhbiAqZXJyb3IqIHBhdGgsIHNwZWNpZmljYWxseSBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAuIEl0IGdldHMgY2FsbGVkIHdoZW4gYGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCBmYWlscywgbWVhbmluZyBpdCYjMzk7cyBjbGVhbmluZyB1cCBhZnRlciBhIHByb2JsZW0gZHVyaW5nIHRoZSBzZXR1cCBvZiBhIG5ldyB4YXR0ciBibG9jay4gVGhhdCBtYWtlcyB0aGlzIGEgKnJlYWxseSogaW50ZXJlc3RpbmcgdGFyZ2V0IGZvciBmdXp6aW5nLiBFcnJvciBoYW5kbGluZyBwYXRocyBhcmUgb2Z0ZW4gd2hlcmUgYnVncyBsdXJrLiBJIHNob3VsZCBkZWZpbml0ZWx5IGdpdmUgdGhpcyBhIGNsb3NlciBsb29rIQoKTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IHJlbGF0ZWQgZnVuY3Rpb25zLiBBaCwgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpcyBzdGF0aWMsIHNvIGxpa2VseSBub3QgZGlyZWN0bHkgZXhwb3NlZC4gYGV4dDRfeGF0dHJfc2V0YCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBhbm90aGVyIGZ1bmN0aW9uIEkgc2hvdWxkIGFkZCB0byBteSBsaXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmV4dDRfeGF0dHJfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipVbnBhY2tpbmcgdGhlIE5vbi1TdGF0aWMsIE5vbi1FeHBvcnRlZCBFbmlnbWEqKgoKSG1tLCBpbnRlcmVzdGluZy4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSwgYW5kIGl0JiMzOTtzIGdvdCBtZSB0aGlua2luZy4gSXQmIzM5O3MgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1lYW5zIGl0ICpjb3VsZCogYmUgdXNlZCBleHRlcm5hbGx5LCBidXQgdGhlIGNvbXBpbGVyIGRpZG4mIzM5O3QgZmxhZyBpdCBhcyBleHBvcnRlZCBlaXRoZXIuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNpdHVhdGlvbiB0aGF0IHVzdWFsbHkgbWVhbnMgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBub3csIEkmIzM5O20gY2hlY2tpbmcsIGFuZCBgZXh0NF94YXR0cl9zZXRgIGlzICpkZWZpbml0ZWx5KiBub3QgZXhwbGljaXRseSBleHBvcnRlZCBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UsIGJ1dCBJJiMzOTt2ZSBkZWZpbml0ZWx5IHNlZW4gaXQgdXNlZCBmcm9tIHdpdGhpbiBvdGhlciBwYXJ0cyBvZiB0aGUgZmlsZXN5c3RlbSBjb2RlLiBUaGF0IG1lYW5zIHRoZXJlJiMzOTtzIHNvbWUgc29ydCBvZiBub24tc3RhbmRhcmQgdXNhZ2UsIG9yIGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkIHZpYSBhbiBpbmRpcmVjdCBtZXRob2QsIHBvc3NpYmx5IHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIG9yIGEgbWFjcm8gZXhwYW5zaW9uLCByYXRoZXIgdGhhbiBhIGRpcmVjdCwgZXhwbGljaXQgZGVjbGFyYXRpb24uIEdvdHRhIHVuZGVyc3RhbmQgdGhlIGxpbmtpbmcgYmVoYXZpb3IgYXJvdW5kIGBleHQ0X3hhdHRyX3NldGAuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgc2l0ZXMgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgYmVpbmcgYWNjZXNzZWQgYW5kIHdoeSB0aGUgZXhwb3J0IGlzbiYjMzk7dCBvYnZpb3VzLiBUaGlzIGNvdWxkIGJlIGludGVudGlvbmFsIGRlc2lnbiwgb3IgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBvciBpbmNsdWRlIHBhdGhzLiBUaW1lIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvYWNsLmM9MTg5PV9fZXh0NF9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxuLS1cbmZzL2V4dDQvYWNsLmMtMjE2LVxuZnMvZXh0NC9hY2wuYzoyMTc6XHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBuYW1lX2luZGV4LCBcJiMzNDtcJiMzNDssXG5mcy9leHQ0L2FjbC5jLTIxOC1cdFx0XHRcdCAgICAgIHZhbHVlLCBzaXplLCB4YXR0cl9mbGFncyk7XG4tLVxuZnMvZXh0NC9hY2wuYz0yMjg9ZXh0NF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvZXh0NC9hY2wuYy0yNDEtcmV0cnk6XG5mcy9leHQ0L2FjbC5jOjI0MjpcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZSwgYWNsX3NpemUsIGZhbHNlIC8qIGlzX2NyZWF0ZSAqLyxcbmZzL2V4dDQvYWNsLmMtMjQzLVx0XHRcdFx0ICAgICAgIFx1MDAyNmNyZWRpdHMpO1xuLS1cbmZzL2V4dDQvY3J5cHRvLmM9MTMyPXN0YXRpYyBpbnQgZXh0NF9zZXRfY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICpjdHgsIHNpemVfdCBsZW4sXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy0xNzItXHRcdCAqL1xuZnMvZXh0NC9jcnlwdG8uYzoxNzM6XHRcdHJlcyA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLFxuZnMvZXh0NC9jcnlwdG8uYy0xNzQtXHRcdFx0XHRcdCAgICBFWFQ0X1hBVFRSX0lOREVYX0VOQ1JZUFRJT04sXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy0xOTMtcmV0cnk6XG5mcy9leHQ0L2NyeXB0by5jOjE5NDpcdHJlcyA9IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoaW5vZGUsIGxlbiwgZmFsc2UgLyogaXNfY3JlYXRlICovLFxuZnMvZXh0NC9jcnlwdG8uYy0xOTUtXHRcdFx0XHQgICAgIFx1MDAyNmNyZWRpdHMpO1xuLS1cbmZzL2V4dDQvY3J5cHRvLmMtMjAyLVxuZnMvZXh0NC9jcnlwdG8uYzoyMDM6XHRyZXMgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9FTkNSWVBUSU9OLFxuZnMvZXh0NC9jcnlwdG8uYy0yMDQtXHRcdFx0XHQgICAgRVhUNF9YQVRUUl9OQU1FX0VOQ1JZUFRJT05fQ09OVEVYVCxcbi0tXG5mcy9leHQ0L2lhbGxvYy5jPTg3Nj1zdGF0aWMgaW50IGV4dDRfeGF0dHJfY3JlZGl0c19mb3JfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBtb2RlX3QgbW9kZSxcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTg4OS1cdFx0bmJsb2NrcyAmIzQzOz0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKlxuZnMvZXh0NC9pYWxsb2MuYzo4OTA6XHRcdFx0X19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHNiLCBOVUxMIC8qIGlub2RlICovLFxuZnMvZXh0NC9pYWxsb2MuYy04OTEtXHRcdFx0XHRcdFx0IE5VTEwgLyogYmxvY2tfYmggKi8sIGFjbF9zaXplLFxuLS1cbmZzL2V4dDQvaWFsbG9jLmMtOTA4LVx0XHRuYmxvY2tzICYjNDM7PSBudW1fc2VjdXJpdHlfeGF0dHJzICpcbmZzL2V4dDQvaWFsbG9jLmM6OTA5Olx0XHRcdF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzYiwgTlVMTCAvKiBpbm9kZSAqLyxcbmZzL2V4dDQvaWFsbG9jLmMtOTEwLVx0XHRcdFx0XHRcdCBOVUxMIC8qIGJsb2NrX2JoICovLCAxMDI0LFxuLS1cbmZzL2V4dDQvaWFsbG9jLmMtOTE0LVx0aWYgKGVuY3J5cHQpXG5mcy9leHQ0L2lhbGxvYy5jOjkxNTpcdFx0bmJsb2NrcyAmIzQzOz0gX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHNiLFxuZnMvZXh0NC9pYWxsb2MuYy05MTYtXHRcdFx0XHRcdFx0ICAgIE5VTEwgLyogaW5vZGUgKi8sXG4tLVxuZnMvZXh0NC94YXR0ci5jPTkyOD1zdGF0aWMgdm9pZCBleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoc3RydWN0IGlub2RlICpwYXJlbnQsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTkzOC1cbmZzL2V4dDQveGF0dHIuYzo5Mzk6aW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC94YXR0ci5jLTk0MC1cdFx0XHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmxvY2tfYmgsIHNpemVfdCB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE2MzU9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTE2ODUtXG5mcy9leHQ0L3hhdHRyLmM6MTY4NjpzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXG5mcy9leHQ0L3hhdHRyLmMtMTY4Ny1cdFx0XHRcdHN0cnVjdCBleHQ0X3hhdHRyX3NlYXJjaCAqcyxcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTk1Nj1leHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMDE5LVx0XHRcdGVhX2JkZWJ1Zyhicy1cdTAwM2ViaCwgXCYjMzQ7bW9kaWZ5aW5nIGluLXBsYWNlXCYjMzQ7KTtcbmZzL2V4dDQveGF0dHIuYzoyMDIwOlx0XHRcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfZW50cnkoaSwgcywgaGFuZGxlLCBpbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0yMDIxLVx0XHRcdFx0XHQgICAgIGVhX2lub2RlLCB0cnVlIC8qIGlzX2Jsb2NrICovKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjA0Ny1cdFx0ICogSWYgZXhpc3RpbmcgZW50cnkgcG9pbnRzIHRvIGFuIHhhdHRyIGlub2RlLCB3ZSBuZWVkXG5mcy9leHQ0L3hhdHRyLmM6MjA0ODpcdFx0ICogdG8gcHJldmVudCBleHQ0X3hhdHRyX3NldF9lbnRyeSgpIGZyb20gZGVjcmVtZW50aW5nXG5mcy9leHQ0L3hhdHRyLmMtMjA0OS1cdFx0ICogcmVmIGNvdW50IG9uIGl0IGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBiZWxvbmdzIHRvIHRoZVxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMDg4LVxuZnMvZXh0NC94YXR0ci5jOjIwODk6XHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2VudHJ5KGksIHMsIGhhbmRsZSwgaW5vZGUsIGVhX2lub2RlLFxuZnMvZXh0NC94YXR0ci5jLTIwOTAtXHRcdFx0XHQgICAgIHRydWUgLyogaXNfYmxvY2sgKi8pO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yMzE2PWludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMzM2LVx0fVxuZnMvZXh0NC94YXR0ci5jOjIzMzc6XHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2VudHJ5KGksIHMsIGhhbmRsZSwgaW5vZGUsIGVhX2lub2RlLFxuZnMvZXh0NC94YXR0ci5jLTIzMzgtXHRcdFx0XHQgICAgIGZhbHNlIC8qIGlzX2Jsb2NrICovKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjM4MD1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X3hhdHRyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0yMzk4LS8qXG5mcy9leHQ0L3hhdHRyLmM6MjM5OTogKiBleHQ0X3hhdHRyX3NldF9oYW5kbGUoKVxuZnMvZXh0NC94YXR0ci5jLTI0MDAtICpcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjQxMD1pbnRcbmZzL2V4dDQveGF0dHIuYzoyNDExOmV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmFtZV9pbmRleCxcbmZzL2V4dDQveGF0dHIuYy0yNDEyLVx0XHQgICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbixcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjQ0OC1cbmZzL2V4dDQveGF0dHIuYzoyNDQ5Olx0XHRjcmVkaXRzID0gX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKGlub2RlLVx1MDAzZWlfc2IsIGlub2RlLCBiaCxcbmZzL2V4dDQveGF0dHIuYy0yNDUwLVx0XHRcdFx0XHRcdCAgIHZhbHVlX2xlbixcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjU2Mi1cbmZzL2V4dDQveGF0dHIuYzoyNTYzOmludCBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCB2YWx1ZV9sZW4sXG5mcy9leHQ0L3hhdHRyLmMtMjU2NC1cdFx0XHQgICBib29sIGlzX2NyZWF0ZSwgaW50ICpjcmVkaXRzKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNTc5LVx0fSBlbHNlIHtcbmZzL2V4dDQveGF0dHIuYzoyNTgwOlx0XHQqY3JlZGl0cyA9IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZS1cdTAwM2VpX3NiLCBpbm9kZSwgYmgsXG5mcy9leHQ0L3hhdHRyLmMtMjU4MS1cdFx0XHRcdFx0XHQgICAgdmFsdWVfbGVuLCBpc19jcmVhdGUpO1xuLS1cbmZzL2V4dDQveGF0dHIuYy0yNTkwLS8qXG5mcy9leHQ0L3hhdHRyLmM6MjU5MTogKiBleHQ0X3hhdHRyX3NldCgpXG5mcy9leHQ0L3hhdHRyLmMtMjU5Mi0gKlxuZnMvZXh0NC94YXR0ci5jOjI1OTM6ICogTGlrZSBleHQ0X3hhdHRyX3NldF9oYW5kbGUsIGJ1dCBzdGFydCBmcm9tIGFuIGlub2RlLiBUaGlzIGV4dGVuZGVkXG5mcy9leHQ0L3hhdHRyLmMtMjU5NC0gKiBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIGlzIGEgZmlsZXN5c3RlbSB0cmFuc2FjdGlvbiBieSBpdHNlbGYuXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI1OTg9aW50XG5mcy9leHQ0L3hhdHRyLmM6MjU5OTpleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmFtZV9pbmRleCwgY29uc3QgY2hhciAqbmFtZSxcbmZzL2V4dDQveGF0dHIuYy0yNjAwLVx0ICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuLCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI2MTEtcmV0cnk6XG5mcy9leHQ0L3hhdHRyLmM6MjYxMjpcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZSwgdmFsdWVfbGVuLCBmbGFncyBcdTAwMjYgWEFUVFJfQ1JFQVRFLFxuZnMvZXh0NC94YXR0ci5jLTI2MTMtXHRcdFx0XHQgICAgICAgXHUwMDI2Y3JlZGl0cyk7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTI2MjItXG5mcy9leHQ0L3hhdHRyLmM6MjYyMzpcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSxcbmZzL2V4dDQveGF0dHIuYy0yNjI0LVx0XHRcdFx0XHQgICAgICB2YWx1ZSwgdmFsdWVfbGVuLCBmbGFncyk7XG4tLVxuZnMvZXh0NC94YXR0ci5oPTE4MD1leHRlcm4gaW50IGV4dDRfeGF0dHJfZ2V0KHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpO1xuZnMvZXh0NC94YXR0ci5oOjE4MTpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7XG5mcy9leHQ0L3hhdHRyLmg6MTgyOmV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7XG5mcy9leHQ0L3hhdHRyLmg6MTgzOmV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3QgdmFsdWVfbGVuLFxuZnMvZXh0NC94YXR0ci5oLTE4NC1cdFx0XHRcdCAgYm9vbCBpc19jcmVhdGUsIGludCAqY3JlZGl0cyk7XG5mcy9leHQ0L3hhdHRyLmg6MTg1OmV4dGVybiBpbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmgtMTg2LVx0XHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpibG9ja19iaCwgc2l6ZV90IHZhbHVlX2xlbixcbi0tXG5mcy9leHQ0L3hhdHRyX2h1cmQuYz0zND1leHQ0X3hhdHRyX2h1cmRfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxuLS1cbmZzL2V4dDQveGF0dHJfaHVyZC5jLTQyLVxuZnMvZXh0NC94YXR0cl9odXJkLmM6NDM6XHRyZXR1cm4gZXh0NF94YXR0cl9zZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfSFVSRCxcbmZzL2V4dDQveGF0dHJfaHVyZC5jLTQ0LVx0XHRcdCAgICAgIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7XG4tLVxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jPTI1PWV4dDRfeGF0dHJfc2VjdXJpdHlfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxuLS1cbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYy0zMC17XG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM6MzE6XHRyZXR1cm4gZXh0NF94YXR0cl9zZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFksXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMtMzItXHRcdFx0ICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbi0tXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM9MzY9ZXh0NF9pbml0eGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCB4YXR0ciAqeGF0dHJfYXJyYXksXG4tLVxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTQzLVx0Zm9yICh4YXR0ciA9IHhhdHRyX2FycmF5OyB4YXR0ci1cdTAwM2VuYW1lICE9IE5VTEw7IHhhdHRyJiM0MzsmIzQzOykge1xuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jOjQ0Olx0XHRlcnIgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSxcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYy00NS1cdFx0XHRcdFx0ICAgIEVYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFksXG4tLVxuZnMvZXh0NC94YXR0cl90cnVzdGVkLmM9MzI9ZXh0NF94YXR0cl90cnVzdGVkX3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYy0zNy17XG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYzozODpcdHJldHVybiBleHQ0X3hhdHRyX3NldChpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9UUlVTVEVELFxuZnMvZXh0NC94YXR0cl90cnVzdGVkLmMtMzktXHRcdFx0ICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbi0tXG5mcy9leHQ0L3hhdHRyX3VzZXIuYz0zMz1leHQ0X3hhdHRyX3VzZXJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxuLS1cbmZzL2V4dDQveGF0dHJfdXNlci5jLTQwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5mcy9leHQ0L3hhdHRyX3VzZXIuYzo0MTpcdHJldHVybiBleHQ0X3hhdHRyX3NldChpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9VU0VSLFxuZnMvZXh0NC94YXR0cl91c2VyLmMtNDItXHRcdFx0ICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODgKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IFhhdHRyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGV4dDQgcGF0Y2ggcmVsYXRlZCB0byBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpLiBUaGUga2V5IGZ1bmN0aW9ucyBoZXJlLCB0aGUgb25lcyBJIHdhbnQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcsIGFyZSBgZXh0NF94YXR0cl9zZXRgIGFuZCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYC4gVGhleSYjMzk7cmUgZXhwb3J0ZWQgaW4gYGZzL2V4dDQveGF0dHIuaGAsIHNvIHRoZXkmIzM5O3JlIHByZXR0eSBjZW50cmFsIHRvIHRoZSB3aG9sZSB4YXR0ciBzdWJzeXN0ZW0uIFRoZXNlIGFyZSBnb29kIGZvY2FsIHBvaW50cy4KCkZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudC4gVGhlIG1haW4gb25lLCBvYnZpb3VzbHksIGlzIGBFWFQ0X0ZTYCwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gaGF2aW5nIGFuIGV4dDQgZmlsZXN5c3RlbSBhdCBhbGwuIEl0IGxvb2tzIGxpa2UgYEVYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFsc28gdXNlIHhhdHRycywgc28gdGhleSBtaWdodCBiZSB0YW5nZW50aWFsbHkgaW52b2x2ZWQsIGJ1dCB0aGUgY29yZSBpc3N1ZSBzaG91bGQgYmUgdHJpZ2dlcmVkIHdpdGgganVzdCBgRVhUNF9GU2AuIFNpbmNlIHRoZSBpc3N1ZSBpcyB3aXRoaW4gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgd2hpY2ggaXMgY2FsbGVkIGZvciBhbnkgeGF0dHIsIHRoaXMgY29uZmlybXMgYEVYVDRfRlNgIGFzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEkgc2VlIGEgbmV3IGZ1bmN0aW9uLCBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgc3BlY2lmaWNhbGx5IHdoZW4gYGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCByZXR1cm5zIGFuIGVycm9yOgoKYGBgYwomIzQzO3N0YXRpYyB2b2lkIGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmgsCiYjNDM7CQkJCSAgICAgIHNpemVfdCBxdW90YV9sZW4sIGludCBlcnJvcikKYGBgCgpUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggYWRkcyBhIGNhbGwgdG8gYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWxgIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoLiBUaGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGludHJvZHVjZWQgdG8gaGFuZGxlIGNhc2VzIHdoZW4gYGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCBmYWlscy4gV2hhdCB0aGF0IGltcGxpZXMgaXMgdGhhdCB0aGVyZSB3YXMgcHJldmlvdXNseSBhIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrIG9yIGluY29ycmVjdCBzdGF0ZSBpbiB0aGUgZXZlbnQgb2YgdGhpcyBmYWlsdXJlLCBhbmQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhhdC4gVGhlIG5ldyBmdW5jdGlvbiBsaWtlbHkgZG9lcyB0aGluZ3MgbGlrZSByZWxlYXNpbmcgcmVmZXJlbmNlcywgZnJlZWluZyB0aGUgYmxvY2ssIGFuZCBoYW5kbGluZyBxdW90YSBhY2NvdW50aW5nIHdoZW4gdGhlcmUgaXMgYSBtZXRhZGF0YSBlcnJvci4KClRoaXMgaXMgZXhhY3RseSB0aGUgdHlwZSBvZiB0aGluZyB0aGF0ICpuZWVkcyogdG8gYmUgZnV6emVkLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gYSBjb3JlIGV4dDQgZnVuY3Rpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGVycm9yIHJlY292ZXJ5IGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIGRvdWJsZSBmcmVlcyBvciB1c2UtYWZ0ZXItZnJlZXMuIFRoaXMgbG9va3MgbGlrZSBhIGRlZmluaXRlIHdpbiBmb3IgZnV6emluZy4KClRoZXJlZm9yZSwgZm9yIHNldC1yZXN1bHRzLCBJJiMzOTtsbCBzcGVjaWZ5OgoKRm9jdXMgc3ltYm9sczoKLSBgZXh0NF94YXR0cl9zZXRgCi0gYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAKCkVuYWJsZUNvbmZpZ3M6Ci0gYEVYVDRfRlNgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXRfaGFuZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBhIG5ldyBmdW5jdGlvbiBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgdG8gcHJvcGVybHkgcmVsZWFzZSByZXNvdXJjZXMgKHJlZmVyZW5jZXMsIGJsb2NrLCBxdW90YSkgd2hlbiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzIG9uIGEgbmV3bHkgYWxsb2NhdGVkIHhhdHRyIGJsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHJlY292ZXJ5IHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXRfaGFuZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBhIG5ldyBmdW5jdGlvbiBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgdG8gcHJvcGVybHkgcmVsZWFzZSByZXNvdXJjZXMgKHJlZmVyZW5jZXMsIGJsb2NrLCBxdW90YSkgd2hlbiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzIG9uIGEgbmV3bHkgYWxsb2NhdGVkIHhhdHRyIGJsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHJlY292ZXJ5IHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXJyb3IgaGFuZGxpbmcgZnVuY3Rpb24gYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWxgIHRvIHByb3Blcmx5IGNsZWFuIHVwIGEgbmV3bHkgYWxsb2NhdGVkIHhhdHRyIGJsb2NrIGlmIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nLCBjYWNoZSBlbnRyeSBtYW5hZ2VtZW50LCBxdW90YSByZWxlYXNpbmcsIGFuZCBibG9jayBmcmVlaW5nLiBUaGVzZSBvcGVyYXRpb25zIHByaW1hcmlseSByaXNrIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzg3NWIxNmZjMzQxMmNjZWY2NDM3YmI3YTMxMDVjOWRkMmRlZGU3NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDExOjAzOjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jCmluZGV4IDk4MmExZjgzMWUyMjguLmUwODZjODM5NTA0MmEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmMKQEAgLTEzNjIsNiAmIzQzOzEzNjIsNjMgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuOwogfQogCiYjNDM7LyoKJiM0MzsgKiBVbmRvIHRoZSBzZXR1cCBvZiBhIG5ldyB4YXR0ciBibG9jayB0aGF0IGZhaWxlZCB0byBiZSB3cml0dGVuIG91dDogZHJvcAomIzQzOyAqIHRoZSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKCkgcmVmZXJlbmNlcywgZnJlZSB0aGUgYmxvY2ssIGFuZAomIzQzOyAqIHJlbGVhc2UgdGhlIHF1b3RhIHRoaXMgb3BlcmF0aW9uIGNoYXJnZWQgZm9yIHRoZSBuZXcgdmFsdWUgKHF1b3RhX2xlbiwKJiM0MzsgKiB6ZXJvIHdoZW4gdGhlIHZhbHVlIGlzIG5vdCBpbiBhbiBFQSBpbm9kZSkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCwKJiM0MzsJCQkJICAgICAgc2l6ZV90IHF1b3RhX2xlbiwgaW50IGVycm9yKQomIzQzO3sKJiM0MzsJc3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTsKJiM0MzsJc3RydWN0IG1iX2NhY2hlX2VudHJ5ICpvZTsKJiM0MzsJc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDsKJiM0MzsKJiM0MzsJZXh0NF9lcnJvcl9pbm9kZShpbm9kZSwgX19mdW5jX18sIF9fTElORV9fLCAwLAomIzQzOwkJCSAmIzM0O3hhdHRyIGJsb2NrIGRpcnR5IGZhaWxlZDogJWQmIzM0OywgZXJyb3IpOwomIzQzOwlsb2NrX2J1ZmZlcihuZXdfYmgpOwomIzQzO3JldHJ5X293bmVyOgomIzQzOwlpZiAobGUzMl90b19jcHUoQkhEUihuZXdfYmgpLSZndDtoX3JlZmNvdW50KSAhPSAxKSB7CiYjNDM7CQl1bmxvY2tfYnVmZmVyKG5ld19iaCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsJaWYgKGVhX2Jsb2NrX2NhY2hlKSB7CiYjNDM7CQlvZSA9IG1iX2NhY2hlX2VudHJ5X2RlbGV0ZV9vcl9nZXQoZWFfYmxvY2tfY2FjaGUsCiYjNDM7CQkJCQkJICBsZTMyX3RvX2NwdShCSERSKG5ld19iaCktJmd0O2hfaGFzaCksCiYjNDM7CQkJCQkJICBuZXdfYmgtJmd0O2JfYmxvY2tucik7CiYjNDM7CQlpZiAob2UpIHsKJiM0MzsJCQl1bmxvY2tfYnVmZmVyKG5ld19iaCk7CiYjNDM7CQkJbWJfY2FjaGVfZW50cnlfd2FpdF91bnVzZWQob2UpOwomIzQzOwkJCW1iX2NhY2hlX2VudHJ5X3B1dChlYV9ibG9ja19jYWNoZSwgb2UpOwomIzQzOwkJCWxvY2tfYnVmZmVyKG5ld19iaCk7CiYjNDM7CQkJZ290byByZXRyeV9vd25lcjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlnZXRfYmgobmV3X2JoKTsKJiM0MzsJdW5sb2NrX2J1ZmZlcihuZXdfYmgpOwomIzQzOwomIzQzOwlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwKJiM0MzsJCQkJICAgICBFTlRSWShCSERSKG5ld19iaCkgJiM0MzsgMSksCiYjNDM7CQkJCSAgICAgdHJ1ZSAvKiBibG9ja19jc3VtICovLAomIzQzOwkJCQkgICAgICZhbXA7ZWFfaW5vZGVfYXJyYXksCiYjNDM7CQkJCSAgICAgMCAvKiBleHRyYV9jcmVkaXRzICovLAomIzQzOwkJCQkgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7CiYjNDM7CWV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7CiYjNDM7CWlmIChxdW90YV9sZW4pIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZXZlcnNlcyB0aGlzIG9wZXJhdGlvbiYjMzk7cyBvd24gZXh0NF94YXR0cl9pbm9kZV9hbGxvY19xdW90YSgpCiYjNDM7CQkgKiBjaGFyZ2UsIHNvIG5vIEVBIGlub2RlIHBvaW50ZXIgaXMgbmVlZGVkIGhlcmUuCiYjNDM7CQkgKi8KJiM0MzsJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgcXVvdGFfbGVuKTsKJiM0MzsJCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKJiM0MzsJfQomIzQzOwlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwgMCwgMSwKJiM0MzsJCQkgRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQSB8CiYjNDM7CQkJIEVYVDRfRlJFRV9CTE9DS1NfRk9SR0VUKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogRmluZCB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UgZm9yIEVBcy4gVGhpcyBhbHNvIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZgogICogYnl0ZXMgdXNlZCBieSBFQSBlbnRyaWVzLgpAQCAtMjE2OSw4ICYjNDM7MjIyNiwxMyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJZXh0NF94YXR0cl9ibG9ja19jYWNoZV9pbnNlcnQoZWFfYmxvY2tfY2FjaGUsIG5ld19iaCk7CiAJCQllcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsCiAJCQkJCQkJICAgbmV3X2JoKTsKLQkJCWlmIChlcnJvcikKJiM0MzsJCQlpZiAoZXJyb3IpIHsKJiM0MzsJCQkJZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbChoYW5kbGUsIGlub2RlLCBuZXdfYmgsCiYjNDM7CQkJCQkJCSAgaS0mZ3Q7aW5faW5vZGUgPwomIzQzOwkJCQkJCQkgIGktJmd0O3ZhbHVlX2xlbiA6IDAsCiYjNDM7CQkJCQkJCSAgZXJyb3IpOwogCQkJCWdvdG8gY2xlYW51cDsKJiM0MzsJCQl9CiAJCX0KIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDExOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTcKCQkJCQkJCW91dHB1dDogMTU3CgkJCQkJCQl0aG91Z2h0czogNDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCwgd2l0aGluIGBmcy9leHQ0L3hhdHRyLmNgLiBNeSBpbml0aWFsIHJlYWQgaXMgdGhhdCB0aGlzIGlzIGVycm9yIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2xlYW4gdXAgYWZ0ZXIgYSBmYWlsdXJlIGR1cmluZyB0aGUgd3JpdGluZyBvZiBhIG5ldyBleHRlbmRlZCBhdHRyaWJ1dGUgKHhhdHRyKSBibG9jay4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgcmV0dXJucyBhbiBlcnJvci4gVGhlIGtleSBoZXJlIGlzIHByb3BlciBjbGVhbnVwLCB3aGljaCBpbmNsdWRlcyByZWxlYXNpbmcgYmxvY2sgcmVmZXJlbmNlcywgZnJlZWluZyB0aGUgYmxvY2sgaXRzZWxmLCBhbmQgaGFuZGxpbmcgcXVvdGEgYWRqdXN0bWVudHMuCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzIHdpdGggZXJyb3IgcGF0aHMsIGlzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUgc2NlbmFyaW9zLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcuIEhvd2V2ZXIsIHRoZSBkZXNjcmlwdGlvbiBzdGF0ZXMgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgaW4gcGxhY2UgdG8gY2F0Y2ggdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMsIHdoaWNoIGlzIGdvb2QuICBJdCBhbHNvIHNwZWNpZmljYWxseSBjYWxscyBvdXQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIGNyaXRpY2FsIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24uIFRoZSBmdW5jdGlvbiBzaWduYXR1cmUgaXMgYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWwoaGFuZGxlLCBpbm9kZSwgbmV3X2JoLCBxdW90YV9sZW4sIGVycm9yKWAuIEkgcmVjb2duaXplIGFsbCB0aGUgcGFyYW1ldGVyczogdGhlIHRyYW5zYWN0aW9uIGhhbmRsZSwgdGhlIGlub2RlLCB0aGUgbmV3IGJ1ZmZlciBoZWFkLCB0aGUgcXVvdGEgbGVuZ3RoLCBhbmQgdGhlIGVycm9yIGNvZGUuIEkmIzM5O20gc2VlaW5nIHN0YW5kYXJkIGV4dDQgbWV0YWRhdGEgb3BlcmF0aW9ucyBiZWluZyBwZXJmb3JtZWQgd2l0aGluOiBgZXh0NF9lcnJvcl9pbm9kZWAsIGBsb2NrX2J1ZmZlcmAsIGBtYl9jYWNoZV9lbnRyeV9kZWxldGVfb3JfZ2V0YCwgYG1iX2NhY2hlX2VudHJ5X3dhaXRfdW51c2VkYCwgYG1iX2NhY2hlX2VudHJ5X3B1dGAsIGBnZXRfYmhgLCBgdW5sb2NrX2J1ZmZlcmAsIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZWAsIGBleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGFgLCBgZXh0NF9tYXJrX2lub2RlX2RpcnR5YCwgYW5kIGBleHQ0X2ZyZWVfYmxvY2tzYC4gIE5vdGhpbmcgdW51c3VhbCB0aGVyZTsgdGhlc2UgYXJlIGFsbCB3ZWxsLXVuZGVyc3Rvb2QsIHN0YW5kYXJkIGV4dDQgcHJpbWl0aXZlcy4KCkkmIzM5O20gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBhbmQgdXNhZ2UuIGBlYV9pbm9kZV9hcnJheWAgaXMgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIGFuZCBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgd2hpY2ggZWl0aGVyIHBvcHVsYXRlcyBpdCwgb3IgbGVhdmVzIGl0IE5VTEwsIGFuZCAqdGhlbiogaXQmIzM5O3MgZnJlZWQuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHBhdHRlcm4gdGhhdCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBqdW1wIG91dCBhdCBtZSBhcyBwcm9ibGVtYXRpYy4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGVycm9yIGNhc2Ugd2l0aCBhIHdlbGwtZGVmaW5lZCBjbGVhbnVwIHByb2NlZHVyZSB0aGF0IHV0aWxpemVzIHN0YW5kYXJkLCB0ZXN0ZWQgZXh0NCBmdW5jdGlvbnMsIGFuZCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBvYnZpb3VzIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIG90aGVyIEtNU0FOLXNwZWNpZmljIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSBjbGVhbiB1cCBhIG5ld2x5IGFsbG9jYXRlZCB4YXR0ciBibG9jayBpZiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgY2FjaGUgZW50cnkgbWFuYWdlbWVudCwgcXVvdGEgcmVsZWFzaW5nLCBhbmQgYmxvY2sgZnJlZWluZy4gVGhlc2Ugb3BlcmF0aW9ucyBwcmltYXJpbHkgcmlzayB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG1lbW9yeSBsZWFrcywgb3IgaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSBjbGVhbiB1cCBhIG5ld2x5IGFsbG9jYXRlZCB4YXR0ciBibG9jayBpZiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgY2FjaGUgZW50cnkgbWFuYWdlbWVudCwgcXVvdGEgcmVsZWFzaW5nLCBhbmQgYmxvY2sgZnJlZWluZy4gVGhlc2Ugb3BlcmF0aW9ucyBwcmltYXJpbHkgcmlzayB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG1lbW9yeSBsZWFrcywgb3IgaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjA5LjcwODg0MjU3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzMzMjQ3MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3hhdHRyX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSBjbGVhbiB1cCBhIG5ld2x5IGFsbG9jYXRlZCB4YXR0ciBibG9jayBpZiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzLiBUaGUgY2hhbmdlcyBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgY2FjaGUgZW50cnkgbWFuYWdlbWVudCwgcXVvdGEgcmVsZWFzaW5nLCBhbmQgYmxvY2sgZnJlZWluZy4gVGhlc2Ugb3BlcmF0aW9ucyBwcmltYXJpbHkgcmlzayB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG1lbW9yeSBsZWFrcywgb3IgaW5jb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIGEgbmV3IGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSByZWxlYXNlIHJlc291cmNlcyAocmVmZXJlbmNlcywgYmxvY2ssIHF1b3RhKSB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMgb24gYSBuZXdseSBhbGxvY2F0ZWQgeGF0dHIgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcmVjb3Zlcnkgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MDkuNzA4ODUwNDc3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTM1Njg4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ODc1YjE2ZmMzNDEyY2NlZjY0MzdiYjdhMzEwNWM5ZGQyZGVkZTc2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDExOjAzOjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xcbmluZGV4IDk4MmExZjgzMWUyMjguLmUwODZjODM5NTA0MmEgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXFxuKysrIGIvZnMvZXh0NC94YXR0ci5jXFxuQEAgLTEzNjIsNiArMTM2Miw2MyBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuO1xcbiB9XFxuIFxcbisvKlxcbisgKiBVbmRvIHRoZSBzZXR1cCBvZiBhIG5ldyB4YXR0ciBibG9jayB0aGF0IGZhaWxlZCB0byBiZSB3cml0dGVuIG91dDogZHJvcFxcbisgKiB0aGUgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbCgpIHJlZmVyZW5jZXMsIGZyZWUgdGhlIGJsb2NrLCBhbmRcXG4rICogcmVsZWFzZSB0aGUgcXVvdGEgdGhpcyBvcGVyYXRpb24gY2hhcmdlZCBmb3IgdGhlIG5ldyB2YWx1ZSAocXVvdGFfbGVuLFxcbisgKiB6ZXJvIHdoZW4gdGhlIHZhbHVlIGlzIG5vdCBpbiBhbiBFQSBpbm9kZSkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLFxcbitcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgcXVvdGFfbGVuLCBpbnQgZXJyb3IpXFxuK3tcXG4rXFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcXG4rXFx0c3RydWN0IG1iX2NhY2hlX2VudHJ5ICpvZTtcXG4rXFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcXG4rXFxuK1xcdGV4dDRfZXJyb3JfaW5vZGUoaW5vZGUsIF9fZnVuY19fLCBfX0xJTkVfXywgMCxcXG4rXFx0XFx0XFx0IFxcXCJ4YXR0ciBibG9jayBkaXJ0eSBmYWlsZWQ6ICVkXFxcIiwgZXJyb3IpO1xcbitcXHRsb2NrX2J1ZmZlcihuZXdfYmgpO1xcbityZXRyeV9vd25lcjpcXG4rXFx0aWYgKGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS1cXHUwMDNlaF9yZWZjb3VudCkgIT0gMSkge1xcbitcXHRcXHR1bmxvY2tfYnVmZmVyKG5ld19iaCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRpZiAoZWFfYmxvY2tfY2FjaGUpIHtcXG4rXFx0XFx0b2UgPSBtYl9jYWNoZV9lbnRyeV9kZWxldGVfb3JfZ2V0KGVhX2Jsb2NrX2NhY2hlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS1cXHUwMDNlaF9oYXNoKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBuZXdfYmgtXFx1MDAzZWJfYmxvY2tucik7XFxuK1xcdFxcdGlmIChvZSkge1xcbitcXHRcXHRcXHR1bmxvY2tfYnVmZmVyKG5ld19iaCk7XFxuK1xcdFxcdFxcdG1iX2NhY2hlX2VudHJ5X3dhaXRfdW51c2VkKG9lKTtcXG4rXFx0XFx0XFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBvZSk7XFxuK1xcdFxcdFxcdGxvY2tfYnVmZmVyKG5ld19iaCk7XFxuK1xcdFxcdFxcdGdvdG8gcmV0cnlfb3duZXI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRnZXRfYmgobmV3X2JoKTtcXG4rXFx0dW5sb2NrX2J1ZmZlcihuZXdfYmgpO1xcbitcXG4rXFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBuZXdfYmgsXFxuK1xcdFxcdFxcdFxcdCAgICAgRU5UUlkoQkhEUihuZXdfYmgpICsgMSksXFxuK1xcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBibG9ja19jc3VtICovLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZlYV9pbm9kZV9hcnJheSxcXG4rXFx0XFx0XFx0XFx0ICAgICAwIC8qIGV4dHJhX2NyZWRpdHMgKi8sXFxuK1xcdFxcdFxcdFxcdCAgICAgdHJ1ZSAvKiBza2lwX3F1b3RhICovKTtcXG4rXFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcXG4rXFx0aWYgKHF1b3RhX2xlbikge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZXZlcnNlcyB0aGlzIG9wZXJhdGlvbidzIG93biBleHQ0X3hhdHRyX2lub2RlX2FsbG9jX3F1b3RhKClcXG4rXFx0XFx0ICogY2hhcmdlLCBzbyBubyBFQSBpbm9kZSBwb2ludGVyIGlzIG5lZWRlZCBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCBxdW90YV9sZW4pO1xcbitcXHRcXHRleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XFxuK1xcdH1cXG4rXFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBuZXdfYmgsIDAsIDEsXFxuK1xcdFxcdFxcdCBFWFQ0X0ZSRUVfQkxPQ0tTX01FVEFEQVRBIHxcXG4rXFx0XFx0XFx0IEVYVDRfRlJFRV9CTE9DS1NfRk9SR0VUKTtcXG4rfVxcbitcXG4gLypcXG4gICogRmluZCB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UgZm9yIEVBcy4gVGhpcyBhbHNvIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZlxcbiAgKiBieXRlcyB1c2VkIGJ5IEVBIGVudHJpZXMuXFxuQEAgLTIxNjksOCArMjIyNiwxMyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2Jsb2NrX2NhY2hlX2luc2VydChlYV9ibG9ja19jYWNoZSwgbmV3X2JoKTtcXG4gXFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfYmgpO1xcbi1cXHRcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdGlmIChlcnJvcikge1xcbitcXHRcXHRcXHRcXHRleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsKGhhbmRsZSwgaW5vZGUsIG5ld19iaCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpLVxcdTAwM2Vpbl9pbm9kZSA/XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaS1cXHUwMDNldmFsdWVfbGVuIDogMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBlcnJvcik7XFxuIFxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjEwLjA2MzEzMDUxNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQyNTI3MTYzOTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3hhdHRyX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIGEgbmV3IGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSByZWxlYXNlIHJlc291cmNlcyAocmVmZXJlbmNlcywgYmxvY2ssIHF1b3RhKSB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMgb24gYSBuZXdseSBhbGxvY2F0ZWQgeGF0dHIgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcmVjb3Zlcnkgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzg3NWIxNmZjMzQxMmNjZWY2NDM3YmI3YTMxMDVjOWRkMmRlZGU3NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDExOjAzOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Li5lMDg2YzgzOTUwNDJhIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcbkBAIC0xMzYyLDYgKzEzNjIsNjMgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm47XG4gfVxuIFxuKy8qXG4rICogVW5kbyB0aGUgc2V0dXAgb2YgYSBuZXcgeGF0dHIgYmxvY2sgdGhhdCBmYWlsZWQgdG8gYmUgd3JpdHRlbiBvdXQ6IGRyb3BcbisgKiB0aGUgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbCgpIHJlZmVyZW5jZXMsIGZyZWUgdGhlIGJsb2NrLCBhbmRcbisgKiByZWxlYXNlIHRoZSBxdW90YSB0aGlzIG9wZXJhdGlvbiBjaGFyZ2VkIGZvciB0aGUgbmV3IHZhbHVlIChxdW90YV9sZW4sXG4rICogemVybyB3aGVuIHRoZSB2YWx1ZSBpcyBub3QgaW4gYW4gRUEgaW5vZGUpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLFxuK1x0XHRcdFx0ICAgICAgc2l6ZV90IHF1b3RhX2xlbiwgaW50IGVycm9yKVxuK3tcbitcdHN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7XG4rXHRzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKm9lO1xuK1x0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbitcbitcdGV4dDRfZXJyb3JfaW5vZGUoaW5vZGUsIF9fZnVuY19fLCBfX0xJTkVfXywgMCxcbitcdFx0XHQgXCJ4YXR0ciBibG9jayBkaXJ0eSBmYWlsZWQ6ICVkXCIsIGVycm9yKTtcbitcdGxvY2tfYnVmZmVyKG5ld19iaCk7XG4rcmV0cnlfb3duZXI6XG4rXHRpZiAobGUzMl90b19jcHUoQkhEUihuZXdfYmgpLVx1MDAzZWhfcmVmY291bnQpICE9IDEpIHtcbitcdFx0dW5sb2NrX2J1ZmZlcihuZXdfYmgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRpZiAoZWFfYmxvY2tfY2FjaGUpIHtcbitcdFx0b2UgPSBtYl9jYWNoZV9lbnRyeV9kZWxldGVfb3JfZ2V0KGVhX2Jsb2NrX2NhY2hlLFxuK1x0XHRcdFx0XHRcdCAgbGUzMl90b19jcHUoQkhEUihuZXdfYmgpLVx1MDAzZWhfaGFzaCksXG4rXHRcdFx0XHRcdFx0ICBuZXdfYmgtXHUwMDNlYl9ibG9ja25yKTtcbitcdFx0aWYgKG9lKSB7XG4rXHRcdFx0dW5sb2NrX2J1ZmZlcihuZXdfYmgpO1xuK1x0XHRcdG1iX2NhY2hlX2VudHJ5X3dhaXRfdW51c2VkKG9lKTtcbitcdFx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIG9lKTtcbitcdFx0XHRsb2NrX2J1ZmZlcihuZXdfYmgpO1xuK1x0XHRcdGdvdG8gcmV0cnlfb3duZXI7XG4rXHRcdH1cbitcdH1cbitcdGdldF9iaChuZXdfYmgpO1xuK1x0dW5sb2NrX2J1ZmZlcihuZXdfYmgpO1xuK1xuK1x0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBuZXdfYmgsXG4rXHRcdFx0XHQgICAgIEVOVFJZKEJIRFIobmV3X2JoKSArIDEpLFxuK1x0XHRcdFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXG4rXHRcdFx0XHQgICAgIFx1MDAyNmVhX2lub2RlX2FycmF5LFxuK1x0XHRcdFx0ICAgICAwIC8qIGV4dHJhX2NyZWRpdHMgKi8sXG4rXHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4rXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuK1x0aWYgKHF1b3RhX2xlbikge1xuK1x0XHQvKlxuK1x0XHQgKiBSZXZlcnNlcyB0aGlzIG9wZXJhdGlvbidzIG93biBleHQ0X3hhdHRyX2lub2RlX2FsbG9jX3F1b3RhKClcbitcdFx0ICogY2hhcmdlLCBzbyBubyBFQSBpbm9kZSBwb2ludGVyIGlzIG5lZWRlZCBoZXJlLlxuK1x0XHQgKi9cbitcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCBxdW90YV9sZW4pO1xuK1x0XHRleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4rXHR9XG4rXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwgMCwgMSxcbitcdFx0XHQgRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQSB8XG4rXHRcdFx0IEVYVDRfRlJFRV9CTE9DS1NfRk9SR0VUKTtcbit9XG4rXG4gLypcbiAgKiBGaW5kIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSBmb3IgRUFzLiBUaGlzIGFsc28gcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mXG4gICogYnl0ZXMgdXNlZCBieSBFQSBlbnRyaWVzLlxuQEAgLTIxNjksOCArMjIyNiwxMyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfYmxvY2tfY2FjaGVfaW5zZXJ0KGVhX2Jsb2NrX2NhY2hlLCBuZXdfYmgpO1xuIFx0XHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSxcbiBcdFx0XHRcdFx0XHRcdCAgIG5ld19iaCk7XG4tXHRcdFx0aWYgKGVycm9yKVxuK1x0XHRcdGlmIChlcnJvcikge1xuK1x0XHRcdFx0ZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbChoYW5kbGUsIGlub2RlLCBuZXdfYmgsXG4rXHRcdFx0XHRcdFx0XHQgIGktXHUwMDNlaW5faW5vZGUgP1xuK1x0XHRcdFx0XHRcdFx0ICBpLVx1MDAzZXZhbHVlX2xlbiA6IDAsXG4rXHRcdFx0XHRcdFx0XHQgIGVycm9yKTtcbiBcdFx0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjEwLjA2MzEzMjk0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMzczOTIyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZzL2V4dDQveGF0dHIuY2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBuZXcgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBpcyAqZGVmaW5pdGVseSogYW4gZXJyb3IgaGFuZGxpbmcgcGF0aC4gSXQgc2VlbXMgbGlrZSBpdCdzIHRoZXJlIHRvIGNsZWFuIHVwIGFmdGVyIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMgd2l0aGluIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAuIFRoYXQgY29yZSBmdW5jdGlvbiwgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgaXMga2V5IGZvciBhY3R1YWxseSBzZXR0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gZXh0NC4gQmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGZpeCBhbmQgKmRlZmluaXRlbHkqIHNvbWV0aGluZyB0aGF0J3Mgd29ydGggaGl0dGluZyB3aXRoIHNvbWUgZnV6emluZy5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGFuZCBpZGVudGlmeSB0aGUgYmVzdCBwbGFjZSB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCBhcmUgdGhlIHR3byBtYWluIGZ1bmN0aW9ucyBpbnZvbHZlZCBoZXJlLiBMZXQncyBzZWUuLi4gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBnZXRzIGNhbGxlZCBmcm9tIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgLCBhbmQgYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWxgIGlzIHN0YXRpYy4gQWxyaWdodCwgdGhhdCBtZWFucyBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGlzIHByb2JhYmx5IGEgZ29vZCBlbnRyeSBwb2ludCB0byBzdGFydCB3aXRoLCBvciBtYXliZSBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBzaW5jZSBpdCBjYWxscyBpdC5cblxuSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGZzL2V4dDQveGF0dHIuY2AgdG8gY29uZmlybSB3aGV0aGVyIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgc3RhdGljLCBqdXN0IHRvIGJlIHN1cmUuIFRoYXQgd291bGQgYWZmZWN0IGhvdyBhY2Nlc3NpYmxlIGl0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MTUuMzAwNTI3NzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MzY4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0xMjcyPWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEyOTQtXFx0XFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcXG5mcy9leHQ0L3hhdHRyLmM6MTI5NTpcXHRcXHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBmcmVlZCBibG9ja1xcbmZzL2V4dDQveGF0dHIuYy0xMjk2LVxcdFxcdCAqL1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE5NTU9c3RhdGljIGludFxcbmZzL2V4dDQveGF0dHIuYzoxOTU2OmV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTE5NTctXFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIwMDEtXFx0XFx0XFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcXG5mcy9leHQ0L3hhdHRyLmM6MjAwMjpcXHRcXHRcXHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBtb2RpZmllZFxcbmZzL2V4dDQveGF0dHIuYy0yMDAzLVxcdFxcdFxcdCAqIGJsb2NrXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjQxMT1leHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjQ5NC1cXHRcXHRlbHNlIGlmICghYnMucy5ub3RfZm91bmQpXFxuZnMvZXh0NC94YXR0ci5jOjI0OTU6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjQ5Ni1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1MTEtXFx0XFx0XFx0aS52YWx1ZSA9IE5VTEw7XFxuZnMvZXh0NC94YXR0ci5jOjI1MTI6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjUxMy1cXHRcXHR9IGVsc2UgaWYgKGVycm9yID09IC1FTk9TUEMpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTIwLVxcdFxcdFxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MjUyMTpcXHRcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZpLCBcXHUwMDI2YnMpO1xcbmZzL2V4dDQveGF0dHIuYy0yNTIyLVxcdFxcdFxcdGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgIWlzLnMubm90X2ZvdW5kKSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjY2Nz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI3MzItXFx0LyogTW92ZSBlYSBlbnRyeSBmcm9tIHRoZSBpbm9kZSBpbnRvIHRoZSBibG9jayAqL1xcbmZzL2V4dDQveGF0dHIuYzoyNzMzOlxcdGVycm9yID0gZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmksIGJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjczNC1cXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjE1LjM0NjE2ODIwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDQyNjA0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBleHQ0IEV4dGVuZGVkIEF0dHJpYnV0ZSBIYW5kbGluZyoqXG5cbkFscmlnaHQsIHNvIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGl0IG9wZXJhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQgdXN1YWxseSBtZWFucyBpdCdzIGxpbWl0ZWQgaW4gc2NvcGUsIGxpa2VseSBvbmx5IHZpc2libGUgYW5kIHVzYWJsZSB3aXRoaW4gdGhlIHNhbWUgY29tcGlsYXRpb24gdW5pdCBvciBzb3VyY2UgZmlsZS4gTWFrZXMgc2Vuc2UgZm9yIHNvbWUgbG93LWxldmVsIGJsb2NrLXNldHRpbmcgb3BlcmF0aW9uLCBwcm9iYWJseS4gTm93LCBsZXQncyBzZWUsIHdoYXQgYWJvdXQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWA/IEFoLCBpdCdzICpub3QqIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgaGludHMgdGhhdCBpdCBpcyBkZXNpZ25lZCB0byBiZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGV4dDQgZmlsZSBzeXN0ZW0gY29kZS4gT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgLiBUaW1lIHRvIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIHdoYXQgaXRzIHJvbGUgaXMgaW4gdGhlIGVudGlyZSBhdHRyaWJ1dGUgc2V0dGluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjYwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MjAuNDUwNDMwNjE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjA0MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC94YXR0ci5jPTIzODA9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF94YXR0cl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMzk4LS8qXFxuZnMvZXh0NC94YXR0ci5jOjIzOTk6ICogZXh0NF94YXR0cl9zZXRfaGFuZGxlKClcXG5mcy9leHQ0L3hhdHRyLmMtMjQwMC0gKlxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI0MTA9aW50XFxuZnMvZXh0NC94YXR0ci5jOjI0MTE6ZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LFxcbmZzL2V4dDQveGF0dHIuYy0yNDEyLVxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI1NjM9aW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTkyLSAqXFxuZnMvZXh0NC94YXR0ci5jOjI1OTM6ICogTGlrZSBleHQ0X3hhdHRyX3NldF9oYW5kbGUsIGJ1dCBzdGFydCBmcm9tIGFuIGlub2RlLiBUaGlzIGV4dGVuZGVkXFxuZnMvZXh0NC94YXR0ci5jLTI1OTQtICogYXR0cmlidXRlIG1vZGlmaWNhdGlvbiBpcyBhIGZpbGVzeXN0ZW0gdHJhbnNhY3Rpb24gYnkgaXRzZWxmLlxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI1OTk9ZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjYyMi1cXG5mcy9leHQ0L3hhdHRyLmM6MjYyMzpcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLFxcbmZzL2V4dDQveGF0dHIuYy0yNjI0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlLCB2YWx1ZV9sZW4sIGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MjAuNDk0NjM4Nzg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzNzcyNzQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGV4dDQgQXR0cmlidXRlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGFuZCBgZXh0NF94YXR0cl9zZXRgIGZ1bmN0aW9ucywgYW5kIGltbWVkaWF0ZWx5IEknbSBub3Rpbmcgc29tZXRoaW5nLiBUaGV5IGFyZW4ndCBzdGF0aWMuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTm9uLXN0YXRpYyBmdW5jdGlvbnMgc3VnZ2VzdCB0aGVzZSBhcmUgbGlrZWx5IGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgZXZlbiBwb3RlbnRpYWxseSBmcm9tIHVzZXIgc3BhY2UgKHRob3VnaCwgb2YgY291cnNlLCBwcm9wZXIgc2VjdXJpdHkgY2hlY2tzIHdvdWxkIGJlIGluIHBsYWNlKS4gSXQgaW1wbGllcyBhIGJyb2FkZXIsIG1vcmUgYWNjZXNzaWJsZSByb2xlIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIG1vZHVsZSwgYmV5b25kIGp1c3QgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy5cblxuVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGFyZSBiZWluZyB1c2VkLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyBzcGVjaWZpYyB0byBleHQ0LiBJIG5lZWQgdG8gc2VlIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSBvciBkaXNhYmxlIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdXBwb3J0IHdpdGhpbiBleHQ0LCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0cyB3aXRoaW4gd2hpY2ggdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNvbXBpbGVkIGFuZCBwb3RlbnRpYWxseSBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGNsdWVzIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCB0aGUgcG9zc2libGUgZGVwZW5kZW5jaWVzIHRoYXQgaW1wYWN0IHRoZXNlIGZ1bmN0aW9ucycgYXZhaWxhYmlsaXR5IGFuZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk5NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjI0LjczMjM2ODY5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA5NTAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNF9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MjQuNzc3NDY2ODMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4ODg5NTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEVYVDQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBiYXNlIGZpbGVzeXN0ZW0gY29uZmlnIGlzIGRlZmluaXRlbHkgc2V0IHRvIGBFWFQ0X0ZTYC4gTm93IEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBtYWtlIHN1cmUgYWxsIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBzZXQgdXAgcHJvcGVybHkuIElzIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcyB3aXRoaW4gdGhlIEVYVDQgZmlsZXN5c3RlbSBpdHNlbGY/IFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBhbmQgbG9vayBhdCB0aGUgYGZzL2V4dDQvS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlJ3MgYSByZWxhdGVkIGBYQVRUUmAgb3B0aW9uIGRlZmluZWQgdGhlcmUgYW5kIGNvbmZpcm0gaXRzIHN0YXR1cy4gR290dGEgYmUgdGhvcm91Z2ggd2l0aCB0aGVzZSBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb25zLCB5b3Uga25vdz8gT25lIG1pc3NlZCBiaXQgYW5kIGl0IGNvdWxkIGFsbCBjb21lIGNyYXNoaW5nIGRvd24gbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowMzoyOC4yNjYzNjQzODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTYzOTI2MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEFUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowMzoyOC41NDgwMjAxOTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0NzQ3NTIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBFeHQ0IEV4dGVuZGVkIEF0dHJpYnV0ZXMqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyBhYm91dCBleHRlbmRlZCBhdHRyaWJ1dGVzIHJlY2VudGx5LCBhbmQgSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgSSBzaG91bGQgZmluZCB0aGUgYFhBVFRSYCBvcHRpb24gd2l0aGluIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlLCBidXQgaXQgc2VlbXMgdGhlcmUncyBubyBzdWNoIG9wdGlvbiBkZWZpbmVkIHRoZXJlLiBIbW0sIHRoYXQncyB1bnVzdWFsLiBEaWQgSSByZW1lbWJlciBpbmNvcnJlY3RseT8gT3IgcGVyaGFwcyBpcyBpdCBhbHdheXMgZW5hYmxlZCwgbGlrZSB0aGUgZmlsZSBpbmRpY2F0ZXM/XG5cbkxldCBtZSBkb3VibGUtY2hlY2suIFRoZSBgS2NvbmZpZ2AgZmlsZSBpcyBub3QgYWx3YXlzIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGEgbW9kdWxlLiBJdCdzIG9mdGVuIGJldHRlciB0byBnbyBkZWVwZXIuIE1heWJlIHRoZSBidWlsZCBzeXN0ZW0gaXRzZWxmIGlzIG1hbmFnaW5nIHRoZSBkZXBlbmRlbmNpZXMuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBmcy9leHQ0L01ha2VmaWxlYCBmaWxlIHRvIHNlZSBob3cgdGhvc2UgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSG9wZWZ1bGx5LCB0aGUgYE1ha2VmaWxlYCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb2YgZXh0ZW5kZWQgYXR0cmlidXRlIHN1cHBvcnQgYW5kIGNsYXJpZnkgd2hldGhlciBpdCdzIHN0YXRpY2FsbHkgY29tcGlsZWQgb3IgZGVwZW5kZW50IG9uIG90aGVyIHNldHRpbmdzLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoIGZvciB0aGUgdGFzayBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzEzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MzMuMzk1NDk4NTI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU5MjQ1NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTI6XFx0XFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTM6XFx0XFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxcbmZzL2V4dDQvTWFrZWZpbGU9MTU9ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcXHQrPSBhY2wub1xcbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVxcdFxcdCs9IHhhdHRyX3NlY3VyaXR5Lm9cXG5mcy9leHQ0L01ha2VmaWxlLTE3LWV4dDQtdGVzdC1vYmpzXFx0XFx0XFx0XFx0Kz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6MzMuNTkxNDI5MzAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODgyNTcyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBleHQ0X3hhdHRyYCBDb21waWxhdGlvbiBhbmQgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGB4YXR0ci5vYCBpcyBpbmRlZWQgYWx3YXlzIGNvbXBpbGVkIHdoZW4gYEVYVDRfRlNgIGlzIGVuYWJsZWQuIFRoYXQncyBnb29kLCB0aGF0IG1lYW5zIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50IGlzIHNpbXBsZToganVzdCBgRVhUNF9GU2AuIEknbGwga2VlcCBhbiBleWUgb24gYGV4dDRfeGF0dHJfc2V0YCBhbmQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAsIHRoZXkgc2VlbSBsaWtlIGtleSBmdW5jdGlvbnMgaGVyZS5cblxuV2FpdCBhIHNlY29uZCwgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBkZWFsaW5nIHdpdGggYW4gKmVycm9yKiBwYXRoLCBzcGVjaWZpY2FsbHkgYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWxgLiBJdCBnZXRzIGNhbGxlZCB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMsIG1lYW5pbmcgaXQncyBjbGVhbmluZyB1cCBhZnRlciBhIHByb2JsZW0gZHVyaW5nIHRoZSBzZXR1cCBvZiBhIG5ldyB4YXR0ciBibG9jay4gVGhhdCBtYWtlcyB0aGlzIGEgKnJlYWxseSogaW50ZXJlc3RpbmcgdGFyZ2V0IGZvciBmdXp6aW5nLiBFcnJvciBoYW5kbGluZyBwYXRocyBhcmUgb2Z0ZW4gd2hlcmUgYnVncyBsdXJrLiBJIHNob3VsZCBkZWZpbml0ZWx5IGdpdmUgdGhpcyBhIGNsb3NlciBsb29rIVxuXG5MZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgcmVsYXRlZCBmdW5jdGlvbnMuIEFoLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGlzIHN0YXRpYywgc28gbGlrZWx5IG5vdCBkaXJlY3RseSBleHBvc2VkLiBgZXh0NF94YXR0cl9zZXRgIGlzIGV4cG9ydGVkLCB0aGF0J3MgYW5vdGhlciBmdW5jdGlvbiBJIHNob3VsZCBhZGQgdG8gbXkgbGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMwMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowMzozOC40Nzk2ODk0NDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzIzODc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipleHQ0X3hhdHRyX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3hhdHRyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjM4LjUzMTQyMDEyNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEzMDYzNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipVbnBhY2tpbmcgdGhlIE5vbi1TdGF0aWMsIE5vbi1FeHBvcnRlZCBFbmlnbWEqKlxuXG5IbW0sIGludGVyZXN0aW5nLiBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCBpdCdzIGdvdCBtZSB0aGlua2luZy4gSXQncyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbWVhbnMgaXQgKmNvdWxkKiBiZSB1c2VkIGV4dGVybmFsbHksIGJ1dCB0aGUgY29tcGlsZXIgZGlkbid0IGZsYWcgaXQgYXMgZXhwb3J0ZWQgZWl0aGVyLiBUaGF0J3MgYSBjbGFzc2ljIHNpdHVhdGlvbiB0aGF0IHVzdWFsbHkgbWVhbnMgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFdhaXQgYSBtaW51dGUuLi4gSSByZW1lbWJlciBub3csIEknbSBjaGVja2luZywgYW5kIGBleHQ0X3hhdHRyX3NldGAgaXMgKmRlZmluaXRlbHkqIG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkIGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZSwgYnV0IEkndmUgZGVmaW5pdGVseSBzZWVuIGl0IHVzZWQgZnJvbSB3aXRoaW4gb3RoZXIgcGFydHMgb2YgdGhlIGZpbGVzeXN0ZW0gY29kZS4gVGhhdCBtZWFucyB0aGVyZSdzIHNvbWUgc29ydCBvZiBub24tc3RhbmRhcmQgdXNhZ2UsIG9yIGl0J3MgYmVpbmcgYWNjZXNzZWQgdmlhIGFuIGluZGlyZWN0IG1ldGhvZCwgcG9zc2libHkgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgb3IgYSBtYWNybyBleHBhbnNpb24sIHJhdGhlciB0aGFuIGEgZGlyZWN0LCBleHBsaWNpdCBkZWNsYXJhdGlvbi4gR290dGEgdW5kZXJzdGFuZCB0aGUgbGlua2luZyBiZWhhdmlvciBhcm91bmQgYGV4dDRfeGF0dHJfc2V0YC4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGZpZ3VyZSBvdXQgaG93IGl0J3MgYmVpbmcgYWNjZXNzZWQgYW5kIHdoeSB0aGUgZXhwb3J0IGlzbid0IG9idmlvdXMuIFRoaXMgY291bGQgYmUgaW50ZW50aW9uYWwgZGVzaWduLCBvciBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIG9yIGluY2x1ZGUgcGF0aHMuIFRpbWUgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBiZXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowMzo0Mi42NDQ0ODU2MjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDY1NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfeGF0dHJfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvYWNsLmM9MTg5PV9fZXh0NF9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxcbi0tXFxuZnMvZXh0NC9hY2wuYy0yMTYtXFxuZnMvZXh0NC9hY2wuYzoyMTc6XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgXFxcIlxcXCIsXFxuZnMvZXh0NC9hY2wuYy0yMTgtXFx0XFx0XFx0XFx0ICAgICAgdmFsdWUsIHNpemUsIHhhdHRyX2ZsYWdzKTtcXG4tLVxcbmZzL2V4dDQvYWNsLmM9MjI4PWV4dDRfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvZXh0NC9hY2wuYy0yNDEtcmV0cnk6XFxuZnMvZXh0NC9hY2wuYzoyNDI6XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKGlub2RlLCBhY2xfc2l6ZSwgZmFsc2UgLyogaXNfY3JlYXRlICovLFxcbmZzL2V4dDQvYWNsLmMtMjQzLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y3JlZGl0cyk7XFxuLS1cXG5mcy9leHQ0L2NyeXB0by5jPTEzMj1zdGF0aWMgaW50IGV4dDRfc2V0X2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqY3R4LCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYy0xNzItXFx0XFx0ICovXFxuZnMvZXh0NC9jcnlwdG8uYzoxNzM6XFx0XFx0cmVzID0gZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZSwgaW5vZGUsXFxuZnMvZXh0NC9jcnlwdG8uYy0xNzQtXFx0XFx0XFx0XFx0XFx0ICAgIEVYVDRfWEFUVFJfSU5ERVhfRU5DUllQVElPTixcXG4tLVxcbmZzL2V4dDQvY3J5cHRvLmMtMTkzLXJldHJ5OlxcbmZzL2V4dDQvY3J5cHRvLmM6MTk0OlxcdHJlcyA9IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoaW5vZGUsIGxlbiwgZmFsc2UgLyogaXNfY3JlYXRlICovLFxcbmZzL2V4dDQvY3J5cHRvLmMtMTk1LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNyZWRpdHMpO1xcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYy0yMDItXFxuZnMvZXh0NC9jcnlwdG8uYzoyMDM6XFx0cmVzID0gZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZSwgaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfRU5DUllQVElPTixcXG5mcy9leHQ0L2NyeXB0by5jLTIwNC1cXHRcXHRcXHRcXHQgICAgRVhUNF9YQVRUUl9OQU1FX0VOQ1JZUFRJT05fQ09OVEVYVCxcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmM9ODc2PXN0YXRpYyBpbnQgZXh0NF94YXR0cl9jcmVkaXRzX2Zvcl9uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIG1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy04ODktXFx0XFx0bmJsb2NrcyArPSAoU19JU0RJUihtb2RlKSA/IDIgOiAxKSAqXFxuZnMvZXh0NC9pYWxsb2MuYzo4OTA6XFx0XFx0XFx0X19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHNiLCBOVUxMIC8qIGlub2RlICovLFxcbmZzL2V4dDQvaWFsbG9jLmMtODkxLVxcdFxcdFxcdFxcdFxcdFxcdCBOVUxMIC8qIGJsb2NrX2JoICovLCBhY2xfc2l6ZSxcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtOTA4LVxcdFxcdG5ibG9ja3MgKz0gbnVtX3NlY3VyaXR5X3hhdHRycyAqXFxuZnMvZXh0NC9pYWxsb2MuYzo5MDk6XFx0XFx0XFx0X19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHNiLCBOVUxMIC8qIGlub2RlICovLFxcbmZzL2V4dDQvaWFsbG9jLmMtOTEwLVxcdFxcdFxcdFxcdFxcdFxcdCBOVUxMIC8qIGJsb2NrX2JoICovLCAxMDI0LFxcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy05MTQtXFx0aWYgKGVuY3J5cHQpXFxuZnMvZXh0NC9pYWxsb2MuYzo5MTU6XFx0XFx0bmJsb2NrcyArPSBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc2IsXFxuZnMvZXh0NC9pYWxsb2MuYy05MTYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIE5VTEwgLyogaW5vZGUgKi8sXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9OTI4PXN0YXRpYyB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy05MzgtXFxuZnMvZXh0NC94YXR0ci5jOjkzOTppbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTk0MC1cXHRcXHRcXHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmxvY2tfYmgsIHNpemVfdCB2YWx1ZV9sZW4sXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTYzNT1zdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNjg1LVxcbmZzL2V4dDQveGF0dHIuYzoxNjg2OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG5mcy9leHQ0L3hhdHRyLmMtMTY4Ny1cXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9zZWFyY2ggKnMsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTk1Nj1leHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIwMTktXFx0XFx0XFx0ZWFfYmRlYnVnKGJzLVxcdTAwM2ViaCwgXFxcIm1vZGlmeWluZyBpbi1wbGFjZVxcXCIpO1xcbmZzL2V4dDQveGF0dHIuYzoyMDIwOlxcdFxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfZW50cnkoaSwgcywgaGFuZGxlLCBpbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjAyMS1cXHRcXHRcXHRcXHRcXHQgICAgIGVhX2lub2RlLCB0cnVlIC8qIGlzX2Jsb2NrICovKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMDQ3LVxcdFxcdCAqIElmIGV4aXN0aW5nIGVudHJ5IHBvaW50cyB0byBhbiB4YXR0ciBpbm9kZSwgd2UgbmVlZFxcbmZzL2V4dDQveGF0dHIuYzoyMDQ4OlxcdFxcdCAqIHRvIHByZXZlbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoKSBmcm9tIGRlY3JlbWVudGluZ1xcbmZzL2V4dDQveGF0dHIuYy0yMDQ5LVxcdFxcdCAqIHJlZiBjb3VudCBvbiBpdCBiZWNhdXNlIHRoZSByZWZlcmVuY2UgYmVsb25ncyB0byB0aGVcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMDg4LVxcbmZzL2V4dDQveGF0dHIuYzoyMDg5OlxcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfZW50cnkoaSwgcywgaGFuZGxlLCBpbm9kZSwgZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTIwOTAtXFx0XFx0XFx0XFx0ICAgICB0cnVlIC8qIGlzX2Jsb2NrICovKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yMzE2PWludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIzMzYtXFx0fVxcbmZzL2V4dDQveGF0dHIuYzoyMzM3OlxcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfZW50cnkoaSwgcywgaGFuZGxlLCBpbm9kZSwgZWFfaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTIzMzgtXFx0XFx0XFx0XFx0ICAgICBmYWxzZSAvKiBpc19ibG9jayAqLyk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjM4MD1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X3hhdHRyX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTIzOTgtLypcXG5mcy9leHQ0L3hhdHRyLmM6MjM5OTogKiBleHQ0X3hhdHRyX3NldF9oYW5kbGUoKVxcbmZzL2V4dDQveGF0dHIuYy0yNDAwLSAqXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjQxMD1pbnRcXG5mcy9leHQ0L3hhdHRyLmM6MjQxMTpleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXFxuZnMvZXh0NC94YXR0ci5jLTI0MTItXFx0XFx0ICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4sXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjQ0OC1cXG5mcy9leHQ0L3hhdHRyLmM6MjQ0OTpcXHRcXHRjcmVkaXRzID0gX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKGlub2RlLVxcdTAwM2VpX3NiLCBpbm9kZSwgYmgsXFxuZnMvZXh0NC94YXR0ci5jLTI0NTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1NjItXFxuZnMvZXh0NC94YXR0ci5jOjI1NjM6aW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcXG5mcy9leHQ0L3hhdHRyLmMtMjU2NC1cXHRcXHRcXHQgICBib29sIGlzX2NyZWF0ZSwgaW50ICpjcmVkaXRzKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1NzktXFx0fSBlbHNlIHtcXG5mcy9leHQ0L3hhdHRyLmM6MjU4MDpcXHRcXHQqY3JlZGl0cyA9IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhpbm9kZS1cXHUwMDNlaV9zYiwgaW5vZGUsIGJoLFxcbmZzL2V4dDQveGF0dHIuYy0yNTgxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICB2YWx1ZV9sZW4sIGlzX2NyZWF0ZSk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjU5MC0vKlxcbmZzL2V4dDQveGF0dHIuYzoyNTkxOiAqIGV4dDRfeGF0dHJfc2V0KClcXG5mcy9leHQ0L3hhdHRyLmMtMjU5Mi0gKlxcbmZzL2V4dDQveGF0dHIuYzoyNTkzOiAqIExpa2UgZXh0NF94YXR0cl9zZXRfaGFuZGxlLCBidXQgc3RhcnQgZnJvbSBhbiBpbm9kZS4gVGhpcyBleHRlbmRlZFxcbmZzL2V4dDQveGF0dHIuYy0yNTk0LSAqIGF0dHJpYnV0ZSBtb2RpZmljYXRpb24gaXMgYSBmaWxlc3lzdGVtIHRyYW5zYWN0aW9uIGJ5IGl0c2VsZi5cXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yNTk4PWludFxcbmZzL2V4dDQveGF0dHIuYzoyNTk5OmV4dDRfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LCBjb25zdCBjaGFyICpuYW1lLFxcbmZzL2V4dDQveGF0dHIuYy0yNjAwLVxcdCAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbiwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI2MTEtcmV0cnk6XFxuZnMvZXh0NC94YXR0ci5jOjI2MTI6XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKGlub2RlLCB2YWx1ZV9sZW4sIGZsYWdzIFxcdTAwMjYgWEFUVFJfQ1JFQVRFLFxcbmZzL2V4dDQveGF0dHIuYy0yNjEzLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y3JlZGl0cyk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjYyMi1cXG5mcy9leHQ0L3hhdHRyLmM6MjYyMzpcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLFxcbmZzL2V4dDQveGF0dHIuYy0yNjI0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlLCB2YWx1ZV9sZW4sIGZsYWdzKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuaD0xODA9ZXh0ZXJuIGludCBleHQ0X3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KTtcXG5mcy9leHQ0L3hhdHRyLmg6MTgxOmV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICosIGludCwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTtcXG5mcy9leHQ0L3hhdHRyLmg6MTgyOmV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7XFxuZnMvZXh0NC94YXR0ci5oOjE4MzpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcXG5mcy9leHQ0L3hhdHRyLmgtMTg0LVxcdFxcdFxcdFxcdCAgYm9vbCBpc19jcmVhdGUsIGludCAqY3JlZGl0cyk7XFxuZnMvZXh0NC94YXR0ci5oOjE4NTpleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQveGF0dHIuaC0xODYtXFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpibG9ja19iaCwgc2l6ZV90IHZhbHVlX2xlbixcXG4tLVxcbmZzL2V4dDQveGF0dHJfaHVyZC5jPTM0PWV4dDRfeGF0dHJfaHVyZF9zZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXFxuLS1cXG5mcy9leHQ0L3hhdHRyX2h1cmQuYy00Mi1cXG5mcy9leHQ0L3hhdHRyX2h1cmQuYzo0MzpcXHRyZXR1cm4gZXh0NF94YXR0cl9zZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfSFVSRCxcXG5mcy9leHQ0L3hhdHRyX2h1cmQuYy00NC1cXHRcXHRcXHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jPTI1PWV4dDRfeGF0dHJfc2VjdXJpdHlfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTMwLXtcXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM6MzE6XFx0cmV0dXJuIGV4dDRfeGF0dHJfc2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYy0zMi1cXHRcXHRcXHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jPTM2PWV4dDRfaW5pdHhhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgeGF0dHIgKnhhdHRyX2FycmF5LFxcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTQzLVxcdGZvciAoeGF0dHIgPSB4YXR0cl9hcnJheTsgeGF0dHItXFx1MDAzZW5hbWUgIT0gTlVMTDsgeGF0dHIrKykge1xcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYzo0NDpcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSxcXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMtNDUtXFx0XFx0XFx0XFx0XFx0ICAgIEVYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFksXFxuLS1cXG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYz0zMj1leHQ0X3hhdHRyX3RydXN0ZWRfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0cl90cnVzdGVkLmMtMzcte1xcbmZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jOjM4OlxcdHJldHVybiBleHQ0X3hhdHRyX3NldChpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9UUlVTVEVELFxcbmZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jLTM5LVxcdFxcdFxcdCAgICAgIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyX3VzZXIuYz0zMz1leHQ0X3hhdHRyX3VzZXJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0cl91c2VyLmMtNDAtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmZzL2V4dDQveGF0dHJfdXNlci5jOjQxOlxcdHJldHVybiBleHQ0X3hhdHRyX3NldChpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9VU0VSLFxcbmZzL2V4dDQveGF0dHJfdXNlci5jLTQyLVxcdFxcdFxcdCAgICAgIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjQyLjcwNTk1Mzc1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODA3MzQ0NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IFhhdHRyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBleHQ0IHBhdGNoIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKS4gVGhlIGtleSBmdW5jdGlvbnMgaGVyZSwgdGhlIG9uZXMgSSB3YW50IHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLCBhcmUgYGV4dDRfeGF0dHJfc2V0YCBhbmQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAuIFRoZXkncmUgZXhwb3J0ZWQgaW4gYGZzL2V4dDQveGF0dHIuaGAsIHNvIHRoZXkncmUgcHJldHR5IGNlbnRyYWwgdG8gdGhlIHdob2xlIHhhdHRyIHN1YnN5c3RlbS4gVGhlc2UgYXJlIGdvb2QgZm9jYWwgcG9pbnRzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQuIFRoZSBtYWluIG9uZSwgb2J2aW91c2x5LCBpcyBgRVhUNF9GU2AsIHdoaWNoIGlzIGZ1bmRhbWVudGFsIHRvIGhhdmluZyBhbiBleHQ0IGZpbGVzeXN0ZW0gYXQgYWxsLiBJdCBsb29rcyBsaWtlIGBFWFQ0X0ZTX1BPU0lYX0FDTGAgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBhbHNvIHVzZSB4YXR0cnMsIHNvIHRoZXkgbWlnaHQgYmUgdGFuZ2VudGlhbGx5IGludm9sdmVkLCBidXQgdGhlIGNvcmUgaXNzdWUgc2hvdWxkIGJlIHRyaWdnZXJlZCB3aXRoIGp1c3QgYEVYVDRfRlNgLiBTaW5jZSB0aGUgaXNzdWUgaXMgd2l0aGluIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIHdoaWNoIGlzIGNhbGxlZCBmb3IgYW55IHhhdHRyLCB0aGlzIGNvbmZpcm1zIGBFWFQ0X0ZTYCBhcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSSBzZWUgYSBuZXcgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYC4gSXQncyBjYWxsZWQgZnJvbSBgZXh0NF94YXR0cl9ibG9ja19zZXRgIHNwZWNpZmljYWxseSB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgcmV0dXJucyBhbiBlcnJvcjpcblxuYGBgY1xuK3N0YXRpYyB2b2lkIGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLFxuK1x0XHRcdFx0ICAgICAgc2l6ZV90IHF1b3RhX2xlbiwgaW50IGVycm9yKVxuYGBgXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBhZGRzIGEgY2FsbCB0byBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGguIFRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW50cm9kdWNlZCB0byBoYW5kbGUgY2FzZXMgd2hlbiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzLiBXaGF0IHRoYXQgaW1wbGllcyBpcyB0aGF0IHRoZXJlIHdhcyBwcmV2aW91c2x5IGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgb3IgaW5jb3JyZWN0IHN0YXRlIGluIHRoZSBldmVudCBvZiB0aGlzIGZhaWx1cmUsIGFuZCB0aGlzIHBhdGNoIGFkZHJlc3NlcyB0aGF0LiBUaGUgbmV3IGZ1bmN0aW9uIGxpa2VseSBkb2VzIHRoaW5ncyBsaWtlIHJlbGVhc2luZyByZWZlcmVuY2VzLCBmcmVlaW5nIHRoZSBibG9jaywgYW5kIGhhbmRsaW5nIHF1b3RhIGFjY291bnRpbmcgd2hlbiB0aGVyZSBpcyBhIG1ldGFkYXRhIGVycm9yLlxuXG5UaGlzIGlzIGV4YWN0bHkgdGhlIHR5cGUgb2YgdGhpbmcgdGhhdCAqbmVlZHMqIHRvIGJlIGZ1enplZC4gSXQncyBhIGNyaXRpY2FsIGNoYW5nZSBpbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gYSBjb3JlIGV4dDQgZnVuY3Rpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGVycm9yIHJlY292ZXJ5IGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMsIGxpa2UgZG91YmxlIGZyZWVzIG9yIHVzZS1hZnRlci1mcmVlcy4gVGhpcyBsb29rcyBsaWtlIGEgZGVmaW5pdGUgd2luIGZvciBmdXp6aW5nLlxuXG5UaGVyZWZvcmUsIGZvciBzZXQtcmVzdWx0cywgSSdsbCBzcGVjaWZ5OlxuXG5Gb2N1cyBzeW1ib2xzOlxuLSBgZXh0NF94YXR0cl9zZXRgXG4tIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgXG5cbkVuYWJsZUNvbmZpZ3M6XG4tIGBFWFQ0X0ZTYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM4OCwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTE6MDM6NTIuNTEzMzAwODUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY5OTA0OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3hhdHRyX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIGEgbmV3IGZ1bmN0aW9uIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCB0byBwcm9wZXJseSByZWxlYXNlIHJlc291cmNlcyAocmVmZXJlbmNlcywgYmxvY2ssIHF1b3RhKSB3aGVuIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMgb24gYSBuZXdseSBhbGxvY2F0ZWQgeGF0dHIgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcmVjb3Zlcnkgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBuZXcgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBhIG5ldyBmdW5jdGlvbiBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgdG8gcHJvcGVybHkgcmVsZWFzZSByZXNvdXJjZXMgKHJlZmVyZW5jZXMsIGJsb2NrLCBxdW90YSkgd2hlbiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIGZhaWxzIG9uIGEgbmV3bHkgYWxsb2NhdGVkIHhhdHRyIGJsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHJlY292ZXJ5IHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgbmV3IGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDExOjAzOjUyLjU5MDI5ODdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NTE3ODEzNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowMzo1Mi41OTA3NTgwNDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQ1MTMxNzMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBlcnJvciBoYW5kbGluZyBmdW5jdGlvbiBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgdG8gcHJvcGVybHkgY2xlYW4gdXAgYSBuZXdseSBhbGxvY2F0ZWQgeGF0dHIgYmxvY2sgaWYgYGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCBmYWlscy4gVGhlIGNoYW5nZXMgaW52b2x2ZSByZWZlcmVuY2UgY291bnRpbmcsIGNhY2hlIGVudHJ5IG1hbmFnZW1lbnQsIHF1b3RhIHJlbGVhc2luZywgYW5kIGJsb2NrIGZyZWVpbmcuIFRoZXNlIG9wZXJhdGlvbnMgcHJpbWFyaWx5IHJpc2sgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4NzViMTZmYzM0MTJjY2VmNjQzN2JiN2EzMTA1YzlkZDJkZWRlNzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxMTowMzowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyOC4uZTA4NmM4Mzk1MDQyYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuKysrIGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTM2Miw2ICsxMzYyLDYzIEBAIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuO1xuIH1cbiBcbisvKlxuKyAqIFVuZG8gdGhlIHNldHVwIG9mIGEgbmV3IHhhdHRyIGJsb2NrIHRoYXQgZmFpbGVkIHRvIGJlIHdyaXR0ZW4gb3V0OiBkcm9wXG4rICogdGhlIGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoKSByZWZlcmVuY2VzLCBmcmVlIHRoZSBibG9jaywgYW5kXG4rICogcmVsZWFzZSB0aGUgcXVvdGEgdGhpcyBvcGVyYXRpb24gY2hhcmdlZCBmb3IgdGhlIG5ldyB2YWx1ZSAocXVvdGFfbGVuLFxuKyAqIHplcm8gd2hlbiB0aGUgdmFsdWUgaXMgbm90IGluIGFuIEVBIGlub2RlKS5cbisgKi9cbitzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCxcbitcdFx0XHRcdCAgICAgIHNpemVfdCBxdW90YV9sZW4sIGludCBlcnJvcilcbit7XG4rXHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpO1xuK1x0c3RydWN0IG1iX2NhY2hlX2VudHJ5ICpvZTtcbitcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4rXG4rXHRleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBfX2Z1bmNfXywgX19MSU5FX18sIDAsXG4rXHRcdFx0IFwieGF0dHIgYmxvY2sgZGlydHkgZmFpbGVkOiAlZFwiLCBlcnJvcik7XG4rXHRsb2NrX2J1ZmZlcihuZXdfYmgpO1xuK3JldHJ5X293bmVyOlxuK1x0aWYgKGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS1cdTAwM2VoX3JlZmNvdW50KSAhPSAxKSB7XG4rXHRcdHVubG9ja19idWZmZXIobmV3X2JoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0aWYgKGVhX2Jsb2NrX2NhY2hlKSB7XG4rXHRcdG9lID0gbWJfY2FjaGVfZW50cnlfZGVsZXRlX29yX2dldChlYV9ibG9ja19jYWNoZSxcbitcdFx0XHRcdFx0XHQgIGxlMzJfdG9fY3B1KEJIRFIobmV3X2JoKS1cdTAwM2VoX2hhc2gpLFxuK1x0XHRcdFx0XHRcdCAgbmV3X2JoLVx1MDAzZWJfYmxvY2tucik7XG4rXHRcdGlmIChvZSkge1xuK1x0XHRcdHVubG9ja19idWZmZXIobmV3X2JoKTtcbitcdFx0XHRtYl9jYWNoZV9lbnRyeV93YWl0X3VudXNlZChvZSk7XG4rXHRcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBvZSk7XG4rXHRcdFx0bG9ja19idWZmZXIobmV3X2JoKTtcbitcdFx0XHRnb3RvIHJldHJ5X293bmVyO1xuK1x0XHR9XG4rXHR9XG4rXHRnZXRfYmgobmV3X2JoKTtcbitcdHVubG9ja19idWZmZXIobmV3X2JoKTtcbitcbitcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgbmV3X2JoLFxuK1x0XHRcdFx0ICAgICBFTlRSWShCSERSKG5ld19iaCkgKyAxKSxcbitcdFx0XHRcdCAgICAgdHJ1ZSAvKiBibG9ja19jc3VtICovLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbitcdFx0XHRcdCAgICAgMCAvKiBleHRyYV9jcmVkaXRzICovLFxuK1x0XHRcdFx0ICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pO1xuK1x0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbitcdGlmIChxdW90YV9sZW4pIHtcbitcdFx0LypcbitcdFx0ICogUmV2ZXJzZXMgdGhpcyBvcGVyYXRpb24ncyBvd24gZXh0NF94YXR0cl9pbm9kZV9hbGxvY19xdW90YSgpXG4rXHRcdCAqIGNoYXJnZSwgc28gbm8gRUEgaW5vZGUgcG9pbnRlciBpcyBuZWVkZWQgaGVyZS5cbitcdFx0ICovXG4rXHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgcXVvdGFfbGVuKTtcbitcdFx0ZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xuK1x0fVxuK1x0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBuZXdfYmgsIDAsIDEsXG4rXHRcdFx0IEVYVDRfRlJFRV9CTE9DS1NfTUVUQURBVEEgfFxuK1x0XHRcdCBFWFQ0X0ZSRUVfQkxPQ0tTX0ZPUkdFVCk7XG4rfVxuK1xuIC8qXG4gICogRmluZCB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UgZm9yIEVBcy4gVGhpcyBhbHNvIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZlxuICAqIGJ5dGVzIHVzZWQgYnkgRUEgZW50cmllcy5cbkBAIC0yMTY5LDggKzIyMjYsMTMgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2Jsb2NrX2NhY2hlX2luc2VydChlYV9ibG9ja19jYWNoZSwgbmV3X2JoKTtcbiBcdFx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgICBuZXdfYmgpO1xuLVx0XHRcdGlmIChlcnJvcilcbitcdFx0XHRpZiAoZXJyb3IpIHtcbitcdFx0XHRcdGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWwoaGFuZGxlLCBpbm9kZSwgbmV3X2JoLFxuK1x0XHRcdFx0XHRcdFx0ICBpLVx1MDAzZWluX2lub2RlID9cbitcdFx0XHRcdFx0XHRcdCAgaS1cdTAwM2V2YWx1ZV9sZW4gOiAwLFxuK1x0XHRcdFx0XHRcdFx0ICBlcnJvcik7XG4gXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowMzo1Mi41OTA3NTg4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDUxMjk3MjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWxgLCB3aXRoaW4gYGZzL2V4dDQveGF0dHIuY2AuIE15IGluaXRpYWwgcmVhZCBpcyB0aGF0IHRoaXMgaXMgZXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBjbGVhbiB1cCBhZnRlciBhIGZhaWx1cmUgZHVyaW5nIHRoZSB3cml0aW5nIG9mIGEgbmV3IGV4dGVuZGVkIGF0dHJpYnV0ZSAoeGF0dHIpIGJsb2NrLiBJdCdzIGNhbGxlZCBmcm9tIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgd2hlbiBgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGFgIHJldHVybnMgYW4gZXJyb3IuIFRoZSBrZXkgaGVyZSBpcyBwcm9wZXIgY2xlYW51cCwgd2hpY2ggaW5jbHVkZXMgcmVsZWFzaW5nIGJsb2NrIHJlZmVyZW5jZXMsIGZyZWVpbmcgdGhlIGJsb2NrIGl0c2VsZiwgYW5kIGhhbmRsaW5nIHF1b3RhIGFkanVzdG1lbnRzLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzIHdpdGggZXJyb3IgcGF0aHMsIGlzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUgc2NlbmFyaW9zLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcuIEhvd2V2ZXIsIHRoZSBkZXNjcmlwdGlvbiBzdGF0ZXMgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgaW4gcGxhY2UgdG8gY2F0Y2ggdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMsIHdoaWNoIGlzIGdvb2QuICBJdCBhbHNvIHNwZWNpZmljYWxseSBjYWxscyBvdXQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIGNyaXRpY2FsIHBvaW50LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGlzIGBleHQ0X3hhdHRyX25ld19ibG9ja19mYWlsKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwgcXVvdGFfbGVuLCBlcnJvcilgLiBJIHJlY29nbml6ZSBhbGwgdGhlIHBhcmFtZXRlcnM6IHRoZSB0cmFuc2FjdGlvbiBoYW5kbGUsIHRoZSBpbm9kZSwgdGhlIG5ldyBidWZmZXIgaGVhZCwgdGhlIHF1b3RhIGxlbmd0aCwgYW5kIHRoZSBlcnJvciBjb2RlLiBJJ20gc2VlaW5nIHN0YW5kYXJkIGV4dDQgbWV0YWRhdGEgb3BlcmF0aW9ucyBiZWluZyBwZXJmb3JtZWQgd2l0aGluOiBgZXh0NF9lcnJvcl9pbm9kZWAsIGBsb2NrX2J1ZmZlcmAsIGBtYl9jYWNoZV9lbnRyeV9kZWxldGVfb3JfZ2V0YCwgYG1iX2NhY2hlX2VudHJ5X3dhaXRfdW51c2VkYCwgYG1iX2NhY2hlX2VudHJ5X3B1dGAsIGBnZXRfYmhgLCBgdW5sb2NrX2J1ZmZlcmAsIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZWAsIGBleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGFgLCBgZXh0NF9tYXJrX2lub2RlX2RpcnR5YCwgYW5kIGBleHQ0X2ZyZWVfYmxvY2tzYC4gIE5vdGhpbmcgdW51c3VhbCB0aGVyZTsgdGhlc2UgYXJlIGFsbCB3ZWxsLXVuZGVyc3Rvb2QsIHN0YW5kYXJkIGV4dDQgcHJpbWl0aXZlcy5cblxuSSdtIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlLiBgZWFfaW5vZGVfYXJyYXlgIGlzIGluaXRpYWxpemVkIHRvIGBOVUxMYCBhbmQgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIHdoaWNoIGVpdGhlciBwb3B1bGF0ZXMgaXQsIG9yIGxlYXZlcyBpdCBOVUxMLCBhbmQgKnRoZW4qIGl0J3MgZnJlZWQuIFRoYXQncyBhIHJlYXNvbmFibGUgcGF0dGVybiB0aGF0IGRvZXNuJ3QgaW1tZWRpYXRlbHkganVtcCBvdXQgYXQgbWUgYXMgcHJvYmxlbWF0aWMuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgZXJyb3IgY2FzZSB3aXRoIGEgd2VsbC1kZWZpbmVkIGNsZWFudXAgcHJvY2VkdXJlIHRoYXQgdXRpbGl6ZXMgc3RhbmRhcmQsIHRlc3RlZCBleHQ0IGZ1bmN0aW9ucywgYW5kIGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgb2J2aW91cyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBvdGhlciBLTVNBTi1zcGVjaWZpYyBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NywiT3V0cHV0VG9rZW5zIjoxNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMTowNDowMi4wNDIwNTkyMloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBlcnJvciBoYW5kbGluZyBmdW5jdGlvbiBgZXh0NF94YXR0cl9uZXdfYmxvY2tfZmFpbGAgdG8gcHJvcGVybHkgY2xlYW4gdXAgYSBuZXdseSBhbGxvY2F0ZWQgeGF0dHIgYmxvY2sgaWYgYGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhYCBmYWlscy4gVGhlIGNoYW5nZXMgaW52b2x2ZSByZWZlcmVuY2UgY291bnRpbmcsIGNhY2hlIGVudHJ5IG1hbmFnZW1lbnQsIHF1b3RhIHJlbGVhc2luZywgYW5kIGJsb2NrIGZyZWVpbmcuIFRoZXNlIG9wZXJhdGlvbnMgcHJpbWFyaWx5IHJpc2sgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXJyb3IgaGFuZGxpbmcgZnVuY3Rpb24gYGV4dDRfeGF0dHJfbmV3X2Jsb2NrX2ZhaWxgIHRvIHByb3Blcmx5IGNsZWFuIHVwIGEgbmV3bHkgYWxsb2NhdGVkIHhhdHRyIGJsb2NrIGlmIGBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YWAgZmFpbHMuIFRoZSBjaGFuZ2VzIGludm9sdmUgcmVmZXJlbmNlIGNvdW50aW5nLCBjYWNoZSBlbnRyeSBtYW5hZ2VtZW50LCBxdW90YSByZWxlYXNpbmcsIGFuZCBibG9jayBmcmVlaW5nLiBUaGVzZSBvcGVyYXRpb25zIHByaW1hcmlseSByaXNrIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBpbmNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4xlr8[1] Phase: Succeeded StartedAt: 2026-08-17 11:04:13 +0000 UTC FinishedAt: 2026-08-17 11:04:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 11:04:13 +0000 UTC FinishedAt: 2026-08-17 11:04:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2] Phase: Succeeded StartedAt: 2026-08-17 11:04:13 +0000 UTC FinishedAt: 2026-08-17 14:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:04:13 +0000 UTC FinishedAt: 2026-08-17 14:47:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:04:13 +0000 UTC FinishedAt: 2026-08-17 11:04:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:04:13 +0000 UTC FinishedAt: 2026-08-17 11:04:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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-workflow4xlr8/series-workflow4xlr8-convert-artifact-1367486812/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:04:23 +0000 UTC FinishedAt: 2026-08-17 11:23:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:04:23 +0000 UTC FinishedAt: 2026-08-17 11:23:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5cd3c516-1146-4ced-9a62-df29f0ed1ffb,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-workflow4xlr8/series-workflow4xlr8-convert-artifact-1367486812/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": "2b6e2037-fe39-437e-8a8b-b0d7e3005cce", "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-workflow4xlr8/series-workflow4xlr8-build-action-2689885322/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:04:23 +0000 UTC FinishedAt: 2026-08-17 11:23:14 +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:*5cd3c516-1146-4ced-9a62-df29f0ed1ffb,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-workflow4xlr8/series-workflow4xlr8-convert-artifact-1367486812/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": "2b6e2037-fe39-437e-8a8b-b0d7e3005cce", "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-workflow4xlr8/series-workflow4xlr8-build-action-2689885322/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:23:24 +0000 UTC FinishedAt: 2026-08-17 11:23:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:23:24 +0000 UTC FinishedAt: 2026-08-17 11:23:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:23:24 +0000 UTC FinishedAt: 2026-08-17 11:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:23:24 +0000 UTC FinishedAt: 2026-08-17 11:23:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-workflow4xlr8/series-workflow4xlr8-convert-artifact-2594254491/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:23:35 +0000 UTC FinishedAt: 2026-08-17 11:25:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:23:35 +0000 UTC FinishedAt: 2026-08-17 11:25:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2b6e2037-fe39-437e-8a8b-b0d7e3005cce,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-workflow4xlr8/series-workflow4xlr8-build-action-2689885322/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-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:25:39 +0000 UTC FinishedAt: 2026-08-17 11:25:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:25:39 +0000 UTC FinishedAt: 2026-08-17 11:25:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:25:39 +0000 UTC FinishedAt: 2026-08-17 11:42:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:25:39 +0000 UTC FinishedAt: 2026-08-17 11:42:47 +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:*5cd3c516-1146-4ced-9a62-df29f0ed1ffb,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-workflow4xlr8/series-workflow4xlr8-convert-artifact-2594254491/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": "9be51493-08fa-4393-9a3b-01a92ce347cb", "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-workflow4xlr8/series-workflow4xlr8-build-action-4243626559/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:25:39 +0000 UTC FinishedAt: 2026-08-17 11:42:37 +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:*5cd3c516-1146-4ced-9a62-df29f0ed1ffb,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-workflow4xlr8/series-workflow4xlr8-convert-artifact-2594254491/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": "9be51493-08fa-4393-9a3b-01a92ce347cb", "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-workflow4xlr8/series-workflow4xlr8-build-action-4243626559/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:42:47 +0000 UTC FinishedAt: 2026-08-17 11:42:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:42:47 +0000 UTC FinishedAt: 2026-08-17 11:42:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:42:47 +0000 UTC FinishedAt: 2026-08-17 11:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:42:47 +0000 UTC FinishedAt: 2026-08-17 11:44:51 +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:*9be51493-08fa-4393-9a3b-01a92ce347cb,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-workflow4xlr8/series-workflow4xlr8-build-action-4243626559/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-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:44:55 +0000 UTC FinishedAt: 2026-08-17 14:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:44:55 +0000 UTC FinishedAt: 2026-08-17 14:47:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*2b6e2037-fe39-437e-8a8b-b0d7e3005cce,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9be51493-08fa-4393-9a3b-01a92ce347cb,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-workflow4xlr8/series-workflow4xlr8-build-action-2689885322/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-workflow4xlr8/series-workflow4xlr8-build-action-4243626559/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:44:55 +0000 UTC FinishedAt: 2026-08-17 11:45:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:44:55 +0000 UTC FinishedAt: 2026-08-17 11:44:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4xlr8/series-workflow4xlr8-convert-artifact-4236564884/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:44:55 +0000 UTC FinishedAt: 2026-08-17 11:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:44:55 +0000 UTC FinishedAt: 2026-08-17 11:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:44:55 +0000 UTC FinishedAt: 2026-08-17 11:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:45:05 +0000 UTC FinishedAt: 2026-08-17 14:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4xlr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1351c159c59b04195647917c5a5f0e5467f44bb0","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9d606f4f-34cc-4ae9-974d-ef66197733f3","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-17 11:45:05 +0000 UTC FinishedAt: 2026-08-17 14:46:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2b6e2037-fe39-437e-8a8b-b0d7e3005cce,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9be51493-08fa-4393-9a3b-01a92ce347cb,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-workflow4xlr8/series-workflow4xlr8-build-action-2689885322/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-workflow4xlr8/series-workflow4xlr8-build-action-4243626559/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-workflow4xlr8/series-workflow4xlr8-convert-artifact-4236564884/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,}