Name: series-workflowclhgh Phase: Succeeded StartedAt: 2026-08-10 17:26:28 +0000 UTC FinishedAt: 2026-08-10 21:34:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[0] Phase: Succeeded StartedAt: 2026-08-10 17:26:28 +0000 UTC FinishedAt: 2026-08-10 17:52:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 17:26:28 +0000 UTC FinishedAt: 2026-08-10 17:52:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_IFE", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_IFE", "NET_CLS_ACT" ], "series_id": "3f4d760a-b39e-48f6-b132-df8c5c38f8f4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ife_encode", "ife_decode", "tcf_ife_act" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfSUZFJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWZlX2VuY29kZSYjMzQ7LAogICAgJiMzNDtpZmVfZGVjb2RlJiMzNDssCiAgICAmIzM0O3RjZl9pZmVfYWN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgYHNrYl9wdXNoKClgIGFuZCBgbWVtY3B5KClgIHVzZWQgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXHUwMDNlbWFjX2xlbmAgYXQgVEMgaW5ncmVzcy4gSWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgbGFyZ2VyIHRoYW4gYG1hY19sZW5gLCBgc2tiX3B1c2goKWAgbW92ZXMgYHNrYi1cdTAwM2VkYXRhYCBpbnRvIHRoZSBza2IgaGVhZHJvb20gYmVmb3JlIHRoZSBhY3R1YWwgTUFDIGhlYWRlci4gVGhlIHNrYiBoZWFkcm9vbSBpcyB2YWxpZCBhbGxvY2F0ZWQgbWVtb3J5LCBzbyBLQVNBTiB3aWxsIG5vdCBmbGFnIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCB0aGlzIGhlYWRyb29tIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBUaGUgc3Vic2VxdWVudCBgbWVtY3B5KClgIGluIGBpZmVfZW5jb2RlKClgIGNvcGllcyB0aGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGludG8gdGhlIHBhY2tldCBoZWFkZXIsIGxlYWRpbmcgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQgYSBwb3RlbnRpYWwgaW5mby1sZWFrIG92ZXIgdGhlIG5ldHdvcmsuIEtNU0FOIGlzIHJlcXVpcmVkIHRvIGRldGVjdCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhcyBzdGFuZGFyZCBLQVNBTiBjYW5ub3QgY2F0Y2ggaW4tYm91bmRzIHVuaW5pdGlhbGl6ZWQgcmVhZHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIGhlYWRlciBsZW5ndGhzIGluIHRoZSBJRkUgKEludGVyLUZFKSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGVuY29kaW5nIGFuZCBkZWNvZGluZyBwYXRocy4gSXQgY2hhbmdlcyB0aGUgbG9naWMgdG8gdXNlIGBza2ItXHUwMDNlbWFjX2xlbmAgaW5zdGVhZCBvZiBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHdoZW4gdGhlIHBhY2tldCBpcyBhdCBUQyBpbmdyZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcGFja2V0IHByb2Nlc3NpbmcgdGhhdCBhZmZlY3RzIGhvdyBtdWNoIGRhdGEgaXMgcHVzaGVkIG9yIHB1bGxlZCBmcm9tIHRoZSBza2IsIHdoaWNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3Igb3RoZXIgaXNzdWVzIGlmIGluY29ycmVjdC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBUQyBhY3Rpb25zIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWZiNzIwMGZhMWYzNDdmNmVkN2UxNDcxYjNjMDYxNWMyMDk4MjZlZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE3OjUwOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pZmUvaWZlLmMgYi9uZXQvaWZlL2lmZS5jXG5pbmRleCA3YTc1OTQ3YTMxZTMxLi4zZDMxZDY4MTE0ZWZjIDEwMDY0NFxuLS0tIGEvbmV0L2lmZS9pZmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lmZS9pZmUuY1xuQEAgLTM2LDggJiM0MzszNiwxMCBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxuIFx0LyogT1VURVJIRFI6VE9UTUVUQUxFTjp7VExWSERSOk1ldGFkYXR1bTpUTFZIRFIuLn06T1JJR0RBVEFcbiBcdCAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLlxuIFx0ICovXG4mIzQzO1x0dW5zaWduZWQgaW50IGhkcmxlbiA9IHNrYl9hdF90Y19pbmdyZXNzKHNrYikgP1xuJiM0MztcdFx0XHQgICAgICBza2ItXHUwMDNlbWFjX2xlbiA6IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuIFx0aW50IGhkcm0gPSBtZXRhbGVuICYjNDM7IElGRV9NRVRBSERSTEVOO1xuLVx0aW50IHRvdGFsX3B1c2ggPSBoZHJtICYjNDM7IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuJiM0MztcdGludCB0b3RhbF9wdXNoID0gaGRybSAmIzQzOyBoZHJsZW47XG4gXHRzdHJ1Y3QgaWZlaGVhZHIgKmlmZWhkcjtcbiBcdHN0cnVjdCBldGhoZHIgKmlldGhoO1x0LyogaW5uZXIgZXRoZXIgaGVhZGVyICovXG4gXHRpbnQgc2tib2ZmID0gMDtcbkBAIC01MCw5ICYjNDM7NTIsOSBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxuIFx0aWV0aGggPSAoc3RydWN0IGV0aGhkciAqKSBza2ItXHUwMDNlZGF0YTtcbiBcbiBcdF9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTtcbi1cdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEsIGlldGhoLCBoZHJsZW4pO1xuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdHNrYm9mZiAmIzQzOz0gc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4mIzQzO1x0c2tib2ZmICYjNDM7PSBoZHJsZW47XG4gXG4gXHQvKiB0b3RhbCBtZXRhZGF0YSBsZW5ndGggKi9cbiBcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNrYm9mZik7XG5AQCAtNjUsMTYgJiM0Mzs2NywxOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChpZmVfZW5jb2RlKTtcbiBcbiB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcbiB7XG4mIzQzO1x0dW5zaWduZWQgaW50IGhkcmxlbiA9IHNrYl9hdF90Y19pbmdyZXNzKHNrYikgP1xuJiM0MztcdFx0XHQgICAgICBza2ItXHUwMDNlbWFjX2xlbiA6IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuIFx0c3RydWN0IGlmZWhlYWRyICppZmVoZHI7XG4gXHRpbnQgdG90YWxfcHVsbDtcbiBcdHUxNiBpZmVoZHJsbjtcbiBcbi1cdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7IElGRV9NRVRBSERSTEVOKSlcbiYjNDM7XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJsZW4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGhkcmxlbik7XG4gXHRpZmVoZHJsbiA9IG50b2hzKGlmZWhkci1cdTAwM2VtZXRhbGVuKTtcbi1cdHRvdGFsX3B1bGwgPSBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyBpZmVoZHJsbjtcbiYjNDM7XHR0b3RhbF9wdWxsID0gaGRybGVuICYjNDM7IGlmZWhkcmxuO1xuIFxuIFx0aWYgKHVubGlrZWx5KGlmZWhkcmxuIFx1MDAzYyAyKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtODIsNyAmIzQzOzg2LDcgQEAgdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pXG4gXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICYjNDM7IEVUSF9ITEVOKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4mIzQzO1x0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBoZHJsZW4pO1xuIFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgdG90YWxfcHVsbCk7XG4gXHRfX3NrYl9wdWxsKHNrYiwgdG90YWxfcHVsbCk7XG4gXHQqbWV0YWxlbiA9IGlmZWhkcmxuIC0gSUZFX01FVEFIRFJMRU47XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcbmluZGV4IDA2NTIyODAyNmM1OGUuLmVhN2RmMzZhYjdlMzQgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2lmZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5AQCAtNzIzLDcgJiM0Mzs3MjMsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHR0Y2ZfbGFzdHVzZV91cGRhdGUoXHUwMDI2aWZlLVx1MDAzZXRjZl90bSk7XG4gXG4gXHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbi1cdFx0c2tiX3B1c2goc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4mIzQzO1x0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiBcbiBcdHRsdl9kYXRhID0gaWZlX2RlY29kZShza2IsIFx1MDAyNm1ldGFsZW4pO1xuIFx0aWYgKHVubGlrZWx5KCF0bHZfZGF0YSkpIHtcbkBAIC04MjYsNyAmIzQzOzgyNiw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdH1cbiBcbiBcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxuLVx0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuIFxuIFx0aWZlX21ldGEgPSBpZmVfZW5jb2RlKHNrYiwgbWV0YWxlbik7XG4gXHRpZiAoIWlmZV9tZXRhKVxuQEAgLTg1Niw3ICYjNDM7ODU2LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0b2V0aGgtXHUwMDNlaF9wcm90byA9IGh0b25zKHAtXHUwMDNlZXRoX3R5cGUpO1xuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuJiM0MztcdFx0c2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlbWFjX2xlbik7XG4gXG4gXHRyZXR1cm4gYWN0aW9uO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9JRkUmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZmVfZW5jb2RlJiMzNDssCiAgICAmIzM0O2lmZV9kZWNvZGUmIzM0OywKICAgICYjMzQ7dGNmX2lmZV9hY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIGhlYWRlciBsZW5ndGhzIGluIHRoZSBJRkUgKEludGVyLUZFKSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGVuY29kaW5nIGFuZCBkZWNvZGluZyBwYXRocy4gSXQgY2hhbmdlcyB0aGUgbG9naWMgdG8gdXNlIGBza2ItXHUwMDNlbWFjX2xlbmAgaW5zdGVhZCBvZiBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHdoZW4gdGhlIHBhY2tldCBpcyBhdCBUQyBpbmdyZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcGFja2V0IHByb2Nlc3NpbmcgdGhhdCBhZmZlY3RzIGhvdyBtdWNoIGRhdGEgaXMgcHVzaGVkIG9yIHB1bGxlZCBmcm9tIHRoZSBza2IsIHdoaWNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3Igb3RoZXIgaXNzdWVzIGlmIGluY29ycmVjdC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBUQyBhY3Rpb25zIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWZiNzIwMGZhMWYzNDdmNmVkN2UxNDcxYjNjMDYxNWMyMDk4MjZlZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE3OjUwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmMKaW5kZXggN2E3NTk0N2EzMWUzMS4uM2QzMWQ2ODExNGVmYyAxMDA2NDQKLS0tIGEvbmV0L2lmZS9pZmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWZlL2lmZS5jCkBAIC0zNiw4ICYjNDM7MzYsMTAgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbikKIAkvKiBPVVRFUkhEUjpUT1RNRVRBTEVOOntUTFZIRFI6TWV0YWRhdHVtOlRMVkhEUi4ufTpPUklHREFUQQogCSAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLgogCSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgaGRybGVuID0gc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSA/CiYjNDM7CQkJICAgICAgc2tiLSZndDttYWNfbGVuIDogc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbjsKIAlpbnQgaGRybSA9IG1ldGFsZW4gJiM0MzsgSUZFX01FVEFIRFJMRU47Ci0JaW50IHRvdGFsX3B1c2ggPSBoZHJtICYjNDM7IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47CiYjNDM7CWludCB0b3RhbF9wdXNoID0gaGRybSAmIzQzOyBoZHJsZW47CiAJc3RydWN0IGlmZWhlYWRyICppZmVoZHI7CiAJc3RydWN0IGV0aGhkciAqaWV0aGg7CS8qIGlubmVyIGV0aGVyIGhlYWRlciAqLwogCWludCBza2JvZmYgPSAwOwpAQCAtNTAsOSAmIzQzOzUyLDkgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbikKIAlpZXRoaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi0mZ3Q7ZGF0YTsKIAogCV9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTsKLQltZW1jcHkoc2tiLSZndDtkYXRhLCBpZXRoaCwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CW1lbWNweShza2ItJmd0O2RhdGEsIGlldGhoLCBoZHJsZW4pOwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0Jc2tib2ZmICYjNDM7PSBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwlza2JvZmYgJiM0Mzs9IGhkcmxlbjsKIAogCS8qIHRvdGFsIG1ldGFkYXRhIGxlbmd0aCAqLwogCWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBza2JvZmYpOwpAQCAtNjUsMTYgJiM0Mzs2NywxOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChpZmVfZW5jb2RlKTsKIAogdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pCiB7CiYjNDM7CXVuc2lnbmVkIGludCBoZHJsZW4gPSBza2JfYXRfdGNfaW5ncmVzcyhza2IpID8KJiM0MzsJCQkgICAgICBza2ItJmd0O21hY19sZW4gOiBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwogCXN0cnVjdCBpZmVoZWFkciAqaWZlaGRyOwogCWludCB0b3RhbF9wdWxsOwogCXUxNiBpZmVoZHJsbjsKIAotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKQomIzQzOwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJsZW4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgaGRybGVuKTsKIAlpZmVoZHJsbiA9IG50b2hzKGlmZWhkci0mZ3Q7bWV0YWxlbik7Ci0JdG90YWxfcHVsbCA9IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgaWZlaGRybG47CiYjNDM7CXRvdGFsX3B1bGwgPSBoZHJsZW4gJiM0MzsgaWZlaGRybG47CiAKIAlpZiAodW5saWtlbHkoaWZlaGRybG4gJmx0OyAyKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC04Miw3ICYjNDM7ODYsNyBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbikKIAlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICYjNDM7IEVUSF9ITEVOKSkpCiAJCXJldHVybiBOVUxMOwogCi0JaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItJmd0O2RhdGEgJiM0Mzsgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGhkcmxlbik7CiAJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgdG90YWxfcHVsbCk7CiAJX19za2JfcHVsbChza2IsIHRvdGFsX3B1bGwpOwogCSptZXRhbGVuID0gaWZlaGRybG4gLSBJRkVfTUVUQUhEUkxFTjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jCmluZGV4IDA2NTIyODAyNmM1OGUuLmVhN2RmMzZhYjdlMzQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9pZmUuYwpAQCAtNzIzLDcgJiM0Mzs3MjMsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsCiAJdGNmX2xhc3R1c2VfdXBkYXRlKCZhbXA7aWZlLSZndDt0Y2ZfdG0pOwogCiAJaWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpCi0JCXNrYl9wdXNoKHNrYiwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CQlza2JfcHVzaChza2IsIHNrYi0mZ3Q7bWFjX2xlbik7CiAKIAl0bHZfZGF0YSA9IGlmZV9kZWNvZGUoc2tiLCAmYW1wO21ldGFsZW4pOwogCWlmICh1bmxpa2VseSghdGx2X2RhdGEpKSB7CkBAIC04MjYsNyAmIzQzOzgyNiw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAl9CiAKIAlpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSkKLQkJc2tiX3B1c2goc2tiLCBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJCXNrYl9wdXNoKHNrYiwgc2tiLSZndDttYWNfbGVuKTsKIAogCWlmZV9tZXRhID0gaWZlX2VuY29kZShza2IsIG1ldGFsZW4pOwogCWlmICghaWZlX21ldGEpCkBAIC04NTYsNyAmIzQzOzg1Niw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAlvZXRoaC0mZ3Q7aF9wcm90byA9IGh0b25zKHAtJmd0O2V0aF90eXBlKTsKIAogCWlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKQotCQlza2JfcHVsbChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwkJc2tiX3B1bGwoc2tiLCBza2ItJmd0O21hY19sZW4pOwogCiAJcmV0dXJuIGFjdGlvbjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJRkUgTWV0YWRhdGEgSGFuZGxpbmc6IEEgUmVmaW5lbWVudCBpbiBUcmFmZmljIENvbnRyb2wqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIGEgcHJldHR5IHNwZWNpZmljIGFyZWE6IHRoZSB3YXkgd2UgaGFuZGxlIEludGVyLUZFIChJRkUpIG1ldGFkYXRhLCBwYXJ0aWN1bGFybHkgaW4gYG5ldC9pZmUvaWZlLmNgIGFuZCBgbmV0L3NjaGVkL2FjdF9pZmUuY2AuIFRoZSBrZXkgY2hhbmdlIGlzIGhvdyBgaGRybGVuYCBpcyBjYWxjdWxhdGVkIHdoZW4gd2UmIzM5O3JlIGVuY29kaW5nIG9yIGRlY29kaW5nIHRoaXMgSUZFIG1ldGFkYXRhLiBJbnN0ZWFkIG9mIGp1c3QgZGVmYXVsdGluZyB0byBgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAsIHdoaWNoIGhhcyBiZWVuIHRoZSBvbGQgd2F5LCBpdCYjMzk7cyBub3cgY2hlY2tpbmcgYHNrYl9hdF90Y19pbmdyZXNzKHNrYilgLiBJZiB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlLCBpdCYjMzk7cyBnb2luZyB0byB1c2UgYHNrYi0mZ3Q7bWFjX2xlbmAgaW5zdGVhZC4gU21hcnQgbW92ZTsgdGhhdCBzaG91bGQgZ2l2ZSB1cyBtb3JlIGdyYW51bGFyIGNvbnRyb2wgYXQgdGhlIGluZ3Jlc3MgcG9pbnQuCgpJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyB0b3VjaGVkIGhlcmUuLi4gYWxyaWdodCwgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290OiBgaWZlX2VuY29kZWAsIGBpZmVfZGVjb2RlYCwgYHRjZl9pZmVfZGVjb2RlYCwgYW5kIGB0Y2ZfaWZlX2VuY29kZWAuIFllcCwgdGhvc2UgYXJlIGFsbCB0aGUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgSUZFIGFjdGlvbiB3aXRoaW4gVEMgKFRyYWZmaWMgQ29udHJvbCkuIE1ha2VzIHNlbnNlLgoKQmVmb3JlIEkgZ28gdG9vIGRlZXAsIEkgd2FudCB0byB0YWtlIGEgcXVpY2sgcGVlayBhdCB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIElGRS4gVGhpcyBhZGp1c3RtZW50IHByb2JhYmx5IGhhcyBpbXBsaWNhdGlvbnMsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB3aGF0IGNoYW5nZXMgbWF5IGJlIG5lZWRlZCBmb3Igc3BlY2lmaWMgZGVwbG95bWVudHMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZmVfZW5jb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lmZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lmZS9pZmUuYz0yOT1zdHJ1Y3QgaWZlaGVhZHIge1xuLS1cbm5ldC9pZmUvaWZlLmMtMzMtXG5uZXQvaWZlL2lmZS5jOjM0OnZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pXG5uZXQvaWZlL2lmZS5jLTM1LXtcbi0tXG5uZXQvaWZlL2lmZS5jLTY1LX1cbm5ldC9pZmUvaWZlLmM6NjY6RVhQT1JUX1NZTUJPTF9HUEwoaWZlX2VuY29kZSk7XG5uZXQvaWZlL2lmZS5jLTY3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgQWN0aXZhdGlvbiBvZiBgYWN0X2lmZS5jYCBhbmQgYGlmZS5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYGFjdF9pZmUuY2AgYW5kIGBpZmUuY2AgbW9kdWxlcyBhcmUgYmVpbmcgZW5hYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLiBHaXZlbiB0aGVpciBuYW1lcywgdGhleSBzZWVtIG5ldHdvcmstcmVsYXRlZC4gTXkgaW5zdGluY3QsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIHRlbGxzIG1lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZWlyIGluY2x1c2lvbiBhcmUgbGlrZWx5IGJ1cmllZCB3aXRoaW4gdGhlIG5ldHdvcmstc3BlY2lmaWMgS2NvbmZpZyBmaWxlcy4gU28sIGxldCBtZSBzdGFydCBieSBsb29raW5nIGluIGBuZXQvaWZlL0tjb25maWdgIGFuZCBgbmV0L3NjaGVkL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcsIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIHNjaGVkdWxpbmcsIHJlc3BlY3RpdmVseS4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFyZSBjbGVhcmx5IGRvY3VtZW50ZWQgdGhlcmUuIElmIEkmIzM5O20gbHVja3ksIGl0JiMzOTtsbCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5IGNoYWluLiBPdGhlcndpc2UsIGl0IG1pZ2h0IHJlcXVpcmUgYSBiaXQgbW9yZSBkaWdnaW5nIGFyb3VuZCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdWJzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTc6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWN0X2lmZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX05FVF9BQ1RfU0tCTU9EKVx0JiM0Mzs9IGFjdF9za2Jtb2Qub1xubmV0L3NjaGVkL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfQUNUX0lGRSlcdCYjNDM7PSBhY3RfaWZlLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfTkVUX0lGRV9TS0JNQVJLKVx0JiM0Mzs9IGFjdF9tZXRhX21hcmsub1xuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9MzQ9c3RhdGljIGludCBtYXhfbWV0YWNudCA9IElGRV9NRVRBX01BWCAmIzQzOyAxO1xubmV0L3NjaGVkL2FjdF9pZmUuYzozNTpzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2lmZV9vcHM7XG5uZXQvc2NoZWQvYWN0X2lmZS5jLTM2LVxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9NDc3PXN0YXRpYyBpbnQgdGNmX2lmZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmMtNDgxLXtcbm5ldC9zY2hlZC9hY3RfaWZlLmM6NDgyOlx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3RfaWZlX29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9pZmUuYy00ODMtXHRib29sIGJpbmQgPSBmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmMtNTUyLVx0aWYgKCFleGlzdHMpIHtcbm5ldC9zY2hlZC9hY3RfaWZlLmM6NTUzOlx0XHRyZXQgPSB0Y2ZfaWRyX2NyZWF0ZSh0biwgaW5kZXgsIGVzdCwgYSwgXHUwMDI2YWN0X2lmZV9vcHMsXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTU1NC1cdFx0XHRcdCAgICAgYmluZCwgdHJ1ZSwgZmxhZ3MpO1xuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9ODY0PVRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmMtODgwLVxubmV0L3NjaGVkL2FjdF9pZmUuYzo4ODE6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzID0ge1xubmV0L3NjaGVkL2FjdF9pZmUuYy04ODItXHQua2luZCA9IFwmIzM0O2lmZVwmIzM0Oyxcbi0tXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTg5Mz1zdGF0aWMgX19uZXRfaW5pdCBpbnQgaWZlX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9zY2hlZC9hY3RfaWZlLmMtODk0LXtcbm5ldC9zY2hlZC9hY3RfaWZlLmM6ODk1Olx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3RfaWZlX29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9pZmUuYy04OTYtXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjg5NzpcdHJldHVybiB0Y19hY3Rpb25fbmV0X2luaXQobmV0LCB0biwgXHUwMDI2YWN0X2lmZV9vcHMpO1xubmV0L3NjaGVkL2FjdF9pZmUuYy04OTgtfVxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9OTAwPXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaWZlX2V4aXRfbmV0KHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9saXN0KVxubmV0L3NjaGVkL2FjdF9pZmUuYy05MDEte1xubmV0L3NjaGVkL2FjdF9pZmUuYzo5MDI6XHR0Y19hY3Rpb25fbmV0X2V4aXQobmV0X2xpc3QsIGFjdF9pZmVfb3BzLm5ldF9pZCk7XG5uZXQvc2NoZWQvYWN0X2lmZS5jLTkwMy19XG4tLVxubmV0L3NjaGVkL2FjdF9pZmUuYz05MDU9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpZmVfbmV0X29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTkwNy1cdC5leGl0X2JhdGNoID0gaWZlX2V4aXRfbmV0LFxubmV0L3NjaGVkL2FjdF9pZmUuYzo5MDg6XHQuaWQgICA9IFx1MDAyNmFjdF9pZmVfb3BzLm5ldF9pZCxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtOTA5LVx0LnNpemUgPSBzaXplb2Yoc3RydWN0IHRjX2FjdGlvbl9uZXQpLFxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9OTEyPXN0YXRpYyBpbnQgX19pbml0IGlmZV9pbml0X21vZHVsZSh2b2lkKVxubmV0L3NjaGVkL2FjdF9pZmUuYy05MTMte1xubmV0L3NjaGVkL2FjdF9pZmUuYzo5MTQ6XHRyZXR1cm4gdGNmX3JlZ2lzdGVyX2FjdGlvbihcdTAwMjZhY3RfaWZlX29wcywgXHUwMDI2aWZlX25ldF9vcHMpO1xubmV0L3NjaGVkL2FjdF9pZmUuYy05MTUtfVxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9OTE3PXN0YXRpYyB2b2lkIF9fZXhpdCBpZmVfY2xlYW51cF9tb2R1bGUodm9pZClcbm5ldC9zY2hlZC9hY3RfaWZlLmMtOTE4LXtcbm5ldC9zY2hlZC9hY3RfaWZlLmM6OTE5Olx0dGNmX3VucmVnaXN0ZXJfYWN0aW9uKFx1MDAyNmFjdF9pZmVfb3BzLCBcdTAwMjZpZmVfbmV0X29wcyk7XG5uZXQvc2NoZWQvYWN0X2lmZS5jLTkyMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIyMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX05FVF9BQ1RfSUZFYCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBgQ09ORklHX05FVF9BQ1RfSUZFYC4uLiB0aGF0JiMzOTtzIHRoZSBrZXkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGF0JiMzOTtzIGVuYWJsaW5nIHRoZSBgaWZlLm9gIG9iamVjdCBmaWxlLiBNeSBmaXJzdCBzdG9wIHNob3VsZCBiZSB0aGUgYG5ldC9pZmUvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBidWlsZCBzeXN0ZW0gbG9naWMgZm9yIHRoYXQgc3BlY2lmaWMgY29tcG9uZW50IHNob3VsZCByZXNpZGUuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJ1bGVzIHRoYXQgbGluayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdGhlIGNyZWF0aW9uIG9mIHRoZSBvYmplY3QgZmlsZS4gSXQgY291bGQgYmUgYXMgc2ltcGxlIGFzIGFuIGBvYmotJChDT05GSUdfTkVUX0FDVF9JRkUpICYjNDM7PSBpZmUub2AgbGluZSwgb3IgaXQgY291bGQgYmUgYSBiaXQgbW9yZSBpbnZvbHZlZCB3aXRoIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9uYWxzLCBidXQgdGhlIE1ha2VmaWxlIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoYXQgYnVpbGQgcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lmZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lmZS9NYWtlZmlsZS01LVxubmV0L2lmZS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19ORVRfSUZFKSAmIzQzOz0gaWZlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIElGRSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYENPTkZJR19ORVRfSUZFYCBhbmQgYENPTkZJR19ORVRfQUNUX0lGRWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZWlyIHJlbGF0aW9uc2hpcCBhbmQgcHVycG9zZSB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCAmIzM0O0lGRSYjMzQ7IGxpa2VseSBzdGFuZHMgZm9yIHNvbWV0aGluZyBsaWtlICYjMzQ7SW5ncmVzcyBGaWx0ZXIgRW5naW5lJiMzNDsgb3IgJiMzNDtJbnRlcmZhY2UgRmlsdGVyIEVuZ2luZSwmIzM0OyBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdC4KCkZpcnN0LCBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IGZvciB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIHBsYWNlIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb25zIGZvciB0aGVzZSBraW5kcyBvZiBuZXR3b3JrIHNjaGVkdWxpbmcgYW5kIGZpbHRlcmluZyBvcHRpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyBgTkVUX0FDVF9JRkVgIGlzIGRlZmluZWQg4oCTIGlzIGl0IGEgc3RhbmRhbG9uZSBmZWF0dXJlLCBhIGRlcGVuZGVuY3kgb2Ygc29tZXRoaW5nIGVsc2UsIG9yIHJlbGF0ZWQgZGlyZWN0bHkgdG8gYENPTkZJR19ORVRfSUZFYD8gVGhlIEtjb25maWcgZmlsZSB3aWxsIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gSSYjMzk7bSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBwZXJoYXBzIHNvbWUgaGVscGZ1bCBjb21tZW50cyB0aGF0IHNoZWQgbGlnaHQgb24gdGhlIGZ1bmN0aW9uYWxpdHkuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0FDVF9JRkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTg4Mj1jb25maWcgTkVUX0FDVF9TS0JNT0Rcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04OTItXG5uZXQvc2NoZWQvS2NvbmZpZzo4OTM6Y29uZmlnIE5FVF9BQ1RfSUZFXG5uZXQvc2NoZWQvS2NvbmZpZy04OTQtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkyMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBORVRfQUNUX0lGRSoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0FDVF9JRkVgLiBUaGlzIG1lYW5zIEkmIzM5O20gbm90IGp1c3QgbG9va2luZyBmb3IgYSBzaW1wbGUgbGlzdDsgSSYjMzk7bSBleHBlY3RpbmcgdG8gZGVsdmUgaW50byB0aGUgYXJjaGl0ZWN0dXJlLCBwcm9iYWJseSB0aGUgbG93LWxldmVsIGNvbXBvbmVudHMgYW5kIG5ldHdvcmsgbGF5ZXJzLCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRyYWNpbmcgYmFjayB3aGVyZSB0aGlzIHN0cnVjdHVyZSwgb3IgZnVuY3Rpb24gb3IgbW9kdWxlLCBpcyB1c2VkIG9yIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCB0aGUgbGlrZWx5IGFyZWFzIG9mIGltcGFjdCB3aGVuIG1vZGlmeWluZyBgTkVUX0FDVF9JRkVgIC4gVGhlIG1haW4gcXVlc3Rpb24gaXM6IFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0PyBBcmUgdGhlcmUgcG90ZW50aWFsIGNhc2NhZGluZyBmYWlsdXJlcyBpZiBgTkVUX0FDVF9JRkVgIGlzbiYjMzk7dCBiZWhhdmluZyBjb3JyZWN0bHkgb3IgbmVlZHMgYSBtYWpvciBvdmVyaGF1bD8gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIG5ldHdvcmsgc3RhY2sgbW9kdWxlcyBpbnRlcmZhY2Ugd2l0aCB0aGlzLiBXaGF0IGhhcmR3YXJlIGRyaXZlcnMgb3IgbG93LWxldmVsIG5ldHdvcmsgaW50ZXJmYWNlIGRyaXZlcnMgYXJlIGludm9sdmVkLiBXaGF0IHVwcGVyLWxheWVyIHByb3RvY29scyB1dGlsaXplIHRoaXMgaW50ZXJmYWNlPyBGcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludCwgaWYgaXQmIzM5O3MgaW52b2x2ZWQgd2l0aCBzb21ldGhpbmcsIGhvdyBpcyB0aGlzIGhhbmRsZWQgYW5kIHdoYXQgYXJlIGl0cyBpbnB1dHMvb3V0cHV0cz8gSW4gZXNzZW5jZSwgSSYjMzk7bSBhaW1pbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgc3lzdGVtIGFuZCB0aGUgaW1wYWN0IG9mIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQUNUX0lGRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9ODgyPWNvbmZpZyBORVRfQUNUX1NLQk1PRFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTg5Mi1cbm5ldC9zY2hlZC9LY29uZmlnOjg5Mzpjb25maWcgTkVUX0FDVF9JRkVcbm5ldC9zY2hlZC9LY29uZmlnLTg5NC1cdHRyaXN0YXRlIFwmIzM0O0ludGVyLUZFIGFjdGlvbiBiYXNlZCBvbiBJRVRGIEZvckNFUyBJbnRlckZFIExGQlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9uKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIEJhc2VkIG9uIHRoZSBkaXJlY3Rpb24gSSYjMzk7bSB0YWtpbmcgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uLCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgbmV0d29yayBzY2hlZHVsaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGRpZmZlcmVudCBxdWV1aW5nIGRpc2NpcGxpbmVzIGFuZCB0aGUgZmVhdHVyZXMgdGhleSBleHBvc2UuIEkgaGF2ZSBhIGh1bmNoLCBiYXNlZCBvbiB0aGUgY3VycmVudCB0cm91Ymxlc2hvb3Rpbmcgc3RlcHMsIHRoYXQgYSBjb25maWd1cmF0aW9uIGZsYWcgd2l0aGluIHRoZSBgbmV0L3NjaGVkL2Agc3Vic3lzdGVtIGlzIHRoZSBrZXkuIEdpdmVuIHRoZSBoaWdoIHByb2JhYmlsaXR5IHRoYXQgSSBuZWVkIHRvIGxvb2sgYXQgc3BlY2lmaWMgc2NoZWR1bGVyIG9wdGlvbnMsIGFuZCB3aGF0IGZlYXR1cmVzIHRoZXkgb2ZmZXIsIEkgc2hvdWxkIHByb2JhYmx5IGdvIGJhY2sgYW5kIHRha2UgYSBsb29rIGF0IGBuZXQvc2NoZWQvS2NvbmZpZ2AsIGFyb3VuZCBsaW5lIDg5My4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSBhdmFpbGFibGUgY2hvaWNlcyBhbmQgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGNhbiBiZSBjb25maWd1cmVkLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgd2l0aGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBjb250ZXh0LiBUaGF0IHNob3VsZCBxdWlja2x5IHBvaW50IG1lIHRvIHRoZSByZWxldmFudCBvcHRpb25zLCBhbmQgYW55IGFzc29jaWF0ZWQgY29uc3RyYWludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg5MDpcdFx0IFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA4OTE6XHRcdCBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3NrYm1vZC5cbiA4OTI6XHRcbiA4OTM6XHRjb25maWcgTkVUX0FDVF9JRkVcbiA4OTQ6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVyLUZFIGFjdGlvbiBiYXNlZCBvbiBJRVRGIEZvckNFUyBJbnRlckZFIExGQlwmIzM0O1xuIDg5NTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDg5NjpcdFx0c2VsZWN0IE5FVF9JRkVcbiA4OTc6XHRcdGhlbHBcbiA4OTg6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBmb3Igc291cmNpbmcgYW5kIHRlcm1pbmF0aW5nIG1ldGFkYXRhXG4gODk5Olx0XHQgIEZvciBkZXRhaWxzIHJlZmVyIHRvIG5ldGRldjAxIHBhcGVyOlxuIDkwMDpcdFx0ICBcJiMzNDtEaXN0cmlidXRpbmcgTGludXggVHJhZmZpYyBDb250cm9sIENsYXNzaWZpZXItQWN0aW9uIFN1YnN5c3RlbVwmIzM0O1xuIDkwMTpcdFx0ICAgQXV0aG9yczogSmFtYWwgSGFkaSBTYWxpbSBhbmQgRGFtYXNjZW5lIE0uIEpvYWNoaW1waWxsYWlcbiA5MDI6XHRcbiA5MDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDkwNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2lmZS5cbiA5MDU6XHRcbiA5MDY6XHRjb25maWcgTkVUX0FDVF9UVU5ORUxfS0VZXG4gOTA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUCB0dW5uZWwgbWV0YWRhdGEgbWFuaXB1bGF0aW9uXCYjMzQ7XG4gOTA4Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gOTA5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBORVRfQUNUX0lGRSBDb25maWd1cmF0aW9uIGFuZCBBc3NvY2lhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgTkVUX0FDVF9JRkVgIGNvbmZpZyBvcHRpb24sIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGl0IGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUYCBhbmQgdGhlbiBzZWxlY3RzIGBORVRfSUZFYC4gRnJvbSBhIGNvbmZpZyBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGBORVRfQUNUX0lGRWAgYW5kIGBORVRfQ0xTX0FDVGAgYXJlIGVuYWJsZWQuIE5vcm1hbGx5IGBORVRfQ0xTX0FDVGAgaXMgYWx3YXlzIG9uLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZXhwbGljaXRseSBpbmNsdWRlIGl0IGp1c3QgdG8gYmUgc2FmZSBhbmQgY2xlYXIuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZSBpdHNlbGYuIEkmIzM5O3ZlIGdvdCB0byByZXZpZXcgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhZmZlY3RlZC4gTG9va3MgbGlrZSB3ZSBoYXZlIGBpZmVfZW5jb2RlYCwgYGlmZV9kZWNvZGVgLCBgdGNmX2lmZV9kZWNvZGVgLCBhbmQgYHRjZl9pZmVfZW5jb2RlYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS4gUmlnaHQsIHRoZXkgYXJlIHJlYWNoZWQgdGhyb3VnaCBUQyBhY3Rpb25zLgoKVGhpcyBhbGwgbG9va3MgbGlrZSBpdCBoYXMgZnV6emluZyBwb3RlbnRpYWwsIHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbW9kaWZ5aW5nIHRoZSBwYWNrZXQgcHJvY2Vzc2luZywgcGFydGljdWxhcmx5IHdpdGggdGhlIGBza2JgIHB1c2gvcHVsbCBsZW5ndGhzLiBXb3J0aCBhIGNsb3NlciBsb29rLgoKSGFuZyBvbiBhIHNlY29uZOKApkkmIzM5O20gbm90aWNpbmcgdGhhdCBgdGNmX2lmZV9kZWNvZGVgIGFuZCBgdGNmX2lmZV9lbmNvZGVgIGFyZSBkZWZpbmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMgaW4gYG5ldC9zY2hlZC9hY3RfaWZlLmNgLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuIEJlaW5nIHN0YXRpYyBkZWZpbml0ZWx5IGFmZmVjdHMgdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfaWZlX2RlY29kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfaWZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9pZmUuYz02OTI9c3RhdGljIGludCBmaW5kX2RlY29kZV9tZXRhaWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9pZmVfcGFyYW1zICpwLFxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmMtNzA5LVxubmV0L3NjaGVkL2FjdF9pZmUuYzo3MTA6c3RhdGljIGludCB0Y2ZfaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxubmV0L3NjaGVkL2FjdF9pZmUuYy03MTEtXHRcdFx0ICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9ODY0PVRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmMtODc3LVxubmV0L3NjaGVkL2FjdF9pZmUuYzo4Nzg6XHRyZXR1cm4gdGNmX2lmZV9kZWNvZGUoc2tiLCBhLCByZXMpO1xubmV0L3NjaGVkL2FjdF9pZmUuYy04NzktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRlY29kaW5nIHRoZSBgdGNmX2lmZWAgRnVuY3Rpb25zKioKCkhtbSwgc28gYHRjZl9pZmVfZGVjb2RlYCBhbmQgYHRjZl9pZmVfZW5jb2RlYCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0IG1lYW5zIHRoZXkgaGF2ZSBpbnRlcm5hbCBsaW5rYWdlIHdpdGhpbiB0aGVpciBjb21waWxhdGlvbiB1bml0IOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBkZXNpZ24gY2hvaWNlLCBsaW1pdGluZyB0aGVpciBzY29wZS4gQnV0IG5vdyBJJiMzOTttIGN1cmlvdXMuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgaG93IGFyZSB0aGV5IGJlaW5nICp1c2VkKj8gRG9lcyBgdGNmX2lmZV9hY3RgIGNhbGwgZWl0aGVyIGBkZWNvZGVgIG9yIGBlbmNvZGVgPyBUaGF0IHdvdWxkIGJlIHRoZSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBHb3R0YSBjaGVjayBgdGNmX2lmZV9hY3RgIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdy4gTGV0IG1lIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTc6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2lmZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NjA6XHRcbiA4NjE6XHRcdHJldHVybiBhY3Rpb247XG4gODYyOlx0fVxuIDg2MzpcdFxuIDg2NDpcdFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDg2NTpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIDg2NjpcdFx0XHRcdFx0ICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxuIDg2NzpcdHtcbiA4Njg6XHRcdHN0cnVjdCB0Y2ZfaWZlX2luZm8gKmlmZSA9IHRvX2lmZShhKTtcbiA4Njk6XHRcdHN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDtcbiA4NzA6XHRcdGludCByZXQ7XG4gODcxOlx0XG4gODcyOlx0XHRwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGlmZS1cdTAwM2VwYXJhbXMpO1xuIDg3MzpcdFx0aWYgKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRV9FTkNPREUpIHtcbiA4NzQ6XHRcdFx0cmV0ID0gdGNmX2lmZV9lbmNvZGUoc2tiLCBhLCByZXMsIHApO1xuIDg3NTpcdFx0XHRyZXR1cm4gcmV0O1xuIDg3NjpcdFx0fVxuIDg3NzpcdFxuIDg3ODpcdFx0cmV0dXJuIHRjZl9pZmVfZGVjb2RlKHNrYiwgYSwgcmVzKTtcbiA4Nzk6XHR9XG4gODgwOlx0XG4gODgxOlx0c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzID0ge1xuIDg4MjpcdFx0LmtpbmQgPSBcJiMzNDtpZmVcJiMzNDssXG4gODgzOlx0XHQuaWQgPSBUQ0FfSURfSUZFLFxuIDg4NDpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4gODg1Olx0XHQuYWN0ID0gdGNmX2lmZV9hY3QsXG4gODg2Olx0XHQuZHVtcCA9IHRjZl9pZmVfZHVtcCxcbiA4ODc6XHRcdC5jbGVhbnVwID0gdGNmX2lmZV9jbGVhbnVwLFxuIDg4ODpcdFx0LmluaXQgPSB0Y2ZfaWZlX2luaXQsXG4gODg5Olx0XHQuc2l6ZSA9XHRzaXplb2Yoc3RydWN0IHRjZl9pZmVfaW5mbyksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODcKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklGRSBUcmFmZmljIENvbnRyb2wgQWN0aW9uIFBhdGNoOiBBIEZvY3VzZWQgUmV2aWV3KioKCk9rYXksIHNvIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGB0Y2ZfaWZlX2FjdGAgaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQgaGVyZS4gVGhlIGZ1bmN0aW9ucyBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCBhcmUgdGhlIGV4cG9ydGVkIHN5bWJvbHMgaW4gYG5ldC9pZmUvaWZlLmNgIHRoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCwgYWxvbmcgd2l0aCBgdGNmX2lmZV9hY3RgLCB3aGljaCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgYSBtb2RpZmljYXRpb24gdG8gaG93IGhlYWRlciBsZW5ndGhzIGFyZSBjYWxjdWxhdGVkIHdpdGhpbiB0aGUgSUZFIHRyYWZmaWMgY29udHJvbCBhY3Rpb24sIHNwZWNpZmljYWxseSBkdXJpbmcgZW5jb2RpbmcgYW5kIGRlY29kaW5nLiBJdCYjMzk7cyBzd2l0Y2hpbmcgZnJvbSB1c2luZyBgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAgdG8gYHNrYi0mZ3Q7bWFjX2xlbmAgd2hlbiBhIHBhY2tldCBpcyBhdCBUQyBpbmdyZXNzLiBOb3csIEkgc2VlIGltbWVkaWF0ZWx5IHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBBbnkgYWx0ZXJhdGlvbiB0byBwYWNrZXQgcHJvY2Vzc2luZywgZXNwZWNpYWxseSByZWdhcmRpbmcgaG93IG11Y2ggZGF0YSBpcyBwdXNoZWQgb3IgcHVsbGVkIGZyb20gdGhlIFNLQiwgaXMgc2lnbmlmaWNhbnQuIElmIHRoaXMgY2FsY3VsYXRpb24gaXMgaW5jb3JyZWN0LCBpdCBjb3VsZCB2ZXJ5IGVhc2lseSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIG9yIG90aGVyIGV4cGxvaXRhYmxlIGlzc3Vlcy4gSSBuZWVkIHRvIGJlIGRpbGlnZW50IGFib3V0IHRlc3RpbmcgdGhpcy4gR2l2ZW4gaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBUQyBhY3Rpb25zLCBpdOKAmXMgcmlwZSBmb3IgZnV6emluZy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBSaWdodCwgSSBzZWUgdGhhdCBgTkVUX0lGRWAgaXMgc2VsZWN0ZWQgYnkgYE5FVF9BQ1RfSUZFYC4gU28sIGVuYWJsaW5nIGBORVRfQUNUX0lGRWAgaXMgdGhlIGtleSBjb25maWcgbmVlZGVkIGhlcmUuCgpOb3csIGxldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9JRkUmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZmVfZW5jb2RlJiMzNDssCiAgICAmIzM0O2lmZV9kZWNvZGUmIzM0OywKICAgICYjMzQ7dGNmX2lmZV9hY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIGhlYWRlciBsZW5ndGhzIGluIHRoZSBJRkUgKEludGVyLUZFKSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGVuY29kaW5nIGFuZCBkZWNvZGluZyBwYXRocy4gSXQgY2hhbmdlcyB0aGUgbG9naWMgdG8gdXNlIGBza2ItXHUwMDNlbWFjX2xlbmAgaW5zdGVhZCBvZiBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHdoZW4gdGhlIHBhY2tldCBpcyBhdCBUQyBpbmdyZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcGFja2V0IHByb2Nlc3NpbmcgdGhhdCBhZmZlY3RzIGhvdyBtdWNoIGRhdGEgaXMgcHVzaGVkIG9yIHB1bGxlZCBmcm9tIHRoZSBza2IsIHdoaWNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3Igb3RoZXIgaXNzdWVzIGlmIGluY29ycmVjdC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBUQyBhY3Rpb25zIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfQUNUX0lGRSYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lmZV9lbmNvZGUmIzM0OywKICAgICYjMzQ7aWZlX2RlY29kZSYjMzQ7LAogICAgJiMzNDt0Y2ZfaWZlX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FsY3VsYXRpb24gb2YgaGVhZGVyIGxlbmd0aHMgaW4gdGhlIElGRSAoSW50ZXItRkUpIHRyYWZmaWMgY29udHJvbCBhY3Rpb24gZW5jb2RpbmcgYW5kIGRlY29kaW5nIHBhdGhzLiBJdCBjaGFuZ2VzIHRoZSBsb2dpYyB0byB1c2UgYHNrYi1cdTAwM2VtYWNfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgd2hlbiB0aGUgcGFja2V0IGlzIGF0IFRDIGluZ3Jlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBwYWNrZXQgcHJvY2Vzc2luZyB0aGF0IGFmZmVjdHMgaG93IG11Y2ggZGF0YSBpcyBwdXNoZWQgb3IgcHVsbGVkIGZyb20gdGhlIHNrYiwgd2hpY2ggY2FuIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBvdGhlciBpc3N1ZXMgaWYgaW5jb3JyZWN0LiBJdCBpcyByZWFjaGFibGUgdmlhIFRDIGFjdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTc6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgYHNrYl9wdXNoKClgIGFuZCBgbWVtY3B5KClgIHVzZWQgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXHUwMDNlbWFjX2xlbmAgYXQgVEMgaW5ncmVzcy4gSWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgbGFyZ2VyIHRoYW4gYG1hY19sZW5gLCBgc2tiX3B1c2goKWAgbW92ZXMgYHNrYi1cdTAwM2VkYXRhYCBpbnRvIHRoZSBza2IgaGVhZHJvb20gYmVmb3JlIHRoZSBhY3R1YWwgTUFDIGhlYWRlci4gVGhlIHNrYiBoZWFkcm9vbSBpcyB2YWxpZCBhbGxvY2F0ZWQgbWVtb3J5LCBzbyBLQVNBTiB3aWxsIG5vdCBmbGFnIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCB0aGlzIGhlYWRyb29tIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBUaGUgc3Vic2VxdWVudCBgbWVtY3B5KClgIGluIGBpZmVfZW5jb2RlKClgIGNvcGllcyB0aGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGludG8gdGhlIHBhY2tldCBoZWFkZXIsIGxlYWRpbmcgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQgYSBwb3RlbnRpYWwgaW5mby1sZWFrIG92ZXIgdGhlIG5ldHdvcmsuIEtNU0FOIGlzIHJlcXVpcmVkIHRvIGRldGVjdCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhcyBzdGFuZGFyZCBLQVNBTiBjYW5ub3QgY2F0Y2ggaW4tYm91bmRzIHVuaW5pdGlhbGl6ZWQgcmVhZHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWZiNzIwMGZhMWYzNDdmNmVkN2UxNDcxYjNjMDYxNWMyMDk4MjZlZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE3OjUwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmMKaW5kZXggN2E3NTk0N2EzMWUzMS4uM2QzMWQ2ODExNGVmYyAxMDA2NDQKLS0tIGEvbmV0L2lmZS9pZmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWZlL2lmZS5jCkBAIC0zNiw4ICYjNDM7MzYsMTAgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbikKIAkvKiBPVVRFUkhEUjpUT1RNRVRBTEVOOntUTFZIRFI6TWV0YWRhdHVtOlRMVkhEUi4ufTpPUklHREFUQQogCSAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLgogCSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgaGRybGVuID0gc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSA/CiYjNDM7CQkJICAgICAgc2tiLSZndDttYWNfbGVuIDogc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbjsKIAlpbnQgaGRybSA9IG1ldGFsZW4gJiM0MzsgSUZFX01FVEFIRFJMRU47Ci0JaW50IHRvdGFsX3B1c2ggPSBoZHJtICYjNDM7IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47CiYjNDM7CWludCB0b3RhbF9wdXNoID0gaGRybSAmIzQzOyBoZHJsZW47CiAJc3RydWN0IGlmZWhlYWRyICppZmVoZHI7CiAJc3RydWN0IGV0aGhkciAqaWV0aGg7CS8qIGlubmVyIGV0aGVyIGhlYWRlciAqLwogCWludCBza2JvZmYgPSAwOwpAQCAtNTAsOSAmIzQzOzUyLDkgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbikKIAlpZXRoaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi0mZ3Q7ZGF0YTsKIAogCV9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTsKLQltZW1jcHkoc2tiLSZndDtkYXRhLCBpZXRoaCwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CW1lbWNweShza2ItJmd0O2RhdGEsIGlldGhoLCBoZHJsZW4pOwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0Jc2tib2ZmICYjNDM7PSBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwlza2JvZmYgJiM0Mzs9IGhkcmxlbjsKIAogCS8qIHRvdGFsIG1ldGFkYXRhIGxlbmd0aCAqLwogCWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBza2JvZmYpOwpAQCAtNjUsMTYgJiM0Mzs2NywxOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChpZmVfZW5jb2RlKTsKIAogdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pCiB7CiYjNDM7CXVuc2lnbmVkIGludCBoZHJsZW4gPSBza2JfYXRfdGNfaW5ncmVzcyhza2IpID8KJiM0MzsJCQkgICAgICBza2ItJmd0O21hY19sZW4gOiBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwogCXN0cnVjdCBpZmVoZWFkciAqaWZlaGRyOwogCWludCB0b3RhbF9wdWxsOwogCXUxNiBpZmVoZHJsbjsKIAotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKQomIzQzOwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJsZW4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgaGRybGVuKTsKIAlpZmVoZHJsbiA9IG50b2hzKGlmZWhkci0mZ3Q7bWV0YWxlbik7Ci0JdG90YWxfcHVsbCA9IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgaWZlaGRybG47CiYjNDM7CXRvdGFsX3B1bGwgPSBoZHJsZW4gJiM0MzsgaWZlaGRybG47CiAKIAlpZiAodW5saWtlbHkoaWZlaGRybG4gJmx0OyAyKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC04Miw3ICYjNDM7ODYsNyBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbikKIAlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICYjNDM7IEVUSF9ITEVOKSkpCiAJCXJldHVybiBOVUxMOwogCi0JaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItJmd0O2RhdGEgJiM0Mzsgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGhkcmxlbik7CiAJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgdG90YWxfcHVsbCk7CiAJX19za2JfcHVsbChza2IsIHRvdGFsX3B1bGwpOwogCSptZXRhbGVuID0gaWZlaGRybG4gLSBJRkVfTUVUQUhEUkxFTjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jCmluZGV4IDA2NTIyODAyNmM1OGUuLmVhN2RmMzZhYjdlMzQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9pZmUuYwpAQCAtNzIzLDcgJiM0Mzs3MjMsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsCiAJdGNmX2xhc3R1c2VfdXBkYXRlKCZhbXA7aWZlLSZndDt0Y2ZfdG0pOwogCiAJaWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpCi0JCXNrYl9wdXNoKHNrYiwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CQlza2JfcHVzaChza2IsIHNrYi0mZ3Q7bWFjX2xlbik7CiAKIAl0bHZfZGF0YSA9IGlmZV9kZWNvZGUoc2tiLCAmYW1wO21ldGFsZW4pOwogCWlmICh1bmxpa2VseSghdGx2X2RhdGEpKSB7CkBAIC04MjYsNyAmIzQzOzgyNiw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAl9CiAKIAlpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSkKLQkJc2tiX3B1c2goc2tiLCBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJCXNrYl9wdXNoKHNrYiwgc2tiLSZndDttYWNfbGVuKTsKIAogCWlmZV9tZXRhID0gaWZlX2VuY29kZShza2IsIG1ldGFsZW4pOwogCWlmICghaWZlX21ldGEpCkBAIC04NTYsNyAmIzQzOzg1Niw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAlvZXRoaC0mZ3Q7aF9wcm90byA9IGh0b25zKHAtJmd0O2V0aF90eXBlKTsKIAogCWlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKQotCQlza2JfcHVsbChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwkJc2tiX3B1bGwoc2tiLCBza2ItJmd0O21hY19sZW4pOwogCiAJcmV0dXJuIGFjdGlvbjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDUKCQkJCQkJCW91dHB1dDogMjA2CgkJCQkJCQl0aG91Z2h0czogMzUzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTmV0d29yayBIZWFkZXIgTGVuZ3RoIENhbGN1bGF0aW9uIEJ1ZyBhbmQgdGhlIE5lZWQgZm9yIEtNU0FOKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IG1ha2luZyBzdXJlIHdlJiMzOTtyZSBjb3JyZWN0bHkgY2FsY3VsYXRpbmcgaGVhZGVyIGxlbmd0aHMsIHNwZWNpZmljYWxseSB3aGVuIHBhY2tldHMgYXJlIGNvbWluZyBpbiBhdCBUQyBpbmdyZXNzLiBUaGUga2V5IGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgc2tiLSZndDttYWNfbGVuYCB2ZXJzdXMgYHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW5gLiAgQXQgZmlyc3QgZ2xhbmNlLCBpdCBzZWVtcyBzaW1wbGU6IGp1c3QgdXNlIHRoZSBjb3JyZWN0IGxlbmd0aC4gQnV0IGxldCYjMzk7cyBkaXZlIGRlZXBlci4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGUgcHJvYmxlbSB3YXMganVzdCBvdXQtb2YtYm91bmRzIHJlYWRzIGlmIHdlIHVzZWQgYSBsZW5ndGggdGhhdCB3YXMgKnRvbyBsYXJnZSouIFdlJiMzOTtkIHBvdGVudGlhbGx5IGJlIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBNQUMgaGVhZGVyLiBIb3dldmVyLCB0aGF0JiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gIEl0JiMzOTtzIG1vcmUgc3VidGxlLiBJZiBgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAgaXMgdXNlZCBhbmQgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBNQUMgaGVhZGVyIChgc2tiLSZndDttYWNfbGVuYCksIHRoZW4gd2UgYXJlIGVzc2VudGlhbGx5IHB1c2hpbmcgYHNrYi0mZ3Q7ZGF0YWAgaW50byB0aGUgaGVhZHJvb20gYmVmb3JlIHRoZSBNQUMgaGVhZGVyLgoKQ3J1Y2lhbGx5LCB0aGUgaGVhZHJvb20gb2YgYW4gYHNrYmAgaXMgKmFsbG9jYXRlZCogbWVtb3J5LCB3aGljaCBtZWFucyBLQVNBTiB3aWxsIG5vdCBmbGFnIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCB0aGlzIGhlYWRyb29tIG1lbW9yeSBpcyAqdW5pbml0aWFsaXplZCouIFRoaXMgaXMgYSBwcm9ibGVtISAgVGhlIG9sZCBjb2RlIHdhcyBlc3NlbnRpYWxseSBjb3B5aW5nIGJ5dGVzIGZyb20gdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRvIHRoZSBwYWNrZXQgaGVhZGVyLiAgV2hlbiB0aGUgcGFja2V0IGlzIHNlbnQgb3V0LCB3ZSBhcmUgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBhIGNsYXNzaWMgaW5mby1sZWFrLiBLTVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBjYXRjaCB0aGlzIGJlY2F1c2UgaXQmIzM5O3MgZGVzaWduZWQgc3BlY2lmaWNhbGx5IHRvIHRyYWNrIGluaXRpYWxpemF0aW9uIHN0YXRlLiBLQVNBTiBpcyB1c2VsZXNzIGhlcmUsIGJlY2F1c2UgaXQgb25seSBsb29rcyBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4KCkxldCBtZSBicmVhayBkb3duIHRoZSBzY2VuYXJpbzogd2hlbiBwYWNrZXRzIGVudGVyIHRoZSBUQyBpbmdyZXNzIHBhdGgsIGBza2ItJmd0O2RhdGFgIHBvaW50cyB0byB0aGUgbmV0d29yayBoZWFkZXIuIFRoZSBNQUMgaGVhZGVyIGlzIGxvY2F0ZWQgKmJlZm9yZSogdGhhdC4gVGhlIHBhdGNoIGNvcnJlY3RseSByZWFsaXplcyB0aGlzIGFuZCB1c2VzIGBza2ItJmd0O21hY19sZW5gIHRvIGRldGVybWluZSB0aGUgTUFDIGhlYWRlciYjMzk7cyBsZW5ndGguCgoqICAgSW4gYHRjZl9pZmVfZGVjb2RlYCwgaWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgdXNlZCBpbnN0ZWFkIG9mIGBtYWNfbGVuYCwgYHNrYl9wdXNoYCB3aWxsIG1vdmUgYHNrYi0mZ3Q7ZGF0YWAgYmFjayBpbnRvIHRoZSB1bmluaXRpYWxpemVkIGhlYWRyb29tLCBjb3JydXB0aW5nIGRhdGEuCiogICBUaGVuIGBpZmVfZGVjb2RlYCBpcyBjYWxsZWQsIGFuZCB3aWxsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEhvd2V2ZXIsIHRoZSB1c2Ugb2YgYGhkcmxlbmAgbWF0Y2hlcyB0aGUgYHNrYl9wdXNoYCBhbmQgdGhlIGFjY2VzcyBpcyBmaW5lLgoqICAgSW4gYHRjZl9pZmVfZW5jb2RlYCwgYWdhaW4gdGhlIHdyb25nIGxlbmd0aCBpcyB1c2VkLgoqICAgYGlmZV9lbmNvZGVgIGNvcGllcyBgaGFyZF9oZWFkZXJfbGVuYCBieXRlcyBmcm9tIGBpZXRoaGAgKHdoaWNoIGluY2x1ZGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KSBpbnRvIHRoZSBwYWNrZXQgaGVhZGVyLgoKSWYgYHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW5gIGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgTUFDIGhlYWRlciBsZW5ndGgsIHRoaXMgcHJvY2VzcyBsZWFrcyB0aGUgdW5pbml0aWFsaXplZCBza2IgaGVhZHJvb20gbWVtb3J5IGludG8gdGhlIG5ldHdvcmsuIEtNU0FOICptdXN0KiBiZSBlbmFibGVkIHRvIGRldGVjdCB0aGlzIGJ1ZywgYXMgaXQgaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQgZGF0YSBsZWFrLgoKVGhlcmVmb3JlLCB0aGlzIGlzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGxlYWRpbmcgdG8gYW4gaW5mb3JtYXRpb24gbGVhaywgYW5kIEtNU0FOIGlzICpyZXF1aXJlZCouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGBza2JfcHVzaCgpYCBhbmQgYG1lbWNweSgpYCB1c2VkIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgaW5zdGVhZCBvZiBgc2tiLVx1MDAzZW1hY19sZW5gIGF0IFRDIGluZ3Jlc3MuIElmIGBoYXJkX2hlYWRlcl9sZW5gIGlzIGxhcmdlciB0aGFuIGBtYWNfbGVuYCwgYHNrYl9wdXNoKClgIG1vdmVzIGBza2ItXHUwMDNlZGF0YWAgaW50byB0aGUgc2tiIGhlYWRyb29tIGJlZm9yZSB0aGUgYWN0dWFsIE1BQyBoZWFkZXIuIFRoZSBza2IgaGVhZHJvb20gaXMgdmFsaWQgYWxsb2NhdGVkIG1lbW9yeSwgc28gS0FTQU4gd2lsbCBub3QgZmxhZyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gSG93ZXZlciwgdGhpcyBoZWFkcm9vbSBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC4gVGhlIHN1YnNlcXVlbnQgYG1lbWNweSgpYCBpbiBgaWZlX2VuY29kZSgpYCBjb3BpZXMgdGhlc2UgdW5pbml0aWFsaXplZCBieXRlcyBpbnRvIHRoZSBwYWNrZXQgaGVhZGVyLCBsZWFkaW5nIHRvIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYW5kIGEgcG90ZW50aWFsIGluZm8tbGVhayBvdmVyIHRoZSBuZXR3b3JrLiBLTVNBTiBpcyByZXF1aXJlZCB0byBkZXRlY3QgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYXMgc3RhbmRhcmQgS0FTQU4gY2Fubm90IGNhdGNoIGluLWJvdW5kcyB1bmluaXRpYWxpemVkIHJlYWRzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBgc2tiX3B1c2goKWAgYW5kIGBtZW1jcHkoKWAgdXNlZCBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYHNrYi1cdTAwM2VtYWNfbGVuYCBhdCBUQyBpbmdyZXNzLiBJZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyBsYXJnZXIgdGhhbiBgbWFjX2xlbmAsIGBza2JfcHVzaCgpYCBtb3ZlcyBgc2tiLVx1MDAzZWRhdGFgIGludG8gdGhlIHNrYiBoZWFkcm9vbSBiZWZvcmUgdGhlIGFjdHVhbCBNQUMgaGVhZGVyLiBUaGUgc2tiIGhlYWRyb29tIGlzIHZhbGlkIGFsbG9jYXRlZCBtZW1vcnksIHNvIEtBU0FOIHdpbGwgbm90IGZsYWcgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEhvd2V2ZXIsIHRoaXMgaGVhZHJvb20gbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRoZSBzdWJzZXF1ZW50IGBtZW1jcHkoKWAgaW4gYGlmZV9lbmNvZGUoKWAgY29waWVzIHRoZXNlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW50byB0aGUgcGFja2V0IGhlYWRlciwgbGVhZGluZyB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGFuZCBhIHBvdGVudGlhbCBpbmZvLWxlYWsgb3ZlciB0aGUgbmV0d29yay4gS01TQU4gaXMgcmVxdWlyZWQgdG8gZGV0ZWN0IHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFzIHN0YW5kYXJkIEtBU0FOIGNhbm5vdCBjYXRjaCBpbi1ib3VuZHMgdW5pbml0aWFsaXplZCByZWFkcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDoyMy43NDM3NTUyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY4MTM5ODcxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0FDVF9JRkVcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWZlX2VuY29kZVwiLFxuICAgIFwiaWZlX2RlY29kZVwiLFxuICAgIFwidGNmX2lmZV9hY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGBza2JfcHVzaCgpYCBhbmQgYG1lbWNweSgpYCB1c2VkIGBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXFx1MDAzZW1hY19sZW5gIGF0IFRDIGluZ3Jlc3MuIElmIGBoYXJkX2hlYWRlcl9sZW5gIGlzIGxhcmdlciB0aGFuIGBtYWNfbGVuYCwgYHNrYl9wdXNoKClgIG1vdmVzIGBza2ItXFx1MDAzZWRhdGFgIGludG8gdGhlIHNrYiBoZWFkcm9vbSBiZWZvcmUgdGhlIGFjdHVhbCBNQUMgaGVhZGVyLiBUaGUgc2tiIGhlYWRyb29tIGlzIHZhbGlkIGFsbG9jYXRlZCBtZW1vcnksIHNvIEtBU0FOIHdpbGwgbm90IGZsYWcgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEhvd2V2ZXIsIHRoaXMgaGVhZHJvb20gbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRoZSBzdWJzZXF1ZW50IGBtZW1jcHkoKWAgaW4gYGlmZV9lbmNvZGUoKWAgY29waWVzIHRoZXNlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW50byB0aGUgcGFja2V0IGhlYWRlciwgbGVhZGluZyB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGFuZCBhIHBvdGVudGlhbCBpbmZvLWxlYWsgb3ZlciB0aGUgbmV0d29yay4gS01TQU4gaXMgcmVxdWlyZWQgdG8gZGV0ZWN0IHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFzIHN0YW5kYXJkIEtBU0FOIGNhbm5vdCBjYXRjaCBpbi1ib3VuZHMgdW5pbml0aWFsaXplZCByZWFkcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWUsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiBoZWFkZXIgbGVuZ3RocyBpbiB0aGUgSUZFIChJbnRlci1GRSkgdHJhZmZpYyBjb250cm9sIGFjdGlvbiBlbmNvZGluZyBhbmQgZGVjb2RpbmcgcGF0aHMuIEl0IGNoYW5nZXMgdGhlIGxvZ2ljIHRvIHVzZSBgc2tiLVxcdTAwM2VtYWNfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3aGVuIHRoZSBwYWNrZXQgaXMgYXQgVEMgaW5ncmVzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHBhY2tldCBwcm9jZXNzaW5nIHRoYXQgYWZmZWN0cyBob3cgbXVjaCBkYXRhIGlzIHB1c2hlZCBvciBwdWxsZWQgZnJvbSB0aGUgc2tiLCB3aGljaCBjYW4gbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIG90aGVyIGlzc3VlcyBpZiBpbmNvcnJlY3QuIEl0IGlzIHJlYWNoYWJsZSB2aWEgVEMgYWN0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTA6MjMuNzQzNzYwMzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4OTg2NDY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVmYjcyMDBmYTFmMzQ3ZjZlZDdlMTQ3MWIzYzA2MTVjMjA5ODI2ZWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTc6NTA6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmNcXG5pbmRleCA3YTc1OTQ3YTMxZTMxLi4zZDMxZDY4MTE0ZWZjIDEwMDY0NFxcbi0tLSBhL25ldC9pZmUvaWZlLmNcXG4rKysgYi9uZXQvaWZlL2lmZS5jXFxuQEAgLTM2LDggKzM2LDEwIEBAIHZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pXFxuIFxcdC8qIE9VVEVSSERSOlRPVE1FVEFMRU46e1RMVkhEUjpNZXRhZGF0dW06VExWSERSLi59Ok9SSUdEQVRBXFxuIFxcdCAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLlxcbiBcXHQgKi9cXG4rXFx0dW5zaWduZWQgaW50IGhkcmxlbiA9IHNrYl9hdF90Y19pbmdyZXNzKHNrYikgP1xcbitcXHRcXHRcXHQgICAgICBza2ItXFx1MDAzZW1hY19sZW4gOiBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbiBcXHRpbnQgaGRybSA9IG1ldGFsZW4gKyBJRkVfTUVUQUhEUkxFTjtcXG4tXFx0aW50IHRvdGFsX3B1c2ggPSBoZHJtICsgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG4rXFx0aW50IHRvdGFsX3B1c2ggPSBoZHJtICsgaGRybGVuO1xcbiBcXHRzdHJ1Y3QgaWZlaGVhZHIgKmlmZWhkcjtcXG4gXFx0c3RydWN0IGV0aGhkciAqaWV0aGg7XFx0LyogaW5uZXIgZXRoZXIgaGVhZGVyICovXFxuIFxcdGludCBza2JvZmYgPSAwO1xcbkBAIC01MCw5ICs1Miw5IEBAIHZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pXFxuIFxcdGlldGhoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiLVxcdTAwM2VkYXRhO1xcbiBcXG4gXFx0X19za2JfcHVzaChza2IsIHRvdGFsX3B1c2gpO1xcbi1cXHRtZW1jcHkoc2tiLVxcdTAwM2VkYXRhLCBpZXRoaCwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XFxuK1xcdG1lbWNweShza2ItXFx1MDAzZWRhdGEsIGlldGhoLCBoZHJsZW4pO1xcbiBcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbi1cXHRza2JvZmYgKz0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG4rXFx0c2tib2ZmICs9IGhkcmxlbjtcXG4gXFxuIFxcdC8qIHRvdGFsIG1ldGFkYXRhIGxlbmd0aCAqL1xcbiBcXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopIChza2ItXFx1MDAzZWRhdGEgKyBza2JvZmYpO1xcbkBAIC02NSwxNiArNjcsMTggQEAgRVhQT1JUX1NZTUJPTF9HUEwoaWZlX2VuY29kZSk7XFxuIFxcbiB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgaGRybGVuID0gc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSA/XFxuK1xcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbWFjX2xlbiA6IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuIFxcdHN0cnVjdCBpZmVoZWFkciAqaWZlaGRyO1xcbiBcXHRpbnQgdG90YWxfcHVsbDtcXG4gXFx0dTE2IGlmZWhkcmxuO1xcbiBcXG4tXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIElGRV9NRVRBSERSTEVOKSlcXG4rXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRybGVuICsgSUZFX01FVEFIRFJMRU4pKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cXHUwMDNlZGF0YSArIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cXHUwMDNlZGF0YSArIGhkcmxlbik7XFxuIFxcdGlmZWhkcmxuID0gbnRvaHMoaWZlaGRyLVxcdTAwM2VtZXRhbGVuKTtcXG4tXFx0dG90YWxfcHVsbCA9IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBpZmVoZHJsbjtcXG4rXFx0dG90YWxfcHVsbCA9IGhkcmxlbiArIGlmZWhkcmxuO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGlmZWhkcmxuIFxcdTAwM2MgMikpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC04Miw3ICs4Niw3IEBAIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKVxcbiBcXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICsgRVRIX0hMRU4pKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cXHUwMDNlZGF0YSArIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cXHUwMDNlZGF0YSArIGhkcmxlbik7XFxuIFxcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsIHRvdGFsX3B1bGwpO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgdG90YWxfcHVsbCk7XFxuIFxcdCptZXRhbGVuID0gaWZlaGRybG4gLSBJRkVfTUVUQUhEUkxFTjtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcXG5pbmRleCAwNjUyMjgwMjZjNThlLi5lYTdkZjM2YWI3ZTM0IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXFxuQEAgLTcyMyw3ICs3MjMsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuIFxcdHRjZl9sYXN0dXNlX3VwZGF0ZShcXHUwMDI2aWZlLVxcdTAwM2V0Y2ZfdG0pO1xcbiBcXG4gXFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXFxuLVxcdFxcdHNrYl9wdXNoKHNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XFxuK1xcdFxcdHNrYl9wdXNoKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4gXFxuIFxcdHRsdl9kYXRhID0gaWZlX2RlY29kZShza2IsIFxcdTAwMjZtZXRhbGVuKTtcXG4gXFx0aWYgKHVubGlrZWx5KCF0bHZfZGF0YSkpIHtcXG5AQCAtODI2LDcgKzgyNiw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXFxuLVxcdFxcdHNrYl9wdXNoKHNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XFxuK1xcdFxcdHNrYl9wdXNoKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4gXFxuIFxcdGlmZV9tZXRhID0gaWZlX2VuY29kZShza2IsIG1ldGFsZW4pO1xcbiBcXHRpZiAoIWlmZV9tZXRhKVxcbkBAIC04NTYsNyArODU2LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbiBcXHRvZXRoaC1cXHUwMDNlaF9wcm90byA9IGh0b25zKHAtXFx1MDAzZWV0aF90eXBlKTtcXG4gXFxuIFxcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxcbi1cXHRcXHRza2JfcHVsbChza2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRcXHRza2JfcHVsbChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxuIFxcbiBcXHRyZXR1cm4gYWN0aW9uO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUwOjI0LjEzNDM1MjcxOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM3OTY4OTA1ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfSUZFXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlmZV9lbmNvZGVcIixcbiAgICBcImlmZV9kZWNvZGVcIixcbiAgICBcInRjZl9pZmVfYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIGhlYWRlciBsZW5ndGhzIGluIHRoZSBJRkUgKEludGVyLUZFKSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGVuY29kaW5nIGFuZCBkZWNvZGluZyBwYXRocy4gSXQgY2hhbmdlcyB0aGUgbG9naWMgdG8gdXNlIGBza2ItXFx1MDAzZW1hY19sZW5gIGluc3RlYWQgb2YgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHdoZW4gdGhlIHBhY2tldCBpcyBhdCBUQyBpbmdyZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcGFja2V0IHByb2Nlc3NpbmcgdGhhdCBhZmZlY3RzIGhvdyBtdWNoIGRhdGEgaXMgcHVzaGVkIG9yIHB1bGxlZCBmcm9tIHRoZSBza2IsIHdoaWNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3Igb3RoZXIgaXNzdWVzIGlmIGluY29ycmVjdC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBUQyBhY3Rpb25zIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZmI3MjAwZmExZjM0N2Y2ZWQ3ZTE0NzFiM2MwNjE1YzIwOTgyNmVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTc6NTA6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaWZlL2lmZS5jIGIvbmV0L2lmZS9pZmUuY1xuaW5kZXggN2E3NTk0N2EzMWUzMS4uM2QzMWQ2ODExNGVmYyAxMDA2NDRcbi0tLSBhL25ldC9pZmUvaWZlLmNcbisrKyBiL25ldC9pZmUvaWZlLmNcbkBAIC0zNiw4ICszNiwxMCBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxuIFx0LyogT1VURVJIRFI6VE9UTUVUQUxFTjp7VExWSERSOk1ldGFkYXR1bTpUTFZIRFIuLn06T1JJR0RBVEFcbiBcdCAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLlxuIFx0ICovXG4rXHR1bnNpZ25lZCBpbnQgaGRybGVuID0gc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSA/XG4rXHRcdFx0ICAgICAgc2tiLVx1MDAzZW1hY19sZW4gOiBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbiBcdGludCBoZHJtID0gbWV0YWxlbiArIElGRV9NRVRBSERSTEVOO1xuLVx0aW50IHRvdGFsX3B1c2ggPSBoZHJtICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4rXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gKyBoZHJsZW47XG4gXHRzdHJ1Y3QgaWZlaGVhZHIgKmlmZWhkcjtcbiBcdHN0cnVjdCBldGhoZHIgKmlldGhoO1x0LyogaW5uZXIgZXRoZXIgaGVhZGVyICovXG4gXHRpbnQgc2tib2ZmID0gMDtcbkBAIC01MCw5ICs1Miw5IEBAIHZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pXG4gXHRpZXRoaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi1cdTAwM2VkYXRhO1xuIFxuIFx0X19za2JfcHVzaChza2IsIHRvdGFsX3B1c2gpO1xuLVx0bWVtY3B5KHNrYi1cdTAwM2VkYXRhLCBpZXRoaCwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0bWVtY3B5KHNrYi1cdTAwM2VkYXRhLCBpZXRoaCwgaGRybGVuKTtcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRza2JvZmYgKz0gc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4rXHRza2JvZmYgKz0gaGRybGVuO1xuIFxuIFx0LyogdG90YWwgbWV0YWRhdGEgbGVuZ3RoICovXG4gXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopIChza2ItXHUwMDNlZGF0YSArIHNrYm9mZik7XG5AQCAtNjUsMTYgKzY3LDE4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGlmZV9lbmNvZGUpO1xuIFxuIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKVxuIHtcbitcdHVuc2lnbmVkIGludCBoZHJsZW4gPSBza2JfYXRfdGNfaW5ncmVzcyhza2IpID9cbitcdFx0XHQgICAgICBza2ItXHUwMDNlbWFjX2xlbiA6IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuIFx0c3RydWN0IGlmZWhlYWRyICppZmVoZHI7XG4gXHRpbnQgdG90YWxfcHVsbDtcbiBcdHUxNiBpZmVoZHJsbjtcbiBcbi1cdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgSUZFX01FVEFIRFJMRU4pKVxuK1x0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRybGVuICsgSUZFX01FVEFIRFJMRU4pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cdTAwM2VkYXRhICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXHUwMDNlZGF0YSArIGhkcmxlbik7XG4gXHRpZmVoZHJsbiA9IG50b2hzKGlmZWhkci1cdTAwM2VtZXRhbGVuKTtcbi1cdHRvdGFsX3B1bGwgPSBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIGlmZWhkcmxuO1xuK1x0dG90YWxfcHVsbCA9IGhkcmxlbiArIGlmZWhkcmxuO1xuIFxuIFx0aWYgKHVubGlrZWx5KGlmZWhkcmxuIFx1MDAzYyAyKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtODIsNyArODYsNyBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcbiBcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHRvdGFsX3B1bGwgKyBFVEhfSExFTikpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICsgaGRybGVuKTtcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsIHRvdGFsX3B1bGwpO1xuIFx0X19za2JfcHVsbChza2IsIHRvdGFsX3B1bGwpO1xuIFx0Km1ldGFsZW4gPSBpZmVoZHJsbiAtIElGRV9NRVRBSERSTEVOO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5pbmRleCAwNjUyMjgwMjZjNThlLi5lYTdkZjM2YWI3ZTM0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9pZmUuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9pZmUuY1xuQEAgLTcyMyw3ICs3MjMsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHR0Y2ZfbGFzdHVzZV91cGRhdGUoXHUwMDI2aWZlLVx1MDAzZXRjZl90bSk7XG4gXG4gXHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbi1cdFx0c2tiX3B1c2goc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuIFxuIFx0dGx2X2RhdGEgPSBpZmVfZGVjb2RlKHNrYiwgXHUwMDI2bWV0YWxlbik7XG4gXHRpZiAodW5saWtlbHkoIXRsdl9kYXRhKSkge1xuQEAgLTgyNiw3ICs4MjYsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHR9XG4gXG4gXHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbi1cdFx0c2tiX3B1c2goc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuIFxuIFx0aWZlX21ldGEgPSBpZmVfZW5jb2RlKHNrYiwgbWV0YWxlbik7XG4gXHRpZiAoIWlmZV9tZXRhKVxuQEAgLTg1Niw3ICs4NTYsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHRvZXRoaC1cdTAwM2VoX3Byb3RvID0gaHRvbnMocC1cdTAwM2VldGhfdHlwZSk7XG4gXG4gXHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbi1cdFx0c2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRcdHNrYl9wdWxsKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuIFxuIFx0cmV0dXJuIGFjdGlvbjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDoyNC4xMzQzNTQyMjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA3NTA4MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKklGRSBNZXRhZGF0YSBIYW5kbGluZzogQSBSZWZpbmVtZW50IGluIFRyYWZmaWMgQ29udHJvbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgemVyb2luZyBpbiBvbiBhIHByZXR0eSBzcGVjaWZpYyBhcmVhOiB0aGUgd2F5IHdlIGhhbmRsZSBJbnRlci1GRSAoSUZFKSBtZXRhZGF0YSwgcGFydGljdWxhcmx5IGluIGBuZXQvaWZlL2lmZS5jYCBhbmQgYG5ldC9zY2hlZC9hY3RfaWZlLmNgLiBUaGUga2V5IGNoYW5nZSBpcyBob3cgYGhkcmxlbmAgaXMgY2FsY3VsYXRlZCB3aGVuIHdlJ3JlIGVuY29kaW5nIG9yIGRlY29kaW5nIHRoaXMgSUZFIG1ldGFkYXRhLiBJbnN0ZWFkIG9mIGp1c3QgZGVmYXVsdGluZyB0byBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gLCB3aGljaCBoYXMgYmVlbiB0aGUgb2xkIHdheSwgaXQncyBub3cgY2hlY2tpbmcgYHNrYl9hdF90Y19pbmdyZXNzKHNrYilgLiBJZiB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlLCBpdCdzIGdvaW5nIHRvIHVzZSBgc2tiLVx1MDAzZW1hY19sZW5gIGluc3RlYWQuIFNtYXJ0IG1vdmU7IHRoYXQgc2hvdWxkIGdpdmUgdXMgbW9yZSBncmFudWxhciBjb250cm9sIGF0IHRoZSBpbmdyZXNzIHBvaW50LlxuXG5JIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyB0b3VjaGVkIGhlcmUuLi4gYWxyaWdodCwgbG9va3MgbGlrZSB3ZSd2ZSBnb3Q6IGBpZmVfZW5jb2RlYCwgYGlmZV9kZWNvZGVgLCBgdGNmX2lmZV9kZWNvZGVgLCBhbmQgYHRjZl9pZmVfZW5jb2RlYC4gWWVwLCB0aG9zZSBhcmUgYWxsIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBJRkUgYWN0aW9uIHdpdGhpbiBUQyAoVHJhZmZpYyBDb250cm9sKS4gTWFrZXMgc2Vuc2UuXG5cbkJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIHdhbnQgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYXQgdGhlIGNvbmZpZyBvcHRpb25zIGZvciBJRkUuIFRoaXMgYWRqdXN0bWVudCBwcm9iYWJseSBoYXMgaW1wbGljYXRpb25zLCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCBjaGFuZ2VzIG1heSBiZSBuZWVkZWQgZm9yIHNwZWNpZmljIGRlcGxveW1lbnRzLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUwOjI4Ljg0MTg2NTM2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzU3MTc3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZmVfZW5jb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pZmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pZmUvaWZlLmM9Mjk9c3RydWN0IGlmZWhlYWRyIHtcXG4tLVxcbm5ldC9pZmUvaWZlLmMtMzMtXFxubmV0L2lmZS9pZmUuYzozNDp2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxcbm5ldC9pZmUvaWZlLmMtMzUte1xcbi0tXFxubmV0L2lmZS9pZmUuYy02NS19XFxubmV0L2lmZS9pZmUuYzo2NjpFWFBPUlRfU1lNQk9MX0dQTChpZmVfZW5jb2RlKTtcXG5uZXQvaWZlL2lmZS5jLTY3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDoyOC45MDU0NDQwOTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA0Mjk4ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEFjdGl2YXRpb24gb2YgYGFjdF9pZmUuY2AgYW5kIGBpZmUuY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYGFjdF9pZmUuY2AgYW5kIGBpZmUuY2AgbW9kdWxlcyBhcmUgYmVpbmcgZW5hYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLiBHaXZlbiB0aGVpciBuYW1lcywgdGhleSBzZWVtIG5ldHdvcmstcmVsYXRlZC4gTXkgaW5zdGluY3QsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIHRlbGxzIG1lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZWlyIGluY2x1c2lvbiBhcmUgbGlrZWx5IGJ1cmllZCB3aXRoaW4gdGhlIG5ldHdvcmstc3BlY2lmaWMgS2NvbmZpZyBmaWxlcy4gU28sIGxldCBtZSBzdGFydCBieSBsb29raW5nIGluIGBuZXQvaWZlL0tjb25maWdgIGFuZCBgbmV0L3NjaGVkL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcsIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIHNjaGVkdWxpbmcsIHJlc3BlY3RpdmVseS4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFyZSBjbGVhcmx5IGRvY3VtZW50ZWQgdGhlcmUuIElmIEknbSBsdWNreSwgaXQnbGwgYmUgYSBzdHJhaWdodGZvcndhcmQgZGVwZW5kZW5jeSBjaGFpbi4gT3RoZXJ3aXNlLCBpdCBtaWdodCByZXF1aXJlIGEgYml0IG1vcmUgZGlnZ2luZyBhcm91bmQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3Vic3lzdGVtJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUwOjMyLjQwOTc1MjI3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQ4ODQ2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3RfaWZlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX05FVF9BQ1RfU0tCTU9EKVxcdCs9IGFjdF9za2Jtb2Qub1xcbm5ldC9zY2hlZC9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfTkVUX0FDVF9JRkUpXFx0Kz0gYWN0X2lmZS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19ORVRfSUZFX1NLQk1BUkspXFx0Kz0gYWN0X21ldGFfbWFyay5vXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTM0PXN0YXRpYyBpbnQgbWF4X21ldGFjbnQgPSBJRkVfTUVUQV9NQVggKyAxO1xcbm5ldC9zY2hlZC9hY3RfaWZlLmM6MzU6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzO1xcbm5ldC9zY2hlZC9hY3RfaWZlLmMtMzYtXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTQ3Nz1zdGF0aWMgaW50IHRjZl9pZmVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtNDgxLXtcXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjQ4MjpcXHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9pZmVfb3BzLm5ldF9pZCk7XFxubmV0L3NjaGVkL2FjdF9pZmUuYy00ODMtXFx0Ym9vbCBiaW5kID0gZmxhZ3MgXFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX0JJTkQ7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTU1Mi1cXHRpZiAoIWV4aXN0cykge1xcbm5ldC9zY2hlZC9hY3RfaWZlLmM6NTUzOlxcdFxcdHJldCA9IHRjZl9pZHJfY3JlYXRlKHRuLCBpbmRleCwgZXN0LCBhLCBcXHUwMDI2YWN0X2lmZV9vcHMsXFxubmV0L3NjaGVkL2FjdF9pZmUuYy01NTQtXFx0XFx0XFx0XFx0ICAgICBiaW5kLCB0cnVlLCBmbGFncyk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTg2ND1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtODgwLVxcbm5ldC9zY2hlZC9hY3RfaWZlLmM6ODgxOnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHtcXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTg4Mi1cXHQua2luZCA9IFxcXCJpZmVcXFwiLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYz04OTM9c3RhdGljIF9fbmV0X2luaXQgaW50IGlmZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3NjaGVkL2FjdF9pZmUuYy04OTQte1xcbm5ldC9zY2hlZC9hY3RfaWZlLmM6ODk1OlxcdHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgYWN0X2lmZV9vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTg5Ni1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjg5NzpcXHRyZXR1cm4gdGNfYWN0aW9uX25ldF9pbml0KG5ldCwgdG4sIFxcdTAwMjZhY3RfaWZlX29wcyk7XFxubmV0L3NjaGVkL2FjdF9pZmUuYy04OTgtfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYz05MDA9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpZmVfZXhpdF9uZXQoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXFxubmV0L3NjaGVkL2FjdF9pZmUuYy05MDEte1xcbm5ldC9zY2hlZC9hY3RfaWZlLmM6OTAyOlxcdHRjX2FjdGlvbl9uZXRfZXhpdChuZXRfbGlzdCwgYWN0X2lmZV9vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTkwMy19XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTkwNT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlmZV9uZXRfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYy05MDctXFx0LmV4aXRfYmF0Y2ggPSBpZmVfZXhpdF9uZXQsXFxubmV0L3NjaGVkL2FjdF9pZmUuYzo5MDg6XFx0LmlkICAgPSBcXHUwMDI2YWN0X2lmZV9vcHMubmV0X2lkLFxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtOTA5LVxcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCB0Y19hY3Rpb25fbmV0KSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfaWZlLmM9OTEyPXN0YXRpYyBpbnQgX19pbml0IGlmZV9pbml0X21vZHVsZSh2b2lkKVxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtOTEzLXtcXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjkxNDpcXHRyZXR1cm4gdGNmX3JlZ2lzdGVyX2FjdGlvbihcXHUwMDI2YWN0X2lmZV9vcHMsIFxcdTAwMjZpZmVfbmV0X29wcyk7XFxubmV0L3NjaGVkL2FjdF9pZmUuYy05MTUtfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYz05MTc9c3RhdGljIHZvaWQgX19leGl0IGlmZV9jbGVhbnVwX21vZHVsZSh2b2lkKVxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtOTE4LXtcXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjkxOTpcXHR0Y2ZfdW5yZWdpc3Rlcl9hY3Rpb24oXFx1MDAyNmFjdF9pZmVfb3BzLCBcXHUwMDI2aWZlX25ldF9vcHMpO1xcbm5ldC9zY2hlZC9hY3RfaWZlLmMtOTIwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTA6MzIuNDcyMjQ0NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU4ODM4NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX05FVF9BQ1RfSUZFYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGBDT05GSUdfTkVUX0FDVF9JRkVgLi4uIHRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhhdCdzIGVuYWJsaW5nIHRoZSBgaWZlLm9gIG9iamVjdCBmaWxlLiBNeSBmaXJzdCBzdG9wIHNob3VsZCBiZSB0aGUgYG5ldC9pZmUvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIGJ1aWxkIHN5c3RlbSBsb2dpYyBmb3IgdGhhdCBzcGVjaWZpYyBjb21wb25lbnQgc2hvdWxkIHJlc2lkZS4gSSBleHBlY3QgdG8gZmluZCB0aGUgcnVsZXMgdGhhdCBsaW5rIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byB0aGUgY3JlYXRpb24gb2YgdGhlIG9iamVjdCBmaWxlLiBJdCBjb3VsZCBiZSBhcyBzaW1wbGUgYXMgYW4gYG9iai0kKENPTkZJR19ORVRfQUNUX0lGRSkgKz0gaWZlLm9gIGxpbmUsIG9yIGl0IGNvdWxkIGJlIGEgYml0IG1vcmUgaW52b2x2ZWQgd2l0aCBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFscywgYnV0IHRoZSBNYWtlZmlsZSBpcyB0aGUgc291cmNlIG9mIHRydXRoIGZvciB0aGF0IGJ1aWxkIHByb2Nlc3MuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDozNS44MzEwODU4OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA4MDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaWZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaWZlL01ha2VmaWxlLTUtXFxubmV0L2lmZS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19ORVRfSUZFKSArPSBpZmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDozNS44NzcxNjk5OTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ5MjYyNzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgSUZFIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYENPTkZJR19ORVRfSUZFYCBhbmQgYENPTkZJR19ORVRfQUNUX0lGRWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZWlyIHJlbGF0aW9uc2hpcCBhbmQgcHVycG9zZSB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBcIklGRVwiIGxpa2VseSBzdGFuZHMgZm9yIHNvbWV0aGluZyBsaWtlIFwiSW5ncmVzcyBGaWx0ZXIgRW5naW5lXCIgb3IgXCJJbnRlcmZhY2UgRmlsdGVyIEVuZ2luZSxcIiBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdC5cblxuRmlyc3QsIEknbSBnb2luZyBzdHJhaWdodCBmb3IgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSB0eXBpY2FsIHBsYWNlIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZXNlIGtpbmRzIG9mIG5ldHdvcmsgc2NoZWR1bGluZyBhbmQgZmlsdGVyaW5nIG9wdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IGBORVRfQUNUX0lGRWAgaXMgZGVmaW5lZCDigJMgaXMgaXQgYSBzdGFuZGFsb25lIGZlYXR1cmUsIGEgZGVwZW5kZW5jeSBvZiBzb21ldGhpbmcgZWxzZSwgb3IgcmVsYXRlZCBkaXJlY3RseSB0byBgQ09ORklHX05FVF9JRkVgPyBUaGUgS2NvbmZpZyBmaWxlIHdpbGwgZ2l2ZSBtZSB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0LiBJJ20gbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcGVyaGFwcyBzb21lIGhlbHBmdWwgY29tbWVudHMgdGhhdCBzaGVkIGxpZ2h0IG9uIHRoZSBmdW5jdGlvbmFsaXR5LiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCBmb3JtaW5nIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUwOjM5LjUyNjQzNTU1M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MTk1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9BQ1RfSUZFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9ODgyPWNvbmZpZyBORVRfQUNUX1NLQk1PRFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODkyLVxcbm5ldC9zY2hlZC9LY29uZmlnOjg5Mzpjb25maWcgTkVUX0FDVF9JRkVcXG5uZXQvc2NoZWQvS2NvbmZpZy04OTQtXFx0dHJpc3RhdGUgXFxcIkludGVyLUZFIGFjdGlvbiBiYXNlZCBvbiBJRVRGIEZvckNFUyBJbnRlckZFIExGQlxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTA6MzkuNTczODY2Njk4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTk1NTA0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBORVRfQUNUX0lGRSoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQUNUX0lGRWAuIFRoaXMgbWVhbnMgSSdtIG5vdCBqdXN0IGxvb2tpbmcgZm9yIGEgc2ltcGxlIGxpc3Q7IEknbSBleHBlY3RpbmcgdG8gZGVsdmUgaW50byB0aGUgYXJjaGl0ZWN0dXJlLCBwcm9iYWJseSB0aGUgbG93LWxldmVsIGNvbXBvbmVudHMgYW5kIG5ldHdvcmsgbGF5ZXJzLCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5LiBJJ20gdGhpbmtpbmcgYWJvdXQgdHJhY2luZyBiYWNrIHdoZXJlIHRoaXMgc3RydWN0dXJlLCBvciBmdW5jdGlvbiBvciBtb2R1bGUsIGlzIHVzZWQgb3IgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbS4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgdGhlIGxpa2VseSBhcmVhcyBvZiBpbXBhY3Qgd2hlbiBtb2RpZnlpbmcgYE5FVF9BQ1RfSUZFYCAuIFRoZSBtYWluIHF1ZXN0aW9uIGlzOiBXaGF0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gcmVseSBvbiBpdD8gQXJlIHRoZXJlIHBvdGVudGlhbCBjYXNjYWRpbmcgZmFpbHVyZXMgaWYgYE5FVF9BQ1RfSUZFYCBpc24ndCBiZWhhdmluZyBjb3JyZWN0bHkgb3IgbmVlZHMgYSBtYWpvciBvdmVyaGF1bD8gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggbmV0d29yayBzdGFjayBtb2R1bGVzIGludGVyZmFjZSB3aXRoIHRoaXMuIFdoYXQgaGFyZHdhcmUgZHJpdmVycyBvciBsb3ctbGV2ZWwgbmV0d29yayBpbnRlcmZhY2UgZHJpdmVycyBhcmUgaW52b2x2ZWQuIFdoYXQgdXBwZXItbGF5ZXIgcHJvdG9jb2xzIHV0aWxpemUgdGhpcyBpbnRlcmZhY2U/IEZyb20gYSBzZWN1cml0eSBzdGFuZHBvaW50LCBpZiBpdCdzIGludm9sdmVkIHdpdGggc29tZXRoaW5nLCBob3cgaXMgdGhpcyBoYW5kbGVkIGFuZCB3aGF0IGFyZSBpdHMgaW5wdXRzL291dHB1dHM/IEluIGVzc2VuY2UsIEknbSBhaW1pbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgc3lzdGVtIGFuZCB0aGUgaW1wYWN0IG9mIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDo0My4yOTM0MTk1OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTkwMDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0FDVF9JRkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz04ODI9Y29uZmlnIE5FVF9BQ1RfU0tCTU9EXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy04OTItXFxubmV0L3NjaGVkL0tjb25maWc6ODkzOmNvbmZpZyBORVRfQUNUX0lGRVxcbm5ldC9zY2hlZC9LY29uZmlnLTg5NC1cXHR0cmlzdGF0ZSBcXFwiSW50ZXItRkUgYWN0aW9uIGJhc2VkIG9uIElFVEYgRm9yQ0VTIEludGVyRkUgTEZCXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDo0My4zOTUzMjM2OTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MjY4Mzc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9uKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gQmFzZWQgb24gdGhlIGRpcmVjdGlvbiBJJ20gdGFraW5nIGluIHRoaXMgaW52ZXN0aWdhdGlvbiwgSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIG5ldHdvcmsgc2NoZWR1bGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgcXVldWluZyBkaXNjaXBsaW5lcyBhbmQgdGhlIGZlYXR1cmVzIHRoZXkgZXhwb3NlLiBJIGhhdmUgYSBodW5jaCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgdHJvdWJsZXNob290aW5nIHN0ZXBzLCB0aGF0IGEgY29uZmlndXJhdGlvbiBmbGFnIHdpdGhpbiB0aGUgYG5ldC9zY2hlZC9gIHN1YnN5c3RlbSBpcyB0aGUga2V5LiBHaXZlbiB0aGUgaGlnaCBwcm9iYWJpbGl0eSB0aGF0IEkgbmVlZCB0byBsb29rIGF0IHNwZWNpZmljIHNjaGVkdWxlciBvcHRpb25zLCBhbmQgd2hhdCBmZWF0dXJlcyB0aGV5IG9mZmVyLCBJIHNob3VsZCBwcm9iYWJseSBnbyBiYWNrIGFuZCB0YWtlIGEgbG9vayBhdCBgbmV0L3NjaGVkL0tjb25maWdgLCBhcm91bmQgbGluZSA4OTMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB0aGUgYXZhaWxhYmxlIGNob2ljZXMgYW5kIGRlcGVuZGVuY2llcy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBjYW4gYmUgY29uZmlndXJlZCwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUsIHdpdGhpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgY29udGV4dC4gVGhhdCBzaG91bGQgcXVpY2tseSBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgb3B0aW9ucywgYW5kIGFueSBhc3NvY2lhdGVkIGNvbnN0cmFpbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTA6NDYuNTc4MDEwMjU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg5MDpcXHRcXHQgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4OTE6XFx0XFx0IG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfc2tibW9kLlxcbiA4OTI6XFx0XFxuIDg5MzpcXHRjb25maWcgTkVUX0FDVF9JRkVcXG4gODk0OlxcdFxcdHRyaXN0YXRlIFxcXCJJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcXFwiXFxuIDg5NTpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDg5NjpcXHRcXHRzZWxlY3QgTkVUX0lGRVxcbiA4OTc6XFx0XFx0aGVscFxcbiA4OTg6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IGZvciBzb3VyY2luZyBhbmQgdGVybWluYXRpbmcgbWV0YWRhdGFcXG4gODk5OlxcdFxcdCAgRm9yIGRldGFpbHMgcmVmZXIgdG8gbmV0ZGV2MDEgcGFwZXI6XFxuIDkwMDpcXHRcXHQgIFxcXCJEaXN0cmlidXRpbmcgTGludXggVHJhZmZpYyBDb250cm9sIENsYXNzaWZpZXItQWN0aW9uIFN1YnN5c3RlbVxcXCJcXG4gOTAxOlxcdFxcdCAgIEF1dGhvcnM6IEphbWFsIEhhZGkgU2FsaW0gYW5kIERhbWFzY2VuZSBNLiBKb2FjaGltcGlsbGFpXFxuIDkwMjpcXHRcXG4gOTAzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA5MDQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2lmZS5cXG4gOTA1OlxcdFxcbiA5MDY6XFx0Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxcbiA5MDc6XFx0XFx0dHJpc3RhdGUgXFxcIklQIHR1bm5lbCBtZXRhZGF0YSBtYW5pcHVsYXRpb25cXFwiXFxuIDkwODpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDkwOTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUwOjQ2LjU3ODA5NzgzNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk1OTgwMjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTkVUX0FDVF9JRkUgQ29uZmlndXJhdGlvbiBhbmQgQXNzb2NpYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBORVRfQUNUX0lGRWAgY29uZmlnIG9wdGlvbiwgYW5kIGl0J3MgY2xlYXIgdGhhdCBpdCBkZXBlbmRzIG9uIGBORVRfQ0xTX0FDVGAgYW5kIHRoZW4gc2VsZWN0cyBgTkVUX0lGRWAuIEZyb20gYSBjb25maWcgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgTkVUX0FDVF9JRkVgIGFuZCBgTkVUX0NMU19BQ1RgIGFyZSBlbmFibGVkLiBOb3JtYWxseSBgTkVUX0NMU19BQ1RgIGlzIGFsd2F5cyBvbiwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGV4cGxpY2l0bHkgaW5jbHVkZSBpdCBqdXN0IHRvIGJlIHNhZmUgYW5kIGNsZWFyLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSd2ZSBnb3QgdG8gcmV2aWV3IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYWZmZWN0ZWQuIExvb2tzIGxpa2Ugd2UgaGF2ZSBgaWZlX2VuY29kZWAsIGBpZmVfZGVjb2RlYCwgYHRjZl9pZmVfZGVjb2RlYCwgYW5kIGB0Y2ZfaWZlX2VuY29kZWAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhvc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSByZWFjaGFibGUuIFJpZ2h0LCB0aGV5IGFyZSByZWFjaGVkIHRocm91Z2ggVEMgYWN0aW9ucy5cblxuVGhpcyBhbGwgbG9va3MgbGlrZSBpdCBoYXMgZnV6emluZyBwb3RlbnRpYWwsIHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbW9kaWZ5aW5nIHRoZSBwYWNrZXQgcHJvY2Vzc2luZywgcGFydGljdWxhcmx5IHdpdGggdGhlIGBza2JgIHB1c2gvcHVsbCBsZW5ndGhzLiBXb3J0aCBhIGNsb3NlciBsb29rLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmSSdtIG5vdGljaW5nIHRoYXQgYHRjZl9pZmVfZGVjb2RlYCBhbmQgYHRjZl9pZmVfZW5jb2RlYCBhcmUgZGVmaW5lZCBhcyBzdGF0aWMgZnVuY3Rpb25zIGluIGBuZXQvc2NoZWQvYWN0X2lmZS5jYC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBjYXNlLiBCZWluZyBzdGF0aWMgZGVmaW5pdGVseSBhZmZlY3RzIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkwNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUwOjUxLjY3NDA4MTY4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MjQ1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2lmZV9kZWNvZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9pZmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2lmZS5jPTY5Mj1zdGF0aWMgaW50IGZpbmRfZGVjb2RlX21ldGFpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2lmZV9wYXJhbXMgKnAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTcwOS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjcxMDpzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxubmV0L3NjaGVkL2FjdF9pZmUuYy03MTEtXFx0XFx0XFx0ICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYz04NjQ9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTg3Ny1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjg3ODpcXHRyZXR1cm4gdGNmX2lmZV9kZWNvZGUoc2tiLCBhLCByZXMpO1xcbm5ldC9zY2hlZC9hY3RfaWZlLmMtODc5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTA6NTEuNzIyODExNDUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTgyNTk5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEZWNvZGluZyB0aGUgYHRjZl9pZmVgIEZ1bmN0aW9ucyoqXG5cbkhtbSwgc28gYHRjZl9pZmVfZGVjb2RlYCBhbmQgYHRjZl9pZmVfZW5jb2RlYCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0IG1lYW5zIHRoZXkgaGF2ZSBpbnRlcm5hbCBsaW5rYWdlIHdpdGhpbiB0aGVpciBjb21waWxhdGlvbiB1bml0IOKAkyB0aGF0J3MgYSBnb29kIGRlc2lnbiBjaG9pY2UsIGxpbWl0aW5nIHRoZWlyIHNjb3BlLiBCdXQgbm93IEknbSBjdXJpb3VzLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGhvdyBhcmUgdGhleSBiZWluZyAqdXNlZCo/IERvZXMgYHRjZl9pZmVfYWN0YCBjYWxsIGVpdGhlciBgZGVjb2RlYCBvciBgZW5jb2RlYD8gVGhhdCB3b3VsZCBiZSB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gR290dGEgY2hlY2sgYHRjZl9pZmVfYWN0YCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIExldCBtZSBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDo1NC45NDEwNzQ3OTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3RfaWZlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODYwOlxcdFxcbiA4NjE6XFx0XFx0cmV0dXJuIGFjdGlvbjtcXG4gODYyOlxcdH1cXG4gODYzOlxcdFxcbiA4NjQ6XFx0VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuIDg2NTpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuIDg2NjpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpXFxuIDg2NzpcXHR7XFxuIDg2ODpcXHRcXHRzdHJ1Y3QgdGNmX2lmZV9pbmZvICppZmUgPSB0b19pZmUoYSk7XFxuIDg2OTpcXHRcXHRzdHJ1Y3QgdGNmX2lmZV9wYXJhbXMgKnA7XFxuIDg3MDpcXHRcXHRpbnQgcmV0O1xcbiA4NzE6XFx0XFxuIDg3MjpcXHRcXHRwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGlmZS1cXHUwMDNlcGFyYW1zKTtcXG4gODczOlxcdFxcdGlmIChwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRV9FTkNPREUpIHtcXG4gODc0OlxcdFxcdFxcdHJldCA9IHRjZl9pZmVfZW5jb2RlKHNrYiwgYSwgcmVzLCBwKTtcXG4gODc1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDg3NjpcXHRcXHR9XFxuIDg3NzpcXHRcXG4gODc4OlxcdFxcdHJldHVybiB0Y2ZfaWZlX2RlY29kZShza2IsIGEsIHJlcyk7XFxuIDg3OTpcXHR9XFxuIDg4MDpcXHRcXG4gODgxOlxcdHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHtcXG4gODgyOlxcdFxcdC5raW5kID0gXFxcImlmZVxcXCIsXFxuIDg4MzpcXHRcXHQuaWQgPSBUQ0FfSURfSUZFLFxcbiA4ODQ6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuIDg4NTpcXHRcXHQuYWN0ID0gdGNmX2lmZV9hY3QsXFxuIDg4NjpcXHRcXHQuZHVtcCA9IHRjZl9pZmVfZHVtcCxcXG4gODg3OlxcdFxcdC5jbGVhbnVwID0gdGNmX2lmZV9jbGVhbnVwLFxcbiA4ODg6XFx0XFx0LmluaXQgPSB0Y2ZfaWZlX2luaXQsXFxuIDg4OTpcXHRcXHQuc2l6ZSA9XFx0c2l6ZW9mKHN0cnVjdCB0Y2ZfaWZlX2luZm8pLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDo1NC45NDExODQ5MjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA4MTgwMzY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJRkUgVHJhZmZpYyBDb250cm9sIEFjdGlvbiBQYXRjaDogQSBGb2N1c2VkIFJldmlldyoqXG5cbk9rYXksIHNvIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGB0Y2ZfaWZlX2FjdGAgaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQgaGVyZS4gVGhlIGZ1bmN0aW9ucyBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCBhcmUgdGhlIGV4cG9ydGVkIHN5bWJvbHMgaW4gYG5ldC9pZmUvaWZlLmNgIHRoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCwgYWxvbmcgd2l0aCBgdGNmX2lmZV9hY3RgLCB3aGljaCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW52b2x2ZSBhIG1vZGlmaWNhdGlvbiB0byBob3cgaGVhZGVyIGxlbmd0aHMgYXJlIGNhbGN1bGF0ZWQgd2l0aGluIHRoZSBJRkUgdHJhZmZpYyBjb250cm9sIGFjdGlvbiwgc3BlY2lmaWNhbGx5IGR1cmluZyBlbmNvZGluZyBhbmQgZGVjb2RpbmcuIEl0J3Mgc3dpdGNoaW5nIGZyb20gdXNpbmcgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB0byBgc2tiLVx1MDAzZW1hY19sZW5gIHdoZW4gYSBwYWNrZXQgaXMgYXQgVEMgaW5ncmVzcy4gTm93LCBJIHNlZSBpbW1lZGlhdGVseSB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gQW55IGFsdGVyYXRpb24gdG8gcGFja2V0IHByb2Nlc3NpbmcsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGhvdyBtdWNoIGRhdGEgaXMgcHVzaGVkIG9yIHB1bGxlZCBmcm9tIHRoZSBTS0IsIGlzIHNpZ25pZmljYW50LiBJZiB0aGlzIGNhbGN1bGF0aW9uIGlzIGluY29ycmVjdCwgaXQgY291bGQgdmVyeSBlYXNpbHkgbGVhZCB0byBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBvciBvdGhlciBleHBsb2l0YWJsZSBpc3N1ZXMuIEkgbmVlZCB0byBiZSBkaWxpZ2VudCBhYm91dCB0ZXN0aW5nIHRoaXMuIEdpdmVuIGl0J3MgcmVhY2hhYmxlIHZpYSBUQyBhY3Rpb25zLCBpdOKAmXMgcmlwZSBmb3IgZnV6emluZy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCBJIHNlZSB0aGF0IGBORVRfSUZFYCBpcyBzZWxlY3RlZCBieSBgTkVUX0FDVF9JRkVgLiBTbywgZW5hYmxpbmcgYE5FVF9BQ1RfSUZFYCBpcyB0aGUga2V5IGNvbmZpZyBuZWVkZWQgaGVyZS5cblxuTm93LCBsZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzg3LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUxOjAyLjAyMjk5MTAxMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjY1MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX0lGRVwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZmVfZW5jb2RlXCIsXG4gICAgXCJpZmVfZGVjb2RlXCIsXG4gICAgXCJ0Y2ZfaWZlX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiBoZWFkZXIgbGVuZ3RocyBpbiB0aGUgSUZFIChJbnRlci1GRSkgdHJhZmZpYyBjb250cm9sIGFjdGlvbiBlbmNvZGluZyBhbmQgZGVjb2RpbmcgcGF0aHMuIEl0IGNoYW5nZXMgdGhlIGxvZ2ljIHRvIHVzZSBgc2tiLVxcdTAwM2VtYWNfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3aGVuIHRoZSBwYWNrZXQgaXMgYXQgVEMgaW5ncmVzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHBhY2tldCBwcm9jZXNzaW5nIHRoYXQgYWZmZWN0cyBob3cgbXVjaCBkYXRhIGlzIHB1c2hlZCBvciBwdWxsZWQgZnJvbSB0aGUgc2tiLCB3aGljaCBjYW4gbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIG90aGVyIGlzc3VlcyBpZiBpbmNvcnJlY3QuIEl0IGlzIHJlYWNoYWJsZSB2aWEgVEMgYWN0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX0lGRVwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZmVfZW5jb2RlXCIsXG4gICAgXCJpZmVfZGVjb2RlXCIsXG4gICAgXCJ0Y2ZfaWZlX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiBoZWFkZXIgbGVuZ3RocyBpbiB0aGUgSUZFIChJbnRlci1GRSkgdHJhZmZpYyBjb250cm9sIGFjdGlvbiBlbmNvZGluZyBhbmQgZGVjb2RpbmcgcGF0aHMuIEl0IGNoYW5nZXMgdGhlIGxvZ2ljIHRvIHVzZSBgc2tiLVxcdTAwM2VtYWNfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3aGVuIHRoZSBwYWNrZXQgaXMgYXQgVEMgaW5ncmVzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHBhY2tldCBwcm9jZXNzaW5nIHRoYXQgYWZmZWN0cyBob3cgbXVjaCBkYXRhIGlzIHB1c2hlZCBvciBwdWxsZWQgZnJvbSB0aGUgc2tiLCB3aGljaCBjYW4gbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIG90aGVyIGlzc3VlcyBpZiBpbmNvcnJlY3QuIEl0IGlzIHJlYWNoYWJsZSB2aWEgVEMgYWN0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTE6MDIuMTAzMjYyMzc0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ1NDQ3MDU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUxOjAyLjEwMzg2MTYxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1ODQ1Mzg2Nzc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgYHNrYl9wdXNoKClgIGFuZCBgbWVtY3B5KClgIHVzZWQgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYHNrYi1cXHUwMDNlbWFjX2xlbmAgYXQgVEMgaW5ncmVzcy4gSWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgbGFyZ2VyIHRoYW4gYG1hY19sZW5gLCBgc2tiX3B1c2goKWAgbW92ZXMgYHNrYi1cXHUwMDNlZGF0YWAgaW50byB0aGUgc2tiIGhlYWRyb29tIGJlZm9yZSB0aGUgYWN0dWFsIE1BQyBoZWFkZXIuIFRoZSBza2IgaGVhZHJvb20gaXMgdmFsaWQgYWxsb2NhdGVkIG1lbW9yeSwgc28gS0FTQU4gd2lsbCBub3QgZmxhZyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gSG93ZXZlciwgdGhpcyBoZWFkcm9vbSBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC4gVGhlIHN1YnNlcXVlbnQgYG1lbWNweSgpYCBpbiBgaWZlX2VuY29kZSgpYCBjb3BpZXMgdGhlc2UgdW5pbml0aWFsaXplZCBieXRlcyBpbnRvIHRoZSBwYWNrZXQgaGVhZGVyLCBsZWFkaW5nIHRvIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYW5kIGEgcG90ZW50aWFsIGluZm8tbGVhayBvdmVyIHRoZSBuZXR3b3JrLiBLTVNBTiBpcyByZXF1aXJlZCB0byBkZXRlY3QgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYXMgc3RhbmRhcmQgS0FTQU4gY2Fubm90IGNhdGNoIGluLWJvdW5kcyB1bmluaXRpYWxpemVkIHJlYWRzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWZiNzIwMGZhMWYzNDdmNmVkN2UxNDcxYjNjMDYxNWMyMDk4MjZlZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE3OjUwOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmNcbmluZGV4IDdhNzU5NDdhMzFlMzEuLjNkMzFkNjgxMTRlZmMgMTAwNjQ0XG4tLS0gYS9uZXQvaWZlL2lmZS5jXG4rKysgYi9uZXQvaWZlL2lmZS5jXG5AQCAtMzYsOCArMzYsMTAgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbilcbiBcdC8qIE9VVEVSSERSOlRPVE1FVEFMRU46e1RMVkhEUjpNZXRhZGF0dW06VExWSERSLi59Ok9SSUdEQVRBXG4gXHQgKiB3aGVyZSBPUklHREFUQSA9IG9yaWdpbmFsIGV0aGVybmV0IGhlYWRlciAuLi5cbiBcdCAqL1xuK1x0dW5zaWduZWQgaW50IGhkcmxlbiA9IHNrYl9hdF90Y19pbmdyZXNzKHNrYikgP1xuK1x0XHRcdCAgICAgIHNrYi1cdTAwM2VtYWNfbGVuIDogc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4gXHRpbnQgaGRybSA9IG1ldGFsZW4gKyBJRkVfTUVUQUhEUkxFTjtcbi1cdGludCB0b3RhbF9wdXNoID0gaGRybSArIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuK1x0aW50IHRvdGFsX3B1c2ggPSBoZHJtICsgaGRybGVuO1xuIFx0c3RydWN0IGlmZWhlYWRyICppZmVoZHI7XG4gXHRzdHJ1Y3QgZXRoaGRyICppZXRoaDtcdC8qIGlubmVyIGV0aGVyIGhlYWRlciAqL1xuIFx0aW50IHNrYm9mZiA9IDA7XG5AQCAtNTAsOSArNTIsOSBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxuIFx0aWV0aGggPSAoc3RydWN0IGV0aGhkciAqKSBza2ItXHUwMDNlZGF0YTtcbiBcbiBcdF9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTtcbi1cdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbitcdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIGhkcmxlbik7XG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0c2tib2ZmICs9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuK1x0c2tib2ZmICs9IGhkcmxlbjtcbiBcbiBcdC8qIHRvdGFsIG1ldGFkYXRhIGxlbmd0aCAqL1xuIFx0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKSAoc2tiLVx1MDAzZWRhdGEgKyBza2JvZmYpO1xuQEAgLTY1LDE2ICs2NywxOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChpZmVfZW5jb2RlKTtcbiBcbiB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcbiB7XG4rXHR1bnNpZ25lZCBpbnQgaGRybGVuID0gc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSA/XG4rXHRcdFx0ICAgICAgc2tiLVx1MDAzZW1hY19sZW4gOiBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbiBcdHN0cnVjdCBpZmVoZWFkciAqaWZlaGRyO1xuIFx0aW50IHRvdGFsX3B1bGw7XG4gXHR1MTYgaWZlaGRybG47XG4gXG4tXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIElGRV9NRVRBSERSTEVOKSlcbitcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcmxlbiArIElGRV9NRVRBSERSTEVOKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopIChza2ItXHUwMDNlZGF0YSArIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbitcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBoZHJsZW4pO1xuIFx0aWZlaGRybG4gPSBudG9ocyhpZmVoZHItXHUwMDNlbWV0YWxlbik7XG4tXHR0b3RhbF9wdWxsID0gc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBpZmVoZHJsbjtcbitcdHRvdGFsX3B1bGwgPSBoZHJsZW4gKyBpZmVoZHJsbjtcbiBcbiBcdGlmICh1bmxpa2VseShpZmVoZHJsbiBcdTAwM2MgMikpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTgyLDcgKzg2LDcgQEAgdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pXG4gXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICsgRVRIX0hMRU4pKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXHUwMDNlZGF0YSArIGhkcmxlbik7XG4gXHRza2Jfc2V0X21hY19oZWFkZXIoc2tiLCB0b3RhbF9wdWxsKTtcbiBcdF9fc2tiX3B1bGwoc2tiLCB0b3RhbF9wdWxsKTtcbiBcdCptZXRhbGVuID0gaWZlaGRybG4gLSBJRkVfTUVUQUhEUkxFTjtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2lmZS5jIGIvbmV0L3NjaGVkL2FjdF9pZmUuY1xuaW5kZXggMDY1MjI4MDI2YzU4ZS4uZWE3ZGYzNmFiN2UzNCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmNcbisrKyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcbkBAIC03MjMsNyArNzIzLDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNmlmZS1cdTAwM2V0Y2ZfdG0pO1xuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiBcbiBcdHRsdl9kYXRhID0gaWZlX2RlY29kZShza2IsIFx1MDAyNm1ldGFsZW4pO1xuIFx0aWYgKHVubGlrZWx5KCF0bHZfZGF0YSkpIHtcbkBAIC04MjYsNyArODI2LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0fVxuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiBcbiBcdGlmZV9tZXRhID0gaWZlX2VuY29kZShza2IsIG1ldGFsZW4pO1xuIFx0aWYgKCFpZmVfbWV0YSlcbkBAIC04NTYsNyArODU2LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0b2V0aGgtXHUwMDNlaF9wcm90byA9IGh0b25zKHAtXHUwMDNlZXRoX3R5cGUpO1xuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVsbChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiBcbiBcdHJldHVybiBhY3Rpb247XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTE6MDIuMTAzODYyMzU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NDUzODQ2MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXR3b3JrIEhlYWRlciBMZW5ndGggQ2FsY3VsYXRpb24gQnVnIGFuZCB0aGUgTmVlZCBmb3IgS01TQU4qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBtYWtpbmcgc3VyZSB3ZSdyZSBjb3JyZWN0bHkgY2FsY3VsYXRpbmcgaGVhZGVyIGxlbmd0aHMsIHNwZWNpZmljYWxseSB3aGVuIHBhY2tldHMgYXJlIGNvbWluZyBpbiBhdCBUQyBpbmdyZXNzLiBUaGUga2V5IGlzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGBza2ItXHUwMDNlbWFjX2xlbmAgdmVyc3VzIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAuICBBdCBmaXJzdCBnbGFuY2UsIGl0IHNlZW1zIHNpbXBsZToganVzdCB1c2UgdGhlIGNvcnJlY3QgbGVuZ3RoLiBCdXQgbGV0J3MgZGl2ZSBkZWVwZXIuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGUgcHJvYmxlbSB3YXMganVzdCBvdXQtb2YtYm91bmRzIHJlYWRzIGlmIHdlIHVzZWQgYSBsZW5ndGggdGhhdCB3YXMgKnRvbyBsYXJnZSouIFdlJ2QgcG90ZW50aWFsbHkgYmUgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIE1BQyBoZWFkZXIuIEhvd2V2ZXIsIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuICBJdCdzIG1vcmUgc3VidGxlLiBJZiBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGlzIHVzZWQgYW5kIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgTUFDIGhlYWRlciAoYHNrYi1cdTAwM2VtYWNfbGVuYCksIHRoZW4gd2UgYXJlIGVzc2VudGlhbGx5IHB1c2hpbmcgYHNrYi1cdTAwM2VkYXRhYCBpbnRvIHRoZSBoZWFkcm9vbSBiZWZvcmUgdGhlIE1BQyBoZWFkZXIuXG5cbkNydWNpYWxseSwgdGhlIGhlYWRyb29tIG9mIGFuIGBza2JgIGlzICphbGxvY2F0ZWQqIG1lbW9yeSwgd2hpY2ggbWVhbnMgS0FTQU4gd2lsbCBub3QgZmxhZyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gSG93ZXZlciwgdGhpcyBoZWFkcm9vbSBtZW1vcnkgaXMgKnVuaW5pdGlhbGl6ZWQqLiBUaGlzIGlzIGEgcHJvYmxlbSEgIFRoZSBvbGQgY29kZSB3YXMgZXNzZW50aWFsbHkgY29weWluZyBieXRlcyBmcm9tIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50byB0aGUgcGFja2V0IGhlYWRlci4gIFdoZW4gdGhlIHBhY2tldCBpcyBzZW50IG91dCwgd2UgYXJlIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgYSBjbGFzc2ljIGluZm8tbGVhay4gS01TQU4gaXMgdGhlIHJpZ2h0IHRvb2wgdG8gY2F0Y2ggdGhpcyBiZWNhdXNlIGl0J3MgZGVzaWduZWQgc3BlY2lmaWNhbGx5IHRvIHRyYWNrIGluaXRpYWxpemF0aW9uIHN0YXRlLiBLQVNBTiBpcyB1c2VsZXNzIGhlcmUsIGJlY2F1c2UgaXQgb25seSBsb29rcyBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cblxuTGV0IG1lIGJyZWFrIGRvd24gdGhlIHNjZW5hcmlvOiB3aGVuIHBhY2tldHMgZW50ZXIgdGhlIFRDIGluZ3Jlc3MgcGF0aCwgYHNrYi1cdTAwM2VkYXRhYCBwb2ludHMgdG8gdGhlIG5ldHdvcmsgaGVhZGVyLiBUaGUgTUFDIGhlYWRlciBpcyBsb2NhdGVkICpiZWZvcmUqIHRoYXQuIFRoZSBwYXRjaCBjb3JyZWN0bHkgcmVhbGl6ZXMgdGhpcyBhbmQgdXNlcyBgc2tiLVx1MDAzZW1hY19sZW5gIHRvIGRldGVybWluZSB0aGUgTUFDIGhlYWRlcidzIGxlbmd0aC5cblxuKiAgIEluIGB0Y2ZfaWZlX2RlY29kZWAsIGlmIGBoYXJkX2hlYWRlcl9sZW5gIGlzIHVzZWQgaW5zdGVhZCBvZiBgbWFjX2xlbmAsIGBza2JfcHVzaGAgd2lsbCBtb3ZlIGBza2ItXHUwMDNlZGF0YWAgYmFjayBpbnRvIHRoZSB1bmluaXRpYWxpemVkIGhlYWRyb29tLCBjb3JydXB0aW5nIGRhdGEuXG4qICAgVGhlbiBgaWZlX2RlY29kZWAgaXMgY2FsbGVkLCBhbmQgd2lsbCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBIb3dldmVyLCB0aGUgdXNlIG9mIGBoZHJsZW5gIG1hdGNoZXMgdGhlIGBza2JfcHVzaGAgYW5kIHRoZSBhY2Nlc3MgaXMgZmluZS5cbiogICBJbiBgdGNmX2lmZV9lbmNvZGVgLCBhZ2FpbiB0aGUgd3JvbmcgbGVuZ3RoIGlzIHVzZWQuXG4qICAgYGlmZV9lbmNvZGVgIGNvcGllcyBgaGFyZF9oZWFkZXJfbGVuYCBieXRlcyBmcm9tIGBpZXRoaGAgKHdoaWNoIGluY2x1ZGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KSBpbnRvIHRoZSBwYWNrZXQgaGVhZGVyLlxuXG5JZiBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgTUFDIGhlYWRlciBsZW5ndGgsIHRoaXMgcHJvY2VzcyBsZWFrcyB0aGUgdW5pbml0aWFsaXplZCBza2IgaGVhZHJvb20gbWVtb3J5IGludG8gdGhlIG5ldHdvcmsuIEtNU0FOICptdXN0KiBiZSBlbmFibGVkIHRvIGRldGVjdCB0aGlzIGJ1ZywgYXMgaXQgaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQgZGF0YSBsZWFrLlxuXG5UaGVyZWZvcmUsIHRoaXMgaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgbGVhZGluZyB0byBhbiBpbmZvcm1hdGlvbiBsZWFrLCBhbmQgS01TQU4gaXMgKnJlcXVpcmVkKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0NSwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTI6MDAuNTU3NzExNTU3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBgc2tiX3B1c2goKWAgYW5kIGBtZW1jcHkoKWAgdXNlZCBgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgaW5zdGVhZCBvZiBgc2tiLVxcdTAwM2VtYWNfbGVuYCBhdCBUQyBpbmdyZXNzLiBJZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyBsYXJnZXIgdGhhbiBgbWFjX2xlbmAsIGBza2JfcHVzaCgpYCBtb3ZlcyBgc2tiLVxcdTAwM2VkYXRhYCBpbnRvIHRoZSBza2IgaGVhZHJvb20gYmVmb3JlIHRoZSBhY3R1YWwgTUFDIGhlYWRlci4gVGhlIHNrYiBoZWFkcm9vbSBpcyB2YWxpZCBhbGxvY2F0ZWQgbWVtb3J5LCBzbyBLQVNBTiB3aWxsIG5vdCBmbGFnIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCB0aGlzIGhlYWRyb29tIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBUaGUgc3Vic2VxdWVudCBgbWVtY3B5KClgIGluIGBpZmVfZW5jb2RlKClgIGNvcGllcyB0aGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGludG8gdGhlIHBhY2tldCBoZWFkZXIsIGxlYWRpbmcgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQgYSBwb3RlbnRpYWwgaW5mby1sZWFrIG92ZXIgdGhlIG5ldHdvcmsuIEtNU0FOIGlzIHJlcXVpcmVkIHRvIGRldGVjdCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhcyBzdGFuZGFyZCBLQVNBTiBjYW5ub3QgY2F0Y2ggaW4tYm91bmRzIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBgc2tiX3B1c2goKWAgYW5kIGBtZW1jcHkoKWAgdXNlZCBgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgaW5zdGVhZCBvZiBgc2tiLVxcdTAwM2VtYWNfbGVuYCBhdCBUQyBpbmdyZXNzLiBJZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyBsYXJnZXIgdGhhbiBgbWFjX2xlbmAsIGBza2JfcHVzaCgpYCBtb3ZlcyBgc2tiLVxcdTAwM2VkYXRhYCBpbnRvIHRoZSBza2IgaGVhZHJvb20gYmVmb3JlIHRoZSBhY3R1YWwgTUFDIGhlYWRlci4gVGhlIHNrYiBoZWFkcm9vbSBpcyB2YWxpZCBhbGxvY2F0ZWQgbWVtb3J5LCBzbyBLQVNBTiB3aWxsIG5vdCBmbGFnIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCB0aGlzIGhlYWRyb29tIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBUaGUgc3Vic2VxdWVudCBgbWVtY3B5KClgIGluIGBpZmVfZW5jb2RlKClgIGNvcGllcyB0aGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGludG8gdGhlIHBhY2tldCBoZWFkZXIsIGxlYWRpbmcgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQgYSBwb3RlbnRpYWwgaW5mby1sZWFrIG92ZXIgdGhlIG5ldHdvcmsuIEtNU0FOIGlzIHJlcXVpcmVkIHRvIGRldGVjdCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhcyBzdGFuZGFyZCBLQVNBTiBjYW5ub3QgY2F0Y2ggaW4tYm91bmRzIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowclhgh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 17:26:28 +0000 UTC FinishedAt: 2026-08-10 17:52:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_IFE", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_ACT_IFE", "NET_CLS_ACT" ], "series_id": "3f4d760a-b39e-48f6-b132-df8c5c38f8f4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ife_encode", "ife_decode", "tcf_ife_act" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9BQ1RfSUZFJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWZlX2VuY29kZSYjMzQ7LAogICAgJiMzNDtpZmVfZGVjb2RlJiMzNDssCiAgICAmIzM0O3RjZl9pZmVfYWN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgYHNrYl9wdXNoKClgIGFuZCBgbWVtY3B5KClgIHVzZWQgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXHUwMDNlbWFjX2xlbmAgYXQgVEMgaW5ncmVzcy4gSWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgbGFyZ2VyIHRoYW4gYG1hY19sZW5gLCBgc2tiX3B1c2goKWAgbW92ZXMgYHNrYi1cdTAwM2VkYXRhYCBpbnRvIHRoZSBza2IgaGVhZHJvb20gYmVmb3JlIHRoZSBhY3R1YWwgTUFDIGhlYWRlci4gVGhlIHNrYiBoZWFkcm9vbSBpcyB2YWxpZCBhbGxvY2F0ZWQgbWVtb3J5LCBzbyBLQVNBTiB3aWxsIG5vdCBmbGFnIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCB0aGlzIGhlYWRyb29tIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBUaGUgc3Vic2VxdWVudCBgbWVtY3B5KClgIGluIGBpZmVfZW5jb2RlKClgIGNvcGllcyB0aGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGludG8gdGhlIHBhY2tldCBoZWFkZXIsIGxlYWRpbmcgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQgYSBwb3RlbnRpYWwgaW5mby1sZWFrIG92ZXIgdGhlIG5ldHdvcmsuIEtNU0FOIGlzIHJlcXVpcmVkIHRvIGRldGVjdCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhcyBzdGFuZGFyZCBLQVNBTiBjYW5ub3QgY2F0Y2ggaW4tYm91bmRzIHVuaW5pdGlhbGl6ZWQgcmVhZHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIGhlYWRlciBsZW5ndGhzIGluIHRoZSBJRkUgKEludGVyLUZFKSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGVuY29kaW5nIGFuZCBkZWNvZGluZyBwYXRocy4gSXQgY2hhbmdlcyB0aGUgbG9naWMgdG8gdXNlIGBza2ItXHUwMDNlbWFjX2xlbmAgaW5zdGVhZCBvZiBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHdoZW4gdGhlIHBhY2tldCBpcyBhdCBUQyBpbmdyZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcGFja2V0IHByb2Nlc3NpbmcgdGhhdCBhZmZlY3RzIGhvdyBtdWNoIGRhdGEgaXMgcHVzaGVkIG9yIHB1bGxlZCBmcm9tIHRoZSBza2IsIHdoaWNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3Igb3RoZXIgaXNzdWVzIGlmIGluY29ycmVjdC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBUQyBhY3Rpb25zIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWZiNzIwMGZhMWYzNDdmNmVkN2UxNDcxYjNjMDYxNWMyMDk4MjZlZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE3OjUwOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pZmUvaWZlLmMgYi9uZXQvaWZlL2lmZS5jXG5pbmRleCA3YTc1OTQ3YTMxZTMxLi4zZDMxZDY4MTE0ZWZjIDEwMDY0NFxuLS0tIGEvbmV0L2lmZS9pZmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lmZS9pZmUuY1xuQEAgLTM2LDggJiM0MzszNiwxMCBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxuIFx0LyogT1VURVJIRFI6VE9UTUVUQUxFTjp7VExWSERSOk1ldGFkYXR1bTpUTFZIRFIuLn06T1JJR0RBVEFcbiBcdCAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLlxuIFx0ICovXG4mIzQzO1x0dW5zaWduZWQgaW50IGhkcmxlbiA9IHNrYl9hdF90Y19pbmdyZXNzKHNrYikgP1xuJiM0MztcdFx0XHQgICAgICBza2ItXHUwMDNlbWFjX2xlbiA6IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuIFx0aW50IGhkcm0gPSBtZXRhbGVuICYjNDM7IElGRV9NRVRBSERSTEVOO1xuLVx0aW50IHRvdGFsX3B1c2ggPSBoZHJtICYjNDM7IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuJiM0MztcdGludCB0b3RhbF9wdXNoID0gaGRybSAmIzQzOyBoZHJsZW47XG4gXHRzdHJ1Y3QgaWZlaGVhZHIgKmlmZWhkcjtcbiBcdHN0cnVjdCBldGhoZHIgKmlldGhoO1x0LyogaW5uZXIgZXRoZXIgaGVhZGVyICovXG4gXHRpbnQgc2tib2ZmID0gMDtcbkBAIC01MCw5ICYjNDM7NTIsOSBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxuIFx0aWV0aGggPSAoc3RydWN0IGV0aGhkciAqKSBza2ItXHUwMDNlZGF0YTtcbiBcbiBcdF9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTtcbi1cdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEsIGlldGhoLCBoZHJsZW4pO1xuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdHNrYm9mZiAmIzQzOz0gc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4mIzQzO1x0c2tib2ZmICYjNDM7PSBoZHJsZW47XG4gXG4gXHQvKiB0b3RhbCBtZXRhZGF0YSBsZW5ndGggKi9cbiBcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNrYm9mZik7XG5AQCAtNjUsMTYgJiM0Mzs2NywxOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChpZmVfZW5jb2RlKTtcbiBcbiB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcbiB7XG4mIzQzO1x0dW5zaWduZWQgaW50IGhkcmxlbiA9IHNrYl9hdF90Y19pbmdyZXNzKHNrYikgP1xuJiM0MztcdFx0XHQgICAgICBza2ItXHUwMDNlbWFjX2xlbiA6IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuIFx0c3RydWN0IGlmZWhlYWRyICppZmVoZHI7XG4gXHRpbnQgdG90YWxfcHVsbDtcbiBcdHUxNiBpZmVoZHJsbjtcbiBcbi1cdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7IElGRV9NRVRBSERSTEVOKSlcbiYjNDM7XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJsZW4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cdTAwM2VkYXRhICYjNDM7IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGhkcmxlbik7XG4gXHRpZmVoZHJsbiA9IG50b2hzKGlmZWhkci1cdTAwM2VtZXRhbGVuKTtcbi1cdHRvdGFsX3B1bGwgPSBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyBpZmVoZHJsbjtcbiYjNDM7XHR0b3RhbF9wdWxsID0gaGRybGVuICYjNDM7IGlmZWhkcmxuO1xuIFxuIFx0aWYgKHVubGlrZWx5KGlmZWhkcmxuIFx1MDAzYyAyKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtODIsNyAmIzQzOzg2LDcgQEAgdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pXG4gXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICYjNDM7IEVUSF9ITEVOKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4mIzQzO1x0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBoZHJsZW4pO1xuIFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgdG90YWxfcHVsbCk7XG4gXHRfX3NrYl9wdWxsKHNrYiwgdG90YWxfcHVsbCk7XG4gXHQqbWV0YWxlbiA9IGlmZWhkcmxuIC0gSUZFX01FVEFIRFJMRU47XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcbmluZGV4IDA2NTIyODAyNmM1OGUuLmVhN2RmMzZhYjdlMzQgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvYWN0X2lmZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5AQCAtNzIzLDcgJiM0Mzs3MjMsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHR0Y2ZfbGFzdHVzZV91cGRhdGUoXHUwMDI2aWZlLVx1MDAzZXRjZl90bSk7XG4gXG4gXHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbi1cdFx0c2tiX3B1c2goc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4mIzQzO1x0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiBcbiBcdHRsdl9kYXRhID0gaWZlX2RlY29kZShza2IsIFx1MDAyNm1ldGFsZW4pO1xuIFx0aWYgKHVubGlrZWx5KCF0bHZfZGF0YSkpIHtcbkBAIC04MjYsNyAmIzQzOzgyNiw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcbiBcdH1cbiBcbiBcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxuLVx0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiYjNDM7XHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuIFxuIFx0aWZlX21ldGEgPSBpZmVfZW5jb2RlKHNrYiwgbWV0YWxlbik7XG4gXHRpZiAoIWlmZV9tZXRhKVxuQEAgLTg1Niw3ICYjNDM7ODU2LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0b2V0aGgtXHUwMDNlaF9wcm90byA9IGh0b25zKHAtXHUwMDNlZXRoX3R5cGUpO1xuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuJiM0MztcdFx0c2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlbWFjX2xlbik7XG4gXG4gXHRyZXR1cm4gYWN0aW9uO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9JRkUmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZmVfZW5jb2RlJiMzNDssCiAgICAmIzM0O2lmZV9kZWNvZGUmIzM0OywKICAgICYjMzQ7dGNmX2lmZV9hY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIGhlYWRlciBsZW5ndGhzIGluIHRoZSBJRkUgKEludGVyLUZFKSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGVuY29kaW5nIGFuZCBkZWNvZGluZyBwYXRocy4gSXQgY2hhbmdlcyB0aGUgbG9naWMgdG8gdXNlIGBza2ItXHUwMDNlbWFjX2xlbmAgaW5zdGVhZCBvZiBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHdoZW4gdGhlIHBhY2tldCBpcyBhdCBUQyBpbmdyZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcGFja2V0IHByb2Nlc3NpbmcgdGhhdCBhZmZlY3RzIGhvdyBtdWNoIGRhdGEgaXMgcHVzaGVkIG9yIHB1bGxlZCBmcm9tIHRoZSBza2IsIHdoaWNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3Igb3RoZXIgaXNzdWVzIGlmIGluY29ycmVjdC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBUQyBhY3Rpb25zIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWZiNzIwMGZhMWYzNDdmNmVkN2UxNDcxYjNjMDYxNWMyMDk4MjZlZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE3OjUwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmMKaW5kZXggN2E3NTk0N2EzMWUzMS4uM2QzMWQ2ODExNGVmYyAxMDA2NDQKLS0tIGEvbmV0L2lmZS9pZmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWZlL2lmZS5jCkBAIC0zNiw4ICYjNDM7MzYsMTAgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbikKIAkvKiBPVVRFUkhEUjpUT1RNRVRBTEVOOntUTFZIRFI6TWV0YWRhdHVtOlRMVkhEUi4ufTpPUklHREFUQQogCSAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLgogCSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgaGRybGVuID0gc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSA/CiYjNDM7CQkJICAgICAgc2tiLSZndDttYWNfbGVuIDogc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbjsKIAlpbnQgaGRybSA9IG1ldGFsZW4gJiM0MzsgSUZFX01FVEFIRFJMRU47Ci0JaW50IHRvdGFsX3B1c2ggPSBoZHJtICYjNDM7IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47CiYjNDM7CWludCB0b3RhbF9wdXNoID0gaGRybSAmIzQzOyBoZHJsZW47CiAJc3RydWN0IGlmZWhlYWRyICppZmVoZHI7CiAJc3RydWN0IGV0aGhkciAqaWV0aGg7CS8qIGlubmVyIGV0aGVyIGhlYWRlciAqLwogCWludCBza2JvZmYgPSAwOwpAQCAtNTAsOSAmIzQzOzUyLDkgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbikKIAlpZXRoaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi0mZ3Q7ZGF0YTsKIAogCV9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTsKLQltZW1jcHkoc2tiLSZndDtkYXRhLCBpZXRoaCwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CW1lbWNweShza2ItJmd0O2RhdGEsIGlldGhoLCBoZHJsZW4pOwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0Jc2tib2ZmICYjNDM7PSBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwlza2JvZmYgJiM0Mzs9IGhkcmxlbjsKIAogCS8qIHRvdGFsIG1ldGFkYXRhIGxlbmd0aCAqLwogCWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBza2JvZmYpOwpAQCAtNjUsMTYgJiM0Mzs2NywxOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChpZmVfZW5jb2RlKTsKIAogdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pCiB7CiYjNDM7CXVuc2lnbmVkIGludCBoZHJsZW4gPSBza2JfYXRfdGNfaW5ncmVzcyhza2IpID8KJiM0MzsJCQkgICAgICBza2ItJmd0O21hY19sZW4gOiBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwogCXN0cnVjdCBpZmVoZWFkciAqaWZlaGRyOwogCWludCB0b3RhbF9wdWxsOwogCXUxNiBpZmVoZHJsbjsKIAotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKQomIzQzOwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJsZW4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgaGRybGVuKTsKIAlpZmVoZHJsbiA9IG50b2hzKGlmZWhkci0mZ3Q7bWV0YWxlbik7Ci0JdG90YWxfcHVsbCA9IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgaWZlaGRybG47CiYjNDM7CXRvdGFsX3B1bGwgPSBoZHJsZW4gJiM0MzsgaWZlaGRybG47CiAKIAlpZiAodW5saWtlbHkoaWZlaGRybG4gJmx0OyAyKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC04Miw3ICYjNDM7ODYsNyBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbikKIAlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICYjNDM7IEVUSF9ITEVOKSkpCiAJCXJldHVybiBOVUxMOwogCi0JaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItJmd0O2RhdGEgJiM0Mzsgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGhkcmxlbik7CiAJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgdG90YWxfcHVsbCk7CiAJX19za2JfcHVsbChza2IsIHRvdGFsX3B1bGwpOwogCSptZXRhbGVuID0gaWZlaGRybG4gLSBJRkVfTUVUQUhEUkxFTjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jCmluZGV4IDA2NTIyODAyNmM1OGUuLmVhN2RmMzZhYjdlMzQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9pZmUuYwpAQCAtNzIzLDcgJiM0Mzs3MjMsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsCiAJdGNmX2xhc3R1c2VfdXBkYXRlKCZhbXA7aWZlLSZndDt0Y2ZfdG0pOwogCiAJaWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpCi0JCXNrYl9wdXNoKHNrYiwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CQlza2JfcHVzaChza2IsIHNrYi0mZ3Q7bWFjX2xlbik7CiAKIAl0bHZfZGF0YSA9IGlmZV9kZWNvZGUoc2tiLCAmYW1wO21ldGFsZW4pOwogCWlmICh1bmxpa2VseSghdGx2X2RhdGEpKSB7CkBAIC04MjYsNyAmIzQzOzgyNiw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAl9CiAKIAlpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSkKLQkJc2tiX3B1c2goc2tiLCBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJCXNrYl9wdXNoKHNrYiwgc2tiLSZndDttYWNfbGVuKTsKIAogCWlmZV9tZXRhID0gaWZlX2VuY29kZShza2IsIG1ldGFsZW4pOwogCWlmICghaWZlX21ldGEpCkBAIC04NTYsNyAmIzQzOzg1Niw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAlvZXRoaC0mZ3Q7aF9wcm90byA9IGh0b25zKHAtJmd0O2V0aF90eXBlKTsKIAogCWlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKQotCQlza2JfcHVsbChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwkJc2tiX3B1bGwoc2tiLCBza2ItJmd0O21hY19sZW4pOwogCiAJcmV0dXJuIGFjdGlvbjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJRkUgTWV0YWRhdGEgSGFuZGxpbmc6IEEgUmVmaW5lbWVudCBpbiBUcmFmZmljIENvbnRyb2wqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIGEgcHJldHR5IHNwZWNpZmljIGFyZWE6IHRoZSB3YXkgd2UgaGFuZGxlIEludGVyLUZFIChJRkUpIG1ldGFkYXRhLCBwYXJ0aWN1bGFybHkgaW4gYG5ldC9pZmUvaWZlLmNgIGFuZCBgbmV0L3NjaGVkL2FjdF9pZmUuY2AuIFRoZSBrZXkgY2hhbmdlIGlzIGhvdyBgaGRybGVuYCBpcyBjYWxjdWxhdGVkIHdoZW4gd2UmIzM5O3JlIGVuY29kaW5nIG9yIGRlY29kaW5nIHRoaXMgSUZFIG1ldGFkYXRhLiBJbnN0ZWFkIG9mIGp1c3QgZGVmYXVsdGluZyB0byBgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAsIHdoaWNoIGhhcyBiZWVuIHRoZSBvbGQgd2F5LCBpdCYjMzk7cyBub3cgY2hlY2tpbmcgYHNrYl9hdF90Y19pbmdyZXNzKHNrYilgLiBJZiB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlLCBpdCYjMzk7cyBnb2luZyB0byB1c2UgYHNrYi0mZ3Q7bWFjX2xlbmAgaW5zdGVhZC4gU21hcnQgbW92ZTsgdGhhdCBzaG91bGQgZ2l2ZSB1cyBtb3JlIGdyYW51bGFyIGNvbnRyb2wgYXQgdGhlIGluZ3Jlc3MgcG9pbnQuCgpJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyB0b3VjaGVkIGhlcmUuLi4gYWxyaWdodCwgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290OiBgaWZlX2VuY29kZWAsIGBpZmVfZGVjb2RlYCwgYHRjZl9pZmVfZGVjb2RlYCwgYW5kIGB0Y2ZfaWZlX2VuY29kZWAuIFllcCwgdGhvc2UgYXJlIGFsbCB0aGUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgSUZFIGFjdGlvbiB3aXRoaW4gVEMgKFRyYWZmaWMgQ29udHJvbCkuIE1ha2VzIHNlbnNlLgoKQmVmb3JlIEkgZ28gdG9vIGRlZXAsIEkgd2FudCB0byB0YWtlIGEgcXVpY2sgcGVlayBhdCB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIElGRS4gVGhpcyBhZGp1c3RtZW50IHByb2JhYmx5IGhhcyBpbXBsaWNhdGlvbnMsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB3aGF0IGNoYW5nZXMgbWF5IGJlIG5lZWRlZCBmb3Igc3BlY2lmaWMgZGVwbG95bWVudHMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZmVfZW5jb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lmZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lmZS9pZmUuYz0yOT1zdHJ1Y3QgaWZlaGVhZHIge1xuLS1cbm5ldC9pZmUvaWZlLmMtMzMtXG5uZXQvaWZlL2lmZS5jOjM0OnZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pXG5uZXQvaWZlL2lmZS5jLTM1LXtcbi0tXG5uZXQvaWZlL2lmZS5jLTY1LX1cbm5ldC9pZmUvaWZlLmM6NjY6RVhQT1JUX1NZTUJPTF9HUEwoaWZlX2VuY29kZSk7XG5uZXQvaWZlL2lmZS5jLTY3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgQWN0aXZhdGlvbiBvZiBgYWN0X2lmZS5jYCBhbmQgYGlmZS5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYGFjdF9pZmUuY2AgYW5kIGBpZmUuY2AgbW9kdWxlcyBhcmUgYmVpbmcgZW5hYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLiBHaXZlbiB0aGVpciBuYW1lcywgdGhleSBzZWVtIG5ldHdvcmstcmVsYXRlZC4gTXkgaW5zdGluY3QsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIHRlbGxzIG1lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZWlyIGluY2x1c2lvbiBhcmUgbGlrZWx5IGJ1cmllZCB3aXRoaW4gdGhlIG5ldHdvcmstc3BlY2lmaWMgS2NvbmZpZyBmaWxlcy4gU28sIGxldCBtZSBzdGFydCBieSBsb29raW5nIGluIGBuZXQvaWZlL0tjb25maWdgIGFuZCBgbmV0L3NjaGVkL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcsIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIHNjaGVkdWxpbmcsIHJlc3BlY3RpdmVseS4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFyZSBjbGVhcmx5IGRvY3VtZW50ZWQgdGhlcmUuIElmIEkmIzM5O20gbHVja3ksIGl0JiMzOTtsbCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5IGNoYWluLiBPdGhlcndpc2UsIGl0IG1pZ2h0IHJlcXVpcmUgYSBiaXQgbW9yZSBkaWdnaW5nIGFyb3VuZCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdWJzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTc6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWN0X2lmZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX05FVF9BQ1RfU0tCTU9EKVx0JiM0Mzs9IGFjdF9za2Jtb2Qub1xubmV0L3NjaGVkL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19ORVRfQUNUX0lGRSlcdCYjNDM7PSBhY3RfaWZlLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS0yOC1vYmotJChDT05GSUdfTkVUX0lGRV9TS0JNQVJLKVx0JiM0Mzs9IGFjdF9tZXRhX21hcmsub1xuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9MzQ9c3RhdGljIGludCBtYXhfbWV0YWNudCA9IElGRV9NRVRBX01BWCAmIzQzOyAxO1xubmV0L3NjaGVkL2FjdF9pZmUuYzozNTpzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2lmZV9vcHM7XG5uZXQvc2NoZWQvYWN0X2lmZS5jLTM2LVxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9NDc3PXN0YXRpYyBpbnQgdGNmX2lmZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmMtNDgxLXtcbm5ldC9zY2hlZC9hY3RfaWZlLmM6NDgyOlx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3RfaWZlX29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9pZmUuYy00ODMtXHRib29sIGJpbmQgPSBmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmMtNTUyLVx0aWYgKCFleGlzdHMpIHtcbm5ldC9zY2hlZC9hY3RfaWZlLmM6NTUzOlx0XHRyZXQgPSB0Y2ZfaWRyX2NyZWF0ZSh0biwgaW5kZXgsIGVzdCwgYSwgXHUwMDI2YWN0X2lmZV9vcHMsXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTU1NC1cdFx0XHRcdCAgICAgYmluZCwgdHJ1ZSwgZmxhZ3MpO1xuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9ODY0PVRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmMtODgwLVxubmV0L3NjaGVkL2FjdF9pZmUuYzo4ODE6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzID0ge1xubmV0L3NjaGVkL2FjdF9pZmUuYy04ODItXHQua2luZCA9IFwmIzM0O2lmZVwmIzM0Oyxcbi0tXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTg5Mz1zdGF0aWMgX19uZXRfaW5pdCBpbnQgaWZlX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9zY2hlZC9hY3RfaWZlLmMtODk0LXtcbm5ldC9zY2hlZC9hY3RfaWZlLmM6ODk1Olx0c3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBhY3RfaWZlX29wcy5uZXRfaWQpO1xubmV0L3NjaGVkL2FjdF9pZmUuYy04OTYtXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjg5NzpcdHJldHVybiB0Y19hY3Rpb25fbmV0X2luaXQobmV0LCB0biwgXHUwMDI2YWN0X2lmZV9vcHMpO1xubmV0L3NjaGVkL2FjdF9pZmUuYy04OTgtfVxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9OTAwPXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaWZlX2V4aXRfbmV0KHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9saXN0KVxubmV0L3NjaGVkL2FjdF9pZmUuYy05MDEte1xubmV0L3NjaGVkL2FjdF9pZmUuYzo5MDI6XHR0Y19hY3Rpb25fbmV0X2V4aXQobmV0X2xpc3QsIGFjdF9pZmVfb3BzLm5ldF9pZCk7XG5uZXQvc2NoZWQvYWN0X2lmZS5jLTkwMy19XG4tLVxubmV0L3NjaGVkL2FjdF9pZmUuYz05MDU9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpZmVfbmV0X29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTkwNy1cdC5leGl0X2JhdGNoID0gaWZlX2V4aXRfbmV0LFxubmV0L3NjaGVkL2FjdF9pZmUuYzo5MDg6XHQuaWQgICA9IFx1MDAyNmFjdF9pZmVfb3BzLm5ldF9pZCxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtOTA5LVx0LnNpemUgPSBzaXplb2Yoc3RydWN0IHRjX2FjdGlvbl9uZXQpLFxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9OTEyPXN0YXRpYyBpbnQgX19pbml0IGlmZV9pbml0X21vZHVsZSh2b2lkKVxubmV0L3NjaGVkL2FjdF9pZmUuYy05MTMte1xubmV0L3NjaGVkL2FjdF9pZmUuYzo5MTQ6XHRyZXR1cm4gdGNmX3JlZ2lzdGVyX2FjdGlvbihcdTAwMjZhY3RfaWZlX29wcywgXHUwMDI2aWZlX25ldF9vcHMpO1xubmV0L3NjaGVkL2FjdF9pZmUuYy05MTUtfVxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9OTE3PXN0YXRpYyB2b2lkIF9fZXhpdCBpZmVfY2xlYW51cF9tb2R1bGUodm9pZClcbm5ldC9zY2hlZC9hY3RfaWZlLmMtOTE4LXtcbm5ldC9zY2hlZC9hY3RfaWZlLmM6OTE5Olx0dGNmX3VucmVnaXN0ZXJfYWN0aW9uKFx1MDAyNmFjdF9pZmVfb3BzLCBcdTAwMjZpZmVfbmV0X29wcyk7XG5uZXQvc2NoZWQvYWN0X2lmZS5jLTkyMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIyMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX05FVF9BQ1RfSUZFYCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBgQ09ORklHX05FVF9BQ1RfSUZFYC4uLiB0aGF0JiMzOTtzIHRoZSBrZXkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGF0JiMzOTtzIGVuYWJsaW5nIHRoZSBgaWZlLm9gIG9iamVjdCBmaWxlLiBNeSBmaXJzdCBzdG9wIHNob3VsZCBiZSB0aGUgYG5ldC9pZmUvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBidWlsZCBzeXN0ZW0gbG9naWMgZm9yIHRoYXQgc3BlY2lmaWMgY29tcG9uZW50IHNob3VsZCByZXNpZGUuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJ1bGVzIHRoYXQgbGluayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdGhlIGNyZWF0aW9uIG9mIHRoZSBvYmplY3QgZmlsZS4gSXQgY291bGQgYmUgYXMgc2ltcGxlIGFzIGFuIGBvYmotJChDT05GSUdfTkVUX0FDVF9JRkUpICYjNDM7PSBpZmUub2AgbGluZSwgb3IgaXQgY291bGQgYmUgYSBiaXQgbW9yZSBpbnZvbHZlZCB3aXRoIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9uYWxzLCBidXQgdGhlIE1ha2VmaWxlIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoYXQgYnVpbGQgcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lmZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lmZS9NYWtlZmlsZS01LVxubmV0L2lmZS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19ORVRfSUZFKSAmIzQzOz0gaWZlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIElGRSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYENPTkZJR19ORVRfSUZFYCBhbmQgYENPTkZJR19ORVRfQUNUX0lGRWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZWlyIHJlbGF0aW9uc2hpcCBhbmQgcHVycG9zZSB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCAmIzM0O0lGRSYjMzQ7IGxpa2VseSBzdGFuZHMgZm9yIHNvbWV0aGluZyBsaWtlICYjMzQ7SW5ncmVzcyBGaWx0ZXIgRW5naW5lJiMzNDsgb3IgJiMzNDtJbnRlcmZhY2UgRmlsdGVyIEVuZ2luZSwmIzM0OyBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdC4KCkZpcnN0LCBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IGZvciB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIHBsYWNlIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb25zIGZvciB0aGVzZSBraW5kcyBvZiBuZXR3b3JrIHNjaGVkdWxpbmcgYW5kIGZpbHRlcmluZyBvcHRpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyBgTkVUX0FDVF9JRkVgIGlzIGRlZmluZWQg4oCTIGlzIGl0IGEgc3RhbmRhbG9uZSBmZWF0dXJlLCBhIGRlcGVuZGVuY3kgb2Ygc29tZXRoaW5nIGVsc2UsIG9yIHJlbGF0ZWQgZGlyZWN0bHkgdG8gYENPTkZJR19ORVRfSUZFYD8gVGhlIEtjb25maWcgZmlsZSB3aWxsIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gSSYjMzk7bSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBwZXJoYXBzIHNvbWUgaGVscGZ1bCBjb21tZW50cyB0aGF0IHNoZWQgbGlnaHQgb24gdGhlIGZ1bmN0aW9uYWxpdHkuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0FDVF9JRkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTg4Mj1jb25maWcgTkVUX0FDVF9TS0JNT0Rcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04OTItXG5uZXQvc2NoZWQvS2NvbmZpZzo4OTM6Y29uZmlnIE5FVF9BQ1RfSUZFXG5uZXQvc2NoZWQvS2NvbmZpZy04OTQtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTc6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkyMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBORVRfQUNUX0lGRSoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0FDVF9JRkVgLiBUaGlzIG1lYW5zIEkmIzM5O20gbm90IGp1c3QgbG9va2luZyBmb3IgYSBzaW1wbGUgbGlzdDsgSSYjMzk7bSBleHBlY3RpbmcgdG8gZGVsdmUgaW50byB0aGUgYXJjaGl0ZWN0dXJlLCBwcm9iYWJseSB0aGUgbG93LWxldmVsIGNvbXBvbmVudHMgYW5kIG5ldHdvcmsgbGF5ZXJzLCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRyYWNpbmcgYmFjayB3aGVyZSB0aGlzIHN0cnVjdHVyZSwgb3IgZnVuY3Rpb24gb3IgbW9kdWxlLCBpcyB1c2VkIG9yIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCB0aGUgbGlrZWx5IGFyZWFzIG9mIGltcGFjdCB3aGVuIG1vZGlmeWluZyBgTkVUX0FDVF9JRkVgIC4gVGhlIG1haW4gcXVlc3Rpb24gaXM6IFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0PyBBcmUgdGhlcmUgcG90ZW50aWFsIGNhc2NhZGluZyBmYWlsdXJlcyBpZiBgTkVUX0FDVF9JRkVgIGlzbiYjMzk7dCBiZWhhdmluZyBjb3JyZWN0bHkgb3IgbmVlZHMgYSBtYWpvciBvdmVyaGF1bD8gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIG5ldHdvcmsgc3RhY2sgbW9kdWxlcyBpbnRlcmZhY2Ugd2l0aCB0aGlzLiBXaGF0IGhhcmR3YXJlIGRyaXZlcnMgb3IgbG93LWxldmVsIG5ldHdvcmsgaW50ZXJmYWNlIGRyaXZlcnMgYXJlIGludm9sdmVkLiBXaGF0IHVwcGVyLWxheWVyIHByb3RvY29scyB1dGlsaXplIHRoaXMgaW50ZXJmYWNlPyBGcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludCwgaWYgaXQmIzM5O3MgaW52b2x2ZWQgd2l0aCBzb21ldGhpbmcsIGhvdyBpcyB0aGlzIGhhbmRsZWQgYW5kIHdoYXQgYXJlIGl0cyBpbnB1dHMvb3V0cHV0cz8gSW4gZXNzZW5jZSwgSSYjMzk7bSBhaW1pbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgc3lzdGVtIGFuZCB0aGUgaW1wYWN0IG9mIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQUNUX0lGRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9ODgyPWNvbmZpZyBORVRfQUNUX1NLQk1PRFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTg5Mi1cbm5ldC9zY2hlZC9LY29uZmlnOjg5Mzpjb25maWcgTkVUX0FDVF9JRkVcbm5ldC9zY2hlZC9LY29uZmlnLTg5NC1cdHRyaXN0YXRlIFwmIzM0O0ludGVyLUZFIGFjdGlvbiBiYXNlZCBvbiBJRVRGIEZvckNFUyBJbnRlckZFIExGQlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9uKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIEJhc2VkIG9uIHRoZSBkaXJlY3Rpb24gSSYjMzk7bSB0YWtpbmcgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uLCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgbmV0d29yayBzY2hlZHVsaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGRpZmZlcmVudCBxdWV1aW5nIGRpc2NpcGxpbmVzIGFuZCB0aGUgZmVhdHVyZXMgdGhleSBleHBvc2UuIEkgaGF2ZSBhIGh1bmNoLCBiYXNlZCBvbiB0aGUgY3VycmVudCB0cm91Ymxlc2hvb3Rpbmcgc3RlcHMsIHRoYXQgYSBjb25maWd1cmF0aW9uIGZsYWcgd2l0aGluIHRoZSBgbmV0L3NjaGVkL2Agc3Vic3lzdGVtIGlzIHRoZSBrZXkuIEdpdmVuIHRoZSBoaWdoIHByb2JhYmlsaXR5IHRoYXQgSSBuZWVkIHRvIGxvb2sgYXQgc3BlY2lmaWMgc2NoZWR1bGVyIG9wdGlvbnMsIGFuZCB3aGF0IGZlYXR1cmVzIHRoZXkgb2ZmZXIsIEkgc2hvdWxkIHByb2JhYmx5IGdvIGJhY2sgYW5kIHRha2UgYSBsb29rIGF0IGBuZXQvc2NoZWQvS2NvbmZpZ2AsIGFyb3VuZCBsaW5lIDg5My4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSBhdmFpbGFibGUgY2hvaWNlcyBhbmQgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGNhbiBiZSBjb25maWd1cmVkLCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgd2l0aGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBjb250ZXh0LiBUaGF0IHNob3VsZCBxdWlja2x5IHBvaW50IG1lIHRvIHRoZSByZWxldmFudCBvcHRpb25zLCBhbmQgYW55IGFzc29jaWF0ZWQgY29uc3RyYWludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg5MDpcdFx0IFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA4OTE6XHRcdCBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X3NrYm1vZC5cbiA4OTI6XHRcbiA4OTM6XHRjb25maWcgTkVUX0FDVF9JRkVcbiA4OTQ6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVyLUZFIGFjdGlvbiBiYXNlZCBvbiBJRVRGIEZvckNFUyBJbnRlckZFIExGQlwmIzM0O1xuIDg5NTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxuIDg5NjpcdFx0c2VsZWN0IE5FVF9JRkVcbiA4OTc6XHRcdGhlbHBcbiA4OTg6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBmb3Igc291cmNpbmcgYW5kIHRlcm1pbmF0aW5nIG1ldGFkYXRhXG4gODk5Olx0XHQgIEZvciBkZXRhaWxzIHJlZmVyIHRvIG5ldGRldjAxIHBhcGVyOlxuIDkwMDpcdFx0ICBcJiMzNDtEaXN0cmlidXRpbmcgTGludXggVHJhZmZpYyBDb250cm9sIENsYXNzaWZpZXItQWN0aW9uIFN1YnN5c3RlbVwmIzM0O1xuIDkwMTpcdFx0ICAgQXV0aG9yczogSmFtYWwgSGFkaSBTYWxpbSBhbmQgRGFtYXNjZW5lIE0uIEpvYWNoaW1waWxsYWlcbiA5MDI6XHRcbiA5MDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDkwNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2lmZS5cbiA5MDU6XHRcbiA5MDY6XHRjb25maWcgTkVUX0FDVF9UVU5ORUxfS0VZXG4gOTA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUCB0dW5uZWwgbWV0YWRhdGEgbWFuaXB1bGF0aW9uXCYjMzQ7XG4gOTA4Olx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gOTA5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBORVRfQUNUX0lGRSBDb25maWd1cmF0aW9uIGFuZCBBc3NvY2lhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgTkVUX0FDVF9JRkVgIGNvbmZpZyBvcHRpb24sIGFuZCBpdCYjMzk7cyBjbGVhciB0aGF0IGl0IGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUYCBhbmQgdGhlbiBzZWxlY3RzIGBORVRfSUZFYC4gRnJvbSBhIGNvbmZpZyBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGBORVRfQUNUX0lGRWAgYW5kIGBORVRfQ0xTX0FDVGAgYXJlIGVuYWJsZWQuIE5vcm1hbGx5IGBORVRfQ0xTX0FDVGAgaXMgYWx3YXlzIG9uLCBidXQgSSBzaG91bGQgcHJvYmFibHkgZXhwbGljaXRseSBpbmNsdWRlIGl0IGp1c3QgdG8gYmUgc2FmZSBhbmQgY2xlYXIuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZSBpdHNlbGYuIEkmIzM5O3ZlIGdvdCB0byByZXZpZXcgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhZmZlY3RlZC4gTG9va3MgbGlrZSB3ZSBoYXZlIGBpZmVfZW5jb2RlYCwgYGlmZV9kZWNvZGVgLCBgdGNmX2lmZV9kZWNvZGVgLCBhbmQgYHRjZl9pZmVfZW5jb2RlYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS4gUmlnaHQsIHRoZXkgYXJlIHJlYWNoZWQgdGhyb3VnaCBUQyBhY3Rpb25zLgoKVGhpcyBhbGwgbG9va3MgbGlrZSBpdCBoYXMgZnV6emluZyBwb3RlbnRpYWwsIHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbW9kaWZ5aW5nIHRoZSBwYWNrZXQgcHJvY2Vzc2luZywgcGFydGljdWxhcmx5IHdpdGggdGhlIGBza2JgIHB1c2gvcHVsbCBsZW5ndGhzLiBXb3J0aCBhIGNsb3NlciBsb29rLgoKSGFuZyBvbiBhIHNlY29uZOKApkkmIzM5O20gbm90aWNpbmcgdGhhdCBgdGNmX2lmZV9kZWNvZGVgIGFuZCBgdGNmX2lmZV9lbmNvZGVgIGFyZSBkZWZpbmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMgaW4gYG5ldC9zY2hlZC9hY3RfaWZlLmNgLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuIEJlaW5nIHN0YXRpYyBkZWZpbml0ZWx5IGFmZmVjdHMgdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfaWZlX2RlY29kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfaWZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9pZmUuYz02OTI9c3RhdGljIGludCBmaW5kX2RlY29kZV9tZXRhaWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjZl9pZmVfcGFyYW1zICpwLFxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmMtNzA5LVxubmV0L3NjaGVkL2FjdF9pZmUuYzo3MTA6c3RhdGljIGludCB0Y2ZfaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxubmV0L3NjaGVkL2FjdF9pZmUuYy03MTEtXHRcdFx0ICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmM9ODY0PVRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfaWZlLmMtODc3LVxubmV0L3NjaGVkL2FjdF9pZmUuYzo4Nzg6XHRyZXR1cm4gdGNmX2lmZV9kZWNvZGUoc2tiLCBhLCByZXMpO1xubmV0L3NjaGVkL2FjdF9pZmUuYy04NzktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRlY29kaW5nIHRoZSBgdGNmX2lmZWAgRnVuY3Rpb25zKioKCkhtbSwgc28gYHRjZl9pZmVfZGVjb2RlYCBhbmQgYHRjZl9pZmVfZW5jb2RlYCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0IG1lYW5zIHRoZXkgaGF2ZSBpbnRlcm5hbCBsaW5rYWdlIHdpdGhpbiB0aGVpciBjb21waWxhdGlvbiB1bml0IOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBkZXNpZ24gY2hvaWNlLCBsaW1pdGluZyB0aGVpciBzY29wZS4gQnV0IG5vdyBJJiMzOTttIGN1cmlvdXMuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgaG93IGFyZSB0aGV5IGJlaW5nICp1c2VkKj8gRG9lcyBgdGNmX2lmZV9hY3RgIGNhbGwgZWl0aGVyIGBkZWNvZGVgIG9yIGBlbmNvZGVgPyBUaGF0IHdvdWxkIGJlIHRoZSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBHb3R0YSBjaGVjayBgdGNmX2lmZV9hY3RgIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdy4gTGV0IG1lIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTc6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2lmZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NjA6XHRcbiA4NjE6XHRcdHJldHVybiBhY3Rpb247XG4gODYyOlx0fVxuIDg2MzpcdFxuIDg2NDpcdFRDX0lORElSRUNUX1NDT1BFIGludCB0Y2ZfaWZlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDg2NTpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIDg2NjpcdFx0XHRcdFx0ICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxuIDg2NzpcdHtcbiA4Njg6XHRcdHN0cnVjdCB0Y2ZfaWZlX2luZm8gKmlmZSA9IHRvX2lmZShhKTtcbiA4Njk6XHRcdHN0cnVjdCB0Y2ZfaWZlX3BhcmFtcyAqcDtcbiA4NzA6XHRcdGludCByZXQ7XG4gODcxOlx0XG4gODcyOlx0XHRwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGlmZS1cdTAwM2VwYXJhbXMpO1xuIDg3MzpcdFx0aWYgKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRV9FTkNPREUpIHtcbiA4NzQ6XHRcdFx0cmV0ID0gdGNmX2lmZV9lbmNvZGUoc2tiLCBhLCByZXMsIHApO1xuIDg3NTpcdFx0XHRyZXR1cm4gcmV0O1xuIDg3NjpcdFx0fVxuIDg3NzpcdFxuIDg3ODpcdFx0cmV0dXJuIHRjZl9pZmVfZGVjb2RlKHNrYiwgYSwgcmVzKTtcbiA4Nzk6XHR9XG4gODgwOlx0XG4gODgxOlx0c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzID0ge1xuIDg4MjpcdFx0LmtpbmQgPSBcJiMzNDtpZmVcJiMzNDssXG4gODgzOlx0XHQuaWQgPSBUQ0FfSURfSUZFLFxuIDg4NDpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4gODg1Olx0XHQuYWN0ID0gdGNmX2lmZV9hY3QsXG4gODg2Olx0XHQuZHVtcCA9IHRjZl9pZmVfZHVtcCxcbiA4ODc6XHRcdC5jbGVhbnVwID0gdGNmX2lmZV9jbGVhbnVwLFxuIDg4ODpcdFx0LmluaXQgPSB0Y2ZfaWZlX2luaXQsXG4gODg5Olx0XHQuc2l6ZSA9XHRzaXplb2Yoc3RydWN0IHRjZl9pZmVfaW5mbyksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODcKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklGRSBUcmFmZmljIENvbnRyb2wgQWN0aW9uIFBhdGNoOiBBIEZvY3VzZWQgUmV2aWV3KioKCk9rYXksIHNvIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGB0Y2ZfaWZlX2FjdGAgaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQgaGVyZS4gVGhlIGZ1bmN0aW9ucyBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCBhcmUgdGhlIGV4cG9ydGVkIHN5bWJvbHMgaW4gYG5ldC9pZmUvaWZlLmNgIHRoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCwgYWxvbmcgd2l0aCBgdGNmX2lmZV9hY3RgLCB3aGljaCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgYSBtb2RpZmljYXRpb24gdG8gaG93IGhlYWRlciBsZW5ndGhzIGFyZSBjYWxjdWxhdGVkIHdpdGhpbiB0aGUgSUZFIHRyYWZmaWMgY29udHJvbCBhY3Rpb24sIHNwZWNpZmljYWxseSBkdXJpbmcgZW5jb2RpbmcgYW5kIGRlY29kaW5nLiBJdCYjMzk7cyBzd2l0Y2hpbmcgZnJvbSB1c2luZyBgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAgdG8gYHNrYi0mZ3Q7bWFjX2xlbmAgd2hlbiBhIHBhY2tldCBpcyBhdCBUQyBpbmdyZXNzLiBOb3csIEkgc2VlIGltbWVkaWF0ZWx5IHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBBbnkgYWx0ZXJhdGlvbiB0byBwYWNrZXQgcHJvY2Vzc2luZywgZXNwZWNpYWxseSByZWdhcmRpbmcgaG93IG11Y2ggZGF0YSBpcyBwdXNoZWQgb3IgcHVsbGVkIGZyb20gdGhlIFNLQiwgaXMgc2lnbmlmaWNhbnQuIElmIHRoaXMgY2FsY3VsYXRpb24gaXMgaW5jb3JyZWN0LCBpdCBjb3VsZCB2ZXJ5IGVhc2lseSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIG9yIG90aGVyIGV4cGxvaXRhYmxlIGlzc3Vlcy4gSSBuZWVkIHRvIGJlIGRpbGlnZW50IGFib3V0IHRlc3RpbmcgdGhpcy4gR2l2ZW4gaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBUQyBhY3Rpb25zLCBpdOKAmXMgcmlwZSBmb3IgZnV6emluZy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBSaWdodCwgSSBzZWUgdGhhdCBgTkVUX0lGRWAgaXMgc2VsZWN0ZWQgYnkgYE5FVF9BQ1RfSUZFYC4gU28sIGVuYWJsaW5nIGBORVRfQUNUX0lGRWAgaXMgdGhlIGtleSBjb25maWcgbmVlZGVkIGhlcmUuCgpOb3csIGxldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0FDVF9JRkUmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZmVfZW5jb2RlJiMzNDssCiAgICAmIzM0O2lmZV9kZWNvZGUmIzM0OywKICAgICYjMzQ7dGNmX2lmZV9hY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIGhlYWRlciBsZW5ndGhzIGluIHRoZSBJRkUgKEludGVyLUZFKSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGVuY29kaW5nIGFuZCBkZWNvZGluZyBwYXRocy4gSXQgY2hhbmdlcyB0aGUgbG9naWMgdG8gdXNlIGBza2ItXHUwMDNlbWFjX2xlbmAgaW5zdGVhZCBvZiBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHdoZW4gdGhlIHBhY2tldCBpcyBhdCBUQyBpbmdyZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcGFja2V0IHByb2Nlc3NpbmcgdGhhdCBhZmZlY3RzIGhvdyBtdWNoIGRhdGEgaXMgcHVzaGVkIG9yIHB1bGxlZCBmcm9tIHRoZSBza2IsIHdoaWNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3Igb3RoZXIgaXNzdWVzIGlmIGluY29ycmVjdC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBUQyBhY3Rpb25zIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfQUNUX0lGRSYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lmZV9lbmNvZGUmIzM0OywKICAgICYjMzQ7aWZlX2RlY29kZSYjMzQ7LAogICAgJiMzNDt0Y2ZfaWZlX2FjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FsY3VsYXRpb24gb2YgaGVhZGVyIGxlbmd0aHMgaW4gdGhlIElGRSAoSW50ZXItRkUpIHRyYWZmaWMgY29udHJvbCBhY3Rpb24gZW5jb2RpbmcgYW5kIGRlY29kaW5nIHBhdGhzLiBJdCBjaGFuZ2VzIHRoZSBsb2dpYyB0byB1c2UgYHNrYi1cdTAwM2VtYWNfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgd2hlbiB0aGUgcGFja2V0IGlzIGF0IFRDIGluZ3Jlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBwYWNrZXQgcHJvY2Vzc2luZyB0aGF0IGFmZmVjdHMgaG93IG11Y2ggZGF0YSBpcyBwdXNoZWQgb3IgcHVsbGVkIGZyb20gdGhlIHNrYiwgd2hpY2ggY2FuIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBvdGhlciBpc3N1ZXMgaWYgaW5jb3JyZWN0LiBJdCBpcyByZWFjaGFibGUgdmlhIFRDIGFjdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTc6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgYHNrYl9wdXNoKClgIGFuZCBgbWVtY3B5KClgIHVzZWQgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXHUwMDNlbWFjX2xlbmAgYXQgVEMgaW5ncmVzcy4gSWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgbGFyZ2VyIHRoYW4gYG1hY19sZW5gLCBgc2tiX3B1c2goKWAgbW92ZXMgYHNrYi1cdTAwM2VkYXRhYCBpbnRvIHRoZSBza2IgaGVhZHJvb20gYmVmb3JlIHRoZSBhY3R1YWwgTUFDIGhlYWRlci4gVGhlIHNrYiBoZWFkcm9vbSBpcyB2YWxpZCBhbGxvY2F0ZWQgbWVtb3J5LCBzbyBLQVNBTiB3aWxsIG5vdCBmbGFnIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCB0aGlzIGhlYWRyb29tIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBUaGUgc3Vic2VxdWVudCBgbWVtY3B5KClgIGluIGBpZmVfZW5jb2RlKClgIGNvcGllcyB0aGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGludG8gdGhlIHBhY2tldCBoZWFkZXIsIGxlYWRpbmcgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQgYSBwb3RlbnRpYWwgaW5mby1sZWFrIG92ZXIgdGhlIG5ldHdvcmsuIEtNU0FOIGlzIHJlcXVpcmVkIHRvIGRldGVjdCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhcyBzdGFuZGFyZCBLQVNBTiBjYW5ub3QgY2F0Y2ggaW4tYm91bmRzIHVuaW5pdGlhbGl6ZWQgcmVhZHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWZiNzIwMGZhMWYzNDdmNmVkN2UxNDcxYjNjMDYxNWMyMDk4MjZlZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE3OjUwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmMKaW5kZXggN2E3NTk0N2EzMWUzMS4uM2QzMWQ2ODExNGVmYyAxMDA2NDQKLS0tIGEvbmV0L2lmZS9pZmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaWZlL2lmZS5jCkBAIC0zNiw4ICYjNDM7MzYsMTAgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbikKIAkvKiBPVVRFUkhEUjpUT1RNRVRBTEVOOntUTFZIRFI6TWV0YWRhdHVtOlRMVkhEUi4ufTpPUklHREFUQQogCSAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLgogCSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgaGRybGVuID0gc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSA/CiYjNDM7CQkJICAgICAgc2tiLSZndDttYWNfbGVuIDogc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbjsKIAlpbnQgaGRybSA9IG1ldGFsZW4gJiM0MzsgSUZFX01FVEFIRFJMRU47Ci0JaW50IHRvdGFsX3B1c2ggPSBoZHJtICYjNDM7IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47CiYjNDM7CWludCB0b3RhbF9wdXNoID0gaGRybSAmIzQzOyBoZHJsZW47CiAJc3RydWN0IGlmZWhlYWRyICppZmVoZHI7CiAJc3RydWN0IGV0aGhkciAqaWV0aGg7CS8qIGlubmVyIGV0aGVyIGhlYWRlciAqLwogCWludCBza2JvZmYgPSAwOwpAQCAtNTAsOSAmIzQzOzUyLDkgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbikKIAlpZXRoaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi0mZ3Q7ZGF0YTsKIAogCV9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTsKLQltZW1jcHkoc2tiLSZndDtkYXRhLCBpZXRoaCwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CW1lbWNweShza2ItJmd0O2RhdGEsIGlldGhoLCBoZHJsZW4pOwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0Jc2tib2ZmICYjNDM7PSBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwlza2JvZmYgJiM0Mzs9IGhkcmxlbjsKIAogCS8qIHRvdGFsIG1ldGFkYXRhIGxlbmd0aCAqLwogCWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBza2JvZmYpOwpAQCAtNjUsMTYgJiM0Mzs2NywxOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChpZmVfZW5jb2RlKTsKIAogdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pCiB7CiYjNDM7CXVuc2lnbmVkIGludCBoZHJsZW4gPSBza2JfYXRfdGNfaW5ncmVzcyhza2IpID8KJiM0MzsJCQkgICAgICBza2ItJmd0O21hY19sZW4gOiBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwogCXN0cnVjdCBpZmVoZWFkciAqaWZlaGRyOwogCWludCB0b3RhbF9wdWxsOwogCXUxNiBpZmVoZHJsbjsKIAotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKQomIzQzOwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJsZW4gJiM0MzsgSUZFX01FVEFIRFJMRU4pKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgaGRybGVuKTsKIAlpZmVoZHJsbiA9IG50b2hzKGlmZWhkci0mZ3Q7bWV0YWxlbik7Ci0JdG90YWxfcHVsbCA9IHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0MzsgaWZlaGRybG47CiYjNDM7CXRvdGFsX3B1bGwgPSBoZHJsZW4gJiM0MzsgaWZlaGRybG47CiAKIAlpZiAodW5saWtlbHkoaWZlaGRybG4gJmx0OyAyKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC04Miw3ICYjNDM7ODYsNyBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbikKIAlpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICYjNDM7IEVUSF9ITEVOKSkpCiAJCXJldHVybiBOVUxMOwogCi0JaWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItJmd0O2RhdGEgJiM0Mzsgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CWlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGhkcmxlbik7CiAJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgdG90YWxfcHVsbCk7CiAJX19za2JfcHVsbChza2IsIHRvdGFsX3B1bGwpOwogCSptZXRhbGVuID0gaWZlaGRybG4gLSBJRkVfTUVUQUhEUkxFTjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jCmluZGV4IDA2NTIyODAyNmM1OGUuLmVhN2RmMzZhYjdlMzQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9pZmUuYwpAQCAtNzIzLDcgJiM0Mzs3MjMsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsCiAJdGNmX2xhc3R1c2VfdXBkYXRlKCZhbXA7aWZlLSZndDt0Y2ZfdG0pOwogCiAJaWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpCi0JCXNrYl9wdXNoKHNrYiwgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbik7CiYjNDM7CQlza2JfcHVzaChza2IsIHNrYi0mZ3Q7bWFjX2xlbik7CiAKIAl0bHZfZGF0YSA9IGlmZV9kZWNvZGUoc2tiLCAmYW1wO21ldGFsZW4pOwogCWlmICh1bmxpa2VseSghdGx2X2RhdGEpKSB7CkBAIC04MjYsNyAmIzQzOzgyNiw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAl9CiAKIAlpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSkKLQkJc2tiX3B1c2goc2tiLCBza2ItJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKJiM0MzsJCXNrYl9wdXNoKHNrYiwgc2tiLSZndDttYWNfbGVuKTsKIAogCWlmZV9tZXRhID0gaWZlX2VuY29kZShza2IsIG1ldGFsZW4pOwogCWlmICghaWZlX21ldGEpCkBAIC04NTYsNyAmIzQzOzg1Niw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwKIAlvZXRoaC0mZ3Q7aF9wcm90byA9IGh0b25zKHAtJmd0O2V0aF90eXBlKTsKIAogCWlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKQotCQlza2JfcHVsbChza2IsIHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pOwomIzQzOwkJc2tiX3B1bGwoc2tiLCBza2ItJmd0O21hY19sZW4pOwogCiAJcmV0dXJuIGFjdGlvbjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDUKCQkJCQkJCW91dHB1dDogMjA2CgkJCQkJCQl0aG91Z2h0czogMzUzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTmV0d29yayBIZWFkZXIgTGVuZ3RoIENhbGN1bGF0aW9uIEJ1ZyBhbmQgdGhlIE5lZWQgZm9yIEtNU0FOKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IG1ha2luZyBzdXJlIHdlJiMzOTtyZSBjb3JyZWN0bHkgY2FsY3VsYXRpbmcgaGVhZGVyIGxlbmd0aHMsIHNwZWNpZmljYWxseSB3aGVuIHBhY2tldHMgYXJlIGNvbWluZyBpbiBhdCBUQyBpbmdyZXNzLiBUaGUga2V5IGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgc2tiLSZndDttYWNfbGVuYCB2ZXJzdXMgYHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW5gLiAgQXQgZmlyc3QgZ2xhbmNlLCBpdCBzZWVtcyBzaW1wbGU6IGp1c3QgdXNlIHRoZSBjb3JyZWN0IGxlbmd0aC4gQnV0IGxldCYjMzk7cyBkaXZlIGRlZXBlci4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGUgcHJvYmxlbSB3YXMganVzdCBvdXQtb2YtYm91bmRzIHJlYWRzIGlmIHdlIHVzZWQgYSBsZW5ndGggdGhhdCB3YXMgKnRvbyBsYXJnZSouIFdlJiMzOTtkIHBvdGVudGlhbGx5IGJlIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBNQUMgaGVhZGVyLiBIb3dldmVyLCB0aGF0JiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gIEl0JiMzOTtzIG1vcmUgc3VidGxlLiBJZiBgc2tiLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbmAgaXMgdXNlZCBhbmQgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBNQUMgaGVhZGVyIChgc2tiLSZndDttYWNfbGVuYCksIHRoZW4gd2UgYXJlIGVzc2VudGlhbGx5IHB1c2hpbmcgYHNrYi0mZ3Q7ZGF0YWAgaW50byB0aGUgaGVhZHJvb20gYmVmb3JlIHRoZSBNQUMgaGVhZGVyLgoKQ3J1Y2lhbGx5LCB0aGUgaGVhZHJvb20gb2YgYW4gYHNrYmAgaXMgKmFsbG9jYXRlZCogbWVtb3J5LCB3aGljaCBtZWFucyBLQVNBTiB3aWxsIG5vdCBmbGFnIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCB0aGlzIGhlYWRyb29tIG1lbW9yeSBpcyAqdW5pbml0aWFsaXplZCouIFRoaXMgaXMgYSBwcm9ibGVtISAgVGhlIG9sZCBjb2RlIHdhcyBlc3NlbnRpYWxseSBjb3B5aW5nIGJ5dGVzIGZyb20gdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRvIHRoZSBwYWNrZXQgaGVhZGVyLiAgV2hlbiB0aGUgcGFja2V0IGlzIHNlbnQgb3V0LCB3ZSBhcmUgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBhIGNsYXNzaWMgaW5mby1sZWFrLiBLTVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBjYXRjaCB0aGlzIGJlY2F1c2UgaXQmIzM5O3MgZGVzaWduZWQgc3BlY2lmaWNhbGx5IHRvIHRyYWNrIGluaXRpYWxpemF0aW9uIHN0YXRlLiBLQVNBTiBpcyB1c2VsZXNzIGhlcmUsIGJlY2F1c2UgaXQgb25seSBsb29rcyBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4KCkxldCBtZSBicmVhayBkb3duIHRoZSBzY2VuYXJpbzogd2hlbiBwYWNrZXRzIGVudGVyIHRoZSBUQyBpbmdyZXNzIHBhdGgsIGBza2ItJmd0O2RhdGFgIHBvaW50cyB0byB0aGUgbmV0d29yayBoZWFkZXIuIFRoZSBNQUMgaGVhZGVyIGlzIGxvY2F0ZWQgKmJlZm9yZSogdGhhdC4gVGhlIHBhdGNoIGNvcnJlY3RseSByZWFsaXplcyB0aGlzIGFuZCB1c2VzIGBza2ItJmd0O21hY19sZW5gIHRvIGRldGVybWluZSB0aGUgTUFDIGhlYWRlciYjMzk7cyBsZW5ndGguCgoqICAgSW4gYHRjZl9pZmVfZGVjb2RlYCwgaWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgdXNlZCBpbnN0ZWFkIG9mIGBtYWNfbGVuYCwgYHNrYl9wdXNoYCB3aWxsIG1vdmUgYHNrYi0mZ3Q7ZGF0YWAgYmFjayBpbnRvIHRoZSB1bmluaXRpYWxpemVkIGhlYWRyb29tLCBjb3JydXB0aW5nIGRhdGEuCiogICBUaGVuIGBpZmVfZGVjb2RlYCBpcyBjYWxsZWQsIGFuZCB3aWxsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEhvd2V2ZXIsIHRoZSB1c2Ugb2YgYGhkcmxlbmAgbWF0Y2hlcyB0aGUgYHNrYl9wdXNoYCBhbmQgdGhlIGFjY2VzcyBpcyBmaW5lLgoqICAgSW4gYHRjZl9pZmVfZW5jb2RlYCwgYWdhaW4gdGhlIHdyb25nIGxlbmd0aCBpcyB1c2VkLgoqICAgYGlmZV9lbmNvZGVgIGNvcGllcyBgaGFyZF9oZWFkZXJfbGVuYCBieXRlcyBmcm9tIGBpZXRoaGAgKHdoaWNoIGluY2x1ZGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KSBpbnRvIHRoZSBwYWNrZXQgaGVhZGVyLgoKSWYgYHNrYi0mZ3Q7ZGV2LSZndDtoYXJkX2hlYWRlcl9sZW5gIGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgTUFDIGhlYWRlciBsZW5ndGgsIHRoaXMgcHJvY2VzcyBsZWFrcyB0aGUgdW5pbml0aWFsaXplZCBza2IgaGVhZHJvb20gbWVtb3J5IGludG8gdGhlIG5ldHdvcmsuIEtNU0FOICptdXN0KiBiZSBlbmFibGVkIHRvIGRldGVjdCB0aGlzIGJ1ZywgYXMgaXQgaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQgZGF0YSBsZWFrLgoKVGhlcmVmb3JlLCB0aGlzIGlzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGxlYWRpbmcgdG8gYW4gaW5mb3JtYXRpb24gbGVhaywgYW5kIEtNU0FOIGlzICpyZXF1aXJlZCouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGBza2JfcHVzaCgpYCBhbmQgYG1lbWNweSgpYCB1c2VkIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgaW5zdGVhZCBvZiBgc2tiLVx1MDAzZW1hY19sZW5gIGF0IFRDIGluZ3Jlc3MuIElmIGBoYXJkX2hlYWRlcl9sZW5gIGlzIGxhcmdlciB0aGFuIGBtYWNfbGVuYCwgYHNrYl9wdXNoKClgIG1vdmVzIGBza2ItXHUwMDNlZGF0YWAgaW50byB0aGUgc2tiIGhlYWRyb29tIGJlZm9yZSB0aGUgYWN0dWFsIE1BQyBoZWFkZXIuIFRoZSBza2IgaGVhZHJvb20gaXMgdmFsaWQgYWxsb2NhdGVkIG1lbW9yeSwgc28gS0FTQU4gd2lsbCBub3QgZmxhZyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gSG93ZXZlciwgdGhpcyBoZWFkcm9vbSBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC4gVGhlIHN1YnNlcXVlbnQgYG1lbWNweSgpYCBpbiBgaWZlX2VuY29kZSgpYCBjb3BpZXMgdGhlc2UgdW5pbml0aWFsaXplZCBieXRlcyBpbnRvIHRoZSBwYWNrZXQgaGVhZGVyLCBsZWFkaW5nIHRvIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYW5kIGEgcG90ZW50aWFsIGluZm8tbGVhayBvdmVyIHRoZSBuZXR3b3JrLiBLTVNBTiBpcyByZXF1aXJlZCB0byBkZXRlY3QgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYXMgc3RhbmRhcmQgS0FTQU4gY2Fubm90IGNhdGNoIGluLWJvdW5kcyB1bmluaXRpYWxpemVkIHJlYWRzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBgc2tiX3B1c2goKWAgYW5kIGBtZW1jcHkoKWAgdXNlZCBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYHNrYi1cdTAwM2VtYWNfbGVuYCBhdCBUQyBpbmdyZXNzLiBJZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyBsYXJnZXIgdGhhbiBgbWFjX2xlbmAsIGBza2JfcHVzaCgpYCBtb3ZlcyBgc2tiLVx1MDAzZWRhdGFgIGludG8gdGhlIHNrYiBoZWFkcm9vbSBiZWZvcmUgdGhlIGFjdHVhbCBNQUMgaGVhZGVyLiBUaGUgc2tiIGhlYWRyb29tIGlzIHZhbGlkIGFsbG9jYXRlZCBtZW1vcnksIHNvIEtBU0FOIHdpbGwgbm90IGZsYWcgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEhvd2V2ZXIsIHRoaXMgaGVhZHJvb20gbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRoZSBzdWJzZXF1ZW50IGBtZW1jcHkoKWAgaW4gYGlmZV9lbmNvZGUoKWAgY29waWVzIHRoZXNlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW50byB0aGUgcGFja2V0IGhlYWRlciwgbGVhZGluZyB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGFuZCBhIHBvdGVudGlhbCBpbmZvLWxlYWsgb3ZlciB0aGUgbmV0d29yay4gS01TQU4gaXMgcmVxdWlyZWQgdG8gZGV0ZWN0IHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFzIHN0YW5kYXJkIEtBU0FOIGNhbm5vdCBjYXRjaCBpbi1ib3VuZHMgdW5pbml0aWFsaXplZCByZWFkcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDoyMy43NDM3NTUyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY4MTM5ODcxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0FDVF9JRkVcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWZlX2VuY29kZVwiLFxuICAgIFwiaWZlX2RlY29kZVwiLFxuICAgIFwidGNmX2lmZV9hY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIGBza2JfcHVzaCgpYCBhbmQgYG1lbWNweSgpYCB1c2VkIGBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXFx1MDAzZW1hY19sZW5gIGF0IFRDIGluZ3Jlc3MuIElmIGBoYXJkX2hlYWRlcl9sZW5gIGlzIGxhcmdlciB0aGFuIGBtYWNfbGVuYCwgYHNrYl9wdXNoKClgIG1vdmVzIGBza2ItXFx1MDAzZWRhdGFgIGludG8gdGhlIHNrYiBoZWFkcm9vbSBiZWZvcmUgdGhlIGFjdHVhbCBNQUMgaGVhZGVyLiBUaGUgc2tiIGhlYWRyb29tIGlzIHZhbGlkIGFsbG9jYXRlZCBtZW1vcnksIHNvIEtBU0FOIHdpbGwgbm90IGZsYWcgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEhvd2V2ZXIsIHRoaXMgaGVhZHJvb20gbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRoZSBzdWJzZXF1ZW50IGBtZW1jcHkoKWAgaW4gYGlmZV9lbmNvZGUoKWAgY29waWVzIHRoZXNlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW50byB0aGUgcGFja2V0IGhlYWRlciwgbGVhZGluZyB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGFuZCBhIHBvdGVudGlhbCBpbmZvLWxlYWsgb3ZlciB0aGUgbmV0d29yay4gS01TQU4gaXMgcmVxdWlyZWQgdG8gZGV0ZWN0IHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFzIHN0YW5kYXJkIEtBU0FOIGNhbm5vdCBjYXRjaCBpbi1ib3VuZHMgdW5pbml0aWFsaXplZCByZWFkcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWUsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiBoZWFkZXIgbGVuZ3RocyBpbiB0aGUgSUZFIChJbnRlci1GRSkgdHJhZmZpYyBjb250cm9sIGFjdGlvbiBlbmNvZGluZyBhbmQgZGVjb2RpbmcgcGF0aHMuIEl0IGNoYW5nZXMgdGhlIGxvZ2ljIHRvIHVzZSBgc2tiLVxcdTAwM2VtYWNfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3aGVuIHRoZSBwYWNrZXQgaXMgYXQgVEMgaW5ncmVzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHBhY2tldCBwcm9jZXNzaW5nIHRoYXQgYWZmZWN0cyBob3cgbXVjaCBkYXRhIGlzIHB1c2hlZCBvciBwdWxsZWQgZnJvbSB0aGUgc2tiLCB3aGljaCBjYW4gbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIG90aGVyIGlzc3VlcyBpZiBpbmNvcnJlY3QuIEl0IGlzIHJlYWNoYWJsZSB2aWEgVEMgYWN0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTA6MjMuNzQzNzYwMzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4OTg2NDY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVmYjcyMDBmYTFmMzQ3ZjZlZDdlMTQ3MWIzYzA2MTVjMjA5ODI2ZWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTc6NTA6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmNcXG5pbmRleCA3YTc1OTQ3YTMxZTMxLi4zZDMxZDY4MTE0ZWZjIDEwMDY0NFxcbi0tLSBhL25ldC9pZmUvaWZlLmNcXG4rKysgYi9uZXQvaWZlL2lmZS5jXFxuQEAgLTM2LDggKzM2LDEwIEBAIHZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pXFxuIFxcdC8qIE9VVEVSSERSOlRPVE1FVEFMRU46e1RMVkhEUjpNZXRhZGF0dW06VExWSERSLi59Ok9SSUdEQVRBXFxuIFxcdCAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLlxcbiBcXHQgKi9cXG4rXFx0dW5zaWduZWQgaW50IGhkcmxlbiA9IHNrYl9hdF90Y19pbmdyZXNzKHNrYikgP1xcbitcXHRcXHRcXHQgICAgICBza2ItXFx1MDAzZW1hY19sZW4gOiBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbiBcXHRpbnQgaGRybSA9IG1ldGFsZW4gKyBJRkVfTUVUQUhEUkxFTjtcXG4tXFx0aW50IHRvdGFsX3B1c2ggPSBoZHJtICsgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG4rXFx0aW50IHRvdGFsX3B1c2ggPSBoZHJtICsgaGRybGVuO1xcbiBcXHRzdHJ1Y3QgaWZlaGVhZHIgKmlmZWhkcjtcXG4gXFx0c3RydWN0IGV0aGhkciAqaWV0aGg7XFx0LyogaW5uZXIgZXRoZXIgaGVhZGVyICovXFxuIFxcdGludCBza2JvZmYgPSAwO1xcbkBAIC01MCw5ICs1Miw5IEBAIHZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pXFxuIFxcdGlldGhoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiLVxcdTAwM2VkYXRhO1xcbiBcXG4gXFx0X19za2JfcHVzaChza2IsIHRvdGFsX3B1c2gpO1xcbi1cXHRtZW1jcHkoc2tiLVxcdTAwM2VkYXRhLCBpZXRoaCwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XFxuK1xcdG1lbWNweShza2ItXFx1MDAzZWRhdGEsIGlldGhoLCBoZHJsZW4pO1xcbiBcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbi1cXHRza2JvZmYgKz0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG4rXFx0c2tib2ZmICs9IGhkcmxlbjtcXG4gXFxuIFxcdC8qIHRvdGFsIG1ldGFkYXRhIGxlbmd0aCAqL1xcbiBcXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopIChza2ItXFx1MDAzZWRhdGEgKyBza2JvZmYpO1xcbkBAIC02NSwxNiArNjcsMTggQEAgRVhQT1JUX1NZTUJPTF9HUEwoaWZlX2VuY29kZSk7XFxuIFxcbiB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgaGRybGVuID0gc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSA/XFxuK1xcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbWFjX2xlbiA6IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuIFxcdHN0cnVjdCBpZmVoZWFkciAqaWZlaGRyO1xcbiBcXHRpbnQgdG90YWxfcHVsbDtcXG4gXFx0dTE2IGlmZWhkcmxuO1xcbiBcXG4tXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIElGRV9NRVRBSERSTEVOKSlcXG4rXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRybGVuICsgSUZFX01FVEFIRFJMRU4pKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cXHUwMDNlZGF0YSArIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cXHUwMDNlZGF0YSArIGhkcmxlbik7XFxuIFxcdGlmZWhkcmxuID0gbnRvaHMoaWZlaGRyLVxcdTAwM2VtZXRhbGVuKTtcXG4tXFx0dG90YWxfcHVsbCA9IHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBpZmVoZHJsbjtcXG4rXFx0dG90YWxfcHVsbCA9IGhkcmxlbiArIGlmZWhkcmxuO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGlmZWhkcmxuIFxcdTAwM2MgMikpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbkBAIC04Miw3ICs4Niw3IEBAIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKVxcbiBcXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICsgRVRIX0hMRU4pKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cXHUwMDNlZGF0YSArIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cXHUwMDNlZGF0YSArIGhkcmxlbik7XFxuIFxcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsIHRvdGFsX3B1bGwpO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgdG90YWxfcHVsbCk7XFxuIFxcdCptZXRhbGVuID0gaWZlaGRybG4gLSBJRkVfTUVUQUhEUkxFTjtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9pZmUuYyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcXG5pbmRleCAwNjUyMjgwMjZjNThlLi5lYTdkZjM2YWI3ZTM0IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmNcXG4rKysgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXFxuQEAgLTcyMyw3ICs3MjMsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuIFxcdHRjZl9sYXN0dXNlX3VwZGF0ZShcXHUwMDI2aWZlLVxcdTAwM2V0Y2ZfdG0pO1xcbiBcXG4gXFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXFxuLVxcdFxcdHNrYl9wdXNoKHNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XFxuK1xcdFxcdHNrYl9wdXNoKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4gXFxuIFxcdHRsdl9kYXRhID0gaWZlX2RlY29kZShza2IsIFxcdTAwMjZtZXRhbGVuKTtcXG4gXFx0aWYgKHVubGlrZWx5KCF0bHZfZGF0YSkpIHtcXG5AQCAtODI2LDcgKzgyNiw3IEBAIHN0YXRpYyBpbnQgdGNmX2lmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXFxuLVxcdFxcdHNrYl9wdXNoKHNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XFxuK1xcdFxcdHNrYl9wdXNoKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuKTtcXG4gXFxuIFxcdGlmZV9tZXRhID0gaWZlX2VuY29kZShza2IsIG1ldGFsZW4pO1xcbiBcXHRpZiAoIWlmZV9tZXRhKVxcbkBAIC04NTYsNyArODU2LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbiBcXHRvZXRoaC1cXHUwMDNlaF9wcm90byA9IGh0b25zKHAtXFx1MDAzZWV0aF90eXBlKTtcXG4gXFxuIFxcdGlmIChza2JfYXRfdGNfaW5ncmVzcyhza2IpKVxcbi1cXHRcXHRza2JfcHVsbChza2IsIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xcbitcXHRcXHRza2JfcHVsbChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbik7XFxuIFxcbiBcXHRyZXR1cm4gYWN0aW9uO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUwOjI0LjEzNDM1MjcxOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM3OTY4OTA1ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9BQ1RfSUZFXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlmZV9lbmNvZGVcIixcbiAgICBcImlmZV9kZWNvZGVcIixcbiAgICBcInRjZl9pZmVfYWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIGhlYWRlciBsZW5ndGhzIGluIHRoZSBJRkUgKEludGVyLUZFKSB0cmFmZmljIGNvbnRyb2wgYWN0aW9uIGVuY29kaW5nIGFuZCBkZWNvZGluZyBwYXRocy4gSXQgY2hhbmdlcyB0aGUgbG9naWMgdG8gdXNlIGBza2ItXFx1MDAzZW1hY19sZW5gIGluc3RlYWQgb2YgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIHdoZW4gdGhlIHBhY2tldCBpcyBhdCBUQyBpbmdyZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcGFja2V0IHByb2Nlc3NpbmcgdGhhdCBhZmZlY3RzIGhvdyBtdWNoIGRhdGEgaXMgcHVzaGVkIG9yIHB1bGxlZCBmcm9tIHRoZSBza2IsIHdoaWNoIGNhbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3Igb3RoZXIgaXNzdWVzIGlmIGluY29ycmVjdC4gSXQgaXMgcmVhY2hhYmxlIHZpYSBUQyBhY3Rpb25zIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZmI3MjAwZmExZjM0N2Y2ZWQ3ZTE0NzFiM2MwNjE1YzIwOTgyNmVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTc6NTA6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaWZlL2lmZS5jIGIvbmV0L2lmZS9pZmUuY1xuaW5kZXggN2E3NTk0N2EzMWUzMS4uM2QzMWQ2ODExNGVmYyAxMDA2NDRcbi0tLSBhL25ldC9pZmUvaWZlLmNcbisrKyBiL25ldC9pZmUvaWZlLmNcbkBAIC0zNiw4ICszNiwxMCBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxuIFx0LyogT1VURVJIRFI6VE9UTUVUQUxFTjp7VExWSERSOk1ldGFkYXR1bTpUTFZIRFIuLn06T1JJR0RBVEFcbiBcdCAqIHdoZXJlIE9SSUdEQVRBID0gb3JpZ2luYWwgZXRoZXJuZXQgaGVhZGVyIC4uLlxuIFx0ICovXG4rXHR1bnNpZ25lZCBpbnQgaGRybGVuID0gc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSA/XG4rXHRcdFx0ICAgICAgc2tiLVx1MDAzZW1hY19sZW4gOiBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbiBcdGludCBoZHJtID0gbWV0YWxlbiArIElGRV9NRVRBSERSTEVOO1xuLVx0aW50IHRvdGFsX3B1c2ggPSBoZHJtICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4rXHRpbnQgdG90YWxfcHVzaCA9IGhkcm0gKyBoZHJsZW47XG4gXHRzdHJ1Y3QgaWZlaGVhZHIgKmlmZWhkcjtcbiBcdHN0cnVjdCBldGhoZHIgKmlldGhoO1x0LyogaW5uZXIgZXRoZXIgaGVhZGVyICovXG4gXHRpbnQgc2tib2ZmID0gMDtcbkBAIC01MCw5ICs1Miw5IEBAIHZvaWQgKmlmZV9lbmNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG1ldGFsZW4pXG4gXHRpZXRoaCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi1cdTAwM2VkYXRhO1xuIFxuIFx0X19za2JfcHVzaChza2IsIHRvdGFsX3B1c2gpO1xuLVx0bWVtY3B5KHNrYi1cdTAwM2VkYXRhLCBpZXRoaCwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0bWVtY3B5KHNrYi1cdTAwM2VkYXRhLCBpZXRoaCwgaGRybGVuKTtcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRza2JvZmYgKz0gc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4rXHRza2JvZmYgKz0gaGRybGVuO1xuIFxuIFx0LyogdG90YWwgbWV0YWRhdGEgbGVuZ3RoICovXG4gXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopIChza2ItXHUwMDNlZGF0YSArIHNrYm9mZik7XG5AQCAtNjUsMTYgKzY3LDE4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGlmZV9lbmNvZGUpO1xuIFxuIHZvaWQgKmlmZV9kZWNvZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2ICptZXRhbGVuKVxuIHtcbitcdHVuc2lnbmVkIGludCBoZHJsZW4gPSBza2JfYXRfdGNfaW5ncmVzcyhza2IpID9cbitcdFx0XHQgICAgICBza2ItXHUwMDNlbWFjX2xlbiA6IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuIFx0c3RydWN0IGlmZWhlYWRyICppZmVoZHI7XG4gXHRpbnQgdG90YWxfcHVsbDtcbiBcdHUxNiBpZmVoZHJsbjtcbiBcbi1cdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgSUZFX01FVEFIRFJMRU4pKVxuK1x0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGRybGVuICsgSUZFX01FVEFIRFJMRU4pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikgKHNrYi1cdTAwM2VkYXRhICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXHUwMDNlZGF0YSArIGhkcmxlbik7XG4gXHRpZmVoZHJsbiA9IG50b2hzKGlmZWhkci1cdTAwM2VtZXRhbGVuKTtcbi1cdHRvdGFsX3B1bGwgPSBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIGlmZWhkcmxuO1xuK1x0dG90YWxfcHVsbCA9IGhkcmxlbiArIGlmZWhkcmxuO1xuIFxuIFx0aWYgKHVubGlrZWx5KGlmZWhkcmxuIFx1MDAzYyAyKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtODIsNyArODYsNyBAQCB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcbiBcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHRvdGFsX3B1bGwgKyBFVEhfSExFTikpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICsgaGRybGVuKTtcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsIHRvdGFsX3B1bGwpO1xuIFx0X19za2JfcHVsbChza2IsIHRvdGFsX3B1bGwpO1xuIFx0Km1ldGFsZW4gPSBpZmVoZHJsbiAtIElGRV9NRVRBSERSTEVOO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfaWZlLmMgYi9uZXQvc2NoZWQvYWN0X2lmZS5jXG5pbmRleCAwNjUyMjgwMjZjNThlLi5lYTdkZjM2YWI3ZTM0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9pZmUuY1xuKysrIGIvbmV0L3NjaGVkL2FjdF9pZmUuY1xuQEAgLTcyMyw3ICs3MjMsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHR0Y2ZfbGFzdHVzZV91cGRhdGUoXHUwMDI2aWZlLVx1MDAzZXRjZl90bSk7XG4gXG4gXHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbi1cdFx0c2tiX3B1c2goc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuIFxuIFx0dGx2X2RhdGEgPSBpZmVfZGVjb2RlKHNrYiwgXHUwMDI2bWV0YWxlbik7XG4gXHRpZiAodW5saWtlbHkoIXRsdl9kYXRhKSkge1xuQEAgLTgyNiw3ICs4MjYsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHR9XG4gXG4gXHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbi1cdFx0c2tiX3B1c2goc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuIFxuIFx0aWZlX21ldGEgPSBpZmVfZW5jb2RlKHNrYiwgbWV0YWxlbik7XG4gXHRpZiAoIWlmZV9tZXRhKVxuQEAgLTg1Niw3ICs4NTYsNyBAQCBzdGF0aWMgaW50IHRjZl9pZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXG4gXHRvZXRoaC1cdTAwM2VoX3Byb3RvID0gaHRvbnMocC1cdTAwM2VldGhfdHlwZSk7XG4gXG4gXHRpZiAoc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSlcbi1cdFx0c2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbik7XG4rXHRcdHNrYl9wdWxsKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4pO1xuIFxuIFx0cmV0dXJuIGFjdGlvbjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDoyNC4xMzQzNTQyMjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzA3NTA4MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKklGRSBNZXRhZGF0YSBIYW5kbGluZzogQSBSZWZpbmVtZW50IGluIFRyYWZmaWMgQ29udHJvbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgemVyb2luZyBpbiBvbiBhIHByZXR0eSBzcGVjaWZpYyBhcmVhOiB0aGUgd2F5IHdlIGhhbmRsZSBJbnRlci1GRSAoSUZFKSBtZXRhZGF0YSwgcGFydGljdWxhcmx5IGluIGBuZXQvaWZlL2lmZS5jYCBhbmQgYG5ldC9zY2hlZC9hY3RfaWZlLmNgLiBUaGUga2V5IGNoYW5nZSBpcyBob3cgYGhkcmxlbmAgaXMgY2FsY3VsYXRlZCB3aGVuIHdlJ3JlIGVuY29kaW5nIG9yIGRlY29kaW5nIHRoaXMgSUZFIG1ldGFkYXRhLiBJbnN0ZWFkIG9mIGp1c3QgZGVmYXVsdGluZyB0byBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gLCB3aGljaCBoYXMgYmVlbiB0aGUgb2xkIHdheSwgaXQncyBub3cgY2hlY2tpbmcgYHNrYl9hdF90Y19pbmdyZXNzKHNrYilgLiBJZiB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlLCBpdCdzIGdvaW5nIHRvIHVzZSBgc2tiLVx1MDAzZW1hY19sZW5gIGluc3RlYWQuIFNtYXJ0IG1vdmU7IHRoYXQgc2hvdWxkIGdpdmUgdXMgbW9yZSBncmFudWxhciBjb250cm9sIGF0IHRoZSBpbmdyZXNzIHBvaW50LlxuXG5JIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyB0b3VjaGVkIGhlcmUuLi4gYWxyaWdodCwgbG9va3MgbGlrZSB3ZSd2ZSBnb3Q6IGBpZmVfZW5jb2RlYCwgYGlmZV9kZWNvZGVgLCBgdGNmX2lmZV9kZWNvZGVgLCBhbmQgYHRjZl9pZmVfZW5jb2RlYC4gWWVwLCB0aG9zZSBhcmUgYWxsIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBJRkUgYWN0aW9uIHdpdGhpbiBUQyAoVHJhZmZpYyBDb250cm9sKS4gTWFrZXMgc2Vuc2UuXG5cbkJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIHdhbnQgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYXQgdGhlIGNvbmZpZyBvcHRpb25zIGZvciBJRkUuIFRoaXMgYWRqdXN0bWVudCBwcm9iYWJseSBoYXMgaW1wbGljYXRpb25zLCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCBjaGFuZ2VzIG1heSBiZSBuZWVkZWQgZm9yIHNwZWNpZmljIGRlcGxveW1lbnRzLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUwOjI4Ljg0MTg2NTM2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzU3MTc3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZmVfZW5jb2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pZmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pZmUvaWZlLmM9Mjk9c3RydWN0IGlmZWhlYWRyIHtcXG4tLVxcbm5ldC9pZmUvaWZlLmMtMzMtXFxubmV0L2lmZS9pZmUuYzozNDp2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxcbm5ldC9pZmUvaWZlLmMtMzUte1xcbi0tXFxubmV0L2lmZS9pZmUuYy02NS19XFxubmV0L2lmZS9pZmUuYzo2NjpFWFBPUlRfU1lNQk9MX0dQTChpZmVfZW5jb2RlKTtcXG5uZXQvaWZlL2lmZS5jLTY3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDoyOC45MDU0NDQwOTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA0Mjk4ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEFjdGl2YXRpb24gb2YgYGFjdF9pZmUuY2AgYW5kIGBpZmUuY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYGFjdF9pZmUuY2AgYW5kIGBpZmUuY2AgbW9kdWxlcyBhcmUgYmVpbmcgZW5hYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLiBHaXZlbiB0aGVpciBuYW1lcywgdGhleSBzZWVtIG5ldHdvcmstcmVsYXRlZC4gTXkgaW5zdGluY3QsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIHRlbGxzIG1lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZWlyIGluY2x1c2lvbiBhcmUgbGlrZWx5IGJ1cmllZCB3aXRoaW4gdGhlIG5ldHdvcmstc3BlY2lmaWMgS2NvbmZpZyBmaWxlcy4gU28sIGxldCBtZSBzdGFydCBieSBsb29raW5nIGluIGBuZXQvaWZlL0tjb25maWdgIGFuZCBgbmV0L3NjaGVkL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcsIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIHNjaGVkdWxpbmcsIHJlc3BlY3RpdmVseS4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2xzIGFyZSBjbGVhcmx5IGRvY3VtZW50ZWQgdGhlcmUuIElmIEknbSBsdWNreSwgaXQnbGwgYmUgYSBzdHJhaWdodGZvcndhcmQgZGVwZW5kZW5jeSBjaGFpbi4gT3RoZXJ3aXNlLCBpdCBtaWdodCByZXF1aXJlIGEgYml0IG1vcmUgZGlnZ2luZyBhcm91bmQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3Vic3lzdGVtJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUwOjMyLjQwOTc1MjI3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQ4ODQ2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3RfaWZlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGU9MjY9b2JqLSQoQ09ORklHX05FVF9BQ1RfU0tCTU9EKVxcdCs9IGFjdF9za2Jtb2Qub1xcbm5ldC9zY2hlZC9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfTkVUX0FDVF9JRkUpXFx0Kz0gYWN0X2lmZS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTI4LW9iai0kKENPTkZJR19ORVRfSUZFX1NLQk1BUkspXFx0Kz0gYWN0X21ldGFfbWFyay5vXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTM0PXN0YXRpYyBpbnQgbWF4X21ldGFjbnQgPSBJRkVfTUVUQV9NQVggKyAxO1xcbm5ldC9zY2hlZC9hY3RfaWZlLmM6MzU6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9pZmVfb3BzO1xcbm5ldC9zY2hlZC9hY3RfaWZlLmMtMzYtXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTQ3Nz1zdGF0aWMgaW50IHRjZl9pZmVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtNDgxLXtcXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjQ4MjpcXHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9pZmVfb3BzLm5ldF9pZCk7XFxubmV0L3NjaGVkL2FjdF9pZmUuYy00ODMtXFx0Ym9vbCBiaW5kID0gZmxhZ3MgXFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX0JJTkQ7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTU1Mi1cXHRpZiAoIWV4aXN0cykge1xcbm5ldC9zY2hlZC9hY3RfaWZlLmM6NTUzOlxcdFxcdHJldCA9IHRjZl9pZHJfY3JlYXRlKHRuLCBpbmRleCwgZXN0LCBhLCBcXHUwMDI2YWN0X2lmZV9vcHMsXFxubmV0L3NjaGVkL2FjdF9pZmUuYy01NTQtXFx0XFx0XFx0XFx0ICAgICBiaW5kLCB0cnVlLCBmbGFncyk7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTg2ND1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2lmZV9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtODgwLVxcbm5ldC9zY2hlZC9hY3RfaWZlLmM6ODgxOnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHtcXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTg4Mi1cXHQua2luZCA9IFxcXCJpZmVcXFwiLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYz04OTM9c3RhdGljIF9fbmV0X2luaXQgaW50IGlmZV9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3NjaGVkL2FjdF9pZmUuYy04OTQte1xcbm5ldC9zY2hlZC9hY3RfaWZlLmM6ODk1OlxcdHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgYWN0X2lmZV9vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTg5Ni1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjg5NzpcXHRyZXR1cm4gdGNfYWN0aW9uX25ldF9pbml0KG5ldCwgdG4sIFxcdTAwMjZhY3RfaWZlX29wcyk7XFxubmV0L3NjaGVkL2FjdF9pZmUuYy04OTgtfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYz05MDA9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpZmVfZXhpdF9uZXQoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpXFxubmV0L3NjaGVkL2FjdF9pZmUuYy05MDEte1xcbm5ldC9zY2hlZC9hY3RfaWZlLmM6OTAyOlxcdHRjX2FjdGlvbl9uZXRfZXhpdChuZXRfbGlzdCwgYWN0X2lmZV9vcHMubmV0X2lkKTtcXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTkwMy19XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jPTkwNT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlmZV9uZXRfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYy05MDctXFx0LmV4aXRfYmF0Y2ggPSBpZmVfZXhpdF9uZXQsXFxubmV0L3NjaGVkL2FjdF9pZmUuYzo5MDg6XFx0LmlkICAgPSBcXHUwMDI2YWN0X2lmZV9vcHMubmV0X2lkLFxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtOTA5LVxcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCB0Y19hY3Rpb25fbmV0KSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfaWZlLmM9OTEyPXN0YXRpYyBpbnQgX19pbml0IGlmZV9pbml0X21vZHVsZSh2b2lkKVxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtOTEzLXtcXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjkxNDpcXHRyZXR1cm4gdGNmX3JlZ2lzdGVyX2FjdGlvbihcXHUwMDI2YWN0X2lmZV9vcHMsIFxcdTAwMjZpZmVfbmV0X29wcyk7XFxubmV0L3NjaGVkL2FjdF9pZmUuYy05MTUtfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYz05MTc9c3RhdGljIHZvaWQgX19leGl0IGlmZV9jbGVhbnVwX21vZHVsZSh2b2lkKVxcbm5ldC9zY2hlZC9hY3RfaWZlLmMtOTE4LXtcXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjkxOTpcXHR0Y2ZfdW5yZWdpc3Rlcl9hY3Rpb24oXFx1MDAyNmFjdF9pZmVfb3BzLCBcXHUwMDI2aWZlX25ldF9vcHMpO1xcbm5ldC9zY2hlZC9hY3RfaWZlLmMtOTIwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTA6MzIuNDcyMjQ0NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU4ODM4NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX05FVF9BQ1RfSUZFYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGBDT05GSUdfTkVUX0FDVF9JRkVgLi4uIHRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhhdCdzIGVuYWJsaW5nIHRoZSBgaWZlLm9gIG9iamVjdCBmaWxlLiBNeSBmaXJzdCBzdG9wIHNob3VsZCBiZSB0aGUgYG5ldC9pZmUvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIGJ1aWxkIHN5c3RlbSBsb2dpYyBmb3IgdGhhdCBzcGVjaWZpYyBjb21wb25lbnQgc2hvdWxkIHJlc2lkZS4gSSBleHBlY3QgdG8gZmluZCB0aGUgcnVsZXMgdGhhdCBsaW5rIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byB0aGUgY3JlYXRpb24gb2YgdGhlIG9iamVjdCBmaWxlLiBJdCBjb3VsZCBiZSBhcyBzaW1wbGUgYXMgYW4gYG9iai0kKENPTkZJR19ORVRfQUNUX0lGRSkgKz0gaWZlLm9gIGxpbmUsIG9yIGl0IGNvdWxkIGJlIGEgYml0IG1vcmUgaW52b2x2ZWQgd2l0aCBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFscywgYnV0IHRoZSBNYWtlZmlsZSBpcyB0aGUgc291cmNlIG9mIHRydXRoIGZvciB0aGF0IGJ1aWxkIHByb2Nlc3MuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDozNS44MzEwODU4OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA4MDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaWZlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaWZlL01ha2VmaWxlLTUtXFxubmV0L2lmZS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19ORVRfSUZFKSArPSBpZmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDozNS44NzcxNjk5OTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ5MjYyNzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgSUZFIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYENPTkZJR19ORVRfSUZFYCBhbmQgYENPTkZJR19ORVRfQUNUX0lGRWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZWlyIHJlbGF0aW9uc2hpcCBhbmQgcHVycG9zZSB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBcIklGRVwiIGxpa2VseSBzdGFuZHMgZm9yIHNvbWV0aGluZyBsaWtlIFwiSW5ncmVzcyBGaWx0ZXIgRW5naW5lXCIgb3IgXCJJbnRlcmZhY2UgRmlsdGVyIEVuZ2luZSxcIiBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdC5cblxuRmlyc3QsIEknbSBnb2luZyBzdHJhaWdodCBmb3IgdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSB0eXBpY2FsIHBsYWNlIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZXNlIGtpbmRzIG9mIG5ldHdvcmsgc2NoZWR1bGluZyBhbmQgZmlsdGVyaW5nIG9wdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IGBORVRfQUNUX0lGRWAgaXMgZGVmaW5lZCDigJMgaXMgaXQgYSBzdGFuZGFsb25lIGZlYXR1cmUsIGEgZGVwZW5kZW5jeSBvZiBzb21ldGhpbmcgZWxzZSwgb3IgcmVsYXRlZCBkaXJlY3RseSB0byBgQ09ORklHX05FVF9JRkVgPyBUaGUgS2NvbmZpZyBmaWxlIHdpbGwgZ2l2ZSBtZSB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0LiBJJ20gbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgcGVyaGFwcyBzb21lIGhlbHBmdWwgY29tbWVudHMgdGhhdCBzaGVkIGxpZ2h0IG9uIHRoZSBmdW5jdGlvbmFsaXR5LiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCBmb3JtaW5nIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUwOjM5LjUyNjQzNTU1M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MTk1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9BQ1RfSUZFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9ODgyPWNvbmZpZyBORVRfQUNUX1NLQk1PRFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODkyLVxcbm5ldC9zY2hlZC9LY29uZmlnOjg5Mzpjb25maWcgTkVUX0FDVF9JRkVcXG5uZXQvc2NoZWQvS2NvbmZpZy04OTQtXFx0dHJpc3RhdGUgXFxcIkludGVyLUZFIGFjdGlvbiBiYXNlZCBvbiBJRVRGIEZvckNFUyBJbnRlckZFIExGQlxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTA6MzkuNTczODY2Njk4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTk1NTA0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBORVRfQUNUX0lGRSoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQUNUX0lGRWAuIFRoaXMgbWVhbnMgSSdtIG5vdCBqdXN0IGxvb2tpbmcgZm9yIGEgc2ltcGxlIGxpc3Q7IEknbSBleHBlY3RpbmcgdG8gZGVsdmUgaW50byB0aGUgYXJjaGl0ZWN0dXJlLCBwcm9iYWJseSB0aGUgbG93LWxldmVsIGNvbXBvbmVudHMgYW5kIG5ldHdvcmsgbGF5ZXJzLCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5LiBJJ20gdGhpbmtpbmcgYWJvdXQgdHJhY2luZyBiYWNrIHdoZXJlIHRoaXMgc3RydWN0dXJlLCBvciBmdW5jdGlvbiBvciBtb2R1bGUsIGlzIHVzZWQgb3IgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbS4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgdGhlIGxpa2VseSBhcmVhcyBvZiBpbXBhY3Qgd2hlbiBtb2RpZnlpbmcgYE5FVF9BQ1RfSUZFYCAuIFRoZSBtYWluIHF1ZXN0aW9uIGlzOiBXaGF0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gcmVseSBvbiBpdD8gQXJlIHRoZXJlIHBvdGVudGlhbCBjYXNjYWRpbmcgZmFpbHVyZXMgaWYgYE5FVF9BQ1RfSUZFYCBpc24ndCBiZWhhdmluZyBjb3JyZWN0bHkgb3IgbmVlZHMgYSBtYWpvciBvdmVyaGF1bD8gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggbmV0d29yayBzdGFjayBtb2R1bGVzIGludGVyZmFjZSB3aXRoIHRoaXMuIFdoYXQgaGFyZHdhcmUgZHJpdmVycyBvciBsb3ctbGV2ZWwgbmV0d29yayBpbnRlcmZhY2UgZHJpdmVycyBhcmUgaW52b2x2ZWQuIFdoYXQgdXBwZXItbGF5ZXIgcHJvdG9jb2xzIHV0aWxpemUgdGhpcyBpbnRlcmZhY2U/IEZyb20gYSBzZWN1cml0eSBzdGFuZHBvaW50LCBpZiBpdCdzIGludm9sdmVkIHdpdGggc29tZXRoaW5nLCBob3cgaXMgdGhpcyBoYW5kbGVkIGFuZCB3aGF0IGFyZSBpdHMgaW5wdXRzL291dHB1dHM/IEluIGVzc2VuY2UsIEknbSBhaW1pbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgc3lzdGVtIGFuZCB0aGUgaW1wYWN0IG9mIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDo0My4yOTM0MTk1OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTkwMDIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0FDVF9JRkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz04ODI9Y29uZmlnIE5FVF9BQ1RfU0tCTU9EXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy04OTItXFxubmV0L3NjaGVkL0tjb25maWc6ODkzOmNvbmZpZyBORVRfQUNUX0lGRVxcbm5ldC9zY2hlZC9LY29uZmlnLTg5NC1cXHR0cmlzdGF0ZSBcXFwiSW50ZXItRkUgYWN0aW9uIGJhc2VkIG9uIElFVEYgRm9yQ0VTIEludGVyRkUgTEZCXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDo0My4zOTUzMjM2OTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MjY4Mzc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9uKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gQmFzZWQgb24gdGhlIGRpcmVjdGlvbiBJJ20gdGFraW5nIGluIHRoaXMgaW52ZXN0aWdhdGlvbiwgSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIG5ldHdvcmsgc2NoZWR1bGluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgcXVldWluZyBkaXNjaXBsaW5lcyBhbmQgdGhlIGZlYXR1cmVzIHRoZXkgZXhwb3NlLiBJIGhhdmUgYSBodW5jaCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgdHJvdWJsZXNob290aW5nIHN0ZXBzLCB0aGF0IGEgY29uZmlndXJhdGlvbiBmbGFnIHdpdGhpbiB0aGUgYG5ldC9zY2hlZC9gIHN1YnN5c3RlbSBpcyB0aGUga2V5LiBHaXZlbiB0aGUgaGlnaCBwcm9iYWJpbGl0eSB0aGF0IEkgbmVlZCB0byBsb29rIGF0IHNwZWNpZmljIHNjaGVkdWxlciBvcHRpb25zLCBhbmQgd2hhdCBmZWF0dXJlcyB0aGV5IG9mZmVyLCBJIHNob3VsZCBwcm9iYWJseSBnbyBiYWNrIGFuZCB0YWtlIGEgbG9vayBhdCBgbmV0L3NjaGVkL0tjb25maWdgLCBhcm91bmQgbGluZSA4OTMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB0aGUgYXZhaWxhYmxlIGNob2ljZXMgYW5kIGRlcGVuZGVuY2llcy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBjYW4gYmUgY29uZmlndXJlZCwgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUsIHdpdGhpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgY29udGV4dC4gVGhhdCBzaG91bGQgcXVpY2tseSBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgb3B0aW9ucywgYW5kIGFueSBhc3NvY2lhdGVkIGNvbnN0cmFpbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTA6NDYuNTc4MDEwMjU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg5MDpcXHRcXHQgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4OTE6XFx0XFx0IG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfc2tibW9kLlxcbiA4OTI6XFx0XFxuIDg5MzpcXHRjb25maWcgTkVUX0FDVF9JRkVcXG4gODk0OlxcdFxcdHRyaXN0YXRlIFxcXCJJbnRlci1GRSBhY3Rpb24gYmFzZWQgb24gSUVURiBGb3JDRVMgSW50ZXJGRSBMRkJcXFwiXFxuIDg5NTpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDg5NjpcXHRcXHRzZWxlY3QgTkVUX0lGRVxcbiA4OTc6XFx0XFx0aGVscFxcbiA4OTg6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IGZvciBzb3VyY2luZyBhbmQgdGVybWluYXRpbmcgbWV0YWRhdGFcXG4gODk5OlxcdFxcdCAgRm9yIGRldGFpbHMgcmVmZXIgdG8gbmV0ZGV2MDEgcGFwZXI6XFxuIDkwMDpcXHRcXHQgIFxcXCJEaXN0cmlidXRpbmcgTGludXggVHJhZmZpYyBDb250cm9sIENsYXNzaWZpZXItQWN0aW9uIFN1YnN5c3RlbVxcXCJcXG4gOTAxOlxcdFxcdCAgIEF1dGhvcnM6IEphbWFsIEhhZGkgU2FsaW0gYW5kIERhbWFzY2VuZSBNLiBKb2FjaGltcGlsbGFpXFxuIDkwMjpcXHRcXG4gOTAzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA5MDQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2lmZS5cXG4gOTA1OlxcdFxcbiA5MDY6XFx0Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxcbiA5MDc6XFx0XFx0dHJpc3RhdGUgXFxcIklQIHR1bm5lbCBtZXRhZGF0YSBtYW5pcHVsYXRpb25cXFwiXFxuIDkwODpcXHRcXHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXFxuIDkwOTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUwOjQ2LjU3ODA5NzgzNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk1OTgwMjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTkVUX0FDVF9JRkUgQ29uZmlndXJhdGlvbiBhbmQgQXNzb2NpYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBORVRfQUNUX0lGRWAgY29uZmlnIG9wdGlvbiwgYW5kIGl0J3MgY2xlYXIgdGhhdCBpdCBkZXBlbmRzIG9uIGBORVRfQ0xTX0FDVGAgYW5kIHRoZW4gc2VsZWN0cyBgTkVUX0lGRWAuIEZyb20gYSBjb25maWcgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgTkVUX0FDVF9JRkVgIGFuZCBgTkVUX0NMU19BQ1RgIGFyZSBlbmFibGVkLiBOb3JtYWxseSBgTkVUX0NMU19BQ1RgIGlzIGFsd2F5cyBvbiwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGV4cGxpY2l0bHkgaW5jbHVkZSBpdCBqdXN0IHRvIGJlIHNhZmUgYW5kIGNsZWFyLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSd2ZSBnb3QgdG8gcmV2aWV3IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYWZmZWN0ZWQuIExvb2tzIGxpa2Ugd2UgaGF2ZSBgaWZlX2VuY29kZWAsIGBpZmVfZGVjb2RlYCwgYHRjZl9pZmVfZGVjb2RlYCwgYW5kIGB0Y2ZfaWZlX2VuY29kZWAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhvc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSByZWFjaGFibGUuIFJpZ2h0LCB0aGV5IGFyZSByZWFjaGVkIHRocm91Z2ggVEMgYWN0aW9ucy5cblxuVGhpcyBhbGwgbG9va3MgbGlrZSBpdCBoYXMgZnV6emluZyBwb3RlbnRpYWwsIHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbW9kaWZ5aW5nIHRoZSBwYWNrZXQgcHJvY2Vzc2luZywgcGFydGljdWxhcmx5IHdpdGggdGhlIGBza2JgIHB1c2gvcHVsbCBsZW5ndGhzLiBXb3J0aCBhIGNsb3NlciBsb29rLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmSSdtIG5vdGljaW5nIHRoYXQgYHRjZl9pZmVfZGVjb2RlYCBhbmQgYHRjZl9pZmVfZW5jb2RlYCBhcmUgZGVmaW5lZCBhcyBzdGF0aWMgZnVuY3Rpb25zIGluIGBuZXQvc2NoZWQvYWN0X2lmZS5jYC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBjYXNlLiBCZWluZyBzdGF0aWMgZGVmaW5pdGVseSBhZmZlY3RzIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkwNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUwOjUxLjY3NDA4MTY4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MjQ1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2lmZV9kZWNvZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9pZmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2lmZS5jPTY5Mj1zdGF0aWMgaW50IGZpbmRfZGVjb2RlX21ldGFpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2lmZV9wYXJhbXMgKnAsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTcwOS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjcxMDpzdGF0aWMgaW50IHRjZl9pZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxubmV0L3NjaGVkL2FjdF9pZmUuYy03MTEtXFx0XFx0XFx0ICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9pZmUuYz04NjQ9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jLTg3Ny1cXG5uZXQvc2NoZWQvYWN0X2lmZS5jOjg3ODpcXHRyZXR1cm4gdGNmX2lmZV9kZWNvZGUoc2tiLCBhLCByZXMpO1xcbm5ldC9zY2hlZC9hY3RfaWZlLmMtODc5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTA6NTEuNzIyODExNDUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTgyNTk5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEZWNvZGluZyB0aGUgYHRjZl9pZmVgIEZ1bmN0aW9ucyoqXG5cbkhtbSwgc28gYHRjZl9pZmVfZGVjb2RlYCBhbmQgYHRjZl9pZmVfZW5jb2RlYCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0IG1lYW5zIHRoZXkgaGF2ZSBpbnRlcm5hbCBsaW5rYWdlIHdpdGhpbiB0aGVpciBjb21waWxhdGlvbiB1bml0IOKAkyB0aGF0J3MgYSBnb29kIGRlc2lnbiBjaG9pY2UsIGxpbWl0aW5nIHRoZWlyIHNjb3BlLiBCdXQgbm93IEknbSBjdXJpb3VzLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGhvdyBhcmUgdGhleSBiZWluZyAqdXNlZCo/IERvZXMgYHRjZl9pZmVfYWN0YCBjYWxsIGVpdGhlciBgZGVjb2RlYCBvciBgZW5jb2RlYD8gVGhhdCB3b3VsZCBiZSB0aGUgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gR290dGEgY2hlY2sgYHRjZl9pZmVfYWN0YCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIExldCBtZSBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDo1NC45NDEwNzQ3OTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3RfaWZlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODYwOlxcdFxcbiA4NjE6XFx0XFx0cmV0dXJuIGFjdGlvbjtcXG4gODYyOlxcdH1cXG4gODYzOlxcdFxcbiA4NjQ6XFx0VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9pZmVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuIDg2NTpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuIDg2NjpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpXFxuIDg2NzpcXHR7XFxuIDg2ODpcXHRcXHRzdHJ1Y3QgdGNmX2lmZV9pbmZvICppZmUgPSB0b19pZmUoYSk7XFxuIDg2OTpcXHRcXHRzdHJ1Y3QgdGNmX2lmZV9wYXJhbXMgKnA7XFxuIDg3MDpcXHRcXHRpbnQgcmV0O1xcbiA4NzE6XFx0XFxuIDg3MjpcXHRcXHRwID0gcmN1X2RlcmVmZXJlbmNlX2JoKGlmZS1cXHUwMDNlcGFyYW1zKTtcXG4gODczOlxcdFxcdGlmIChwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRV9FTkNPREUpIHtcXG4gODc0OlxcdFxcdFxcdHJldCA9IHRjZl9pZmVfZW5jb2RlKHNrYiwgYSwgcmVzLCBwKTtcXG4gODc1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDg3NjpcXHRcXHR9XFxuIDg3NzpcXHRcXG4gODc4OlxcdFxcdHJldHVybiB0Y2ZfaWZlX2RlY29kZShza2IsIGEsIHJlcyk7XFxuIDg3OTpcXHR9XFxuIDg4MDpcXHRcXG4gODgxOlxcdHN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfaWZlX29wcyA9IHtcXG4gODgyOlxcdFxcdC5raW5kID0gXFxcImlmZVxcXCIsXFxuIDg4MzpcXHRcXHQuaWQgPSBUQ0FfSURfSUZFLFxcbiA4ODQ6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuIDg4NTpcXHRcXHQuYWN0ID0gdGNmX2lmZV9hY3QsXFxuIDg4NjpcXHRcXHQuZHVtcCA9IHRjZl9pZmVfZHVtcCxcXG4gODg3OlxcdFxcdC5jbGVhbnVwID0gdGNmX2lmZV9jbGVhbnVwLFxcbiA4ODg6XFx0XFx0LmluaXQgPSB0Y2ZfaWZlX2luaXQsXFxuIDg4OTpcXHRcXHQuc2l6ZSA9XFx0c2l6ZW9mKHN0cnVjdCB0Y2ZfaWZlX2luZm8pLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNzo1MDo1NC45NDExODQ5MjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA4MTgwMzY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJRkUgVHJhZmZpYyBDb250cm9sIEFjdGlvbiBQYXRjaDogQSBGb2N1c2VkIFJldmlldyoqXG5cbk9rYXksIHNvIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGB0Y2ZfaWZlX2FjdGAgaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQgaGVyZS4gVGhlIGZ1bmN0aW9ucyBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCBhcmUgdGhlIGV4cG9ydGVkIHN5bWJvbHMgaW4gYG5ldC9pZmUvaWZlLmNgIHRoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLiBNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zOiBgaWZlX2VuY29kZWAgYW5kIGBpZmVfZGVjb2RlYCwgYWxvbmcgd2l0aCBgdGNmX2lmZV9hY3RgLCB3aGljaCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW52b2x2ZSBhIG1vZGlmaWNhdGlvbiB0byBob3cgaGVhZGVyIGxlbmd0aHMgYXJlIGNhbGN1bGF0ZWQgd2l0aGluIHRoZSBJRkUgdHJhZmZpYyBjb250cm9sIGFjdGlvbiwgc3BlY2lmaWNhbGx5IGR1cmluZyBlbmNvZGluZyBhbmQgZGVjb2RpbmcuIEl0J3Mgc3dpdGNoaW5nIGZyb20gdXNpbmcgYHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB0byBgc2tiLVx1MDAzZW1hY19sZW5gIHdoZW4gYSBwYWNrZXQgaXMgYXQgVEMgaW5ncmVzcy4gTm93LCBJIHNlZSBpbW1lZGlhdGVseSB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gQW55IGFsdGVyYXRpb24gdG8gcGFja2V0IHByb2Nlc3NpbmcsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIGhvdyBtdWNoIGRhdGEgaXMgcHVzaGVkIG9yIHB1bGxlZCBmcm9tIHRoZSBTS0IsIGlzIHNpZ25pZmljYW50LiBJZiB0aGlzIGNhbGN1bGF0aW9uIGlzIGluY29ycmVjdCwgaXQgY291bGQgdmVyeSBlYXNpbHkgbGVhZCB0byBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBvciBvdGhlciBleHBsb2l0YWJsZSBpc3N1ZXMuIEkgbmVlZCB0byBiZSBkaWxpZ2VudCBhYm91dCB0ZXN0aW5nIHRoaXMuIEdpdmVuIGl0J3MgcmVhY2hhYmxlIHZpYSBUQyBhY3Rpb25zLCBpdOKAmXMgcmlwZSBmb3IgZnV6emluZy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCBJIHNlZSB0aGF0IGBORVRfSUZFYCBpcyBzZWxlY3RlZCBieSBgTkVUX0FDVF9JRkVgLiBTbywgZW5hYmxpbmcgYE5FVF9BQ1RfSUZFYCBpcyB0aGUga2V5IGNvbmZpZyBuZWVkZWQgaGVyZS5cblxuTm93LCBsZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzg3LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUxOjAyLjAyMjk5MTAxMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjY1MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX0lGRVwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZmVfZW5jb2RlXCIsXG4gICAgXCJpZmVfZGVjb2RlXCIsXG4gICAgXCJ0Y2ZfaWZlX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiBoZWFkZXIgbGVuZ3RocyBpbiB0aGUgSUZFIChJbnRlci1GRSkgdHJhZmZpYyBjb250cm9sIGFjdGlvbiBlbmNvZGluZyBhbmQgZGVjb2RpbmcgcGF0aHMuIEl0IGNoYW5nZXMgdGhlIGxvZ2ljIHRvIHVzZSBgc2tiLVxcdTAwM2VtYWNfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3aGVuIHRoZSBwYWNrZXQgaXMgYXQgVEMgaW5ncmVzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHBhY2tldCBwcm9jZXNzaW5nIHRoYXQgYWZmZWN0cyBob3cgbXVjaCBkYXRhIGlzIHB1c2hlZCBvciBwdWxsZWQgZnJvbSB0aGUgc2tiLCB3aGljaCBjYW4gbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIG90aGVyIGlzc3VlcyBpZiBpbmNvcnJlY3QuIEl0IGlzIHJlYWNoYWJsZSB2aWEgVEMgYWN0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQUNUX0lGRVwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZmVfZW5jb2RlXCIsXG4gICAgXCJpZmVfZGVjb2RlXCIsXG4gICAgXCJ0Y2ZfaWZlX2FjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiBoZWFkZXIgbGVuZ3RocyBpbiB0aGUgSUZFIChJbnRlci1GRSkgdHJhZmZpYyBjb250cm9sIGFjdGlvbiBlbmNvZGluZyBhbmQgZGVjb2RpbmcgcGF0aHMuIEl0IGNoYW5nZXMgdGhlIGxvZ2ljIHRvIHVzZSBgc2tiLVxcdTAwM2VtYWNfbGVuYCBpbnN0ZWFkIG9mIGBza2ItXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuYCB3aGVuIHRoZSBwYWNrZXQgaXMgYXQgVEMgaW5ncmVzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHBhY2tldCBwcm9jZXNzaW5nIHRoYXQgYWZmZWN0cyBob3cgbXVjaCBkYXRhIGlzIHB1c2hlZCBvciBwdWxsZWQgZnJvbSB0aGUgc2tiLCB3aGljaCBjYW4gbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIG90aGVyIGlzc3VlcyBpZiBpbmNvcnJlY3QuIEl0IGlzIHJlYWNoYWJsZSB2aWEgVEMgYWN0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTE6MDIuMTAzMjYyMzc0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ1NDQ3MDU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE3OjUxOjAyLjEwMzg2MTYxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1ODQ1Mzg2Nzc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgYHNrYl9wdXNoKClgIGFuZCBgbWVtY3B5KClgIHVzZWQgYHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGluc3RlYWQgb2YgYHNrYi1cXHUwMDNlbWFjX2xlbmAgYXQgVEMgaW5ncmVzcy4gSWYgYGhhcmRfaGVhZGVyX2xlbmAgaXMgbGFyZ2VyIHRoYW4gYG1hY19sZW5gLCBgc2tiX3B1c2goKWAgbW92ZXMgYHNrYi1cXHUwMDNlZGF0YWAgaW50byB0aGUgc2tiIGhlYWRyb29tIGJlZm9yZSB0aGUgYWN0dWFsIE1BQyBoZWFkZXIuIFRoZSBza2IgaGVhZHJvb20gaXMgdmFsaWQgYWxsb2NhdGVkIG1lbW9yeSwgc28gS0FTQU4gd2lsbCBub3QgZmxhZyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gSG93ZXZlciwgdGhpcyBoZWFkcm9vbSBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC4gVGhlIHN1YnNlcXVlbnQgYG1lbWNweSgpYCBpbiBgaWZlX2VuY29kZSgpYCBjb3BpZXMgdGhlc2UgdW5pbml0aWFsaXplZCBieXRlcyBpbnRvIHRoZSBwYWNrZXQgaGVhZGVyLCBsZWFkaW5nIHRvIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgYW5kIGEgcG90ZW50aWFsIGluZm8tbGVhayBvdmVyIHRoZSBuZXR3b3JrLiBLTVNBTiBpcyByZXF1aXJlZCB0byBkZXRlY3QgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYXMgc3RhbmRhcmQgS0FTQU4gY2Fubm90IGNhdGNoIGluLWJvdW5kcyB1bmluaXRpYWxpemVkIHJlYWRzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWZiNzIwMGZhMWYzNDdmNmVkN2UxNDcxYjNjMDYxNWMyMDk4MjZlZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE3OjUwOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lmZS9pZmUuYyBiL25ldC9pZmUvaWZlLmNcbmluZGV4IDdhNzU5NDdhMzFlMzEuLjNkMzFkNjgxMTRlZmMgMTAwNjQ0XG4tLS0gYS9uZXQvaWZlL2lmZS5jXG4rKysgYi9uZXQvaWZlL2lmZS5jXG5AQCAtMzYsOCArMzYsMTAgQEAgdm9pZCAqaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbWV0YWxlbilcbiBcdC8qIE9VVEVSSERSOlRPVE1FVEFMRU46e1RMVkhEUjpNZXRhZGF0dW06VExWSERSLi59Ok9SSUdEQVRBXG4gXHQgKiB3aGVyZSBPUklHREFUQSA9IG9yaWdpbmFsIGV0aGVybmV0IGhlYWRlciAuLi5cbiBcdCAqL1xuK1x0dW5zaWduZWQgaW50IGhkcmxlbiA9IHNrYl9hdF90Y19pbmdyZXNzKHNrYikgP1xuK1x0XHRcdCAgICAgIHNrYi1cdTAwM2VtYWNfbGVuIDogc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4gXHRpbnQgaGRybSA9IG1ldGFsZW4gKyBJRkVfTUVUQUhEUkxFTjtcbi1cdGludCB0b3RhbF9wdXNoID0gaGRybSArIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuK1x0aW50IHRvdGFsX3B1c2ggPSBoZHJtICsgaGRybGVuO1xuIFx0c3RydWN0IGlmZWhlYWRyICppZmVoZHI7XG4gXHRzdHJ1Y3QgZXRoaGRyICppZXRoaDtcdC8qIGlubmVyIGV0aGVyIGhlYWRlciAqL1xuIFx0aW50IHNrYm9mZiA9IDA7XG5AQCAtNTAsOSArNTIsOSBAQCB2b2lkICppZmVfZW5jb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiBtZXRhbGVuKVxuIFx0aWV0aGggPSAoc3RydWN0IGV0aGhkciAqKSBza2ItXHUwMDNlZGF0YTtcbiBcbiBcdF9fc2tiX3B1c2goc2tiLCB0b3RhbF9wdXNoKTtcbi1cdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbitcdG1lbWNweShza2ItXHUwMDNlZGF0YSwgaWV0aGgsIGhkcmxlbik7XG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0c2tib2ZmICs9IHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuK1x0c2tib2ZmICs9IGhkcmxlbjtcbiBcbiBcdC8qIHRvdGFsIG1ldGFkYXRhIGxlbmd0aCAqL1xuIFx0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKSAoc2tiLVx1MDAzZWRhdGEgKyBza2JvZmYpO1xuQEAgLTY1LDE2ICs2NywxOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChpZmVfZW5jb2RlKTtcbiBcbiB2b2lkICppZmVfZGVjb2RlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiAqbWV0YWxlbilcbiB7XG4rXHR1bnNpZ25lZCBpbnQgaGRybGVuID0gc2tiX2F0X3RjX2luZ3Jlc3Moc2tiKSA/XG4rXHRcdFx0ICAgICAgc2tiLVx1MDAzZW1hY19sZW4gOiBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbiBcdHN0cnVjdCBpZmVoZWFkciAqaWZlaGRyO1xuIFx0aW50IHRvdGFsX3B1bGw7XG4gXHR1MTYgaWZlaGRybG47XG4gXG4tXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIElGRV9NRVRBSERSTEVOKSlcbitcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcmxlbiArIElGRV9NRVRBSERSTEVOKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopIChza2ItXHUwMDNlZGF0YSArIHNrYi1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbitcdGlmZWhkciA9IChzdHJ1Y3QgaWZlaGVhZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBoZHJsZW4pO1xuIFx0aWZlaGRybG4gPSBudG9ocyhpZmVoZHItXHUwMDNlbWV0YWxlbik7XG4tXHR0b3RhbF9wdWxsID0gc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBpZmVoZHJsbjtcbitcdHRvdGFsX3B1bGwgPSBoZHJsZW4gKyBpZmVoZHJsbjtcbiBcbiBcdGlmICh1bmxpa2VseShpZmVoZHJsbiBcdTAwM2MgMikpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTgyLDcgKzg2LDcgQEAgdm9pZCAqaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgKm1ldGFsZW4pXG4gXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCB0b3RhbF9wdWxsICsgRVRIX0hMRU4pKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRpZmVoZHIgPSAoc3RydWN0IGlmZWhlYWRyICopKHNrYi1cdTAwM2VkYXRhICsgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0aWZlaGRyID0gKHN0cnVjdCBpZmVoZWFkciAqKShza2ItXHUwMDNlZGF0YSArIGhkcmxlbik7XG4gXHRza2Jfc2V0X21hY19oZWFkZXIoc2tiLCB0b3RhbF9wdWxsKTtcbiBcdF9fc2tiX3B1bGwoc2tiLCB0b3RhbF9wdWxsKTtcbiBcdCptZXRhbGVuID0gaWZlaGRybG4gLSBJRkVfTUVUQUhEUkxFTjtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2lmZS5jIGIvbmV0L3NjaGVkL2FjdF9pZmUuY1xuaW5kZXggMDY1MjI4MDI2YzU4ZS4uZWE3ZGYzNmFiN2UzNCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfaWZlLmNcbisrKyBiL25ldC9zY2hlZC9hY3RfaWZlLmNcbkBAIC03MjMsNyArNzIzLDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2RlY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0dGNmX2xhc3R1c2VfdXBkYXRlKFx1MDAyNmlmZS1cdTAwM2V0Y2ZfdG0pO1xuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiBcbiBcdHRsdl9kYXRhID0gaWZlX2RlY29kZShza2IsIFx1MDAyNm1ldGFsZW4pO1xuIFx0aWYgKHVubGlrZWx5KCF0bHZfZGF0YSkpIHtcbkBAIC04MjYsNyArODI2LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0fVxuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdXNoKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVzaChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiBcbiBcdGlmZV9tZXRhID0gaWZlX2VuY29kZShza2IsIG1ldGFsZW4pO1xuIFx0aWYgKCFpZmVfbWV0YSlcbkBAIC04NTYsNyArODU2LDcgQEAgc3RhdGljIGludCB0Y2ZfaWZlX2VuY29kZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuIFx0b2V0aGgtXHUwMDNlaF9wcm90byA9IGh0b25zKHAtXHUwMDNlZXRoX3R5cGUpO1xuIFxuIFx0aWYgKHNrYl9hdF90Y19pbmdyZXNzKHNrYikpXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuK1x0XHRza2JfcHVsbChza2IsIHNrYi1cdTAwM2VtYWNfbGVuKTtcbiBcbiBcdHJldHVybiBhY3Rpb247XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTE6MDIuMTAzODYyMzU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NDUzODQ2MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXR3b3JrIEhlYWRlciBMZW5ndGggQ2FsY3VsYXRpb24gQnVnIGFuZCB0aGUgTmVlZCBmb3IgS01TQU4qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBtYWtpbmcgc3VyZSB3ZSdyZSBjb3JyZWN0bHkgY2FsY3VsYXRpbmcgaGVhZGVyIGxlbmd0aHMsIHNwZWNpZmljYWxseSB3aGVuIHBhY2tldHMgYXJlIGNvbWluZyBpbiBhdCBUQyBpbmdyZXNzLiBUaGUga2V5IGlzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGBza2ItXHUwMDNlbWFjX2xlbmAgdmVyc3VzIGBza2ItXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAuICBBdCBmaXJzdCBnbGFuY2UsIGl0IHNlZW1zIHNpbXBsZToganVzdCB1c2UgdGhlIGNvcnJlY3QgbGVuZ3RoLiBCdXQgbGV0J3MgZGl2ZSBkZWVwZXIuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGUgcHJvYmxlbSB3YXMganVzdCBvdXQtb2YtYm91bmRzIHJlYWRzIGlmIHdlIHVzZWQgYSBsZW5ndGggdGhhdCB3YXMgKnRvbyBsYXJnZSouIFdlJ2QgcG90ZW50aWFsbHkgYmUgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIE1BQyBoZWFkZXIuIEhvd2V2ZXIsIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuICBJdCdzIG1vcmUgc3VidGxlLiBJZiBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGlzIHVzZWQgYW5kIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgTUFDIGhlYWRlciAoYHNrYi1cdTAwM2VtYWNfbGVuYCksIHRoZW4gd2UgYXJlIGVzc2VudGlhbGx5IHB1c2hpbmcgYHNrYi1cdTAwM2VkYXRhYCBpbnRvIHRoZSBoZWFkcm9vbSBiZWZvcmUgdGhlIE1BQyBoZWFkZXIuXG5cbkNydWNpYWxseSwgdGhlIGhlYWRyb29tIG9mIGFuIGBza2JgIGlzICphbGxvY2F0ZWQqIG1lbW9yeSwgd2hpY2ggbWVhbnMgS0FTQU4gd2lsbCBub3QgZmxhZyBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gSG93ZXZlciwgdGhpcyBoZWFkcm9vbSBtZW1vcnkgaXMgKnVuaW5pdGlhbGl6ZWQqLiBUaGlzIGlzIGEgcHJvYmxlbSEgIFRoZSBvbGQgY29kZSB3YXMgZXNzZW50aWFsbHkgY29weWluZyBieXRlcyBmcm9tIHRoaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgaW50byB0aGUgcGFja2V0IGhlYWRlci4gIFdoZW4gdGhlIHBhY2tldCBpcyBzZW50IG91dCwgd2UgYXJlIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgYSBjbGFzc2ljIGluZm8tbGVhay4gS01TQU4gaXMgdGhlIHJpZ2h0IHRvb2wgdG8gY2F0Y2ggdGhpcyBiZWNhdXNlIGl0J3MgZGVzaWduZWQgc3BlY2lmaWNhbGx5IHRvIHRyYWNrIGluaXRpYWxpemF0aW9uIHN0YXRlLiBLQVNBTiBpcyB1c2VsZXNzIGhlcmUsIGJlY2F1c2UgaXQgb25seSBsb29rcyBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cblxuTGV0IG1lIGJyZWFrIGRvd24gdGhlIHNjZW5hcmlvOiB3aGVuIHBhY2tldHMgZW50ZXIgdGhlIFRDIGluZ3Jlc3MgcGF0aCwgYHNrYi1cdTAwM2VkYXRhYCBwb2ludHMgdG8gdGhlIG5ldHdvcmsgaGVhZGVyLiBUaGUgTUFDIGhlYWRlciBpcyBsb2NhdGVkICpiZWZvcmUqIHRoYXQuIFRoZSBwYXRjaCBjb3JyZWN0bHkgcmVhbGl6ZXMgdGhpcyBhbmQgdXNlcyBgc2tiLVx1MDAzZW1hY19sZW5gIHRvIGRldGVybWluZSB0aGUgTUFDIGhlYWRlcidzIGxlbmd0aC5cblxuKiAgIEluIGB0Y2ZfaWZlX2RlY29kZWAsIGlmIGBoYXJkX2hlYWRlcl9sZW5gIGlzIHVzZWQgaW5zdGVhZCBvZiBgbWFjX2xlbmAsIGBza2JfcHVzaGAgd2lsbCBtb3ZlIGBza2ItXHUwMDNlZGF0YWAgYmFjayBpbnRvIHRoZSB1bmluaXRpYWxpemVkIGhlYWRyb29tLCBjb3JydXB0aW5nIGRhdGEuXG4qICAgVGhlbiBgaWZlX2RlY29kZWAgaXMgY2FsbGVkLCBhbmQgd2lsbCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBIb3dldmVyLCB0aGUgdXNlIG9mIGBoZHJsZW5gIG1hdGNoZXMgdGhlIGBza2JfcHVzaGAgYW5kIHRoZSBhY2Nlc3MgaXMgZmluZS5cbiogICBJbiBgdGNmX2lmZV9lbmNvZGVgLCBhZ2FpbiB0aGUgd3JvbmcgbGVuZ3RoIGlzIHVzZWQuXG4qICAgYGlmZV9lbmNvZGVgIGNvcGllcyBgaGFyZF9oZWFkZXJfbGVuYCBieXRlcyBmcm9tIGBpZXRoaGAgKHdoaWNoIGluY2x1ZGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KSBpbnRvIHRoZSBwYWNrZXQgaGVhZGVyLlxuXG5JZiBgc2tiLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW5gIGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgTUFDIGhlYWRlciBsZW5ndGgsIHRoaXMgcHJvY2VzcyBsZWFrcyB0aGUgdW5pbml0aWFsaXplZCBza2IgaGVhZHJvb20gbWVtb3J5IGludG8gdGhlIG5ldHdvcmsuIEtNU0FOICptdXN0KiBiZSBlbmFibGVkIHRvIGRldGVjdCB0aGlzIGJ1ZywgYXMgaXQgaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQgZGF0YSBsZWFrLlxuXG5UaGVyZWZvcmUsIHRoaXMgaXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgbGVhZGluZyB0byBhbiBpbmZvcm1hdGlvbiBsZWFrLCBhbmQgS01TQU4gaXMgKnJlcXVpcmVkKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0NSwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTc6NTI6MDAuNTU3NzExNTU3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBgc2tiX3B1c2goKWAgYW5kIGBtZW1jcHkoKWAgdXNlZCBgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgaW5zdGVhZCBvZiBgc2tiLVxcdTAwM2VtYWNfbGVuYCBhdCBUQyBpbmdyZXNzLiBJZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyBsYXJnZXIgdGhhbiBgbWFjX2xlbmAsIGBza2JfcHVzaCgpYCBtb3ZlcyBgc2tiLVxcdTAwM2VkYXRhYCBpbnRvIHRoZSBza2IgaGVhZHJvb20gYmVmb3JlIHRoZSBhY3R1YWwgTUFDIGhlYWRlci4gVGhlIHNrYiBoZWFkcm9vbSBpcyB2YWxpZCBhbGxvY2F0ZWQgbWVtb3J5LCBzbyBLQVNBTiB3aWxsIG5vdCBmbGFnIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCB0aGlzIGhlYWRyb29tIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBUaGUgc3Vic2VxdWVudCBgbWVtY3B5KClgIGluIGBpZmVfZW5jb2RlKClgIGNvcGllcyB0aGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGludG8gdGhlIHBhY2tldCBoZWFkZXIsIGxlYWRpbmcgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQgYSBwb3RlbnRpYWwgaW5mby1sZWFrIG92ZXIgdGhlIG5ldHdvcmsuIEtNU0FOIGlzIHJlcXVpcmVkIHRvIGRldGVjdCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhcyBzdGFuZGFyZCBLQVNBTiBjYW5ub3QgY2F0Y2ggaW4tYm91bmRzIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBgc2tiX3B1c2goKWAgYW5kIGBtZW1jcHkoKWAgdXNlZCBgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbmAgaW5zdGVhZCBvZiBgc2tiLVxcdTAwM2VtYWNfbGVuYCBhdCBUQyBpbmdyZXNzLiBJZiBgaGFyZF9oZWFkZXJfbGVuYCBpcyBsYXJnZXIgdGhhbiBgbWFjX2xlbmAsIGBza2JfcHVzaCgpYCBtb3ZlcyBgc2tiLVxcdTAwM2VkYXRhYCBpbnRvIHRoZSBza2IgaGVhZHJvb20gYmVmb3JlIHRoZSBhY3R1YWwgTUFDIGhlYWRlci4gVGhlIHNrYiBoZWFkcm9vbSBpcyB2YWxpZCBhbGxvY2F0ZWQgbWVtb3J5LCBzbyBLQVNBTiB3aWxsIG5vdCBmbGFnIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBIb3dldmVyLCB0aGlzIGhlYWRyb29tIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBUaGUgc3Vic2VxdWVudCBgbWVtY3B5KClgIGluIGBpZmVfZW5jb2RlKClgIGNvcGllcyB0aGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGludG8gdGhlIHBhY2tldCBoZWFkZXIsIGxlYWRpbmcgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBhbmQgYSBwb3RlbnRpYWwgaW5mby1sZWFrIG92ZXIgdGhlIG5ldHdvcmsuIEtNU0FOIGlzIHJlcXVpcmVkIHRvIGRldGVjdCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhcyBzdGFuZGFyZCBLQVNBTiBjYW5ub3QgY2F0Y2ggaW4tYm91bmRzIHVuaW5pdGlhbGl6ZWQgcmVhZHMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowclhgh[1] Phase: Succeeded StartedAt: 2026-08-10 17:52:11 +0000 UTC FinishedAt: 2026-08-10 17:52:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 17:52:11 +0000 UTC FinishedAt: 2026-08-10 17:52:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2] Phase: Succeeded StartedAt: 2026-08-10 17:52:11 +0000 UTC FinishedAt: 2026-08-10 21:34:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 17:52:11 +0000 UTC FinishedAt: 2026-08-10 21:34:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 17:52:11 +0000 UTC FinishedAt: 2026-08-10 17:52:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 17:52:11 +0000 UTC FinishedAt: 2026-08-10 17:52:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowclhgh/series-workflowclhgh-convert-artifact-391660484/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 17:52:21 +0000 UTC FinishedAt: 2026-08-10 18:08:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 17:52:21 +0000 UTC FinishedAt: 2026-08-10 18:08:59 +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:*c7d73849-05c5-48a7-9896-8d93b778a2ec,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-workflowclhgh/series-workflowclhgh-convert-artifact-391660484/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": "0431308d-3ac8-47c5-a59c-a6c123440c42", "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-workflowclhgh/series-workflowclhgh-build-action-44992258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 17:52:21 +0000 UTC FinishedAt: 2026-08-10 18:08:49 +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:*c7d73849-05c5-48a7-9896-8d93b778a2ec,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-workflowclhgh/series-workflowclhgh-convert-artifact-391660484/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": "0431308d-3ac8-47c5-a59c-a6c123440c42", "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-workflowclhgh/series-workflowclhgh-build-action-44992258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 18:08:59 +0000 UTC FinishedAt: 2026-08-10 18:08:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 18:08:59 +0000 UTC FinishedAt: 2026-08-10 18:08:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 18:08:59 +0000 UTC FinishedAt: 2026-08-10 18:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 18:08:59 +0000 UTC FinishedAt: 2026-08-10 18:09:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowclhgh/series-workflowclhgh-convert-artifact-1412873539/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 18:09:09 +0000 UTC FinishedAt: 2026-08-10 18:11:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 18:09:09 +0000 UTC FinishedAt: 2026-08-10 18:11:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0431308d-3ac8-47c5-a59c-a6c123440c42,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-workflowclhgh/series-workflowclhgh-build-action-44992258/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-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 18:11:17 +0000 UTC FinishedAt: 2026-08-10 18:11:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 18:11:17 +0000 UTC FinishedAt: 2026-08-10 18:11:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 18:11:17 +0000 UTC FinishedAt: 2026-08-10 18:29:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 18:11:17 +0000 UTC FinishedAt: 2026-08-10 18:29:06 +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:*c7d73849-05c5-48a7-9896-8d93b778a2ec,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-workflowclhgh/series-workflowclhgh-convert-artifact-1412873539/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": "f2f3845f-c6d0-4657-9108-d8b3acf7f6fe", "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-workflowclhgh/series-workflowclhgh-build-action-2767595511/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 18:11:17 +0000 UTC FinishedAt: 2026-08-10 18:28:56 +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:*c7d73849-05c5-48a7-9896-8d93b778a2ec,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-workflowclhgh/series-workflowclhgh-convert-artifact-1412873539/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": "f2f3845f-c6d0-4657-9108-d8b3acf7f6fe", "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-workflowclhgh/series-workflowclhgh-build-action-2767595511/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 18:29:06 +0000 UTC FinishedAt: 2026-08-10 18:29:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 18:29:06 +0000 UTC FinishedAt: 2026-08-10 18:29:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 18:29:06 +0000 UTC FinishedAt: 2026-08-10 18:31:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 18:29:06 +0000 UTC FinishedAt: 2026-08-10 18:30:56 +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:*f2f3845f-c6d0-4657-9108-d8b3acf7f6fe,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-workflowclhgh/series-workflowclhgh-build-action-2767595511/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-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 18:31:06 +0000 UTC FinishedAt: 2026-08-10 21:34:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 18:31:06 +0000 UTC FinishedAt: 2026-08-10 21:34:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"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:*0431308d-3ac8-47c5-a59c-a6c123440c42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f2f3845f-c6d0-4657-9108-d8b3acf7f6fe,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-workflowclhgh/series-workflowclhgh-build-action-44992258/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-workflowclhgh/series-workflowclhgh-build-action-2767595511/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 18:31:06 +0000 UTC FinishedAt: 2026-08-10 18:31:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 18:31:06 +0000 UTC FinishedAt: 2026-08-10 18:31:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"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-workflowclhgh/series-workflowclhgh-convert-artifact-3904546652/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 18:31:06 +0000 UTC FinishedAt: 2026-08-10 18:31:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 18:31:06 +0000 UTC FinishedAt: 2026-08-10 18:31:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 18:31:06 +0000 UTC FinishedAt: 2026-08-10 18:31:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 18:31:16 +0000 UTC FinishedAt: 2026-08-10 21:34:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowclhgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ife_encode","ife_decode","tcf_ife_act"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_ACT_IFE","NET_CLS_ACT"],"series_id":"3f4d760a-b39e-48f6-b132-df8c5c38f8f4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 18:31:16 +0000 UTC FinishedAt: 2026-08-10 21:33:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0431308d-3ac8-47c5-a59c-a6c123440c42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f2f3845f-c6d0-4657-9108-d8b3acf7f6fe,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-workflowclhgh/series-workflowclhgh-build-action-44992258/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-workflowclhgh/series-workflowclhgh-build-action-2767595511/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-workflowclhgh/series-workflowclhgh-convert-artifact-3904546652/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,}