Name: series-workflowkrqgc Phase: Succeeded StartedAt: 2026-09-04 03:45:36 +0000 UTC FinishedAt: 2026-09-04 08:16:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[0] Phase: Succeeded StartedAt: 2026-09-04 03:45:36 +0000 UTC FinishedAt: 2026-09-04 04:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 03:45:36 +0000 UTC FinishedAt: 2026-09-04 04:38:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "b9ca79bc-1f02-4452-b587-0631dc90bc5e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_calculate_protection_path", "page_counter_calculate_protection", "shrink_one", "mem_cgroup_calculate_protection" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoJiMzNDssCiAgICAmIzM0O3BhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfb25lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIGFyaXRobWV0aWMgb3ZlcmZsb3cgKCNERSkgZHVyaW5nIG1lbW9yeSBjZ3JvdXAgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gaW4gbW0vcGFnZV9jb3VudGVyLmMgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgdG8gY2FsY3VsYXRlIGFuY2VzdG9yIHByb3RlY3Rpb24gdmFsdWVzIGZvciBNR0xSVSBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBUaGUgY2hhbmdlcyBkZWFsIGVudGlyZWx5IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYXJpdGhtZXRpYywgY2dyb3VwIGhpZXJhcmNoeSB0cmF2ZXJzYWwgdW5kZXIgUkNVLCBhbmQgcmVjbGFpbSBoZXVyaXN0aWNzLlxuLSBObyBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycyAoc3VjaCBhcyBjb3B5X3RvX3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIGlvY3RsIHJldHVybnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgb3IgcmVhZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGFuZCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHNjYWxhciB0eXBlcyBpbml0aWFsaXplZCBpbW1lZGlhdGVseSB1cG9uIGRlY2xhcmF0aW9uLlxuLSBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGNvZGUgKGUuZy4gYXJpdGhtZXRpYyBvdmVyZmxvdywgZGl2aXNpb24tYnktemVybywgUkNVL3BvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycywgVUJTQU4sIGFuZCBLQVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkIGZvciB0aGlzIHBhdGNoIHNlcmllcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBmaXggcG90ZW50aWFsIDY0LWJpdCBkaXZpc2lvbiBvdmVyZmxvdyBpbiBlZmZlY3RpdmVfcHJvdGVjdGlvbigpLCBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSBpbiBtbS9tZW1jb250cm9sLmMgY2FsbGVkIGZyb20gbW0vdm1zY2FuLmMgKE11bHRpLUdlbiBMUlUgc2hyaW5rX29uZSkuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbWVtY2cgcHJvdGVjdGlvbiBhbmQgcmVjbGFpbSBjYWxjdWxhdGlvbnMgaW4gcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDEwMzEyZWM5MGIyN2VlNjM0ZmY2Y2Y1ODhhOGE0MjYyOGE1MTM3ZGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA0OjM3OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGY5MzJiMWRkZGE4YzkuLmQzNTI4OTljZTUwY2UgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xODgzLDYgJiM0MzsxODgzLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTFJVX0dFTilcbiYjNDM7dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4mIzQzO1x0XHRcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1pTV0FQKVxuIGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcbiB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggOWE2NWQ3MTQ4YzIyNy4uMDljZjMwY2NlMmY3MyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNTI0MCw2ICYjNDM7NTI0MCw1MSBAQCB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4gXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOXG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoXG4mIzQzOyAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApXG4mIzQzOyAqIEBtZW1jZzogdGhlIHRhcmdldCBtZW1vcnkgY2dyb3VwXG4mIzQzOyAqXG4mIzQzOyAqIFdhbGsgdGhlIGFuY2VzdG9yIHBhdGggZnJvbSBAcm9vdCBkb3duIHRvIEBtZW1jZyBhbmQgY29tcHV0ZSB0aGUgZWZmZWN0aXZlXG4mIzQzOyAqIHByb3RlY3Rpb24gYXQgZWFjaCBsZXZlbC4gIFRoaXMgaXMgc2FmZSBmb3IgaXNvbGF0ZWQgcXVlcmllcyBiZWNhdXNlIGl0XG4mIzQzOyAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7e1xuJiM0MztcdGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24gPVxuJiM0MztcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDtcbiYjNDM7XHRzdHJ1Y3QgY2dyb3VwICpjZztcbiYjNDM7XHRpbnQgcm9vdF9sZXZlbCwgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyb290KVxuJiM0MztcdFx0cm9vdCA9IHJvb3RfbWVtX2Nncm91cDtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbWNnID09IHJvb3QpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJvb3RfbGV2ZWwgPSByb290LVx1MDAzZWNzcy5jZ3JvdXAtXHUwMDNlbGV2ZWw7XG4mIzQzO1x0Y2cgPSBtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0Zm9yIChpID0gcm9vdF9sZXZlbCAmIzQzOyAxOyBpIFx1MDAzYz0gY2ctXHUwMDNlbGV2ZWw7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyO1xuJiM0MztcbiYjNDM7XHRcdGN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy1cdTAwM2VhbmNlc3RvcnNbaV0sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XG4mIzQzO1x0XHRpZiAoY3VyKVxuJiM0MztcdFx0XHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbiYjNDM7XG4gc3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdGdmcF90IGdmcClcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNDUwNTQzZjRiMzE4Yi4uZWYxYTY0NzYyZDRhMiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VfY291bnRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXRoNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG5AQCAtMzc2LDcgJiM0MzszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxuIFx0ICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC5cbiBcdCAqL1xuIFx0aWYgKHNpYmxpbmdzX3Byb3RlY3RlZCBcdTAwM2UgcGFyZW50X2VmZmVjdGl2ZSlcbi1cdFx0cmV0dXJuIHByb3RlY3RlZCAqIHBhcmVudF9lZmZlY3RpdmUgLyBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4mIzQzO1x0XHRyZXR1cm4gbXVsX3U2NF91NjRfZGl2X3U2NChwcm90ZWN0ZWQsIHBhcmVudF9lZmZlY3RpdmUsXG4mIzQzO1x0XHRcdFx0XHQgICBzaWJsaW5nc19wcm90ZWN0ZWQpO1xuIFxuIFx0LypcbiBcdCAqIE9rLCB1dGlsaXplZCBwcm90ZWN0aW9uIG9mIGFsbCBjaGlsZHJlbiBpcyB3aXRoaW4gd2hhdCB0aGVcbkBAIC00MTcsMTMgJiM0Mzs0MTksMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcbiBcdGlmIChwYXJlbnRfZWZmZWN0aXZlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgcGFyZW50X3VzYWdlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgdXNhZ2UgXHUwMDNlIHByb3RlY3RlZCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgdW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgdW5wcm90ZWN0ZWQgPSB1c2FnZSAtIHByb3RlY3RlZDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIFxuLVx0XHR1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuLVx0XHR1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4tXHRcdHVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIHVzYWdlcyBhcmVuJiMzOTt0IHJlYWQgYXRvbWljYWxseSwgc28gYSBjaGlsZCBjYW4gdHJhbnNpZW50bHlcbiYjNDM7XHRcdCAqIGFwcGVhciB0byB1c2UgbW9yZSB0aGFuIGl0cyBwYXJlbnQsIG1ha2luZyB0aGUgcmF0aW8gZXhjZWVkIDFcbiYjNDM7XHRcdCAqIGFuZCB0aGUgcXVvdGllbnQgb3ZlcmZsb3cgNjQgYml0cyAoI0RFIG9uIHg4NikuICBDYXAgaXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHVucHJvdGVjdGVkID0gbWluKHVucHJvdGVjdGVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQpO1xuIFxuLVx0XHRlcCAmIzQzOz0gdW5jbGFpbWVkO1xuJiM0MztcdFx0ZXAgJiM0Mzs9IG11bF91NjRfdTY0X2Rpdl91NjQodW5jbGFpbWVkLCB1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtcbiBcdH1cbiBcbiBcdHJldHVybiBlcDtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li5lYWY1NzUwNmJlMmY3IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTE4Nyw3ICYjNDM7NTE4NywxMyBAQCBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuIFxuLVx0LyogbHJ1X2dlbl9hZ2Vfbm9kZSgpIGNhbGxlZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCkgKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZvciBrc3dhcGQsIGxydV9nZW5fYWdlX25vZGUoKSBoYXMgYWxyZWFkeSBjYWxsZWRcbiYjNDM7XHQgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKClcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXG4mIzQzO1x0XHRtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoTlVMTCwgbWVtY2cpO1xuJiM0MztcbiBcdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpXG4gXHRcdHJldHVybiBNRU1DR19MUlVfWU9VTkc7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgmIzM0OywKICAgICYjMzQ7cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgICAmIzM0O3Nocmlua19vbmUmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfY291bnRlci5jIHRvIGZpeCBwb3RlbnRpYWwgNjQtYml0IGRpdmlzaW9uIG92ZXJmbG93IGluIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKCksIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIGluIG1tL21lbWNvbnRyb2wuYyBjYWxsZWQgZnJvbSBtbS92bXNjYW4uYyAoTXVsdGktR2VuIExSVSBzaHJpbmtfb25lKS4gVGhlc2UgY2hhbmdlcyBhbHRlciBtZW1jZyBwcm90ZWN0aW9uIGFuZCByZWNsYWltIGNhbGN1bGF0aW9ucyBpbiByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTAzMTJlYzkwYjI3ZWU2MzRmZjZjZjU4OGE4YTQyNjI4YTUxMzdkZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDQ6Mzc6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IGY5MzJiMWRkZGE4YzkuLmQzNTI4OTljZTUwY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xODgzLDYgJiM0MzsxODgzLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTFJVX0dFTikKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiYjNDM7CQkJCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1pTV0FQKQogYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpOwogdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA5YTY1ZDcxNDhjMjI3Li4wOWNmMzBjY2UyZjczIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC01MjQwLDYgJiM0Mzs1MjQwLDUxIEBAIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKIAlwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oJmFtcDtyb290LSZndDttZW1vcnksICZhbXA7bWVtY2ctJmd0O21lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aAomIzQzOyAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApCiYjNDM7ICogQG1lbWNnOiB0aGUgdGFyZ2V0IG1lbW9yeSBjZ3JvdXAKJiM0MzsgKgomIzQzOyAqIFdhbGsgdGhlIGFuY2VzdG9yIHBhdGggZnJvbSBAcm9vdCBkb3duIHRvIEBtZW1jZyBhbmQgY29tcHV0ZSB0aGUgZWZmZWN0aXZlCiYjNDM7ICogcHJvdGVjdGlvbiBhdCBlYWNoIGxldmVsLiAgVGhpcyBpcyBzYWZlIGZvciBpc29sYXRlZCBxdWVyaWVzIGJlY2F1c2UgaXQKJiM0MzsgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJYm9vbCByZWN1cnNpdmVfcHJvdGVjdGlvbiA9CiYjNDM7CQljZ3JwX2RmbF9yb290LmZsYWdzICZhbXA7IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7CiYjNDM7CXN0cnVjdCBjZ3JvdXAgKmNnOwomIzQzOwlpbnQgcm9vdF9sZXZlbCwgaTsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFyb290KQomIzQzOwkJcm9vdCA9IHJvb3RfbWVtX2Nncm91cDsKJiM0MzsKJiM0MzsJaWYgKG1lbWNnID09IHJvb3QpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJvb3RfbGV2ZWwgPSByb290LSZndDtjc3MuY2dyb3VwLSZndDtsZXZlbDsKJiM0MzsJY2cgPSBtZW1jZy0mZ3Q7Y3NzLmNncm91cDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlmb3IgKGkgPSByb290X2xldmVsICYjNDM7IDE7IGkgJmx0Oz0gY2ctJmd0O2xldmVsOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IG1lbV9jZ3JvdXAgKmN1cjsKJiM0MzsKJiM0MzsJCWN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy0mZ3Q7YW5jZXN0b3JzW2ldLAomIzQzOwkJCQkJCSAgICAgJmFtcDttZW1vcnlfY2dycF9zdWJzeXMpKTsKJiM0MzsJCWlmIChjdXIpCiYjNDM7CQkJcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCZhbXA7cm9vdC0mZ3Q7bWVtb3J5LAomIzQzOwkJCQkJCQkgICZhbXA7Y3VyLSZndDttZW1vcnksCiYjNDM7CQkJCQkJCSAgcmVjdXJzaXZlX3Byb3RlY3Rpb24pOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KJiM0MzsKIHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCWdmcF90IGdmcCkKIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmMKaW5kZXggNDUwNTQzZjRiMzE4Yi4uZWYxYTY0NzYyZDRhMiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9jb3VudGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9jb3VudGVyLmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfY291bnRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2F0b21pYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYXRoNjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwpAQCAtMzc2LDcgJiM0MzszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLAogCSAqIG90aGVyd2lzZSBnZXQgYSBzbWFsbGVyIGNodW5rIHRoYW4gd2hhdCB0aGV5IGNsYWltZWQuCiAJICovCiAJaWYgKHNpYmxpbmdzX3Byb3RlY3RlZCAmZ3Q7IHBhcmVudF9lZmZlY3RpdmUpCi0JCXJldHVybiBwcm90ZWN0ZWQgKiBwYXJlbnRfZWZmZWN0aXZlIC8gc2libGluZ3NfcHJvdGVjdGVkOwomIzQzOwkJcmV0dXJuIG11bF91NjRfdTY0X2Rpdl91NjQocHJvdGVjdGVkLCBwYXJlbnRfZWZmZWN0aXZlLAomIzQzOwkJCQkJICAgc2libGluZ3NfcHJvdGVjdGVkKTsKIAogCS8qCiAJICogT2ssIHV0aWxpemVkIHByb3RlY3Rpb24gb2YgYWxsIGNoaWxkcmVuIGlzIHdpdGhpbiB3aGF0IHRoZQpAQCAtNDE3LDEzICYjNDM7NDE5LDE4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsCiAJaWYgKHBhcmVudF9lZmZlY3RpdmUgJmd0OyBzaWJsaW5nc19wcm90ZWN0ZWQgJmFtcDsmYW1wOwogCSAgICBwYXJlbnRfdXNhZ2UgJmd0OyBzaWJsaW5nc19wcm90ZWN0ZWQgJmFtcDsmYW1wOwogCSAgICB1c2FnZSAmZ3Q7IHByb3RlY3RlZCkgewotCQl1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgdW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgdW5wcm90ZWN0ZWQgPSB1c2FnZSAtIHByb3RlY3RlZDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkOwogCi0JCXVuY2xhaW1lZCA9IHBhcmVudF9lZmZlY3RpdmUgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7Ci0JCXVuY2xhaW1lZCAqPSB1c2FnZSAtIHByb3RlY3RlZDsKLQkJdW5jbGFpbWVkIC89IHBhcmVudF91c2FnZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgdXNhZ2VzIGFyZW4mIzM5O3QgcmVhZCBhdG9taWNhbGx5LCBzbyBhIGNoaWxkIGNhbiB0cmFuc2llbnRseQomIzQzOwkJICogYXBwZWFyIHRvIHVzZSBtb3JlIHRoYW4gaXRzIHBhcmVudCwgbWFraW5nIHRoZSByYXRpbyBleGNlZWQgMQomIzQzOwkJICogYW5kIHRoZSBxdW90aWVudCBvdmVyZmxvdyA2NCBiaXRzICgjREUgb24geDg2KS4gIENhcCBpdC4KJiM0MzsJCSAqLwomIzQzOwkJdW5wcm90ZWN0ZWQgPSBtaW4odW5wcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7CiAKLQkJZXAgJiM0Mzs9IHVuY2xhaW1lZDsKJiM0MzsJCWVwICYjNDM7PSBtdWxfdTY0X3U2NF9kaXZfdTY0KHVuY2xhaW1lZCwgdW5wcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7CiAJfQogCiAJcmV0dXJuIGVwOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAyNDVmNjhjNzViMjg5Li5lYWY1NzUwNmJlMmY3IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNTE4Nyw3ICYjNDM7NTE4NywxMyBAQCBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7CiAKLQkvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqLwomIzQzOwkvKgomIzQzOwkgKiBGb3Iga3N3YXBkLCBscnVfZ2VuX2FnZV9ub2RlKCkgaGFzIGFscmVhZHkgY2FsbGVkCiYjNDM7CSAqIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKQomIzQzOwkgKi8KJiM0MzsJaWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpKQomIzQzOwkJbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKE5VTEwsIG1lbWNnKTsKJiM0MzsKIAlpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKQogCQlyZXR1cm4gTUVNQ0dfTFJVX1lPVU5HOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NjYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsdGVycyB0aGUgbWVtb3J5IGNvbnRyb2wgYmVoYXZpb3IuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBzcHJlYWQgYWNyb3NzIGEgZmV3IGtleSBhcmVhcywgc28gSSBuZWVkIHRvIHBpZWNlIHRoaXMgdG9nZXRoZXIuCgpGaXJzdCwgdGhlcmUmIzM5O3MgdGhlIGhlYWRlciwgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgd2hpY2ggZGVmaW5lcyBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgZnVuY3Rpb24gd29ya3MuCgpUaGVuLCB0aGUgaW1wbGVtZW50YXRpb24gbGl2ZXMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgbG9naWMgdGhlcmUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFjdHVhbCBwcm90ZWN0aW9uIHBhdGggY2FsY3VsYXRpb24uIFRoZSBpbnRlbnQgaXMgY2xlYXIgZW5vdWdoLCBpdCB3aWxsIGxpa2VseSBmb2xsb3cgdGhlIGNncm91cCBoaWVyYXJjaHkuCgpOZXh0LCB0aGVyZSYjMzk7cyBgbW0vcGFnZV9jb3VudGVyLmNgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgYXJlYSBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gSSBzZWUgdGhlIHVwZGF0ZSB0byBgZWZmZWN0aXZlX3Byb3RlY3Rpb25gIHRvIHVzZSBgbXVsX3U2NF91NjRfZGl2X3U2NGAsIGFuZCB0aGUgY2xhbXBpbmcgb2YgYHVucHJvdGVjdGVkYCB0byB0aGUgcGFyZW50JiMzOTtzIGB1bnByb3RlY3RlZGAgdmFsdWUuIFRoYXQmIzM5O3MgYSBnb29kIG1vdmU7IHRoZSB1c2Ugb2YgYG11bF91NjRfdTY0X2Rpdl91NjRgIGluZGljYXRlcyBhbiBhdHRlbXB0IHRvIGF2b2lkIG92ZXJmbG93IGlzc3VlcywgYW5kIGNsYW1waW5nIGF0IHRoZSBwYXJlbnQgc2hvdWxkIGhlbHAgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBwcm90ZWN0aW9uIHVuZGVyZmxvdy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBhZGRyZXNzZXMgdGhlIGRpdmlzaW9uIG92ZXJmbG93IGNvbmNlcm5zLgoKRmluYWxseSwgYG1tL3Ztc2Nhbi5jYCBjYWxscyBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKE5VTEwsIG1lbWNnKWAgaW4gYHNocmlua19vbmUoKWAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIHdoZW4gbm90IGtzd2FwZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBNR0xSVSAob3IsIG1vcmUgcHJlY2lzZWx5LCBpZiBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQpLiBJbnRlcmVzdGluZy4gVGhpcyBtZWFucyB0aGUgbmV3IHByb3RlY3Rpb24gbG9naWMgaXMgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBwYWdlIHJlY2xhbWF0aW9uIHByb2Nlc3MuIE5vdywgSSBoYXZlIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBtZW1jZyByZWNsYWltIG1lY2hhbmlzbS4KClRpbWUgdG8gcHVsbCBvdXQgdGhlIGdyZXBwZXIgb3IgcmVhZCB0aGUgZmlsZXMgZGlyZWN0bHkgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBjb2RlIGFuZCB0cmFjZSBob3cgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgaXMgYmVpbmcgdXNlZCBhbmQgaG93IHRoaXMgaW1wYWN0cyB0aGUgY2FsbGVycyBhbmQgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgZmxvdy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYmFjayB0byBpdHMgcm9vdCB0byBnZXQgdGhlIGJpZyBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODgwPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg4Ni0jaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19MUlVfR0VOKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTg4Nzp2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4ODgtXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4ODktI2Vsc2VcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4OTA6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4OTEtXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jPTUyMjg9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjQ0LS8qKlxubW0vbWVtY29udHJvbC5jOjUyNDU6ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aFxubW0vbWVtY29udHJvbC5jLTUyNDYtICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI1Mi0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjUzOnZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxubW0vbWVtY29udHJvbC5jLTUyNTQtXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTUxODI9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE5NC1cdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jOjUxOTU6XHRcdG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChOVUxMLCBtZW1jZyk7XG5tbS92bXNjYW4uYy01MTk2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBmb2N1c2luZyBvbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zOgoKKipEaXZpbmcgRGVlcCBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKgoKT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aG9zZSBmaWxlczogYG1tL3BhZ2VfY291bnRlci5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLiBUaGVzZSBhcmUgY3J1Y2lhbC4gYHBhZ2VfY291bnRlci5jYCBkZWFscyB3aXRoIHRyYWNraW5nIHBhZ2UgdXNhZ2UsIGZ1bmRhbWVudGFsIGZvciBhbnkgc2FuZSBtZW1vcnkgbWFuYWdlbWVudC4gYG1lbWNvbnRyb2wuY2AgaXMgd2hlcmUgdGhlIGNvbnRyb2wgZ3JvdXBzIGZvciBtZW1vcnkgaXNvbGF0aW9uIGxpdmUsIGFmZmVjdGluZyByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBhY2NvdW50aW5nIGJldHdlZW4gcHJvY2Vzc2VzIGFuZCBjb250YWluZXJzLiBBbmQsIG9mIGNvdXJzZSwgYHZtc2Nhbi5jYCBoYW5kbGVzIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBhbmQgcmVjbGFpbWluZyBwcm9jZXNzLCB0aGUgaGVhcnQgb2YgaG93IHdlIG1hbmFnZSBzd2FwcGluZyBhbmQgZnJlZWluZyB1cCBtZW1vcnkgcHJlc3N1cmUuIEJ5IGV4YW1pbmluZyB0aGUgY2hhbmdlcyBhY3Jvc3MgdGhlc2UgdGhyZWUsIEkgc2hvdWxkIGdldCBhIHByZXR0eSBnb29kIHNlbnNlIG9mIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB3aGF0ZXZlciYjMzk7cyBiZWVuIG1vZGlmaWVkLiBUaGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHBhZ2UgYWNjb3VudGluZywgY29udHJvbCBncm91cHMsIGFuZCB0aGUgc2Nhbm5pbmcgc3RyYXRlZ3kgYXJlIGFsd2F5cyBpbnRlcnR3aW5lZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIG5ldyByZXNvdXJjZSBsaW1pdHMsIGNoYW5nZXMgaW4gaG93IHBhZ2VzIGFyZSBjbGFzc2lmaWVkLCBvciBzaGlmdHMgaW4gdGhlIHJlY2xhaW0gYmVoYXZpb3IuIEhvcGVmdWxseSB0aGlzIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9jb3VudGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2NTpcdFx0dW5zaWduZWQgbG9uZyBwcm90ZWN0ZWQ7XG4gMzY2Olx0XHR1bnNpZ25lZCBsb25nIGVwO1xuIDM2NzpcdFxuIDM2ODpcdFx0cHJvdGVjdGVkID0gbWluKHVzYWdlLCBzZXR0aW5nKTtcbiAzNjk6XHRcdC8qXG4gMzcwOlx0XHQgKiBJZiBhbGwgY2dyb3VwcyBhdCB0aGlzIGxldmVsIGNvbWJpbmVkIGNsYWltIGFuZCB1c2UgbW9yZVxuIDM3MTpcdFx0ICogcHJvdGVjdGlvbiB0aGFuIHdoYXQgdGhlIHBhcmVudCBhZmZvcmRzIHRoZW0sIGRpc3RyaWJ1dGVcbiAzNzI6XHRcdCAqIHNoYXJlcyBpbiBwcm9wb3J0aW9uIHRvIHV0aWxpemF0aW9uLlxuIDM3MzpcdFx0ICpcbiAzNzQ6XHRcdCAqIFdlIGFyZSB1c2luZyBhY3R1YWwgdXRpbGl6YXRpb24gcmF0aGVyIHRoYW4gdGhlIHN0YXRpY2FsbHlcbiAzNzU6XHRcdCAqIGNsYWltZWQgcHJvdGVjdGlvbiBpbiBvcmRlciB0byBiZSB3b3JrLWNvbnNlcnZpbmc6IGNsYWltZWRcbiAzNzY6XHRcdCAqIGJ1dCB1bnVzZWQgcHJvdGVjdGlvbiBpcyBhdmFpbGFibGUgdG8gc2libGluZ3MgdGhhdCB3b3VsZFxuIDM3NzpcdFx0ICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC5cbiAzNzg6XHRcdCAqL1xuIDM3OTpcdFx0aWYgKHNpYmxpbmdzX3Byb3RlY3RlZCBcdTAwM2UgcGFyZW50X2VmZmVjdGl2ZSlcbiAzODA6XHRcdFx0cmV0dXJuIG11bF91NjRfdTY0X2Rpdl91NjQocHJvdGVjdGVkLCBwYXJlbnRfZWZmZWN0aXZlLFxuIDM4MTpcdFx0XHRcdFx0XHQgICBzaWJsaW5nc19wcm90ZWN0ZWQpO1xuIDM4MjpcdFxuIDM4MzpcdFx0LypcbiAzODQ6XHRcdCAqIE9rLCB1dGlsaXplZCBwcm90ZWN0aW9uIG9mIGFsbCBjaGlsZHJlbiBpcyB3aXRoaW4gd2hhdCB0aGVcbiAzODU6XHRcdCAqIHBhcmVudCBhZmZvcmRzIHRoZW0sIHNvIHdlIGtub3cgd2hhdGV2ZXIgdGhpcyBjaGlsZCBjbGFpbXNcbiAzODY6XHRcdCAqIGFuZCB1dGlsaXplcyBpcyBlZmZlY3RpdmVseSBwcm90ZWN0ZWQuXG4gMzg3Olx0XHQgKlxuIDM4ODpcdFx0ICogSWYgdGhlcmUgaXMgdW5wcm90ZWN0ZWQgdXNhZ2UgYmV5b25kIHRoaXMgdmFsdWUsIHJlY2xhaW1cbiAzODk6XHRcdCAqIHdpbGwgYXBwbHkgcHJlc3N1cmUgaW4gcHJvcG9ydGlvbiB0byB0aGF0IGFtb3VudC5cbiAzOTA6XHRcdCAqXG4gMzkxOlx0XHQgKiBJZiB0aGVyZSBpcyB1bnV0aWxpemVkIHByb3RlY3Rpb24sIHRoZSBjZ3JvdXAgd2lsbCBiZSBmdWxseVxuIDM5MjpcdFx0ICogc2hpZWxkZWQgZnJvbSByZWNsYWltLCBidXQgd2UgZG8gcmV0dXJuIGEgc21hbGxlciB2YWx1ZSBmb3JcbiAzOTM6XHRcdCAqIHByb3RlY3Rpb24gdGhhbiB3aGF0IHRoZSBncm91cCBjb3VsZCBlbmpveSBpbiB0aGVvcnkuIFRoaXNcbiAzOTQ6XHRcdCAqIGlzIG9rYXkuIFdpdGggdGhlIG92ZXJjb21taXQgZGlzdHJpYnV0aW9uIGFib3ZlLCBlZmZlY3RpdmVcbiAzOTU6XHRcdCAqIHByb3RlY3Rpb24gaXMgYWx3YXlzIGRlcGVuZGVudCBvbiBob3cgbWVtb3J5IGlzIGFjdHVhbGx5XG4gMzk2Olx0XHQgKiBjb25zdW1lZCBhbW9uZyB0aGUgc2libGluZ3MgYW55d2F5LlxuIDM5NzpcdFx0ICovXG4gMzk4Olx0XHRlcCA9IHByb3RlY3RlZDtcbiAzOTk6XHRcbiA0MDA6XHRcdC8qXG4gNDAxOlx0XHQgKiBJZiB0aGUgY2hpbGRyZW4gYXJlbiYjMzk7dCBjbGFpbWluZyAoYWxsIG9mKSB0aGUgcHJvdGVjdGlvblxuIDQwMjpcdFx0ICogYWZmb3JkZWQgdG8gdGhlbSBieSB0aGUgcGFyZW50LCBkaXN0cmlidXRlIHRoZSByZW1haW5kZXIgaW5cbiA0MDM6XHRcdCAqIHByb3BvcnRpb24gdG8gdGhlICh1bnByb3RlY3RlZCkgbWVtb3J5IG9mIGVhY2ggY2dyb3VwLiBUaGF0XG4gNDA0Olx0XHQgKiB3YXksIGNncm91cHMgdGhhdCBhcmVuJiMzOTt0IGV4cGxpY2l0bHkgcHJpb3JpdGl6ZWQgd3J0IGVhY2hcbiA0MDU6XHRcdCAqIG90aGVyIGNvbXBldGUgZnJlZWx5IG92ZXIgdGhlIGFsbG93YW5jZSwgYnV0IHRoZXkgYXJlXG4gNDA2Olx0XHQgKiBjb2xsZWN0aXZlbHkgcHJvdGVjdGVkIGZyb20gbmVpZ2hib3JpbmcgdHJlZXMuXG4gNDA3Olx0XHQgKlxuIDQwODpcdFx0ICogV2UmIzM5O3JlIHVzaW5nIHVucHJvdGVjdGVkIG1lbW9yeSBmb3IgdGhlIHdlaWdodCBzbyB0aGF0IGlmXG4gNDA5Olx0XHQgKiBzb21lIGNncm91cHMgRE8gY2xhaW0gZXhwbGljaXQgcHJvdGVjdGlvbiwgd2UgZG9uJiMzOTt0IHByb3RlY3RcbiA0MTA6XHRcdCAqIHRoZSBzYW1lIGJ5dGVzIHR3aWNlLlxuIDQxMTpcdFx0ICpcbiA0MTI6XHRcdCAqIENoZWNrIGJvdGggdXNhZ2UgYW5kIHBhcmVudF91c2FnZSBhZ2FpbnN0IHRoZSByZXNwZWN0aXZlXG4gNDEzOlx0XHQgKiBwcm90ZWN0ZWQgdmFsdWVzLiBPbmUgc2hvdWxkIGltcGx5IHRoZSBvdGhlciwgYnV0IHRoZXlcbiA0MTQ6XHRcdCAqIGFyZW4mIzM5O3QgcmVhZCBhdG9taWNhbGx5IC0gbWFrZSBzdXJlIHRoZSBkaXZpc2lvbiBpcyBzYW5lLlxuIDQxNTpcdFx0ICovXG4gNDE2Olx0XHRpZiAoIXJlY3Vyc2l2ZV9wcm90ZWN0aW9uKVxuIDQxNzpcdFx0XHRyZXR1cm4gZXA7XG4gNDE4Olx0XG4gNDE5Olx0XHRpZiAocGFyZW50X2VmZmVjdGl2ZSBcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFx1MDAyNlx1MDAyNlxuIDQyMDpcdFx0ICAgIHBhcmVudF91c2FnZSBcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFx1MDAyNlx1MDAyNlxuIDQyMTpcdFx0ICAgIHVzYWdlIFx1MDAzZSBwcm90ZWN0ZWQpIHtcbiA0MjI6XHRcdFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIDQyMzpcdFx0XHR1bnNpZ25lZCBsb25nIHVucHJvdGVjdGVkID0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4gNDI0Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIDQyNTpcdFxuIDQyNjpcdFx0XHQvKlxuIDQyNzpcdFx0XHQgKiBUaGUgdXNhZ2VzIGFyZW4mIzM5O3QgcmVhZCBhdG9taWNhbGx5LCBzbyBhIGNoaWxkIGNhbiB0cmFuc2llbnRseVxuIDQyODpcdFx0XHQgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxXG4gNDI5Olx0XHRcdCAqIGFuZCB0aGUgcXVvdGllbnQgb3ZlcmZsb3cgNjQgYml0cyAoI0RFIG9uIHg4NikuICBDYXAgaXQuXG4gNDMwOlx0XHRcdCAqL1xuIDQzMTpcdFx0XHR1bnByb3RlY3RlZCA9IG1pbih1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtcbiA0MzI6XHRcbiA0MzM6XHRcdFx0ZXAgJiM0Mzs9IG11bF91NjRfdTY0X2Rpdl91NjQodW5jbGFpbWVkLCB1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtcbiA0MzQ6XHRcdH1cbiA0MzU6XHRcbiA0MzY6XHRcdHJldHVybiBlcDtcbiA0Mzc6XHR9XG4gNDM4Olx0XG4gNDM5Olx0XG4gNDQwOlx0LyoqXG4gNDQxOlx0ICogcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uIC0gY2hlY2sgaWYgbWVtb3J5IGNvbnN1bXB0aW9uIGlzIGluIHRoZSBub3JtYWwgcmFuZ2VcbiA0NDI6XHQgKiBAcm9vdDogdGhlIHRvcCBhbmNlc3RvciBvZiB0aGUgc3ViLXRyZWUgYmVpbmcgY2hlY2tlZFxuIDQ0MzpcdCAqIEBjb3VudGVyOiB0aGUgcGFnZV9jb3VudGVyIHRoZSBjb3VudGVyIHRvIHVwZGF0ZVxuIDQ0NDpcdCAqIEByZWN1cnNpdmVfcHJvdGVjdGlvbjogV2hldGhlciB0byB1c2UgbWVtb3J5X3JlY3Vyc2l2ZXByb3QgYmVoYXZpb3IuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBQcm90ZWN0aW9uIGluIGBtbS9tZW1jb250cm9sLmNgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG1lbW9yeSBjZ3JvdXBzIGFuZCBob3cgcHJvdGVjdGlvbiBpcyBoYW5kbGVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgcGxhY2Ugd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGRldGVybWluaW5nIG1lbW9yeSBwcm90ZWN0aW9uIHN0cmF0ZWdpZXMgcmVzaWRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZmlndXJlcyBvdXQgdGhlIGFwcHJvcHJpYXRlICYjMzQ7cGF0aCYjMzQ7IOKAkyB0aGUgc2VxdWVuY2Ugb2YgY2hlY2tzIGFuZCBkZWNpc2lvbnMg4oCTIHRvIGVuc3VyZSBtZW1vcnkgaXNvbGF0aW9uIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGhpbiBhIGNncm91cCBjb250ZXh0LiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBnb29kIGRlYWwgb2YgY29tcGxleGl0eSBoZXJlLCBiYWxhbmNpbmcgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgd2l0aCByb2J1c3QgcHJvdGVjdGlvbi4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhlIGtlcm5lbCBhcmNoaXRlY3RzIHRhY2tsZWQgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRlcmlhIGFuZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhhdCBjYWxjdWxhdGlvbjogaXMgaXQgYmFzZWQgb24gdGhlIGN1cnJlbnQgd29ya2xvYWQsIHRoZSBjZ3JvdXAmIzM5O3MgbGltaXRzLCBvdmVyYWxsIHN5c3RlbSBsb2FkLCBvciBzb21lIGNvbWJpbmF0aW9uIG9mIHRoZXNlPyBVbmRlcnN0YW5kaW5nIHRoaXMgaXMga2V5IHRvIHBlcmZvcm1hbmNlIHRyb3VibGVzaG9vdGluZyBhbmQgdHVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjMwOlx0e1xuNTIzMTpcdFx0Ym9vbCByZWN1cnNpdmVfcHJvdGVjdGlvbiA9XG41MjMyOlx0XHRcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7XG41MjMzOlx0XG41MjM0Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuNTIzNTpcdFx0XHRyZXR1cm47XG41MjM2Olx0XG41MjM3Olx0XHRpZiAoIXJvb3QpXG41MjM4Olx0XHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG41MjM5Olx0XG41MjQwOlx0XHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuNTI0MTpcdH1cbjUyNDI6XHRcbjUyNDM6XHQjaWZkZWYgQ09ORklHX0xSVV9HRU5cbjUyNDQ6XHQvKipcbjUyNDU6XHQgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoXG41MjQ2Olx0ICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cClcbjUyNDc6XHQgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cFxuNTI0ODpcdCAqXG41MjQ5Olx0ICogV2FsayB0aGUgYW5jZXN0b3IgcGF0aCBmcm9tIEByb290IGRvd24gdG8gQG1lbWNnIGFuZCBjb21wdXRlIHRoZSBlZmZlY3RpdmVcbjUyNTA6XHQgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxuNTI1MTpcdCAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLlxuNTI1MjpcdCAqL1xuNTI1MzpcdHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuNTI1NDpcdFx0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjUyNTU6XHR7XG41MjU2Olx0XHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cbjUyNTc6XHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDtcbjUyNTg6XHRcdHN0cnVjdCBjZ3JvdXAgKmNnO1xuNTI1OTpcdFx0aW50IHJvb3RfbGV2ZWwsIGk7XG41MjYwOlx0XG41MjYxOlx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuNTI2MjpcdFx0XHRyZXR1cm47XG41MjYzOlx0XG41MjY0Olx0XHRpZiAoIXJvb3QpXG41MjY1Olx0XHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG41MjY2Olx0XG41MjY3Olx0XHRpZiAobWVtY2cgPT0gcm9vdClcbjUyNjg6XHRcdFx0cmV0dXJuO1xuNTI2OTpcdFxuNTI3MDpcdFx0cm9vdF9sZXZlbCA9IHJvb3QtXHUwMDNlY3NzLmNncm91cC1cdTAwM2VsZXZlbDtcbjUyNzE6XHRcdGNnID0gbWVtY2ctXHUwMDNlY3NzLmNncm91cDtcbjUyNzI6XHRcbjUyNzM6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjUyNzQ6XHRcdGZvciAoaSA9IHJvb3RfbGV2ZWwgJiM0MzsgMTsgaSBcdTAwM2M9IGNnLVx1MDAzZWxldmVsOyBpJiM0MzsmIzQzOykge1xuNTI3NTpcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyO1xuNTI3NjpcdFxuNTI3NzpcdFx0XHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXHUwMDNlYW5jZXN0b3JzW2ldLFxuNTI3ODpcdFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XG41Mjc5Olx0XHRcdGlmIChjdXIpXG41MjgwOlx0XHRcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LFxuNTI4MTpcdFx0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuNTI4MjpcdFx0XHRcdFx0XHRcdFx0ICByZWN1cnNpdmVfcHJvdGVjdGlvbik7XG41MjgzOlx0XHR9XG41Mjg0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjUyODU6XHR9XG41Mjg2Olx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG41Mjg3Olx0XG41Mjg4Olx0c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuNTI4OTpcdFx0XHRcdGdmcF90IGdmcClcbjUyOTA6XHR7XG41MjkxOlx0XHRpbnQgcmV0ID0gMDtcbjUyOTI6XHRcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbjUyOTM6XHRcbjUyOTQ6XHRcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9tZW1jZyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7XG41Mjk1Olx0XHQvKiBEbyBub3QgYWNjb3VudCBhdCB0aGUgcm9vdCBvYmpjZyBsZXZlbC4gKi9cbjUyOTY6XHRcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbjUyOTc6XHRcdFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuNTI5ODpcdFx0aWYgKHJldCkge1xuNTI5OTpcdFx0XHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgYHNocmlua19vbmVgKioKCk9rYXksIHNvIHRoZSBwcm9ibGVtIGlzIGxpa2VseSBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGgsIGFuZCB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgYXJvdW5kIGBzaHJpbmtfb25lYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUsIGVzcGVjaWFsbHkgaG93IHRoZSB2YXJpb3VzIHBhZ2Ugc3RhdGVzIGFuZCBMUlUgbGlzdHMgYXJlIGhhbmRsZWQgZHVyaW5nIGEgcmVjbGFpbSBjeWNsZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgc2hyaW5rX29uZWAgYmVjYXVzZSBpdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZXZhbHVhdGluZyBhbmQgcG90ZW50aWFsbHkgZnJlZWluZyBhIHNpbmdsZSBwYWdlLiBJdCYjMzk7cyB3aGVyZSB0aGUgZGVjaXNpb24gbWFraW5nIGhhcHBlbnMg4oCTIGlzIHRoZSBwYWdlIGRpcnR5PyBJcyBpdCBmaWxlLWJhY2tlZCBvciBhbm9ueW1vdXM/IEhvdyBsb25nIGhhcyBpdCBiZWVuIGlkbGU/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvZiByZWNsYWltaW5nIHRoaXMgcGFnZSBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2U/CgpJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIGF0IGhvdyB0aGUgYHNocmlua19vbmVgIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBMUlUgbGlzdHMsIHRoZSBwYWdlIGZsYWdzIChsaWtlIFBHX2RpcnR5LCBQR19zd2FwYmFja2VkLCBQR19sb2NrZWQpLCBhbmQgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEsIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIE5VTUEgc3lzdGVtIGFuZCB0aGVyZSBhcmUgbW9yZSBudWFuY2VzIHRvIGNvbnNpZGVyIGFyb3VuZCBwYWdlIHBsYWNlbWVudCBhbmQgbWlncmF0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVjaWRlcyB3aGljaCBwYWdlIHRvIHJlY2xhaW0sIGFuZCB3aGF0IGFjdGlvbnMgaXQgdGFrZXMgYmFzZWQgb24gaXRzIHByb3BlcnRpZXMuIFRpbWUgdG8gc3RhcnQgcmVhZGluZyB0aGUgY29kZSBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxODA6XHR9XG41MTgxOlx0XG41MTgyOlx0c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG41MTgzOlx0e1xuNTE4NDpcdFx0Ym9vbCBuZWVkX3JvdGF0ZTtcbjUxODU6XHRcdHVuc2lnbmVkIGxvbmcgc2Nhbm5lZCA9IHNjLVx1MDAzZW5yX3NjYW5uZWQ7XG41MTg2Olx0XHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZCA9IHNjLVx1MDAzZW5yX3JlY2xhaW1lZDtcbjUxODc6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuNTE4ODpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuNTE4OTpcdFxuNTE5MDpcdFx0LypcbjUxOTE6XHRcdCAqIEZvciBrc3dhcGQsIGxydV9nZW5fYWdlX25vZGUoKSBoYXMgYWxyZWFkeSBjYWxsZWRcbjUxOTI6XHRcdCAqIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKVxuNTE5MzpcdFx0ICovXG41MTk0Olx0XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXG41MTk1Olx0XHRcdG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChOVUxMLCBtZW1jZyk7XG41MTk2Olx0XG41MTk3Olx0XHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKVxuNTE5ODpcdFx0XHRyZXR1cm4gTUVNQ0dfTFJVX1lPVU5HO1xuNTE5OTpcdFxuNTIwMDpcdFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbG93KE5VTEwsIG1lbWNnKSkge1xuNTIwMTpcdFx0XHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xuNTIwMjpcdFx0XHRpZiAoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfVEFJTClcbjUyMDM6XHRcdFx0XHRyZXR1cm4gTUVNQ0dfTFJVX1RBSUw7XG41MjA0Olx0XG41MjA1Olx0XHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfTE9XKTtcbjUyMDY6XHRcdH1cbjUyMDc6XHRcbjUyMDg6XHRcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG41MjA5Olx0XG41MjEwOlx0XHRzaHJpbmtfc2xhYihzYy1cdTAwM2VnZnBfbWFzaywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgbWVtY2csIHNjLVx1MDAzZXByaW9yaXR5KTtcbjUyMTE6XHRcbjUyMTI6XHRcdGlmICghc2MtXHUwMDNlcHJvYWN0aXZlKVxuNTIxMzpcdFx0XHR2bXByZXNzdXJlKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2VvcmRlciwgbWVtY2csIGZhbHNlLFxuNTIxNDpcdFx0XHRcdCAgIHNjLVx1MDAzZW5yX3NjYW5uZWQgLSBzY2FubmVkLCBzYy1cdTAwM2Vucl9yZWNsYWltZWQgLSByZWNsYWltZWQpO1xuNTIxNTpcdFxuNTIxNjpcdFx0Zmx1c2hfcmVjbGFpbV9zdGF0ZShzYyk7XG41MjE3Olx0XG41MjE4Olx0XHRpZiAobmVlZF9yb3RhdGUgXHUwMDI2XHUwMDI2IG1lbV9jZ3JvdXBfb25saW5lKG1lbWNnKSlcbjUyMTk6XHRcdFx0cmV0dXJuIE1FTUNHX0xSVV9ZT1VORztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGlzc3VlcyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMgKG1lbWNnKSwgTUdMUlUgKExSVSBHZW4pLCBwYWdlIGNvdW50ZXJzLCBhbmQgbWVtb3J5IHJlY2xhaW0sIGZvdW5kIGluIHRoZSBgbW0vYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgYSBrZXkgYXJlYSB0byB3YXRjaC4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBtb2RpZnlpbmcgaG93IGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAgaXMgY2FsY3VsYXRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vcGFnZV9jb3VudGVyLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBwcmV2ZW50IGEgNjQtYml0IG92ZXJmbG93IG9yIGRpdmlzaW9uIGVycm9yIGR1cmluZyB0aGlzIGNhbGN1bGF0aW9uLCBlc3BlY2lhbGx5IHdoZW4gdXNpbmcgYG11bF91NjRfdTY0X2Rpdl91NjRgIGFuZCB0YWtpbmcgdGhlIGBtaW5gIG9mIGB1bnByb3RlY3RlZGAgYW5kIGBwYXJlbnRfdW5wcm90ZWN0ZWRgLiBBIHN1YnRsZSBidWcgdGhhdCBjb3VsZCBsZWFkIHRvIHNlcmlvdXMgcHJvYmxlbXMgbGF0ZXIgb24sIHNvIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKSXQgYWxzbyBpbnRyb2R1Y2VzIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgIHRvIGhhbmRsZSBtZW1vcnkgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbnMgY29ycmVjdGx5IGFsb25nIGFuY2VzdG9yIHBhdGhzLCBwYXJ0aWN1bGFybHkgZHVyaW5nIE1HTFJVIGRpcmVjdCByZWNsYWltIHdpdGhpbiBgc2hyaW5rX29uZWAuIFRoZSBmYWN0IHRoYXQgYHNocmlua19vbmUoKWAgaXMgaW52b2x2ZWQgbWVhbnMgdGhpcyBpbXBhY3RzIHRoZSBjb3JlIHJlY2xhaW0gcHJvY2VzcywgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuCgpHaXZlbiB0aGUgcGF0Y2gmIzM5O3Mgc2NvcGUgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXRzIGRpcmVjdCBpbXBhY3Qgb24gY3J1Y2lhbCBmdW5jdGlvbnMgbGlrZSBgc2hyaW5rX29uZSgpYCwgSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBmdXp6aW5nIHBvdGVudGlhbC4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdHJpYWdlIGd1aWRlbGluZXMsIGFuZCBjb25zaWRlcmluZyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gdGhlIGNvcmUgTU0gYXJlYSwgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXI6IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgaW1tZWRpYXRlbHkgd2FycmFudCBmdXp6aW5nIGF0dGVudGlvbi4KCk5vdyBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgdG8gaWRlbnRpZnkgZGVwZW5kZW5jaWVzOiBgTUVNQ0dgLCBgTFJVX0dFTmAsIGFuZCBwb3RlbnRpYWxseSBvdGhlciByZWxhdGVkIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlZCB0byBleHBvc2UgdGhlIGNoYW5nZXMuIFRoZSBuZXh0IHN0ZXAgaXMgYSBxdWljayBgZ3JlcGAgZm9yIGBDT05GSUdfTFJVX0dFTmAgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzg4PWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTEzOTgtIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTM5OTpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDAwLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDA3LVxubW0vS2NvbmZpZzoxNDA4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQwOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTMtXG5tbS9LY29uZmlnOjE0MTQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQxNS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDIyLVxubW0vS2NvbmZpZzoxNDIzOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU3OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGFzcGVjdHMgb2YgYG1tL0tjb25maWdgOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG1tL0tjb25maWdgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgdGhlIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgZ2VuZXJhdGlvbiBhbmQgTWVtb3J5IENvbnRyb2wgR3JvdXBzIChNRU1DRykgYXJlIGNvbmZpZ3VyZWQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBhcm91bmQgYGNvbmZpZyBMUlVfR0VOYCBhbmQgYE1FTUNHYCBpbiB0aGUgS2NvbmZpZyBmaWxlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyBhcmUgdGllZCB0b2dldGhlci4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIGFyZSBkZWZpbmVkIOKAkyB3aGljaCBvcHRpb25zIGVuYWJsZSB3aGljaCwgYW5kIHdoYXQgY29uc3RyYWludHMgYXJlIGluIHBsYWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kLCBlc3BlY2lhbGx5IGlmIEkmIzM5O20gcGxhbm5pbmcgYW55IG1vZGlmaWNhdGlvbnMgb3IgZW5oYW5jZW1lbnRzIHRvIHRoZSBtZW1vcnkgc3Vic3lzdGVtIG9yIHRyeWluZyB0byB1bmRlcnN0YW5kIGV4aXN0aW5nIGJlaGF2aW9ycy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzOTU6XHRcdCAgcHVycG9zZXMuICBJdCBpcyByZXF1aXJlZCB0byBlbmFibGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBvblxuMTM5NjpcdFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxuMTM5NzpcdFxuMTM5ODpcdCMgbXVsdGktZ2VuIExSVSB7XG4xMzk5Olx0Y29uZmlnIExSVV9HRU5cbjE0MDA6XHRcdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuMTQwMTpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE0MDI6XHRcdCMgbWFrZSBzdXJlIGZvbGlvLVx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xuMTQwMzpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXG4xNDA0Olx0XHRoZWxwXG4xNDA1Olx0XHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxuMTQwNjpcdFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXG4xNDA3Olx0XG4xNDA4Olx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxuMTQwOTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuMTQxMDpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDExOlx0XHRoZWxwXG4xNDEyOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cbjE0MTM6XHRcbjE0MTQ6XHRjb25maWcgTFJVX0dFTl9TVEFUU1xuMTQxNTpcdFx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbjE0MTY6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxNzpcdFx0aGVscFxuMTQxODpcdFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcbjE0MTk6XHRcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cbjE0MjA6XHRcbjE0MjE6XHRcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXG4xNDIyOlx0XG4xNDIzOlx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG4xNDI0Olx0XHRkZWZfYm9vbCB5XG4xNDI1Olx0XHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuMTQyNjpcdCMgfVxuMTQyNzpcdFxuMTQyODpcdGNvbmZpZyBMT0NLX01NX0FORF9GSU5EX1ZNQVxuMTQyOTpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM0MgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBoaWdoIGxldmVsIG9mIGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYE1FTUNHYCBpbiBgaW5pdC9LY29uZmlnYCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtZW1vcnkgY29udHJvbCBncm91cHMsIGFuZCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gYW55dGhpbmcgZWxzZSwgaXQgbWFrZXMgc2Vuc2UgdG8gZ28gYmFjayB0byBiYXNpY3MgYW5kIGVuc3VyZSB3ZSB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYGluaXQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBrZXJuZWwgZmVhdHVyZSBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIGBNRU1DR2AgKG9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMpIHdvdWxkIGJlIHRoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIHN0YXR1czogaXMgaXQgZW5hYmxlZCBieSBkZWZhdWx0LCBjb25kaXRpb25hbGx5IGVuYWJsZWQsIG9yIGVudGlyZWx5IGRpc2FibGVkPyBLbm93aW5nIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgdml0YWwgdG8gbm90IGR1cGxpY2F0ZSBleGlzdGluZyBlZmZvcnQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGhvdyBkZWVwIEkgbWlnaHQgbmVlZCB0byBnbyB0byBhY2NvbXBsaXNoIHRoZSBpbnRlbmRlZCBnb2FsLiBJIGFsc28gbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgdGhlIHZhcmlvdXMgZGVwZW5kZW5jaWVzIGFuZCBmZWF0dXJlcyBhcm91bmQgYE1FTUNHYCBhcmUgZGVzY3JpYmVkLiBUaGlzIHN0ZXAgaXMgYmFzaWMsIGJ1dCBmb3VuZGF0aW9uYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTExMDItXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDctXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTA5LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODE3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1HTFJVIENvbmZpZ3VyYXRpb24gYW5kIEtleSBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIE1HTFJVIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJJiMzOTttIGNoZWNraW5nIGlmIHdlIHJlYWxseSBuZWVkIGBMUlVfR0VOX0VOQUJMRURgICppbiBhZGRpdGlvbiB0byogYExSVV9HRU5gLiBCZXN0IHByYWN0aWNlLCBJIHRoaW5rLCBpcyB0byBoYXZlIGBMUlVfR0VOX0VOQUJMRURgIGVuYWJsZWQgYWxvbmdzaWRlIGBMUlVfR0VOYCBhbmQgYE1FTUNHYCB0byBlbnN1cmUgTUdMUlUgaXMgYWN0aXZlIGJ5IGRlZmF1bHQuIFNvLCB0aGF0IG1lYW5zIGRpZ2dpbmcgaW50byBgQ09ORklHX01FTUNHYCwgYENPTkZJR19MUlVfR0VOYCwgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBhZ2Fpbi4KCk5vdywgSSYjMzk7bSBpZGVudGlmeWluZyB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgdGhpcy4gTGV0JiMzOTtzIGdldCB0aGUgY29yZSBzZXQgb2Ygc3ltYm9scyB0aGF0IGFyZSBhZGRlZCwgb3IgZGlyZWN0bHkgbW9kaWZpZWQuIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaW1wb3J0YW50IGhlcmUuIEkgc2VlIHRoZXNlIGFzIGtleToKCjEuICBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCB3aGljaCB3YXMgYWRkZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AuCjIuICBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCAtIGRlZmluZWQgaW4gYG1tL3BhZ2VfY291bnRlci5jYCBhbmQgY3J1Y2lhbGx5IGNhbGxzIGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAuIExvb2tzIGxpa2UgdGhhdCBvbmUgaGFzIGJlZW4gbW9kaWZpZWQuCjMuICBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgLSBhbHNvIGRlZmluZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AuCjQuICBgc2hyaW5rX29uZWAgd2hpY2ggaGFzIGJlZW4gbW9kaWZpZWQgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgaXMgYSBjYWxsZXIgb2YgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgZWZmZWN0aXZlX3Byb3RlY3Rpb25gIGlzIHN0YXRpYy4gTG9va3MgbGlrZSBpdCBpcy4gQ2hlY2tpbmcgYG1tL3BhZ2VfY291bnRlci5jYCwgYW5kLCB5ZXAsIGxpbmUgMzc3OiBgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24oLi4uKWAuIFNpbmNlIGl0JiMzOTtzIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBJIHNob3VsZCBjb25maXJtIHRoYXQgb25lIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oPTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2NvdW50ZXJfcmVzZXRfd2F0ZXJtYXJrKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaC0xMDMtI2lmIElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSB8fCBJU19FTkFCTEVEKENPTkZJR19DR1JPVVBfRE1FTSlcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg6MTA0OnZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwNS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgtMTA3LSNlbHNlXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oOjEwODpzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwOS1cdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG4tLVxua2VybmVsL2Nncm91cC9kbWVtLmM9MzA3PWRtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBkbWVtX2Nncm91cF9wb29sX3N0YXRlICpsaW1pdF9wb29sLFxuLS1cbmtlcm5lbC9jZ3JvdXAvZG1lbS5jLTMzMS1cbmtlcm5lbC9jZ3JvdXAvZG1lbS5jOjMzMjpcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFxua2VybmVsL2Nncm91cC9kbWVtLmMtMzMzLVx0XHRcdGNsaW1pdCwgXHUwMDI2Zm91bmRfcG9vbC1cdTAwM2VjbnQsIHRydWUpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjI4PXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIzOS1cbm1tL21lbWNvbnRyb2wuYzo1MjQwOlx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LCBcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcbm1tL21lbWNvbnRyb2wuYy01MjQxLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTI1Mz12b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI3OS1cdFx0aWYgKGN1cilcbm1tL21lbWNvbnRyb2wuYzo1MjgwOlx0XHRcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcdTAwMjZyb290LVx1MDAzZW1lbW9yeSxcbm1tL21lbWNvbnRyb2wuYy01MjgxLVx0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuLS1cbm1tL3BhZ2VfY291bnRlci5jPTM1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxuLS1cbm1tL3BhZ2VfY291bnRlci5jLTQ0MC0vKipcbm1tL3BhZ2VfY291bnRlci5jOjQ0MTogKiBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24gLSBjaGVjayBpZiBtZW1vcnkgY29uc3VtcHRpb24gaXMgaW4gdGhlIG5vcm1hbCByYW5nZVxubW0vcGFnZV9jb3VudGVyLmMtNDQyLSAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtNDUwLSAqL1xubW0vcGFnZV9jb3VudGVyLmM6NDUxOnZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG5tbS9wYWdlX2NvdW50ZXIuYy00NTItXHRcdFx0XHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzEKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogMjE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiBzb21lIHByb21pc2luZyBzeW1ib2xzIGZvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHk6IGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCwgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBhbmQgYHNocmlua19vbmVgLiBUaGVzZSBsb29rIGdvb2QgYmVjYXVzZSB0aGV5JiMzOTtyZSByZWFzb25hYmx5IHNwZWNpZmljIGFuZCBub3QgdXNlZCAqZXZlcnl3aGVyZSogaW4gdGhlIGNvZGViYXNlLiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRhcmdldCBzZWxlY3Rpb24uCgpOb3csIGxldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSYjMzk7cmUgY292ZXJpbmcgYWxsIHRoZSBiYXNlcyBvZiB0aGUgc3VnZ2VzdGVkIGd1aWRhbmNlLiBJIG5lZWQgdG8gY29uZmlybToKCjEuICAqKmBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLioqIFRoaXMgaXMgdGhlIGdyZWVuIGxpZ2h0OyB3ZSYjMzk7cmUgb24gdGhlIHJpZ2h0IHRyYWNrLgoyLiAgKipUaGUgcmVhc29uaW5nIG1ha2VzIHNlbnNlLioqIEl0JiMzOTtzIG1lbnRpb25pbmcgbW9kaWZpY2F0aW9ucyB0byAqZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb25zKiB3aXRoaW4gYG1tL3BhZ2VfY291bnRlci5jYCB0byBoYW5kbGUgNjQtYml0IG92ZXJmbG93ICphbmQqIGFuY2VzdG9yIHBhdGggcHJvdGVjdGlvbiBpbiBgbWVtY29udHJvbC5jYCBhbmQgYHZtc2Nhbi5jYCByZWxhdGVkIHRvIE1HTFJVLiBUaGF0JiMzOTtzIGEganVpY3kgdGFyZ2V0OyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYWNjb3VudGluZyBhcmUgYWx3YXlzIHBvdGVudGlhbCBhcmVhcyBmb3Igc3VidGxlIGJ1Z3MuCjMuICAqKlRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BvdC1vbi4qKiBJJiMzOTt2ZSBhbHJlYWR5IGRvdWJsZS1jaGVja2VkIHRoZW0gYWJvdmUsIGJ1dCBzZWVpbmcgdGhlbSBhZ2FpbiByZWFzc3VyZXMgbWUuIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgLCBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCwgYHNocmlua19vbmVgLCBhbmQgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25gIGFsbCBzZWVtIGhpZ2hseSByZWxldmFudC4KNC4gICoqVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdC4qKiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYE1FTUNHYCwgYExSVV9HRU5gLCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgYXJlIGVuYWJsZWQgZHVyaW5nIHRlc3RpbmcuIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBsaWtlbHkgY3J1Y2lhbCB0byB0cmlnZ2VyIHRoZSBjb2RlIHBhdGhzIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLgoKQWxyaWdodCwgdGhhdCBjb3ZlcnMgdGhlIGFzc2Vzc21lbnQuIExldCYjMzk7cyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIHRvIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcCBhbmQgZm9ybWFsaXplIHRoZSB0YXJnZXQgc2VsZWN0aW9uIGFuZCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoJiMzNDssCiAgICAmIzM0O3BhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfb25lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBmaXggcG90ZW50aWFsIDY0LWJpdCBkaXZpc2lvbiBvdmVyZmxvdyBpbiBlZmZlY3RpdmVfcHJvdGVjdGlvbigpLCBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSBpbiBtbS9tZW1jb250cm9sLmMgY2FsbGVkIGZyb20gbW0vdm1zY2FuLmMgKE11bHRpLUdlbiBMUlUgc2hyaW5rX29uZSkuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbWVtY2cgcHJvdGVjdGlvbiBhbmQgcmVjbGFpbSBjYWxjdWxhdGlvbnMgaW4gcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgmIzM0OywKICAgICYjMzQ7cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgICAmIzM0O3Nocmlua19vbmUmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfY291bnRlci5jIHRvIGZpeCBwb3RlbnRpYWwgNjQtYml0IGRpdmlzaW9uIG92ZXJmbG93IGluIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKCksIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIGluIG1tL21lbWNvbnRyb2wuYyBjYWxsZWQgZnJvbSBtbS92bXNjYW4uYyAoTXVsdGktR2VuIExSVSBzaHJpbmtfb25lKS4gVGhlc2UgY2hhbmdlcyBhbHRlciBtZW1jZyBwcm90ZWN0aW9uIGFuZCByZWNsYWltIGNhbGN1bGF0aW9ucyBpbiByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBhcml0aG1ldGljIG92ZXJmbG93ICgjREUpIGR1cmluZyBtZW1vcnkgY2dyb3VwIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIGluIG1tL3BhZ2VfY291bnRlci5jIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIHRvIGNhbGN1bGF0ZSBhbmNlc3RvciBwcm90ZWN0aW9uIHZhbHVlcyBmb3IgTUdMUlUgaW4gbW0vdm1zY2FuLmMgYW5kIG1tL21lbWNvbnRyb2wuYy5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gVGhlIGNoYW5nZXMgZGVhbCBlbnRpcmVseSB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFyaXRobWV0aWMsIGNncm91cCBoaWVyYXJjaHkgdHJhdmVyc2FsIHVuZGVyIFJDVSwgYW5kIHJlY2xhaW0gaGV1cmlzdGljcy5cbi0gTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMgKHN1Y2ggYXMgY29weV90b191c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBpb2N0bCByZXR1cm5zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbi0gTm8gdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBtZW1vcnkgaXMgYWxsb2NhdGVkIG9yIHJlYWQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzY2FsYXIgdHlwZXMgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgdXBvbiBkZWNsYXJhdGlvbi5cbi0gUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBjb2RlIChlLmcuIGFyaXRobWV0aWMgb3ZlcmZsb3csIGRpdmlzaW9uLWJ5LXplcm8sIFJDVS9wb2ludGVyIGRlcmVmZXJlbmNlIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMsIFVCU0FOLCBhbmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZCBmb3IgdGhpcyBwYXRjaCBzZXJpZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMDMxMmVjOTBiMjdlZTYzNGZmNmNmNTg4YThhNDI2MjhhNTEzN2RkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNDozNzozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZjkzMmIxZGRkYThjOS4uZDM1Mjg5OWNlNTBjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTE4ODMsNiAmIzQzOzE4ODMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIH0KICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi8KIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19MUlVfR0VOKQomIzQzO3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LAomIzQzOwkJCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfWlNXQVApCiBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7CiB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDlhNjVkNzE0OGMyMjcuLjA5Y2YzMGNjZTJmNzMgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTUyNDAsNiAmIzQzOzUyNDAsNTEgQEAgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LAogCXBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbigmYW1wO3Jvb3QtJmd0O21lbW9yeSwgJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LCByZWN1cnNpdmVfcHJvdGVjdGlvbik7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0xSVV9HRU4KJiM0MzsvKioKJiM0MzsgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoCiYjNDM7ICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cCkKJiM0MzsgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cAomIzQzOyAqCiYjNDM7ICogV2FsayB0aGUgYW5jZXN0b3IgcGF0aCBmcm9tIEByb290IGRvd24gdG8gQG1lbWNnIGFuZCBjb21wdXRlIHRoZSBlZmZlY3RpdmUKJiM0MzsgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdAomIzQzOyAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLgomIzQzOyAqLwomIzQzO3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LAomIzQzOwkJCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID0KJiM0MzsJCWNncnBfZGZsX3Jvb3QuZmxhZ3MgJmFtcDsgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDsKJiM0MzsJc3RydWN0IGNncm91cCAqY2c7CiYjNDM7CWludCByb290X2xldmVsLCBpOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIXJvb3QpCiYjNDM7CQlyb290ID0gcm9vdF9tZW1fY2dyb3VwOwomIzQzOwomIzQzOwlpZiAobWVtY2cgPT0gcm9vdCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcm9vdF9sZXZlbCA9IHJvb3QtJmd0O2Nzcy5jZ3JvdXAtJmd0O2xldmVsOwomIzQzOwljZyA9IG1lbWNnLSZndDtjc3MuY2dyb3VwOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWZvciAoaSA9IHJvb3RfbGV2ZWwgJiM0MzsgMTsgaSAmbHQ7PSBjZy0mZ3Q7bGV2ZWw7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyOwomIzQzOwomIzQzOwkJY3VyID0gbWVtX2Nncm91cF9mcm9tX2NzcyhjZ3JvdXBfY3NzKGNnLSZndDthbmNlc3RvcnNbaV0sCiYjNDM7CQkJCQkJICAgICAmYW1wO21lbW9yeV9jZ3JwX3N1YnN5cykpOwomIzQzOwkJaWYgKGN1cikKJiM0MzsJCQlwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oJmFtcDtyb290LSZndDttZW1vcnksCiYjNDM7CQkJCQkJCSAgJmFtcDtjdXItJmd0O21lbW9yeSwKJiM0MzsJCQkJCQkJICByZWN1cnNpdmVfcHJvdGVjdGlvbik7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7fQomIzQzOyNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLwomIzQzOwogc3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJZ2ZwX3QgZ2ZwKQogewpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuYwppbmRleCA0NTA1NDNmNGIzMThiLi5lZjFhNjQ3NjJkNGEyIDEwMDY0NAotLS0gYS9tbS9wYWdlX2NvdW50ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZV9jb3VudGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYXRvbWljLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21hdGg2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CkBAIC0zNzYsNyAmIzQzOzM3Nyw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsCiAJICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC4KIAkgKi8KIAlpZiAoc2libGluZ3NfcHJvdGVjdGVkICZndDsgcGFyZW50X2VmZmVjdGl2ZSkKLQkJcmV0dXJuIHByb3RlY3RlZCAqIHBhcmVudF9lZmZlY3RpdmUgLyBzaWJsaW5nc19wcm90ZWN0ZWQ7CiYjNDM7CQlyZXR1cm4gbXVsX3U2NF91NjRfZGl2X3U2NChwcm90ZWN0ZWQsIHBhcmVudF9lZmZlY3RpdmUsCiYjNDM7CQkJCQkgICBzaWJsaW5nc19wcm90ZWN0ZWQpOwogCiAJLyoKIAkgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlCkBAIC00MTcsMTMgJiM0Mzs0MTksMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSwKIAlpZiAocGFyZW50X2VmZmVjdGl2ZSAmZ3Q7IHNpYmxpbmdzX3Byb3RlY3RlZCAmYW1wOyZhbXA7CiAJICAgIHBhcmVudF91c2FnZSAmZ3Q7IHNpYmxpbmdzX3Byb3RlY3RlZCAmYW1wOyZhbXA7CiAJICAgIHVzYWdlICZndDsgcHJvdGVjdGVkKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdW5jbGFpbWVkOwomIzQzOwkJdW5zaWduZWQgbG9uZyB1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkOwomIzQzOwkJdW5zaWduZWQgbG9uZyB1bnByb3RlY3RlZCA9IHVzYWdlIC0gcHJvdGVjdGVkOwomIzQzOwkJdW5zaWduZWQgbG9uZyBwYXJlbnRfdW5wcm90ZWN0ZWQgPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7CiAKLQkJdW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKLQkJdW5jbGFpbWVkICo9IHVzYWdlIC0gcHJvdGVjdGVkOwotCQl1bmNsYWltZWQgLz0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSB1c2FnZXMgYXJlbiYjMzk7dCByZWFkIGF0b21pY2FsbHksIHNvIGEgY2hpbGQgY2FuIHRyYW5zaWVudGx5CiYjNDM7CQkgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxCiYjNDM7CQkgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LgomIzQzOwkJICovCiYjNDM7CQl1bnByb3RlY3RlZCA9IG1pbih1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTsKIAotCQllcCAmIzQzOz0gdW5jbGFpbWVkOwomIzQzOwkJZXAgJiM0Mzs9IG11bF91NjRfdTY0X2Rpdl91NjQodW5jbGFpbWVkLCB1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTsKIAl9CiAKIAlyZXR1cm4gZXA7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDI0NWY2OGM3NWIyODkuLmVhZjU3NTA2YmUyZjcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC01MTg3LDcgJiM0Mzs1MTg3LDEzIEBAIHN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKIAotCS8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovCiYjNDM7CS8qCiYjNDM7CSAqIEZvciBrc3dhcGQsIGxydV9nZW5fYWdlX25vZGUoKSBoYXMgYWxyZWFkeSBjYWxsZWQKJiM0MzsJICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpCiYjNDM7CSAqLwomIzQzOwlpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpCiYjNDM7CQltZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoTlVMTCwgbWVtY2cpOwomIzQzOwogCWlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpCiAJCXJldHVybiBNRU1DR19MUlVfWU9VTkc7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IEtNU0FOIGNvbmNlcm5zLiBGaXJzdCwgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAsIHdoaWNoIGlzIGNhbGN1bGF0aW5nIG1lbW9yeSBwcm90ZWN0aW9uIGFsb25nIHRoZSBjZ3JvdXAgaGllcmFyY2h5LCBwYXJ0aWN1bGFybHkgZm9yIHRoZSBMUlVfR0VOL01HTFJVIHJlY2xhaW0gcGF0aC4gVGhlIGNvZGUgdG91Y2hlcyBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBgbW0vbWVtY29udHJvbC5jYCwgYG1tL3BhZ2VfY291bnRlci5jYCwgYW5kIGBtbS92bXNjYW4uY2AuCgpJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBtYWluIGNoYW5nZXMgYXJlOgoKKiAgICoqYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgSW1wbGVtZW50YXRpb246KiogVGhpcyBpdGVyYXRlcyBmcm9tIHRoZSByb290IG1lbWNnIGRvd24gdG8gdGhlIHRhcmdldCBtZW1jZywgY2FsY3VsYXRpbmcgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgYXQgZWFjaCBsZXZlbC4gSXQmIzM5O3MgdXNpbmcgYHJjdV9yZWFkX2xvY2soKWAvYHJjdV9yZWFkX3VubG9jaygpYCBzbyB0aGUgYWNjZXNzZXMgYXJlIHByb3RlY3RlZC4KCiogICAqKmBwYWdlX2NvdW50ZXIuY2AgSW1wcm92ZW1lbnRzOioqIFJlcGxhY2luZyBpbnRlZ2VyIGFyaXRobWV0aWMgd2l0aCBgbXVsX3U2NF91NjRfZGl2X3U2NCgpYCBpcyBhIGdvb2QgY2FsbCB0byBwcmV2ZW50IG92ZXJmbG93IGFuZCBkaXZpZGUgZXJyb3JzLiBUaGUgYWRkaXRpb24gb2YgYHVucHJvdGVjdGVkID0gbWluKHVucHJvdGVjdGVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQpO2Agc2VlbXMgZGVzaWduZWQgdG8gZW5mb3JjZSBhIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXAgaW4gcHJvdGVjdGlvbiB1c2FnZSwgYXZvaWRpbmcgb3Zlci1yZXBvcnRpbmcuCgoqICAgKipDYWxsIGluIGB2bXNjYW4uY2A6KiogVGhlIGNhbGwgdG8gYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgd2l0aGluIGBzaHJpbmtfb25lYCAoTFJVX0dFTi9NR0xSVSkgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBmb2N1cyBvbiBtZW1vcnkgcmVjbGFpbS4gSXQgaGFwcGVucyAqYmVmb3JlKiBjaGVja2luZyBgbWVtX2Nncm91cF9iZWxvd19taW4oKWAsIHdoaWNoIGFwcGVhcnMgbG9naWNhbC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBsb29rIGF0IGl0LgoKKiAgICoqRGF0YSB0cmFuc2ZlciBvciBVc2VyLXNwYWNlIEV4cG9zdXJlOioqIFRoZXJlIGFyZSBubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMgY2hhbmdlZCBvciBpbnRyb2R1Y2VkLiBUaGF0JiMzOTtzIGdvb2Q7IHdlJiMzOTtyZSBub3QgZGlyZWN0bHkgZXhwb3NpbmcgaW50ZXJuYWwgc3RhdGUgdG8gdXNlci1zcGFjZS4KCiogICAqKkxvY2FsIFZhcmlhYmxlIEluaXRpYWxpemF0aW9uOioqIEV4YW1pbmluZyB0aGUgbG9jYWwgdmFyaWFibGVzIGluIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgOiBgcmVjdXJzaXZlX3Byb3RlY3Rpb25gLCBgY2dgLCBgcm9vdF9sZXZlbGAsIGFuZCBgaWAgYXJlIGFsbCBpbml0aWFsaXplZCBpbW1lZGlhdGVseS4gU2ltaWxhcmx5LCBpbiBgcGFnZV9jb3VudGVyLmNgLCB0aGUgbG9jYWxzIGFyZSBhbHNvIGluaXRpYWxpemVkLiBObyBpbW1lZGlhdGUgcmVkIGZsYWdzIHRoZXJlLgoKKiAgICoqRGF0YSBTdHJ1Y3R1cmUgQ2hhbmdlczoqKiBObyBjaGFuZ2VzIGluIGRhdGEgc3RydWN0dXJlIHNpemVzLCBwYWRkaW5nLCBvciBkYXRhIGxlYWtzIHRvIHVzZXItc3BhY2UuCgoqICAgKipDb250cm9sIEZsb3cgYW5kIEJvdW5kcyBDaGVja3M6KiogVGhlcmUgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGFueSB3YXkgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIHRocm91Z2ggdGhlc2UgY2hhbmdlcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIHJlY2xhaW0gcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiBhbmQgYXJpdGhtZXRpYyBvdmVyZmxvdyBwcm90ZWN0aW9uLgoKT2theSwgbGV0JiMzOTtzIG5vdyBjb25zaWRlciB0aGF0IHRoZXNlIGNoYW5nZXMgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSBzb21ld2hlcmUgZWxzZS4gV2UgaGF2ZSB0byBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuIEl0IHdpbGwgbGlrZWx5IGNvbWUgZG93biB0byBpbnNwZWN0aW5nIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gIGFuZCBgc2hyaW5rX29uZWAgc3BlY2lmaWNhbGx5LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3Igc2NhbiB0aGUgY29kZSBtYW51YWxseSB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGJ1dCBiYXNlZCBvbiB0aGlzIGluaXRpYWwgcGFzcywgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBvYnZpb3VzIEtNU0FOIGlzc3Vlcy4gSSB3b3VsZCBuZWVkIHRvIGZ1cnRoZXIgaW52ZXN0aWdhdGUgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB3aXRoIGNlcnRhaW50eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01MjI4PXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIzOS1cbm1tL21lbWNvbnRyb2wuYzo1MjQwOlx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LCBcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcbm1tL21lbWNvbnRyb2wuYy01MjQxLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTI1Mz12b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI3OS1cdFx0aWYgKGN1cilcbm1tL21lbWNvbnRyb2wuYzo1MjgwOlx0XHRcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcdTAwMjZyb290LVx1MDAzZW1lbW9yeSxcbm1tL21lbWNvbnRyb2wuYy01MjgxLVx0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuLS1cbm1tL3BhZ2VfY291bnRlci5jPTM1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxuLS1cbm1tL3BhZ2VfY291bnRlci5jLTQ0MC0vKipcbm1tL3BhZ2VfY291bnRlci5jOjQ0MTogKiBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24gLSBjaGVjayBpZiBtZW1vcnkgY29uc3VtcHRpb24gaXMgaW4gdGhlIG5vcm1hbCByYW5nZVxubW0vcGFnZV9jb3VudGVyLmMtNDQyLSAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtNDUwLSAqL1xubW0vcGFnZV9jb3VudGVyLmM6NDUxOnZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG5tbS9wYWdlX2NvdW50ZXIuYy00NTItXHRcdFx0XHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUyMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYWdhaW4uIEkmIzM5O20gc3BlY2lmaWNhbGx5IHRoaW5raW5nIGFib3V0IHRoaXMgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgc2VlaW5nIGl0cyBuYW1lIHBvcCB1cCBpbiBhIGZldyByZWNlbnQgZGlzY3Vzc2lvbnMgcmVnYXJkaW5nIG1lbW9yeSBhY2NvdW50aW5nLCBhbmQgSSYjMzk7dmUgZ290IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gbW9yZSBkZXRhaWwuIExldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IHRvIGBtbS9wYWdlX2NvdW50ZXIuY2AgYW5kIGdldCBhIGxvb2sgYXQgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGhvdyB0aGUga2VybmVsIHRyYWNrcyBhbmQgcHJvdGVjdHMgbWVtb3J5IHBhZ2VzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiwgaXRzIHVzYWdlIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBhZmZlY3RzIHN5c3RlbSBjYWxscyBhbmQgb3RoZXIgY29yZSBPUyBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHByb3RlY3Rpb24gbWVjaGFuaXNtcyBpdCBpbXBsZW1lbnRzIGFuZCBob3cgdGhlc2UgcmVsYXRlZCB0byBtZW1vcnkgcHJvdGVjdGlvbi4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9jb3VudGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0MDpcdC8qKlxuIDQ0MTpcdCAqIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiAtIGNoZWNrIGlmIG1lbW9yeSBjb25zdW1wdGlvbiBpcyBpbiB0aGUgbm9ybWFsIHJhbmdlXG4gNDQyOlx0ICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWRcbiA0NDM6XHQgKiBAY291bnRlcjogdGhlIHBhZ2VfY291bnRlciB0aGUgY291bnRlciB0byB1cGRhdGVcbiA0NDQ6XHQgKiBAcmVjdXJzaXZlX3Byb3RlY3Rpb246IFdoZXRoZXIgdG8gdXNlIG1lbW9yeV9yZWN1cnNpdmVwcm90IGJlaGF2aW9yLlxuIDQ0NTpcdCAqXG4gNDQ2Olx0ICogQ2FsY3VsYXRlcyBlbG93L2VtaW4gdGhyZXNob2xkcyBmb3IgZ2l2ZW4gcGFnZV9jb3VudGVyLlxuIDQ0NzpcdCAqXG4gNDQ4Olx0ICogV0FSTklORzogVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3RhdGVsZXNzISBJdCBjYW4gb25seSBiZSB1c2VkIGFzIHBhcnRcbiA0NDk6XHQgKiAgICAgICAgICBvZiBhIHRvcC1kb3duIHRyZWUgaXRlcmF0aW9uLCBub3QgZm9yIGlzb2xhdGVkIHF1ZXJpZXMuXG4gNDUwOlx0ICovXG4gNDUxOlx0dm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IHBhZ2VfY291bnRlciAqcm9vdCxcbiA0NTI6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuIDQ1MzpcdFx0XHRcdFx0ICAgICAgIGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24pXG4gNDU0Olx0e1xuIDQ1NTpcdFx0dW5zaWduZWQgbG9uZyB1c2FnZSwgcGFyZW50X3VzYWdlO1xuIDQ1NjpcdFx0c3RydWN0IHBhZ2VfY291bnRlciAqcGFyZW50ID0gY291bnRlci1cdTAwM2VwYXJlbnQ7XG4gNDU3Olx0XG4gNDU4Olx0XHQvKlxuIDQ1OTpcdFx0ICogRWZmZWN0aXZlIHZhbHVlcyBvZiB0aGUgcmVjbGFpbSB0YXJnZXRzIGFyZSBpZ25vcmVkIHNvIHRoZXlcbiA0NjA6XHRcdCAqIGNhbiBiZSBzdGFsZS4gSGF2ZSBhIGxvb2sgYXQgbWVtX2Nncm91cF9wcm90ZWN0aW9uIGZvciBtb3JlXG4gNDYxOlx0XHQgKiBkZXRhaWxzLlxuIDQ2MjpcdFx0ICogVE9ETzogY2FsY3VsYXRpb24gc2hvdWxkIGJlIG1vcmUgcm9idXN0IHNvIHRoYXQgd2UgZG8gbm90IG5lZWRcbiA0NjM6XHRcdCAqIHRoYXQgc3BlY2lhbCBjYXNpbmcuXG4gNDY0Olx0XHQgKi9cbiA0NjU6XHRcdGlmIChyb290ID09IGNvdW50ZXIpXG4gNDY2Olx0XHRcdHJldHVybjtcbiA0Njc6XHRcbiA0Njg6XHRcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XG4gNDY5Olx0XHRpZiAoIXVzYWdlKVxuIDQ3MDpcdFx0XHRyZXR1cm47XG4gNDcxOlx0XG4gNDcyOlx0XHRpZiAocGFyZW50ID09IHJvb3QpIHtcbiA0NzM6XHRcdFx0Y291bnRlci1cdTAwM2VlbWluID0gUkVBRF9PTkNFKGNvdW50ZXItXHUwMDNlbWluKTtcbiA0NzQ6XHRcdFx0Y291bnRlci1cdTAwM2VlbG93ID0gUkVBRF9PTkNFKGNvdW50ZXItXHUwMDNlbG93KTtcbiA0NzU6XHRcdFx0cmV0dXJuO1xuIDQ3NjpcdFx0fVxuIDQ3NzpcdFxuIDQ3ODpcdFx0cGFyZW50X3VzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGFyZW50KTtcbiA0Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY2dyb3VwIHByb3RlY3Rpb24gcGF0aCBpcyBjYWxjdWxhdGVkLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyB0aGluZyBhY3R1YWxseSB3b3JrcyB1bmRlciB0aGUgaG9vZC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGxvZ2ljIGhlcmUsIHByb2JhYmx5IGludm9sdmluZyB0cmF2ZXJzaW5nIHRoZSBjZ3JvdXAgaGllcmFyY2h5IGFuZCBleGFtaW5pbmcgbWVtb3J5IGxpbWl0cyBvciBhY2NvdW50aW5nLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBtb3JlIGNvbXBsZXggbWVtb3J5IHByb3RlY3Rpb24gbWVjaGFuaXNtcyB3ZSYjMzk7dmUgZGlzY3Vzc2VkIGxhdGVseS4gR290dGEgc3RheSBzaGFycCBhbmQgbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgc3VidGxlIGhlcmUsIGFzIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgY291bGQgYmUgc2lnbmlmaWNhbnQgaWYgc29tZXRoaW5nIGdvZXMgYXdyeS4gUmlnaHQsIGBtbS9tZW1jb250cm9sLmNgIGl0IGlzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTI1MDpcdCAqIHByb3RlY3Rpb24gYXQgZWFjaCBsZXZlbC4gIFRoaXMgaXMgc2FmZSBmb3IgaXNvbGF0ZWQgcXVlcmllcyBiZWNhdXNlIGl0XG41MjUxOlx0ICogZW5zdXJlcyBwYXJlbnRzIGFyZSBjb21wdXRlZCBiZWZvcmUgY2hpbGRyZW4uXG41MjUyOlx0ICovXG41MjUzOlx0dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG41MjU0Olx0XHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuNTI1NTpcdHtcbjUyNTY6XHRcdGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24gPVxuNTI1NzpcdFx0XHRjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNiBDR1JQX1JPT1RfTUVNT1JZX1JFQ1VSU0lWRV9QUk9UO1xuNTI1ODpcdFx0c3RydWN0IGNncm91cCAqY2c7XG41MjU5Olx0XHRpbnQgcm9vdF9sZXZlbCwgaTtcbjUyNjA6XHRcbjUyNjE6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG41MjYyOlx0XHRcdHJldHVybjtcbjUyNjM6XHRcbjUyNjQ6XHRcdGlmICghcm9vdClcbjUyNjU6XHRcdFx0cm9vdCA9IHJvb3RfbWVtX2Nncm91cDtcbjUyNjY6XHRcbjUyNjc6XHRcdGlmIChtZW1jZyA9PSByb290KVxuNTI2ODpcdFx0XHRyZXR1cm47XG41MjY5Olx0XG41MjcwOlx0XHRyb290X2xldmVsID0gcm9vdC1cdTAwM2Vjc3MuY2dyb3VwLVx1MDAzZWxldmVsO1xuNTI3MTpcdFx0Y2cgPSBtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwO1xuNTI3MjpcdFxuNTI3MzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuNTI3NDpcdFx0Zm9yIChpID0gcm9vdF9sZXZlbCAmIzQzOyAxOyBpIFx1MDAzYz0gY2ctXHUwMDNlbGV2ZWw7IGkmIzQzOyYjNDM7KSB7XG41Mjc1Olx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpjdXI7XG41Mjc2Olx0XG41Mjc3Olx0XHRcdGN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy1cdTAwM2VhbmNlc3RvcnNbaV0sXG41Mjc4Olx0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMpKTtcbjUyNzk6XHRcdFx0aWYgKGN1cilcbjUyODA6XHRcdFx0XHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksXG41MjgxOlx0XHRcdFx0XHRcdFx0XHQgIFx1MDAyNmN1ci1cdTAwM2VtZW1vcnksXG41MjgyOlx0XHRcdFx0XHRcdFx0XHQgIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcbjUyODM6XHRcdH1cbjUyODQ6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNTI4NTpcdH1cbjUyODY6XHQjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbjUyODc6XHRcbjUyODg6XHRzdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG41Mjg5Olx0XHRcdFx0Z2ZwX3QgZ2ZwKVxuNTI5MDpcdHtcbjUyOTE6XHRcdGludCByZXQgPSAwO1xuNTI5MjpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuNTI5MzpcdFxuNTI5NDpcdFx0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX21lbWNnKG1lbWNnLCBmb2xpb19uaWQoZm9saW8pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3NwoJCQkJCQkJb3V0cHV0OiAyNDgKCQkJCQkJCXRob3VnaHRzOiA0MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogS01TQU4gTm90IE5lZWRlZCBIZXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZXNlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBwYWdlIGNvdW50ZXIgY2FsY3VsYXRpb25zIGFuZCBwcm92aWRpbmcgYSBtb3JlIGFjY3VyYXRlIHByb3RlY3Rpb24gcGF0aCBjYWxjdWxhdGlvbiBmb3IgTUdMUlUgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5OgoKMS4gIEkmIzM5O3ZlIGZpeGVkIHNvbWUgcG90ZW50aWFsIGFyaXRobWV0aWMgb3ZlcmZsb3dzIGluIHRoZSBgcGFnZV9jb3VudGVyYCBjYWxjdWxhdGlvbiwgYWRkcmVzc2luZyBpc3N1ZXMgaW4gYG11bF91NjRfdTY0X2Rpdl91NjRgIGFuZCB0aGUgYG1pbih1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKWAgbG9naWMuIFRoaXMgaXMgZ29vZCBwcmV2ZW50YXRpdmUgbWFpbnRlbmFuY2UuCjIuICBJJiMzOTttIGFkZGluZyBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKClgIHRvIG1vcmUgYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGxldmVscyBpbiBhIGhpZXJhcmNoaWNhbCBtZW1vcnkgY2dyb3VwIHNldHVwLCBsZXZlcmFnaW5nIGFuIFJDVSByZWFkIGxvY2sgZm9yIE1HTFJVLgozLiAgSSYjMzk7dmUgaW50ZWdyYXRlZCB0aGlzIG5ldyBmdW5jdGlvbiBpbnRvIGBzaHJpbmtfb25lKClgIHdoZW4gbm90IHRyaWdnZXJlZCBieSBrc3dhcGQuCgpDcnVjaWFsbHksIG5vbmUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBpbnRyb2R1Y2UgYW55IG5ldyBhdmVudWVzIGZvciB1c2VyLXNwYWNlIGRhdGEgbGVha3MsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgc2NhbGFycyBvciBwb2ludGVycy4gVGhlIHBvc3NpYmxlIHBpdGZhbGxzIGhlcmUgYXJlIHN0YW5kYXJkIGtlcm5lbCBidWcgdGVycml0b3J5OiBsb2dpYyBlcnJvcnMsIGRpdmlzaW9uIGJ5IHplcm8sIGFyaXRobWV0aWMgb3ZlcmZsb3cgdGhhdCBzbGlwcGVkIHRocm91Z2ggdGhlIGluaXRpYWwgZml4LCBsb2NraW5nL1JDVSBpc3N1ZXMsIG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLgoKVGhpcyBicmluZ3MgbWUgdG8gdGhlIEtNU0FOIHF1ZXN0aW9uLiBLTVNBTiwgYXMgSSBrbm93LCBpcyBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAob24gdGhlIHN0YWNrLCBoZWFwLCBvciBwYWdlKSBhbmQga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOLCBVQlNBTiwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZXRlY3RvcnMgYXJlIHdlbGwtZXF1aXBwZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBpbnRlZ2VyIG92ZXJmbG93cywgYW5kIGxvY2tpbmcgdmlvbGF0aW9ucy4KClNpbmNlIHRoZXNlIGNoYW5nZXMgKmRvbiYjMzk7dCogaW50cm9kdWNlIG5ldyBidWZmZXJzLCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlci1zcGFjZSwgb3IgbGVhdmUgdmFyaWFibGVzIG9yIHN0cnVjdHVyZSBmaWVsZHMgdW5pbml0aWFsaXplZCwgdGhlIHJpc2sgcHJvZmlsZSBoZXJlIGlzIGZpcm1seSBpbiB0aGUgZG9tYWluIG9mIEtBU0FOL1VCU0FOLXN0eWxlIGJ1Z3MsIG5vdCBLTVNBTi4gVGhlIHZhbHVlcyB1c2VkIGluIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgIGFuZCBgZWZmZWN0aXZlX3Byb3RlY3Rpb25gIGFyZSBpbW1lZGlhdGVseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzbiYjMzk7dCByZXF1aXJlZC4gV2UgY2FuIHN0aWNrIHdpdGggdGhlIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBhcml0aG1ldGljIG92ZXJmbG93ICgjREUpIGR1cmluZyBtZW1vcnkgY2dyb3VwIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIGluIG1tL3BhZ2VfY291bnRlci5jIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIHRvIGNhbGN1bGF0ZSBhbmNlc3RvciBwcm90ZWN0aW9uIHZhbHVlcyBmb3IgTUdMUlUgaW4gbW0vdm1zY2FuLmMgYW5kIG1tL21lbWNvbnRyb2wuYy5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gVGhlIGNoYW5nZXMgZGVhbCBlbnRpcmVseSB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFyaXRobWV0aWMsIGNncm91cCBoaWVyYXJjaHkgdHJhdmVyc2FsIHVuZGVyIFJDVSwgYW5kIHJlY2xhaW0gaGV1cmlzdGljcy5cbi0gTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMgKHN1Y2ggYXMgY29weV90b191c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBpb2N0bCByZXR1cm5zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbi0gTm8gdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBtZW1vcnkgaXMgYWxsb2NhdGVkIG9yIHJlYWQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzY2FsYXIgdHlwZXMgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgdXBvbiBkZWNsYXJhdGlvbi5cbi0gUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBjb2RlIChlLmcuIGFyaXRobWV0aWMgb3ZlcmZsb3csIGRpdmlzaW9uLWJ5LXplcm8sIFJDVS9wb2ludGVyIGRlcmVmZXJlbmNlIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMsIFVCU0FOLCBhbmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZCBmb3IgdGhpcyBwYXRjaCBzZXJpZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIGFyaXRobWV0aWMgb3ZlcmZsb3cgKCNERSkgZHVyaW5nIG1lbW9yeSBjZ3JvdXAgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gaW4gbW0vcGFnZV9jb3VudGVyLmMgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgdG8gY2FsY3VsYXRlIGFuY2VzdG9yIHByb3RlY3Rpb24gdmFsdWVzIGZvciBNR0xSVSBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBUaGUgY2hhbmdlcyBkZWFsIGVudGlyZWx5IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYXJpdGhtZXRpYywgY2dyb3VwIGhpZXJhcmNoeSB0cmF2ZXJzYWwgdW5kZXIgUkNVLCBhbmQgcmVjbGFpbSBoZXVyaXN0aWNzLlxuLSBObyBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycyAoc3VjaCBhcyBjb3B5X3RvX3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIGlvY3RsIHJldHVybnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgb3IgcmVhZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGFuZCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHNjYWxhciB0eXBlcyBpbml0aWFsaXplZCBpbW1lZGlhdGVseSB1cG9uIGRlY2xhcmF0aW9uLlxuLSBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGNvZGUgKGUuZy4gYXJpdGhtZXRpYyBvdmVyZmxvdywgZGl2aXNpb24tYnktemVybywgUkNVL3BvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycywgVUJTQU4sIGFuZCBLQVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkIGZvciB0aGlzIHBhdGNoIHNlcmllcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzc6MzguNzU1NjMwNzA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYwNjE4MjEyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aFwiLFxuICAgIFwicGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gICAgXCJzaHJpbmtfb25lXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIGFyaXRobWV0aWMgb3ZlcmZsb3cgKCNERSkgZHVyaW5nIG1lbW9yeSBjZ3JvdXAgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gaW4gbW0vcGFnZV9jb3VudGVyLmMgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgdG8gY2FsY3VsYXRlIGFuY2VzdG9yIHByb3RlY3Rpb24gdmFsdWVzIGZvciBNR0xSVSBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLlxcblxcbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBUaGUgY2hhbmdlcyBkZWFsIGVudGlyZWx5IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYXJpdGhtZXRpYywgY2dyb3VwIGhpZXJhcmNoeSB0cmF2ZXJzYWwgdW5kZXIgUkNVLCBhbmQgcmVjbGFpbSBoZXVyaXN0aWNzLlxcbi0gTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMgKHN1Y2ggYXMgY29weV90b191c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBpb2N0bCByZXR1cm5zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgaGVhcCwgc3RhY2ssIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCBvciByZWFkLiBBbGwgbG9jYWwgdmFyaWFibGVzIGluIHRoZSBuZXcgYW5kIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgc2NhbGFyIHR5cGVzIGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IHVwb24gZGVjbGFyYXRpb24uXFxuLSBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGNvZGUgKGUuZy4gYXJpdGhtZXRpYyBvdmVyZmxvdywgZGl2aXNpb24tYnktemVybywgUkNVL3BvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycywgVUJTQU4sIGFuZCBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQgZm9yIHRoaXMgcGF0Y2ggc2VyaWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vcGFnZV9jb3VudGVyLmMgdG8gZml4IHBvdGVudGlhbCA2NC1iaXQgZGl2aXNpb24gb3ZlcmZsb3cgaW4gZWZmZWN0aXZlX3Byb3RlY3Rpb24oKSwgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgaW4gbW0vbWVtY29udHJvbC5jIGNhbGxlZCBmcm9tIG1tL3Ztc2Nhbi5jIChNdWx0aS1HZW4gTFJVIHNocmlua19vbmUpLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIG1lbWNnIHByb3RlY3Rpb24gYW5kIHJlY2xhaW0gY2FsY3VsYXRpb25zIGluIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM3OjM4Ljc1NTYzNjQ1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5ODE0MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTAzMTJlYzkwYjI3ZWU2MzRmZjZjZjU4OGE4YTQyNjI4YTUxMzdkZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDA0OjM3OjM3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCBmOTMyYjFkZGRhOGM5Li5kMzUyODk5Y2U1MGNlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTg4Myw2ICsxODgzLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4rI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19MUlVfR0VOKVxcbit2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3tcXG4rfVxcbisjZW5kaWZcXG4rXFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfWlNXQVApXFxuIGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcXG4gdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggOWE2NWQ3MTQ4YzIyNy4uMDljZjMwY2NlMmY3MyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNTI0MCw2ICs1MjQwLDUxIEBAIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4gXFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFxcdTAwMjZyb290LVxcdTAwM2VtZW1vcnksIFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCByZWN1cnNpdmVfcHJvdGVjdGlvbik7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbisvKipcXG4rICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aFxcbisgKiBAcm9vdDogdGhlIHRvcCBhbmNlc3RvciBvZiB0aGUgc3ViLXRyZWUgYmVpbmcgY2hlY2tlZCAoTlVMTCBmb3Igcm9vdF9tZW1fY2dyb3VwKVxcbisgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cFxcbisgKlxcbisgKiBXYWxrIHRoZSBhbmNlc3RvciBwYXRoIGZyb20gQHJvb3QgZG93biB0byBAbWVtY2cgYW5kIGNvbXB1dGUgdGhlIGVmZmVjdGl2ZVxcbisgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxcbisgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi5cXG4rICovXFxuK3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cXG4rXFx0XFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7XFxuK1xcdHN0cnVjdCBjZ3JvdXAgKmNnO1xcbitcXHRpbnQgcm9vdF9sZXZlbCwgaTtcXG4rXFxuK1xcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghcm9vdClcXG4rXFx0XFx0cm9vdCA9IHJvb3RfbWVtX2Nncm91cDtcXG4rXFxuK1xcdGlmIChtZW1jZyA9PSByb290KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyb290X2xldmVsID0gcm9vdC1cXHUwMDNlY3NzLmNncm91cC1cXHUwMDNlbGV2ZWw7XFxuK1xcdGNnID0gbWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXA7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGZvciAoaSA9IHJvb3RfbGV2ZWwgKyAxOyBpIFxcdTAwM2M9IGNnLVxcdTAwM2VsZXZlbDsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpjdXI7XFxuK1xcbitcXHRcXHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXFx1MDAzZWFuY2VzdG9yc1tpXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XFxuK1xcdFxcdGlmIChjdXIpXFxuK1xcdFxcdFxcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcXHUwMDI2cm9vdC1cXHUwMDNlbWVtb3J5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZjdXItXFx1MDAzZW1lbW9yeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICByZWN1cnNpdmVfcHJvdGVjdGlvbik7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK31cXG4rI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuK1xcbiBzdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdGdmcF90IGdmcClcXG4ge1xcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXFxuaW5kZXggNDUwNTQzZjRiMzE4Yi4uZWYxYTY0NzYyZDRhMiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xcbisrKyBiL21tL3BhZ2VfY291bnRlci5jXFxuQEAgLTgsNiArOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX2NvdW50ZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYXRoNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbkBAIC0zNzYsNyArMzc3LDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcXG4gXFx0ICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC5cXG4gXFx0ICovXFxuIFxcdGlmIChzaWJsaW5nc19wcm90ZWN0ZWQgXFx1MDAzZSBwYXJlbnRfZWZmZWN0aXZlKVxcbi1cXHRcXHRyZXR1cm4gcHJvdGVjdGVkICogcGFyZW50X2VmZmVjdGl2ZSAvIHNpYmxpbmdzX3Byb3RlY3RlZDtcXG4rXFx0XFx0cmV0dXJuIG11bF91NjRfdTY0X2Rpdl91NjQocHJvdGVjdGVkLCBwYXJlbnRfZWZmZWN0aXZlLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzaWJsaW5nc19wcm90ZWN0ZWQpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogT2ssIHV0aWxpemVkIHByb3RlY3Rpb24gb2YgYWxsIGNoaWxkcmVuIGlzIHdpdGhpbiB3aGF0IHRoZVxcbkBAIC00MTcsMTMgKzQxOSwxOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxcbiBcXHRpZiAocGFyZW50X2VmZmVjdGl2ZSBcXHUwMDNlIHNpYmxpbmdzX3Byb3RlY3RlZCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgcGFyZW50X3VzYWdlIFxcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB1c2FnZSBcXHUwMDNlIHByb3RlY3RlZCkge1xcbi1cXHRcXHR1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHVucHJvdGVjdGVkID0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xcbiBcXG4tXFx0XFx0dW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDtcXG4tXFx0XFx0dW5jbGFpbWVkICo9IHVzYWdlIC0gcHJvdGVjdGVkO1xcbi1cXHRcXHR1bmNsYWltZWQgLz0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgdXNhZ2VzIGFyZW4ndCByZWFkIGF0b21pY2FsbHksIHNvIGEgY2hpbGQgY2FuIHRyYW5zaWVudGx5XFxuK1xcdFxcdCAqIGFwcGVhciB0byB1c2UgbW9yZSB0aGFuIGl0cyBwYXJlbnQsIG1ha2luZyB0aGUgcmF0aW8gZXhjZWVkIDFcXG4rXFx0XFx0ICogYW5kIHRoZSBxdW90aWVudCBvdmVyZmxvdyA2NCBiaXRzICgjREUgb24geDg2KS4gIENhcCBpdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHVucHJvdGVjdGVkID0gbWluKHVucHJvdGVjdGVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQpO1xcbiBcXG4tXFx0XFx0ZXAgKz0gdW5jbGFpbWVkO1xcbitcXHRcXHRlcCArPSBtdWxfdTY0X3U2NF9kaXZfdTY0KHVuY2xhaW1lZCwgdW5wcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBlcDtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDI0NWY2OGM3NWIyODkuLmVhZjU3NTA2YmUyZjcgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC01MTg3LDcgKzUxODcsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuIFxcbi1cXHQvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqL1xcbitcXHQvKlxcbitcXHQgKiBGb3Iga3N3YXBkLCBscnVfZ2VuX2FnZV9ub2RlKCkgaGFzIGFscmVhZHkgY2FsbGVkXFxuK1xcdCAqIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKVxcbitcXHQgKi9cXG4rXFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpKVxcbitcXHRcXHRtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoTlVMTCwgbWVtY2cpO1xcbitcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSlcXG4gXFx0XFx0cmV0dXJuIE1FTUNHX0xSVV9ZT1VORztcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM3OjM5LjU0NjE1NDg5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDM3OTY0MzUyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aFwiLFxuICAgIFwicGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gICAgXCJzaHJpbmtfb25lXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBmaXggcG90ZW50aWFsIDY0LWJpdCBkaXZpc2lvbiBvdmVyZmxvdyBpbiBlZmZlY3RpdmVfcHJvdGVjdGlvbigpLCBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSBpbiBtbS9tZW1jb250cm9sLmMgY2FsbGVkIGZyb20gbW0vdm1zY2FuLmMgKE11bHRpLUdlbiBMUlUgc2hyaW5rX29uZSkuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbWVtY2cgcHJvdGVjdGlvbiBhbmQgcmVjbGFpbSBjYWxjdWxhdGlvbnMgaW4gcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMDMxMmVjOTBiMjdlZTYzNGZmNmNmNTg4YThhNDI2MjhhNTEzN2RkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNDozNzozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGY5MzJiMWRkZGE4YzkuLmQzNTI4OTljZTUwY2UgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xODgzLDYgKzE4ODMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xSVV9HRU4pXG4rdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4rXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4rXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK31cbisjZW5kaWZcbitcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcbiBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XG4gdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDlhNjVkNzE0OGMyMjcuLjA5Y2YzMGNjZTJmNzMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTUyNDAsNiArNTI0MCw1MSBAQCB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4gXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbisvKipcbisgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoXG4rICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cClcbisgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cFxuKyAqXG4rICogV2FsayB0aGUgYW5jZXN0b3IgcGF0aCBmcm9tIEByb290IGRvd24gdG8gQG1lbWNnIGFuZCBjb21wdXRlIHRoZSBlZmZlY3RpdmVcbisgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxuKyAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLlxuKyAqL1xuK3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cbitcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDtcbitcdHN0cnVjdCBjZ3JvdXAgKmNnO1xuK1x0aW50IHJvb3RfbGV2ZWwsIGk7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIXJvb3QpXG4rXHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG4rXG4rXHRpZiAobWVtY2cgPT0gcm9vdClcbitcdFx0cmV0dXJuO1xuK1xuK1x0cm9vdF9sZXZlbCA9IHJvb3QtXHUwMDNlY3NzLmNncm91cC1cdTAwM2VsZXZlbDtcbitcdGNnID0gbWVtY2ctXHUwMDNlY3NzLmNncm91cDtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGZvciAoaSA9IHJvb3RfbGV2ZWwgKyAxOyBpIFx1MDAzYz0gY2ctXHUwMDNlbGV2ZWw7IGkrKykge1xuK1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyO1xuK1xuK1x0XHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXHUwMDNlYW5jZXN0b3JzW2ldLFxuK1x0XHRcdFx0XHRcdCAgICAgXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XG4rXHRcdGlmIChjdXIpXG4rXHRcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LFxuK1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuK1x0XHRcdFx0XHRcdFx0ICByZWN1cnNpdmVfcHJvdGVjdGlvbik7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4rXG4gc3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdGdmcF90IGdmcClcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNDUwNTQzZjRiMzE4Yi4uZWYxYTY0NzYyZDRhMiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4rKysgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9jb3VudGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aDY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuQEAgLTM3Niw3ICszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxuIFx0ICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC5cbiBcdCAqL1xuIFx0aWYgKHNpYmxpbmdzX3Byb3RlY3RlZCBcdTAwM2UgcGFyZW50X2VmZmVjdGl2ZSlcbi1cdFx0cmV0dXJuIHByb3RlY3RlZCAqIHBhcmVudF9lZmZlY3RpdmUgLyBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4rXHRcdHJldHVybiBtdWxfdTY0X3U2NF9kaXZfdTY0KHByb3RlY3RlZCwgcGFyZW50X2VmZmVjdGl2ZSxcbitcdFx0XHRcdFx0ICAgc2libGluZ3NfcHJvdGVjdGVkKTtcbiBcbiBcdC8qXG4gXHQgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlXG5AQCAtNDE3LDEzICs0MTksMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcbiBcdGlmIChwYXJlbnRfZWZmZWN0aXZlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgcGFyZW50X3VzYWdlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgdXNhZ2UgXHUwMDNlIHByb3RlY3RlZCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDtcbitcdFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuK1x0XHR1bnNpZ25lZCBsb25nIHVucHJvdGVjdGVkID0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4rXHRcdHVuc2lnbmVkIGxvbmcgcGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIFxuLVx0XHR1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuLVx0XHR1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4tXHRcdHVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSB1c2FnZXMgYXJlbid0IHJlYWQgYXRvbWljYWxseSwgc28gYSBjaGlsZCBjYW4gdHJhbnNpZW50bHlcbitcdFx0ICogYXBwZWFyIHRvIHVzZSBtb3JlIHRoYW4gaXRzIHBhcmVudCwgbWFraW5nIHRoZSByYXRpbyBleGNlZWQgMVxuK1x0XHQgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LlxuK1x0XHQgKi9cbitcdFx0dW5wcm90ZWN0ZWQgPSBtaW4odW5wcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7XG4gXG4tXHRcdGVwICs9IHVuY2xhaW1lZDtcbitcdFx0ZXAgKz0gbXVsX3U2NF91NjRfZGl2X3U2NCh1bmNsYWltZWQsIHVucHJvdGVjdGVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVwO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDI0NWY2OGM3NWIyODkuLmVhZjU3NTA2YmUyZjcgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC01MTg3LDcgKzUxODcsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbiBcbi1cdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXG4rXHQvKlxuK1x0ICogRm9yIGtzd2FwZCwgbHJ1X2dlbl9hZ2Vfbm9kZSgpIGhhcyBhbHJlYWR5IGNhbGxlZFxuK1x0ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpXG4rXHQgKi9cbitcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbitcdFx0bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKE5VTEwsIG1lbWNnKTtcbitcbiBcdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpXG4gXHRcdHJldHVybiBNRU1DR19MUlVfWU9VTkc7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozNzozOS41NDYxNTc0OTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTkzMTM0NDc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBQcm90ZWN0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsdGVycyB0aGUgbWVtb3J5IGNvbnRyb2wgYmVoYXZpb3IuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBzcHJlYWQgYWNyb3NzIGEgZmV3IGtleSBhcmVhcywgc28gSSBuZWVkIHRvIHBpZWNlIHRoaXMgdG9nZXRoZXIuXG5cbkZpcnN0LCB0aGVyZSdzIHRoZSBoZWFkZXIsIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIHdoaWNoIGRlZmluZXMgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLCBzbyBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBmdW5jdGlvbiB3b3Jrcy5cblxuVGhlbiwgdGhlIGltcGxlbWVudGF0aW9uIGxpdmVzIGluIGBtbS9tZW1jb250cm9sLmNgLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgbG9naWMgdGhlcmUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFjdHVhbCBwcm90ZWN0aW9uIHBhdGggY2FsY3VsYXRpb24uIFRoZSBpbnRlbnQgaXMgY2xlYXIgZW5vdWdoLCBpdCB3aWxsIGxpa2VseSBmb2xsb3cgdGhlIGNncm91cCBoaWVyYXJjaHkuXG5cbk5leHQsIHRoZXJlJ3MgYG1tL3BhZ2VfY291bnRlci5jYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGFyZWEgb2YgdGhpcyBtb2RpZmljYXRpb24uIEkgc2VlIHRoZSB1cGRhdGUgdG8gYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYCB0byB1c2UgYG11bF91NjRfdTY0X2Rpdl91NjRgLCBhbmQgdGhlIGNsYW1waW5nIG9mIGB1bnByb3RlY3RlZGAgdG8gdGhlIHBhcmVudCdzIGB1bnByb3RlY3RlZGAgdmFsdWUuIFRoYXQncyBhIGdvb2QgbW92ZTsgdGhlIHVzZSBvZiBgbXVsX3U2NF91NjRfZGl2X3U2NGAgaW5kaWNhdGVzIGFuIGF0dGVtcHQgdG8gYXZvaWQgb3ZlcmZsb3cgaXNzdWVzLCBhbmQgY2xhbXBpbmcgYXQgdGhlIHBhcmVudCBzaG91bGQgaGVscCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIHByb3RlY3Rpb24gdW5kZXJmbG93LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgYWRkcmVzc2VzIHRoZSBkaXZpc2lvbiBvdmVyZmxvdyBjb25jZXJucy5cblxuRmluYWxseSwgYG1tL3Ztc2Nhbi5jYCBjYWxscyBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKE5VTEwsIG1lbWNnKWAgaW4gYHNocmlua19vbmUoKWAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIHdoZW4gbm90IGtzd2FwZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBNR0xSVSAob3IsIG1vcmUgcHJlY2lzZWx5LCBpZiBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQpLiBJbnRlcmVzdGluZy4gVGhpcyBtZWFucyB0aGUgbmV3IHByb3RlY3Rpb24gbG9naWMgaXMgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBwYWdlIHJlY2xhbWF0aW9uIHByb2Nlc3MuIE5vdywgSSBoYXZlIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBtZW1jZyByZWNsYWltIG1lY2hhbmlzbS5cblxuVGltZSB0byBwdWxsIG91dCB0aGUgZ3JlcHBlciBvciByZWFkIHRoZSBmaWxlcyBkaXJlY3RseSB0byBkaWcgaW50byB0aGUgYWN0dWFsIGNvZGUgYW5kIHRyYWNlIGhvdyBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCBpcyBiZWluZyB1c2VkIGFuZCBob3cgdGhpcyBpbXBhY3RzIHRoZSBjYWxsZXJzIGFuZCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBmbG93LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbiBiYWNrIHRvIGl0cyByb290IHRvIGdldCB0aGUgYmlnIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozNzo1MS40Nzc1MDUzMDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxODg0OTYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTg4MD1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg4Ni0jaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0xSVV9HRU4pXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTg4Nzp2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODg4LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODg5LSNlbHNlXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTg5MDpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4OTEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMjg9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNDQtLyoqXFxubW0vbWVtY29udHJvbC5jOjUyNDU6ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aFxcbm1tL21lbWNvbnRyb2wuYy01MjQ2LSAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI1Mi0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI1Mzp2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG5tbS9tZW1jb250cm9sLmMtNTI1NC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxODI9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTk0LVxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYzo1MTk1OlxcdFxcdG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChOVUxMLCBtZW1jZyk7XFxubW0vdm1zY2FuLmMtNTE5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzc6NTQuMTk2MzYyODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDAxMjg3MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgZm9jdXNpbmcgb24gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtczpcblxuKipEaXZpbmcgRGVlcCBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhvc2UgZmlsZXM6IGBtbS9wYWdlX2NvdW50ZXIuY2AsIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgYG1tL3Ztc2Nhbi5jYC4gVGhlc2UgYXJlIGNydWNpYWwuIGBwYWdlX2NvdW50ZXIuY2AgZGVhbHMgd2l0aCB0cmFja2luZyBwYWdlIHVzYWdlLCBmdW5kYW1lbnRhbCBmb3IgYW55IHNhbmUgbWVtb3J5IG1hbmFnZW1lbnQuIGBtZW1jb250cm9sLmNgIGlzIHdoZXJlIHRoZSBjb250cm9sIGdyb3VwcyBmb3IgbWVtb3J5IGlzb2xhdGlvbiBsaXZlLCBhZmZlY3RpbmcgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgYWNjb3VudGluZyBiZXR3ZWVuIHByb2Nlc3NlcyBhbmQgY29udGFpbmVycy4gQW5kLCBvZiBjb3Vyc2UsIGB2bXNjYW4uY2AgaGFuZGxlcyB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5pbmcgYW5kIHJlY2xhaW1pbmcgcHJvY2VzcywgdGhlIGhlYXJ0IG9mIGhvdyB3ZSBtYW5hZ2Ugc3dhcHBpbmcgYW5kIGZyZWVpbmcgdXAgbWVtb3J5IHByZXNzdXJlLiBCeSBleGFtaW5pbmcgdGhlIGNoYW5nZXMgYWNyb3NzIHRoZXNlIHRocmVlLCBJIHNob3VsZCBnZXQgYSBwcmV0dHkgZ29vZCBzZW5zZSBvZiB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2Ygd2hhdGV2ZXIncyBiZWVuIG1vZGlmaWVkLiBUaGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHBhZ2UgYWNjb3VudGluZywgY29udHJvbCBncm91cHMsIGFuZCB0aGUgc2Nhbm5pbmcgc3RyYXRlZ3kgYXJlIGFsd2F5cyBpbnRlcnR3aW5lZC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgbmV3IHJlc291cmNlIGxpbWl0cywgY2hhbmdlcyBpbiBob3cgcGFnZXMgYXJlIGNsYXNzaWZpZWQsIG9yIHNoaWZ0cyBpbiB0aGUgcmVjbGFpbSBiZWhhdmlvci4gSG9wZWZ1bGx5IHRoaXMgd2lsbCBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozNzo1Ni41OTc2NTI5NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2NvdW50ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjU6XFx0XFx0dW5zaWduZWQgbG9uZyBwcm90ZWN0ZWQ7XFxuIDM2NjpcXHRcXHR1bnNpZ25lZCBsb25nIGVwO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRwcm90ZWN0ZWQgPSBtaW4odXNhZ2UsIHNldHRpbmcpO1xcbiAzNjk6XFx0XFx0LypcXG4gMzcwOlxcdFxcdCAqIElmIGFsbCBjZ3JvdXBzIGF0IHRoaXMgbGV2ZWwgY29tYmluZWQgY2xhaW0gYW5kIHVzZSBtb3JlXFxuIDM3MTpcXHRcXHQgKiBwcm90ZWN0aW9uIHRoYW4gd2hhdCB0aGUgcGFyZW50IGFmZm9yZHMgdGhlbSwgZGlzdHJpYnV0ZVxcbiAzNzI6XFx0XFx0ICogc2hhcmVzIGluIHByb3BvcnRpb24gdG8gdXRpbGl6YXRpb24uXFxuIDM3MzpcXHRcXHQgKlxcbiAzNzQ6XFx0XFx0ICogV2UgYXJlIHVzaW5nIGFjdHVhbCB1dGlsaXphdGlvbiByYXRoZXIgdGhhbiB0aGUgc3RhdGljYWxseVxcbiAzNzU6XFx0XFx0ICogY2xhaW1lZCBwcm90ZWN0aW9uIGluIG9yZGVyIHRvIGJlIHdvcmstY29uc2VydmluZzogY2xhaW1lZFxcbiAzNzY6XFx0XFx0ICogYnV0IHVudXNlZCBwcm90ZWN0aW9uIGlzIGF2YWlsYWJsZSB0byBzaWJsaW5ncyB0aGF0IHdvdWxkXFxuIDM3NzpcXHRcXHQgKiBvdGhlcndpc2UgZ2V0IGEgc21hbGxlciBjaHVuayB0aGFuIHdoYXQgdGhleSBjbGFpbWVkLlxcbiAzNzg6XFx0XFx0ICovXFxuIDM3OTpcXHRcXHRpZiAoc2libGluZ3NfcHJvdGVjdGVkIFxcdTAwM2UgcGFyZW50X2VmZmVjdGl2ZSlcXG4gMzgwOlxcdFxcdFxcdHJldHVybiBtdWxfdTY0X3U2NF9kaXZfdTY0KHByb3RlY3RlZCwgcGFyZW50X2VmZmVjdGl2ZSxcXG4gMzgxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpYmxpbmdzX3Byb3RlY3RlZCk7XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdC8qXFxuIDM4NDpcXHRcXHQgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlXFxuIDM4NTpcXHRcXHQgKiBwYXJlbnQgYWZmb3JkcyB0aGVtLCBzbyB3ZSBrbm93IHdoYXRldmVyIHRoaXMgY2hpbGQgY2xhaW1zXFxuIDM4NjpcXHRcXHQgKiBhbmQgdXRpbGl6ZXMgaXMgZWZmZWN0aXZlbHkgcHJvdGVjdGVkLlxcbiAzODc6XFx0XFx0ICpcXG4gMzg4OlxcdFxcdCAqIElmIHRoZXJlIGlzIHVucHJvdGVjdGVkIHVzYWdlIGJleW9uZCB0aGlzIHZhbHVlLCByZWNsYWltXFxuIDM4OTpcXHRcXHQgKiB3aWxsIGFwcGx5IHByZXNzdXJlIGluIHByb3BvcnRpb24gdG8gdGhhdCBhbW91bnQuXFxuIDM5MDpcXHRcXHQgKlxcbiAzOTE6XFx0XFx0ICogSWYgdGhlcmUgaXMgdW51dGlsaXplZCBwcm90ZWN0aW9uLCB0aGUgY2dyb3VwIHdpbGwgYmUgZnVsbHlcXG4gMzkyOlxcdFxcdCAqIHNoaWVsZGVkIGZyb20gcmVjbGFpbSwgYnV0IHdlIGRvIHJldHVybiBhIHNtYWxsZXIgdmFsdWUgZm9yXFxuIDM5MzpcXHRcXHQgKiBwcm90ZWN0aW9uIHRoYW4gd2hhdCB0aGUgZ3JvdXAgY291bGQgZW5qb3kgaW4gdGhlb3J5LiBUaGlzXFxuIDM5NDpcXHRcXHQgKiBpcyBva2F5LiBXaXRoIHRoZSBvdmVyY29tbWl0IGRpc3RyaWJ1dGlvbiBhYm92ZSwgZWZmZWN0aXZlXFxuIDM5NTpcXHRcXHQgKiBwcm90ZWN0aW9uIGlzIGFsd2F5cyBkZXBlbmRlbnQgb24gaG93IG1lbW9yeSBpcyBhY3R1YWxseVxcbiAzOTY6XFx0XFx0ICogY29uc3VtZWQgYW1vbmcgdGhlIHNpYmxpbmdzIGFueXdheS5cXG4gMzk3OlxcdFxcdCAqL1xcbiAzOTg6XFx0XFx0ZXAgPSBwcm90ZWN0ZWQ7XFxuIDM5OTpcXHRcXG4gNDAwOlxcdFxcdC8qXFxuIDQwMTpcXHRcXHQgKiBJZiB0aGUgY2hpbGRyZW4gYXJlbid0IGNsYWltaW5nIChhbGwgb2YpIHRoZSBwcm90ZWN0aW9uXFxuIDQwMjpcXHRcXHQgKiBhZmZvcmRlZCB0byB0aGVtIGJ5IHRoZSBwYXJlbnQsIGRpc3RyaWJ1dGUgdGhlIHJlbWFpbmRlciBpblxcbiA0MDM6XFx0XFx0ICogcHJvcG9ydGlvbiB0byB0aGUgKHVucHJvdGVjdGVkKSBtZW1vcnkgb2YgZWFjaCBjZ3JvdXAuIFRoYXRcXG4gNDA0OlxcdFxcdCAqIHdheSwgY2dyb3VwcyB0aGF0IGFyZW4ndCBleHBsaWNpdGx5IHByaW9yaXRpemVkIHdydCBlYWNoXFxuIDQwNTpcXHRcXHQgKiBvdGhlciBjb21wZXRlIGZyZWVseSBvdmVyIHRoZSBhbGxvd2FuY2UsIGJ1dCB0aGV5IGFyZVxcbiA0MDY6XFx0XFx0ICogY29sbGVjdGl2ZWx5IHByb3RlY3RlZCBmcm9tIG5laWdoYm9yaW5nIHRyZWVzLlxcbiA0MDc6XFx0XFx0ICpcXG4gNDA4OlxcdFxcdCAqIFdlJ3JlIHVzaW5nIHVucHJvdGVjdGVkIG1lbW9yeSBmb3IgdGhlIHdlaWdodCBzbyB0aGF0IGlmXFxuIDQwOTpcXHRcXHQgKiBzb21lIGNncm91cHMgRE8gY2xhaW0gZXhwbGljaXQgcHJvdGVjdGlvbiwgd2UgZG9uJ3QgcHJvdGVjdFxcbiA0MTA6XFx0XFx0ICogdGhlIHNhbWUgYnl0ZXMgdHdpY2UuXFxuIDQxMTpcXHRcXHQgKlxcbiA0MTI6XFx0XFx0ICogQ2hlY2sgYm90aCB1c2FnZSBhbmQgcGFyZW50X3VzYWdlIGFnYWluc3QgdGhlIHJlc3BlY3RpdmVcXG4gNDEzOlxcdFxcdCAqIHByb3RlY3RlZCB2YWx1ZXMuIE9uZSBzaG91bGQgaW1wbHkgdGhlIG90aGVyLCBidXQgdGhleVxcbiA0MTQ6XFx0XFx0ICogYXJlbid0IHJlYWQgYXRvbWljYWxseSAtIG1ha2Ugc3VyZSB0aGUgZGl2aXNpb24gaXMgc2FuZS5cXG4gNDE1OlxcdFxcdCAqL1xcbiA0MTY6XFx0XFx0aWYgKCFyZWN1cnNpdmVfcHJvdGVjdGlvbilcXG4gNDE3OlxcdFxcdFxcdHJldHVybiBlcDtcXG4gNDE4OlxcdFxcbiA0MTk6XFx0XFx0aWYgKHBhcmVudF9lZmZlY3RpdmUgXFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4gNDIwOlxcdFxcdCAgICBwYXJlbnRfdXNhZ2UgXFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4gNDIxOlxcdFxcdCAgICB1c2FnZSBcXHUwMDNlIHByb3RlY3RlZCkge1xcbiA0MjI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xcbiA0MjM6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB1bnByb3RlY3RlZCA9IHVzYWdlIC0gcHJvdGVjdGVkO1xcbiA0MjQ6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwYXJlbnRfdW5wcm90ZWN0ZWQgPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XFxuIDQyNTpcXHRcXG4gNDI2OlxcdFxcdFxcdC8qXFxuIDQyNzpcXHRcXHRcXHQgKiBUaGUgdXNhZ2VzIGFyZW4ndCByZWFkIGF0b21pY2FsbHksIHNvIGEgY2hpbGQgY2FuIHRyYW5zaWVudGx5XFxuIDQyODpcXHRcXHRcXHQgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxXFxuIDQyOTpcXHRcXHRcXHQgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LlxcbiA0MzA6XFx0XFx0XFx0ICovXFxuIDQzMTpcXHRcXHRcXHR1bnByb3RlY3RlZCA9IG1pbih1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtcXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0XFx0ZXAgKz0gbXVsX3U2NF91NjRfZGl2X3U2NCh1bmNsYWltZWQsIHVucHJvdGVjdGVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQpO1xcbiA0MzQ6XFx0XFx0fVxcbiA0MzU6XFx0XFxuIDQzNjpcXHRcXHRyZXR1cm4gZXA7XFxuIDQzNzpcXHR9XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcbiA0NDA6XFx0LyoqXFxuIDQ0MTpcXHQgKiBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24gLSBjaGVjayBpZiBtZW1vcnkgY29uc3VtcHRpb24gaXMgaW4gdGhlIG5vcm1hbCByYW5nZVxcbiA0NDI6XFx0ICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWRcXG4gNDQzOlxcdCAqIEBjb3VudGVyOiB0aGUgcGFnZV9jb3VudGVyIHRoZSBjb3VudGVyIHRvIHVwZGF0ZVxcbiA0NDQ6XFx0ICogQHJlY3Vyc2l2ZV9wcm90ZWN0aW9uOiBXaGV0aGVyIHRvIHVzZSBtZW1vcnlfcmVjdXJzaXZlcHJvdCBiZWhhdmlvci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzc6NTYuNTk3ODIxMzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg1OTkwOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgUHJvdGVjdGlvbiBpbiBgbW0vbWVtY29udHJvbC5jYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgbWVtb3J5IGNncm91cHMgYW5kIGhvdyBwcm90ZWN0aW9uIGlzIGhhbmRsZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgZnVuY3Rpb24uIFRoYXQncyB0aGUgbGlrZWx5IHBsYWNlIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBkZXRlcm1pbmluZyBtZW1vcnkgcHJvdGVjdGlvbiBzdHJhdGVnaWVzIHJlc2lkZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGZpZ3VyZXMgb3V0IHRoZSBhcHByb3ByaWF0ZSBcInBhdGhcIiDigJMgdGhlIHNlcXVlbmNlIG9mIGNoZWNrcyBhbmQgZGVjaXNpb25zIOKAkyB0byBlbnN1cmUgbWVtb3J5IGlzb2xhdGlvbiBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiB3aXRoaW4gYSBjZ3JvdXAgY29udGV4dC4gSSBzdXNwZWN0IHRoZXJlJ3MgYSBnb29kIGRlYWwgb2YgY29tcGxleGl0eSBoZXJlLCBiYWxhbmNpbmcgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgd2l0aCByb2J1c3QgcHJvdGVjdGlvbi4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGUga2VybmVsIGFyY2hpdGVjdHMgdGFja2xlZCB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGVyaWEgYW5kIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGF0IGNhbGN1bGF0aW9uOiBpcyBpdCBiYXNlZCBvbiB0aGUgY3VycmVudCB3b3JrbG9hZCwgdGhlIGNncm91cCdzIGxpbWl0cywgb3ZlcmFsbCBzeXN0ZW0gbG9hZCwgb3Igc29tZSBjb21iaW5hdGlvbiBvZiB0aGVzZT8gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBwZXJmb3JtYW5jZSB0cm91Ymxlc2hvb3RpbmcgYW5kIHR1bmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzc6NTguOTgzODE2NTAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAzODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjMwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MjMwOlxcdHtcXG41MjMxOlxcdFxcdGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24gPVxcbjUyMzI6XFx0XFx0XFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7XFxuNTIzMzpcXHRcXG41MjM0OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuNTIzNTpcXHRcXHRcXHRyZXR1cm47XFxuNTIzNjpcXHRcXG41MjM3OlxcdFxcdGlmICghcm9vdClcXG41MjM4OlxcdFxcdFxcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XFxuNTIzOTpcXHRcXG41MjQwOlxcdFxcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcXHUwMDI2cm9vdC1cXHUwMDNlbWVtb3J5LCBcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xcbjUyNDE6XFx0fVxcbjUyNDI6XFx0XFxuNTI0MzpcXHQjaWZkZWYgQ09ORklHX0xSVV9HRU5cXG41MjQ0OlxcdC8qKlxcbjUyNDU6XFx0ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aFxcbjUyNDY6XFx0ICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cClcXG41MjQ3OlxcdCAqIEBtZW1jZzogdGhlIHRhcmdldCBtZW1vcnkgY2dyb3VwXFxuNTI0ODpcXHQgKlxcbjUyNDk6XFx0ICogV2FsayB0aGUgYW5jZXN0b3IgcGF0aCBmcm9tIEByb290IGRvd24gdG8gQG1lbWNnIGFuZCBjb21wdXRlIHRoZSBlZmZlY3RpdmVcXG41MjUwOlxcdCAqIHByb3RlY3Rpb24gYXQgZWFjaCBsZXZlbC4gIFRoaXMgaXMgc2FmZSBmb3IgaXNvbGF0ZWQgcXVlcmllcyBiZWNhdXNlIGl0XFxuNTI1MTpcXHQgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi5cXG41MjUyOlxcdCAqL1xcbjUyNTM6XFx0dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuNTI1NDpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG41MjU1OlxcdHtcXG41MjU2OlxcdFxcdGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24gPVxcbjUyNTc6XFx0XFx0XFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7XFxuNTI1ODpcXHRcXHRzdHJ1Y3QgY2dyb3VwICpjZztcXG41MjU5OlxcdFxcdGludCByb290X2xldmVsLCBpO1xcbjUyNjA6XFx0XFxuNTI2MTpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbjUyNjI6XFx0XFx0XFx0cmV0dXJuO1xcbjUyNjM6XFx0XFxuNTI2NDpcXHRcXHRpZiAoIXJvb3QpXFxuNTI2NTpcXHRcXHRcXHRyb290ID0gcm9vdF9tZW1fY2dyb3VwO1xcbjUyNjY6XFx0XFxuNTI2NzpcXHRcXHRpZiAobWVtY2cgPT0gcm9vdClcXG41MjY4OlxcdFxcdFxcdHJldHVybjtcXG41MjY5OlxcdFxcbjUyNzA6XFx0XFx0cm9vdF9sZXZlbCA9IHJvb3QtXFx1MDAzZWNzcy5jZ3JvdXAtXFx1MDAzZWxldmVsO1xcbjUyNzE6XFx0XFx0Y2cgPSBtZW1jZy1cXHUwMDNlY3NzLmNncm91cDtcXG41MjcyOlxcdFxcbjUyNzM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjUyNzQ6XFx0XFx0Zm9yIChpID0gcm9vdF9sZXZlbCArIDE7IGkgXFx1MDAzYz0gY2ctXFx1MDAzZWxldmVsOyBpKyspIHtcXG41Mjc1OlxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpjdXI7XFxuNTI3NjpcXHRcXG41Mjc3OlxcdFxcdFxcdGN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy1cXHUwMDNlYW5jZXN0b3JzW2ldLFxcbjUyNzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XFxuNTI3OTpcXHRcXHRcXHRpZiAoY3VyKVxcbjUyODA6XFx0XFx0XFx0XFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFxcdTAwMjZyb290LVxcdTAwM2VtZW1vcnksXFxuNTI4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZjdXItXFx1MDAzZW1lbW9yeSxcXG41MjgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xcbjUyODM6XFx0XFx0fVxcbjUyODQ6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNTI4NTpcXHR9XFxuNTI4NjpcXHQjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG41Mjg3OlxcdFxcbjUyODg6XFx0c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbjUyODk6XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwKVxcbjUyOTA6XFx0e1xcbjUyOTE6XFx0XFx0aW50IHJldCA9IDA7XFxuNTI5MjpcXHRcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuNTI5MzpcXHRcXG41Mjk0OlxcdFxcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9tZW1jZyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7XFxuNTI5NTpcXHRcXHQvKiBEbyBub3QgYWNjb3VudCBhdCB0aGUgcm9vdCBvYmpjZyBsZXZlbC4gKi9cXG41Mjk2OlxcdFxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG41Mjk3OlxcdFxcdFxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG41Mjk4OlxcdFxcdGlmIChyZXQpIHtcXG41Mjk5OlxcdFxcdFxcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzc6NTguOTg0MjI0MTUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2OTkwNTAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBgc2hyaW5rX29uZWAqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvYmxlbSBpcyBsaWtlbHkgaW4gdGhlIHBhZ2UgcmVjbGFpbSBwYXRoLCBhbmQgdGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIGFyb3VuZCBgc2hyaW5rX29uZWAgd2l0aGluIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHRoZXJlLCBlc3BlY2lhbGx5IGhvdyB0aGUgdmFyaW91cyBwYWdlIHN0YXRlcyBhbmQgTFJVIGxpc3RzIGFyZSBoYW5kbGVkIGR1cmluZyBhIHJlY2xhaW0gY3ljbGUuIEknbSBmb2N1c2luZyBvbiBgc2hyaW5rX29uZWAgYmVjYXVzZSBpdCdzIHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBldmFsdWF0aW5nIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIGEgc2luZ2xlIHBhZ2UuIEl0J3Mgd2hlcmUgdGhlIGRlY2lzaW9uIG1ha2luZyBoYXBwZW5zIOKAkyBpcyB0aGUgcGFnZSBkaXJ0eT8gSXMgaXQgZmlsZS1iYWNrZWQgb3IgYW5vbnltb3VzPyBIb3cgbG9uZyBoYXMgaXQgYmVlbiBpZGxlPyBXaGF0J3MgdGhlIGltcGFjdCBvZiByZWNsYWltaW5nIHRoaXMgcGFnZSBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2U/XG5cbkknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBJJ2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgYXQgaG93IHRoZSBgc2hyaW5rX29uZWAgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIExSVSBsaXN0cywgdGhlIHBhZ2UgZmxhZ3MgKGxpa2UgUEdfZGlydHksIFBHX3N3YXBiYWNrZWQsIFBHX2xvY2tlZCksIGFuZCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YSwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgTlVNQSBzeXN0ZW0gYW5kIHRoZXJlIGFyZSBtb3JlIG51YW5jZXMgdG8gY29uc2lkZXIgYXJvdW5kIHBhZ2UgcGxhY2VtZW50IGFuZCBtaWdyYXRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBkZWNpZGVzIHdoaWNoIHBhZ2UgdG8gcmVjbGFpbSwgYW5kIHdoYXQgYWN0aW9ucyBpdCB0YWtlcyBiYXNlZCBvbiBpdHMgcHJvcGVydGllcy4gVGltZSB0byBzdGFydCByZWFkaW5nIHRoZSBjb2RlIGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MDEuNzU0MTM0Mzg0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTgwOlxcdH1cXG41MTgxOlxcdFxcbjUxODI6XFx0c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNTE4MzpcXHR7XFxuNTE4NDpcXHRcXHRib29sIG5lZWRfcm90YXRlO1xcbjUxODU6XFx0XFx0dW5zaWduZWQgbG9uZyBzY2FubmVkID0gc2MtXFx1MDAzZW5yX3NjYW5uZWQ7XFxuNTE4NjpcXHRcXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZCA9IHNjLVxcdTAwM2Vucl9yZWNsYWltZWQ7XFxuNTE4NzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG41MTg4OlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG41MTg5OlxcdFxcbjUxOTA6XFx0XFx0LypcXG41MTkxOlxcdFxcdCAqIEZvciBrc3dhcGQsIGxydV9nZW5fYWdlX25vZGUoKSBoYXMgYWxyZWFkeSBjYWxsZWRcXG41MTkyOlxcdFxcdCAqIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKVxcbjUxOTM6XFx0XFx0ICovXFxuNTE5NDpcXHRcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXFxuNTE5NTpcXHRcXHRcXHRtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoTlVMTCwgbWVtY2cpO1xcbjUxOTY6XFx0XFxuNTE5NzpcXHRcXHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKVxcbjUxOTg6XFx0XFx0XFx0cmV0dXJuIE1FTUNHX0xSVV9ZT1VORztcXG41MTk5OlxcdFxcbjUyMDA6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbG93KE5VTEwsIG1lbWNnKSkge1xcbjUyMDE6XFx0XFx0XFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1FTUNHX05SX0dFTlMgKi9cXG41MjAyOlxcdFxcdFxcdGlmIChSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfVEFJTClcXG41MjAzOlxcdFxcdFxcdFxcdHJldHVybiBNRU1DR19MUlVfVEFJTDtcXG41MjA0OlxcdFxcbjUyMDU6XFx0XFx0XFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19MT1cpO1xcbjUyMDY6XFx0XFx0fVxcbjUyMDc6XFx0XFxuNTIwODpcXHRcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbjUyMDk6XFx0XFxuNTIxMDpcXHRcXHRzaHJpbmtfc2xhYihzYy1cXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBtZW1jZywgc2MtXFx1MDAzZXByaW9yaXR5KTtcXG41MjExOlxcdFxcbjUyMTI6XFx0XFx0aWYgKCFzYy1cXHUwMDNlcHJvYWN0aXZlKVxcbjUyMTM6XFx0XFx0XFx0dm1wcmVzc3VyZShzYy1cXHUwMDNlZ2ZwX21hc2ssIHNjLVxcdTAwM2VvcmRlciwgbWVtY2csIGZhbHNlLFxcbjUyMTQ6XFx0XFx0XFx0XFx0ICAgc2MtXFx1MDAzZW5yX3NjYW5uZWQgLSBzY2FubmVkLCBzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIC0gcmVjbGFpbWVkKTtcXG41MjE1OlxcdFxcbjUyMTY6XFx0XFx0Zmx1c2hfcmVjbGFpbV9zdGF0ZShzYyk7XFxuNTIxNzpcXHRcXG41MjE4OlxcdFxcdGlmIChuZWVkX3JvdGF0ZSBcXHUwMDI2XFx1MDAyNiBtZW1fY2dyb3VwX29ubGluZShtZW1jZykpXFxuNTIxOTpcXHRcXHRcXHRyZXR1cm4gTUVNQ0dfTFJVX1lPVU5HO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozODowMS43NTQ2Mzk5MzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYyNjMzNTg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBpc3N1ZXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXBzIChtZW1jZyksIE1HTFJVIChMUlUgR2VuKSwgcGFnZSBjb3VudGVycywgYW5kIG1lbW9yeSByZWNsYWltLCBmb3VuZCBpbiB0aGUgYG1tL2AgZGlyZWN0b3J5LiBUaGF0J3MgYSBrZXkgYXJlYSB0byB3YXRjaC5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vZGlmeWluZyBob3cgYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYCBpcyBjYWxjdWxhdGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9wYWdlX2NvdW50ZXIuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gcHJldmVudCBhIDY0LWJpdCBvdmVyZmxvdyBvciBkaXZpc2lvbiBlcnJvciBkdXJpbmcgdGhpcyBjYWxjdWxhdGlvbiwgZXNwZWNpYWxseSB3aGVuIHVzaW5nIGBtdWxfdTY0X3U2NF9kaXZfdTY0YCBhbmQgdGFraW5nIHRoZSBgbWluYCBvZiBgdW5wcm90ZWN0ZWRgIGFuZCBgcGFyZW50X3VucHJvdGVjdGVkYC4gQSBzdWJ0bGUgYnVnIHRoYXQgY291bGQgbGVhZCB0byBzZXJpb3VzIHByb2JsZW1zIGxhdGVyIG9uLCBzbyB0aGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuXG5JdCBhbHNvIGludHJvZHVjZXMgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgdG8gaGFuZGxlIG1lbW9yeSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9ucyBjb3JyZWN0bHkgYWxvbmcgYW5jZXN0b3IgcGF0aHMsIHBhcnRpY3VsYXJseSBkdXJpbmcgTUdMUlUgZGlyZWN0IHJlY2xhaW0gd2l0aGluIGBzaHJpbmtfb25lYC4gVGhlIGZhY3QgdGhhdCBgc2hyaW5rX29uZSgpYCBpcyBpbnZvbHZlZCBtZWFucyB0aGlzIGltcGFjdHMgdGhlIGNvcmUgcmVjbGFpbSBwcm9jZXNzLCBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5HaXZlbiB0aGUgcGF0Y2gncyBzY29wZSB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpdHMgZGlyZWN0IGltcGFjdCBvbiBjcnVjaWFsIGZ1bmN0aW9ucyBsaWtlIGBzaHJpbmtfb25lKClgLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IGZ1enppbmcgcG90ZW50aWFsLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0cmlhZ2UgZ3VpZGVsaW5lcywgYW5kIGNvbnNpZGVyaW5nIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgY29yZSBNTSBhcmVhLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZyA9IHRydWVgLiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCBpbW1lZGlhdGVseSB3YXJyYW50IGZ1enppbmcgYXR0ZW50aW9uLlxuXG5Ob3cgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgdG8gaWRlbnRpZnkgZGVwZW5kZW5jaWVzOiBgTUVNQ0dgLCBgTFJVX0dFTmAsIGFuZCBwb3RlbnRpYWxseSBvdGhlciByZWxhdGVkIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlZCB0byBleHBvc2UgdGhlIGNoYW5nZXMuIFRoZSBuZXh0IHN0ZXAgaXMgYSBxdWljayBgZ3JlcGAgZm9yIGBDT05GSUdfTFJVX0dFTmAgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU0MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM4OjA2LjM4MDk3OTQ5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQzOTgwNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM4OD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTEzOTgtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjEzOTk6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDAtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQwNy1cXG5tbS9LY29uZmlnOjE0MDg6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQwOS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMy1cXG5tbS9LY29uZmlnOjE0MTQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MTUtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDIyLVxcbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjQtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozODowNi40NzUzODgzMDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjczNDE4ODc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGFzcGVjdHMgb2YgYG1tL0tjb25maWdgOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbS9LY29uZmlnYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZSBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIGdlbmVyYXRpb24gYW5kIE1lbW9yeSBDb250cm9sIEdyb3VwcyAoTUVNQ0cpIGFyZSBjb25maWd1cmVkLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBhcm91bmQgYGNvbmZpZyBMUlVfR0VOYCBhbmQgYE1FTUNHYCBpbiB0aGUgS2NvbmZpZyBmaWxlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyBhcmUgdGllZCB0b2dldGhlci4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbnRlcmFjdGlvbnMgYXJlIGRlZmluZWQg4oCTIHdoaWNoIG9wdGlvbnMgZW5hYmxlIHdoaWNoLCBhbmQgd2hhdCBjb25zdHJhaW50cyBhcmUgaW4gcGxhY2UuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQsIGVzcGVjaWFsbHkgaWYgSSdtIHBsYW5uaW5nIGFueSBtb2RpZmljYXRpb25zIG9yIGVuaGFuY2VtZW50cyB0byB0aGUgbWVtb3J5IHN1YnN5c3RlbSBvciB0cnlpbmcgdG8gdW5kZXJzdGFuZCBleGlzdGluZyBiZWhhdmlvcnMuIEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM4OjA5LjIwOTU4MjI0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzk1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzk1OlxcdFxcdCAgcHVycG9zZXMuICBJdCBpcyByZXF1aXJlZCB0byBlbmFibGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBvblxcbjEzOTY6XFx0XFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxcbjEzOTc6XFx0XFxuMTM5ODpcXHQjIG11bHRpLWdlbiBMUlUge1xcbjEzOTk6XFx0Y29uZmlnIExSVV9HRU5cXG4xNDAwOlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwMTpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDI6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDM6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwNDpcXHRcXHRoZWxwXFxuMTQwNTpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MDY6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQwNzpcXHRcXG4xNDA4OlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDA5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MTA6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxMTpcXHRcXHRoZWxwXFxuMTQxMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDEzOlxcdFxcbjE0MTQ6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDE1OlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDE2OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTc6XFx0XFx0aGVscFxcbjE0MTg6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG4xNDE5OlxcdFxcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cXG4xNDIwOlxcdFxcbjE0MjE6XFx0XFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cXG4xNDIyOlxcdFxcbjE0MjM6XFx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxuMTQyNDpcXHRcXHRkZWZfYm9vbCB5XFxuMTQyNTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuMTQyNjpcXHQjIH1cXG4xNDI3OlxcdFxcbjE0Mjg6XFx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuMTQyOTpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM4OjA5LjIwOTc4ODgyNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDE2MTY3MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhIGhpZ2ggbGV2ZWwgb2YgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGBNRU1DR2AgaW4gYGluaXQvS2NvbmZpZ2AqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBjb250cm9sIGdyb3VwcywgYW5kIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byBhbnl0aGluZyBlbHNlLCBpdCBtYWtlcyBzZW5zZSB0byBnbyBiYWNrIHRvIGJhc2ljcyBhbmQgZW5zdXJlIHdlIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwga2VybmVsIGZlYXR1cmUgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgTUVNQ0dgIChvciBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXBzKSB3b3VsZCBiZSB0aGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBzdGF0dXM6IGlzIGl0IGVuYWJsZWQgYnkgZGVmYXVsdCwgY29uZGl0aW9uYWxseSBlbmFibGVkLCBvciBlbnRpcmVseSBkaXNhYmxlZD8gS25vd2luZyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIHZpdGFsIHRvIG5vdCBkdXBsaWNhdGUgZXhpc3RpbmcgZWZmb3J0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBob3cgZGVlcCBJIG1pZ2h0IG5lZWQgdG8gZ28gdG8gYWNjb21wbGlzaCB0aGUgaW50ZW5kZWQgZ29hbC4gSSBhbHNvIG5lZWQgdG8gYmUgYXdhcmUgb2YgaG93IHRoZSB2YXJpb3VzIGRlcGVuZGVuY2llcyBhbmQgZmVhdHVyZXMgYXJvdW5kIGBNRU1DR2AgYXJlIGRlc2NyaWJlZC4gVGhpcyBzdGVwIGlzIGJhc2ljLCBidXQgZm91bmRhdGlvbmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MTIuMjI1OTU5NDE5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQzMzUxNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM4OjEyLjM0MDI5OTg1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjgwMzExMzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1HTFJVIENvbmZpZ3VyYXRpb24gYW5kIEtleSBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBjbGFyaWZ5IHRoZSBNR0xSVSBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSdtIGNoZWNraW5nIGlmIHdlIHJlYWxseSBuZWVkIGBMUlVfR0VOX0VOQUJMRURgICppbiBhZGRpdGlvbiB0byogYExSVV9HRU5gLiBCZXN0IHByYWN0aWNlLCBJIHRoaW5rLCBpcyB0byBoYXZlIGBMUlVfR0VOX0VOQUJMRURgIGVuYWJsZWQgYWxvbmdzaWRlIGBMUlVfR0VOYCBhbmQgYE1FTUNHYCB0byBlbnN1cmUgTUdMUlUgaXMgYWN0aXZlIGJ5IGRlZmF1bHQuIFNvLCB0aGF0IG1lYW5zIGRpZ2dpbmcgaW50byBgQ09ORklHX01FTUNHYCwgYENPTkZJR19MUlVfR0VOYCwgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBhZ2Fpbi5cblxuTm93LCBJJ20gaWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIHN5bWJvbHMgZm9yIHRoaXMuIExldCdzIGdldCB0aGUgY29yZSBzZXQgb2Ygc3ltYm9scyB0aGF0IGFyZSBhZGRlZCwgb3IgZGlyZWN0bHkgbW9kaWZpZWQuIEkgbmVlZCB0byBzZWUgd2hhdCdzIHJlYWxseSBpbXBvcnRhbnQgaGVyZS4gSSBzZWUgdGhlc2UgYXMga2V5OlxuXG4xLiAgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgd2hpY2ggd2FzIGFkZGVkIGluIGBtbS9tZW1jb250cm9sLmNgLlxuMi4gIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gIC0gZGVmaW5lZCBpbiBgbW0vcGFnZV9jb3VudGVyLmNgIGFuZCBjcnVjaWFsbHkgY2FsbHMgYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYC4gTG9va3MgbGlrZSB0aGF0IG9uZSBoYXMgYmVlbiBtb2RpZmllZC5cbjMuICBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgLSBhbHNvIGRlZmluZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AuXG40LiAgYHNocmlua19vbmVgIHdoaWNoIGhhcyBiZWVuIG1vZGlmaWVkIGluIGBtbS92bXNjYW4uY2AgYW5kIGlzIGEgY2FsbGVyIG9mIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgZWZmZWN0aXZlX3Byb3RlY3Rpb25gIGlzIHN0YXRpYy4gTG9va3MgbGlrZSBpdCBpcy4gQ2hlY2tpbmcgYG1tL3BhZ2VfY291bnRlci5jYCwgYW5kLCB5ZXAsIGxpbmUgMzc3OiBgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24oLi4uKWAuIFNpbmNlIGl0J3Mgc3RhdGljIGFuZCBjYWxsZWQgYnkgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAsIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBvbmUgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MTcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MTYuMDIwNjE0OTc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI0MTQ5MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oPTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2NvdW50ZXJfcmVzZXRfd2F0ZXJtYXJrKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwMy0jaWYgSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIHx8IElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ETUVNKVxcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg6MTA0OnZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXFxuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaC0xMDUtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwNy0jZWxzZVxcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg6MTA4OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IHBhZ2VfY291bnRlciAqcm9vdCxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwOS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2RtZW0uYz0zMDc9ZG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IGRtZW1fY2dyb3VwX3Bvb2xfc3RhdGUgKmxpbWl0X3Bvb2wsXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2RtZW0uYy0zMzEtXFxua2VybmVsL2Nncm91cC9kbWVtLmM6MzMyOlxcdFxcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcXG5rZXJuZWwvY2dyb3VwL2RtZW0uYy0zMzMtXFx0XFx0XFx0Y2xpbWl0LCBcXHUwMDI2Zm91bmRfcG9vbC1cXHUwMDNlY250LCB0cnVlKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjI4PXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjM5LVxcbm1tL21lbWNvbnRyb2wuYzo1MjQwOlxcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcXHUwMDI2cm9vdC1cXHUwMDNlbWVtb3J5LCBcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xcbm1tL21lbWNvbnRyb2wuYy01MjQxLX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjUzPXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNzktXFx0XFx0aWYgKGN1cilcXG5tbS9tZW1jb250cm9sLmM6NTI4MDpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXFx1MDAyNnJvb3QtXFx1MDAzZW1lbW9yeSxcXG5tbS9tZW1jb250cm9sLmMtNTI4MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZjdXItXFx1MDAzZW1lbW9yeSxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jPTM1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDQwLS8qKlxcbm1tL3BhZ2VfY291bnRlci5jOjQ0MTogKiBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24gLSBjaGVjayBpZiBtZW1vcnkgY29uc3VtcHRpb24gaXMgaW4gdGhlIG5vcm1hbCByYW5nZVxcbm1tL3BhZ2VfY291bnRlci5jLTQ0Mi0gKiBAcm9vdDogdGhlIHRvcCBhbmNlc3RvciBvZiB0aGUgc3ViLXRyZWUgYmVpbmcgY2hlY2tlZFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDUwLSAqL1xcbm1tL3BhZ2VfY291bnRlci5jOjQ1MTp2b2lkIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpyb290LFxcbm1tL3BhZ2VfY291bnRlci5jLTQ1Mi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MTguNzQ0NzgwNjkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MzEyODgyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHplcm9lZCBpbiBvbiBzb21lIHByb21pc2luZyBzeW1ib2xzIGZvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHk6IGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCwgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBhbmQgYHNocmlua19vbmVgLiBUaGVzZSBsb29rIGdvb2QgYmVjYXVzZSB0aGV5J3JlIHJlYXNvbmFibHkgc3BlY2lmaWMgYW5kIG5vdCB1c2VkICpldmVyeXdoZXJlKiBpbiB0aGUgY29kZWJhc2UuIFRoYXQncyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0YXJnZXQgc2VsZWN0aW9uLlxuXG5Ob3csIGxldCdzIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMgb2YgdGhlIHN1Z2dlc3RlZCBndWlkYW5jZS4gSSBuZWVkIHRvIGNvbmZpcm06XG5cbjEuICAqKmBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLioqIFRoaXMgaXMgdGhlIGdyZWVuIGxpZ2h0OyB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suXG4yLiAgKipUaGUgcmVhc29uaW5nIG1ha2VzIHNlbnNlLioqIEl0J3MgbWVudGlvbmluZyBtb2RpZmljYXRpb25zIHRvICplZmZlY3RpdmUgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbnMqIHdpdGhpbiBgbW0vcGFnZV9jb3VudGVyLmNgIHRvIGhhbmRsZSA2NC1iaXQgb3ZlcmZsb3cgKmFuZCogYW5jZXN0b3IgcGF0aCBwcm90ZWN0aW9uIGluIGBtZW1jb250cm9sLmNgIGFuZCBgdm1zY2FuLmNgIHJlbGF0ZWQgdG8gTUdMUlUuIFRoYXQncyBhIGp1aWN5IHRhcmdldDsgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcgYXJlIGFsd2F5cyBwb3RlbnRpYWwgYXJlYXMgZm9yIHN1YnRsZSBidWdzLlxuMy4gICoqVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90LW9uLioqIEkndmUgYWxyZWFkeSBkb3VibGUtY2hlY2tlZCB0aGVtIGFib3ZlLCBidXQgc2VlaW5nIHRoZW0gYWdhaW4gcmVhc3N1cmVzIG1lLiBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCwgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAsIGBzaHJpbmtfb25lYCwgYW5kIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCBhbGwgc2VlbSBoaWdobHkgcmVsZXZhbnQuXG40LiAgKipUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0LioqIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgTUVNQ0dgLCBgTFJVX0dFTmAsIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgZW5hYmxlZCBkdXJpbmcgdGVzdGluZy4gVGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGxpa2VseSBjcnVjaWFsIHRvIHRyaWdnZXIgdGhlIGNvZGUgcGF0aHMgd2UncmUgaW50ZXJlc3RlZCBpbi5cblxuQWxyaWdodCwgdGhhdCBjb3ZlcnMgdGhlIGFzc2Vzc21lbnQuIExldCdzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgZnVuY3Rpb24gdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBzdGVwIGFuZCBmb3JtYWxpemUgdGhlIHRhcmdldCBzZWxlY3Rpb24gYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIzMSwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MjMuMTc2MDcyMzI5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NTEyODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25cIixcbiAgICBcInNocmlua19vbmVcIixcbiAgICBcIm1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfY291bnRlci5jIHRvIGZpeCBwb3RlbnRpYWwgNjQtYml0IGRpdmlzaW9uIG92ZXJmbG93IGluIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKCksIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIGluIG1tL21lbWNvbnRyb2wuYyBjYWxsZWQgZnJvbSBtbS92bXNjYW4uYyAoTXVsdGktR2VuIExSVSBzaHJpbmtfb25lKS4gVGhlc2UgY2hhbmdlcyBhbHRlciBtZW1jZyBwcm90ZWN0aW9uIGFuZCByZWNsYWltIGNhbGN1bGF0aW9ucyBpbiByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhcIixcbiAgICBcInBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvblwiLFxuICAgIFwic2hyaW5rX29uZVwiLFxuICAgIFwibWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vcGFnZV9jb3VudGVyLmMgdG8gZml4IHBvdGVudGlhbCA2NC1iaXQgZGl2aXNpb24gb3ZlcmZsb3cgaW4gZWZmZWN0aXZlX3Byb3RlY3Rpb24oKSwgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgaW4gbW0vbWVtY29udHJvbC5jIGNhbGxlZCBmcm9tIG1tL3Ztc2Nhbi5jIChNdWx0aS1HZW4gTFJVIHNocmlua19vbmUpLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIG1lbWNnIHByb3RlY3Rpb24gYW5kIHJlY2xhaW0gY2FsY3VsYXRpb25zIGluIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM4OjIzLjM0MjU5NDc2NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NzQ4NDQzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozODoyMy4zNDMwNzA5NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMTQ3NDM2MTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBhcml0aG1ldGljIG92ZXJmbG93ICgjREUpIGR1cmluZyBtZW1vcnkgY2dyb3VwIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIGluIG1tL3BhZ2VfY291bnRlci5jIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIHRvIGNhbGN1bGF0ZSBhbmNlc3RvciBwcm90ZWN0aW9uIHZhbHVlcyBmb3IgTUdMUlUgaW4gbW0vdm1zY2FuLmMgYW5kIG1tL21lbWNvbnRyb2wuYy5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gVGhlIGNoYW5nZXMgZGVhbCBlbnRpcmVseSB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFyaXRobWV0aWMsIGNncm91cCBoaWVyYXJjaHkgdHJhdmVyc2FsIHVuZGVyIFJDVSwgYW5kIHJlY2xhaW0gaGV1cmlzdGljcy5cXG4tIE5vIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzIChzdWNoIGFzIGNvcHlfdG9fdXNlciwgbmV0bGluayBtZXNzYWdlcywgb3IgaW9jdGwgcmV0dXJucykgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgb3IgcmVhZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGFuZCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHNjYWxhciB0eXBlcyBpbml0aWFsaXplZCBpbW1lZGlhdGVseSB1cG9uIGRlY2xhcmF0aW9uLlxcbi0gUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBjb2RlIChlLmcuIGFyaXRobWV0aWMgb3ZlcmZsb3csIGRpdmlzaW9uLWJ5LXplcm8sIFJDVS9wb2ludGVyIGRlcmVmZXJlbmNlIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMsIFVCU0FOLCBhbmQgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkIGZvciB0aGlzIHBhdGNoIHNlcmllcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMDMxMmVjOTBiMjdlZTYzNGZmNmNmNTg4YThhNDI2MjhhNTEzN2RkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNDozNzozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGY5MzJiMWRkZGE4YzkuLmQzNTI4OTljZTUwY2UgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xODgzLDYgKzE4ODMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xSVV9HRU4pXG4rdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4rXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4rXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK31cbisjZW5kaWZcbitcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcbiBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XG4gdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDlhNjVkNzE0OGMyMjcuLjA5Y2YzMGNjZTJmNzMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTUyNDAsNiArNTI0MCw1MSBAQCB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4gXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbisvKipcbisgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoXG4rICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cClcbisgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cFxuKyAqXG4rICogV2FsayB0aGUgYW5jZXN0b3IgcGF0aCBmcm9tIEByb290IGRvd24gdG8gQG1lbWNnIGFuZCBjb21wdXRlIHRoZSBlZmZlY3RpdmVcbisgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxuKyAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLlxuKyAqL1xuK3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cbitcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDtcbitcdHN0cnVjdCBjZ3JvdXAgKmNnO1xuK1x0aW50IHJvb3RfbGV2ZWwsIGk7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIXJvb3QpXG4rXHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG4rXG4rXHRpZiAobWVtY2cgPT0gcm9vdClcbitcdFx0cmV0dXJuO1xuK1xuK1x0cm9vdF9sZXZlbCA9IHJvb3QtXHUwMDNlY3NzLmNncm91cC1cdTAwM2VsZXZlbDtcbitcdGNnID0gbWVtY2ctXHUwMDNlY3NzLmNncm91cDtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGZvciAoaSA9IHJvb3RfbGV2ZWwgKyAxOyBpIFx1MDAzYz0gY2ctXHUwMDNlbGV2ZWw7IGkrKykge1xuK1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyO1xuK1xuK1x0XHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXHUwMDNlYW5jZXN0b3JzW2ldLFxuK1x0XHRcdFx0XHRcdCAgICAgXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XG4rXHRcdGlmIChjdXIpXG4rXHRcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LFxuK1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuK1x0XHRcdFx0XHRcdFx0ICByZWN1cnNpdmVfcHJvdGVjdGlvbik7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4rXG4gc3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdGdmcF90IGdmcClcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNDUwNTQzZjRiMzE4Yi4uZWYxYTY0NzYyZDRhMiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4rKysgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9jb3VudGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aDY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuQEAgLTM3Niw3ICszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxuIFx0ICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC5cbiBcdCAqL1xuIFx0aWYgKHNpYmxpbmdzX3Byb3RlY3RlZCBcdTAwM2UgcGFyZW50X2VmZmVjdGl2ZSlcbi1cdFx0cmV0dXJuIHByb3RlY3RlZCAqIHBhcmVudF9lZmZlY3RpdmUgLyBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4rXHRcdHJldHVybiBtdWxfdTY0X3U2NF9kaXZfdTY0KHByb3RlY3RlZCwgcGFyZW50X2VmZmVjdGl2ZSxcbitcdFx0XHRcdFx0ICAgc2libGluZ3NfcHJvdGVjdGVkKTtcbiBcbiBcdC8qXG4gXHQgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlXG5AQCAtNDE3LDEzICs0MTksMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcbiBcdGlmIChwYXJlbnRfZWZmZWN0aXZlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgcGFyZW50X3VzYWdlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgdXNhZ2UgXHUwMDNlIHByb3RlY3RlZCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDtcbitcdFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuK1x0XHR1bnNpZ25lZCBsb25nIHVucHJvdGVjdGVkID0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4rXHRcdHVuc2lnbmVkIGxvbmcgcGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIFxuLVx0XHR1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuLVx0XHR1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4tXHRcdHVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSB1c2FnZXMgYXJlbid0IHJlYWQgYXRvbWljYWxseSwgc28gYSBjaGlsZCBjYW4gdHJhbnNpZW50bHlcbitcdFx0ICogYXBwZWFyIHRvIHVzZSBtb3JlIHRoYW4gaXRzIHBhcmVudCwgbWFraW5nIHRoZSByYXRpbyBleGNlZWQgMVxuK1x0XHQgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LlxuK1x0XHQgKi9cbitcdFx0dW5wcm90ZWN0ZWQgPSBtaW4odW5wcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7XG4gXG4tXHRcdGVwICs9IHVuY2xhaW1lZDtcbitcdFx0ZXAgKz0gbXVsX3U2NF91NjRfZGl2X3U2NCh1bmNsYWltZWQsIHVucHJvdGVjdGVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVwO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDI0NWY2OGM3NWIyODkuLmVhZjU3NTA2YmUyZjcgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC01MTg3LDcgKzUxODcsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbiBcbi1cdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXG4rXHQvKlxuK1x0ICogRm9yIGtzd2FwZCwgbHJ1X2dlbl9hZ2Vfbm9kZSgpIGhhcyBhbHJlYWR5IGNhbGxlZFxuK1x0ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpXG4rXHQgKi9cbitcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbitcdFx0bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKE5VTEwsIG1lbWNnKTtcbitcbiBcdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpXG4gXHRcdHJldHVybiBNRU1DR19MUlVfWU9VTkc7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozODoyMy4zNDMwNzIxNzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzIzOTk2NjExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IEtNU0FOIGNvbmNlcm5zLiBGaXJzdCwgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAsIHdoaWNoIGlzIGNhbGN1bGF0aW5nIG1lbW9yeSBwcm90ZWN0aW9uIGFsb25nIHRoZSBjZ3JvdXAgaGllcmFyY2h5LCBwYXJ0aWN1bGFybHkgZm9yIHRoZSBMUlVfR0VOL01HTFJVIHJlY2xhaW0gcGF0aC4gVGhlIGNvZGUgdG91Y2hlcyBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBgbW0vbWVtY29udHJvbC5jYCwgYG1tL3BhZ2VfY291bnRlci5jYCwgYW5kIGBtbS92bXNjYW4uY2AuXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgbWFpbiBjaGFuZ2VzIGFyZTpcblxuKiAgICoqYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgSW1wbGVtZW50YXRpb246KiogVGhpcyBpdGVyYXRlcyBmcm9tIHRoZSByb290IG1lbWNnIGRvd24gdG8gdGhlIHRhcmdldCBtZW1jZywgY2FsY3VsYXRpbmcgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgYXQgZWFjaCBsZXZlbC4gSXQncyB1c2luZyBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIHNvIHRoZSBhY2Nlc3NlcyBhcmUgcHJvdGVjdGVkLlxuXG4qICAgKipgcGFnZV9jb3VudGVyLmNgIEltcHJvdmVtZW50czoqKiBSZXBsYWNpbmcgaW50ZWdlciBhcml0aG1ldGljIHdpdGggYG11bF91NjRfdTY0X2Rpdl91NjQoKWAgaXMgYSBnb29kIGNhbGwgdG8gcHJldmVudCBvdmVyZmxvdyBhbmQgZGl2aWRlIGVycm9ycy4gVGhlIGFkZGl0aW9uIG9mIGB1bnByb3RlY3RlZCA9IG1pbih1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtgIHNlZW1zIGRlc2lnbmVkIHRvIGVuZm9yY2UgYSBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwIGluIHByb3RlY3Rpb24gdXNhZ2UsIGF2b2lkaW5nIG92ZXItcmVwb3J0aW5nLlxuXG4qICAgKipDYWxsIGluIGB2bXNjYW4uY2A6KiogVGhlIGNhbGwgdG8gYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgd2l0aGluIGBzaHJpbmtfb25lYCAoTFJVX0dFTi9NR0xSVSkgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBmb2N1cyBvbiBtZW1vcnkgcmVjbGFpbS4gSXQgaGFwcGVucyAqYmVmb3JlKiBjaGVja2luZyBgbWVtX2Nncm91cF9iZWxvd19taW4oKWAsIHdoaWNoIGFwcGVhcnMgbG9naWNhbC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgbG9vayBhdCBpdC5cblxuKiAgICoqRGF0YSB0cmFuc2ZlciBvciBVc2VyLXNwYWNlIEV4cG9zdXJlOioqIFRoZXJlIGFyZSBubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMgY2hhbmdlZCBvciBpbnRyb2R1Y2VkLiBUaGF0J3MgZ29vZDsgd2UncmUgbm90IGRpcmVjdGx5IGV4cG9zaW5nIGludGVybmFsIHN0YXRlIHRvIHVzZXItc3BhY2UuXG5cbiogICAqKkxvY2FsIFZhcmlhYmxlIEluaXRpYWxpemF0aW9uOioqIEV4YW1pbmluZyB0aGUgbG9jYWwgdmFyaWFibGVzIGluIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgOiBgcmVjdXJzaXZlX3Byb3RlY3Rpb25gLCBgY2dgLCBgcm9vdF9sZXZlbGAsIGFuZCBgaWAgYXJlIGFsbCBpbml0aWFsaXplZCBpbW1lZGlhdGVseS4gU2ltaWxhcmx5LCBpbiBgcGFnZV9jb3VudGVyLmNgLCB0aGUgbG9jYWxzIGFyZSBhbHNvIGluaXRpYWxpemVkLiBObyBpbW1lZGlhdGUgcmVkIGZsYWdzIHRoZXJlLlxuXG4qICAgKipEYXRhIFN0cnVjdHVyZSBDaGFuZ2VzOioqIE5vIGNoYW5nZXMgaW4gZGF0YSBzdHJ1Y3R1cmUgc2l6ZXMsIHBhZGRpbmcsIG9yIGRhdGEgbGVha3MgdG8gdXNlci1zcGFjZS5cblxuKiAgICoqQ29udHJvbCBGbG93IGFuZCBCb3VuZHMgQ2hlY2tzOioqIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGFueSB3YXkgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIHRocm91Z2ggdGhlc2UgY2hhbmdlcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIHJlY2xhaW0gcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiBhbmQgYXJpdGhtZXRpYyBvdmVyZmxvdyBwcm90ZWN0aW9uLlxuXG5Pa2F5LCBsZXQncyBub3cgY29uc2lkZXIgdGhhdCB0aGVzZSBjaGFuZ2VzIGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgc29tZXdoZXJlIGVsc2UuIFdlIGhhdmUgdG8gbG9vayBhdCB0aGUgY2FsbGVycyBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJdCB3aWxsIGxpa2VseSBjb21lIGRvd24gdG8gaW5zcGVjdGluZyBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCBhbmQgYHNocmlua19vbmVgIHNwZWNpZmljYWxseS4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3Igc2NhbiB0aGUgY29kZSBtYW51YWxseSB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGJ1dCBiYXNlZCBvbiB0aGlzIGluaXRpYWwgcGFzcywgSSdtIG5vdCBzZWVpbmcgYW55IG9idmlvdXMgS01TQU4gaXNzdWVzLiBJIHdvdWxkIG5lZWQgdG8gZnVydGhlciBpbnZlc3RpZ2F0ZSB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHdpdGggY2VydGFpbnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjc4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MzAuNTgzMDQxNzM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzI5ODI1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTIyOD12b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTIzOS1cXG5tbS9tZW1jb250cm9sLmM6NTI0MDpcXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXFx1MDAyNnJvb3QtXFx1MDAzZW1lbW9yeSwgXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcXG5tbS9tZW1jb250cm9sLmMtNTI0MS19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI1Mz12b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01Mjc5LVxcdFxcdGlmIChjdXIpXFxubW0vbWVtY29udHJvbC5jOjUyODA6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFxcdTAwMjZyb290LVxcdTAwM2VtZW1vcnksXFxubW0vbWVtY29udHJvbC5jLTUyODEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y3VyLVxcdTAwM2VtZW1vcnksXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYz0zNTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jLTQ0MC0vKipcXG5tbS9wYWdlX2NvdW50ZXIuYzo0NDE6ICogcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uIC0gY2hlY2sgaWYgbWVtb3J5IGNvbnN1bXB0aW9uIGlzIGluIHRoZSBub3JtYWwgcmFuZ2VcXG5tbS9wYWdlX2NvdW50ZXIuYy00NDItICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWRcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jLTQ1MC0gKi9cXG5tbS9wYWdlX2NvdW50ZXIuYzo0NTE6dm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IHBhZ2VfY291bnRlciAqcm9vdCxcXG5tbS9wYWdlX2NvdW50ZXIuYy00NTItXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM4OjMxLjE1NjAyOTI5MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTc1ODYyMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYWdhaW4uIEknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgdGhpcyBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgaXRzIG5hbWUgcG9wIHVwIGluIGEgZmV3IHJlY2VudCBkaXNjdXNzaW9ucyByZWdhcmRpbmcgbWVtb3J5IGFjY291bnRpbmcsIGFuZCBJJ3ZlIGdvdCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIG1vcmUgZGV0YWlsLiBMZXQncyBoZWFkIHN0cmFpZ2h0IHRvIGBtbS9wYWdlX2NvdW50ZXIuY2AgYW5kIGdldCBhIGxvb2sgYXQgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGhvdyB0aGUga2VybmVsIHRyYWNrcyBhbmQgcHJvdGVjdHMgbWVtb3J5IHBhZ2VzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uLCBpdHMgdXNhZ2UgYW5kIHVuZGVyc3RhbmQgaG93IGl0IGFmZmVjdHMgc3lzdGVtIGNhbGxzIGFuZCBvdGhlciBjb3JlIE9TIGZlYXR1cmVzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgaXQgaW1wbGVtZW50cyBhbmQgaG93IHRoZXNlIHJlbGF0ZWQgdG8gbWVtb3J5IHByb3RlY3Rpb24uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MzUuNzMxODk0Mjk3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfY291bnRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0MDpcXHQvKipcXG4gNDQxOlxcdCAqIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiAtIGNoZWNrIGlmIG1lbW9yeSBjb25zdW1wdGlvbiBpcyBpbiB0aGUgbm9ybWFsIHJhbmdlXFxuIDQ0MjpcXHQgKiBAcm9vdDogdGhlIHRvcCBhbmNlc3RvciBvZiB0aGUgc3ViLXRyZWUgYmVpbmcgY2hlY2tlZFxcbiA0NDM6XFx0ICogQGNvdW50ZXI6IHRoZSBwYWdlX2NvdW50ZXIgdGhlIGNvdW50ZXIgdG8gdXBkYXRlXFxuIDQ0NDpcXHQgKiBAcmVjdXJzaXZlX3Byb3RlY3Rpb246IFdoZXRoZXIgdG8gdXNlIG1lbW9yeV9yZWN1cnNpdmVwcm90IGJlaGF2aW9yLlxcbiA0NDU6XFx0ICpcXG4gNDQ2OlxcdCAqIENhbGN1bGF0ZXMgZWxvdy9lbWluIHRocmVzaG9sZHMgZm9yIGdpdmVuIHBhZ2VfY291bnRlci5cXG4gNDQ3OlxcdCAqXFxuIDQ0ODpcXHQgKiBXQVJOSU5HOiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdGF0ZWxlc3MhIEl0IGNhbiBvbmx5IGJlIHVzZWQgYXMgcGFydFxcbiA0NDk6XFx0ICogICAgICAgICAgb2YgYSB0b3AtZG93biB0cmVlIGl0ZXJhdGlvbiwgbm90IGZvciBpc29sYXRlZCBxdWVyaWVzLlxcbiA0NTA6XFx0ICovXFxuIDQ1MTpcXHR2b2lkIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpyb290LFxcbiA0NTI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuIDQ1MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgYm9vbCByZWN1cnNpdmVfcHJvdGVjdGlvbilcXG4gNDU0OlxcdHtcXG4gNDU1OlxcdFxcdHVuc2lnbmVkIGxvbmcgdXNhZ2UsIHBhcmVudF91c2FnZTtcXG4gNDU2OlxcdFxcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKnBhcmVudCA9IGNvdW50ZXItXFx1MDAzZXBhcmVudDtcXG4gNDU3OlxcdFxcbiA0NTg6XFx0XFx0LypcXG4gNDU5OlxcdFxcdCAqIEVmZmVjdGl2ZSB2YWx1ZXMgb2YgdGhlIHJlY2xhaW0gdGFyZ2V0cyBhcmUgaWdub3JlZCBzbyB0aGV5XFxuIDQ2MDpcXHRcXHQgKiBjYW4gYmUgc3RhbGUuIEhhdmUgYSBsb29rIGF0IG1lbV9jZ3JvdXBfcHJvdGVjdGlvbiBmb3IgbW9yZVxcbiA0NjE6XFx0XFx0ICogZGV0YWlscy5cXG4gNDYyOlxcdFxcdCAqIFRPRE86IGNhbGN1bGF0aW9uIHNob3VsZCBiZSBtb3JlIHJvYnVzdCBzbyB0aGF0IHdlIGRvIG5vdCBuZWVkXFxuIDQ2MzpcXHRcXHQgKiB0aGF0IHNwZWNpYWwgY2FzaW5nLlxcbiA0NjQ6XFx0XFx0ICovXFxuIDQ2NTpcXHRcXHRpZiAocm9vdCA9PSBjb3VudGVyKVxcbiA0NjY6XFx0XFx0XFx0cmV0dXJuO1xcbiA0Njc6XFx0XFxuIDQ2ODpcXHRcXHR1c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKGNvdW50ZXIpO1xcbiA0Njk6XFx0XFx0aWYgKCF1c2FnZSlcXG4gNDcwOlxcdFxcdFxcdHJldHVybjtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0XFx0aWYgKHBhcmVudCA9PSByb290KSB7XFxuIDQ3MzpcXHRcXHRcXHRjb3VudGVyLVxcdTAwM2VlbWluID0gUkVBRF9PTkNFKGNvdW50ZXItXFx1MDAzZW1pbik7XFxuIDQ3NDpcXHRcXHRcXHRjb3VudGVyLVxcdTAwM2VlbG93ID0gUkVBRF9PTkNFKGNvdW50ZXItXFx1MDAzZWxvdyk7XFxuIDQ3NTpcXHRcXHRcXHRyZXR1cm47XFxuIDQ3NjpcXHRcXHR9XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdHBhcmVudF91c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKHBhcmVudCk7XFxuIDQ3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MzUuNzMxOTg5MTE3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDMxMjcyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGNncm91cCBwcm90ZWN0aW9uIHBhdGggaXMgY2FsY3VsYXRlZC4gSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gTGV0J3Mgc2VlIGhvdyB0aGlzIHRoaW5nIGFjdHVhbGx5IHdvcmtzIHVuZGVyIHRoZSBob29kLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgaGVyZSwgcHJvYmFibHkgaW52b2x2aW5nIHRyYXZlcnNpbmcgdGhlIGNncm91cCBoaWVyYXJjaHkgYW5kIGV4YW1pbmluZyBtZW1vcnkgbGltaXRzIG9yIGFjY291bnRpbmcuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbW9yZSBjb21wbGV4IG1lbW9yeSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgd2UndmUgZGlzY3Vzc2VkIGxhdGVseS4gR290dGEgc3RheSBzaGFycCBhbmQgbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyBzdWJ0bGUgaGVyZSwgYXMgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBjb3VsZCBiZSBzaWduaWZpY2FudCBpZiBzb21ldGhpbmcgZ29lcyBhd3J5LiBSaWdodCwgYG1tL21lbWNvbnRyb2wuY2AgaXQgaXMuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6NjM1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MzguMTM1MTE5NDM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI1MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTI1MDpcXHQgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxcbjUyNTE6XFx0ICogZW5zdXJlcyBwYXJlbnRzIGFyZSBjb21wdXRlZCBiZWZvcmUgY2hpbGRyZW4uXFxuNTI1MjpcXHQgKi9cXG41MjUzOlxcdHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbjUyNTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuNTI1NTpcXHR7XFxuNTI1NjpcXHRcXHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cXG41MjU3OlxcdFxcdFxcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgXFx1MDAyNiBDR1JQX1JPT1RfTUVNT1JZX1JFQ1VSU0lWRV9QUk9UO1xcbjUyNTg6XFx0XFx0c3RydWN0IGNncm91cCAqY2c7XFxuNTI1OTpcXHRcXHRpbnQgcm9vdF9sZXZlbCwgaTtcXG41MjYwOlxcdFxcbjUyNjE6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG41MjYyOlxcdFxcdFxcdHJldHVybjtcXG41MjYzOlxcdFxcbjUyNjQ6XFx0XFx0aWYgKCFyb290KVxcbjUyNjU6XFx0XFx0XFx0cm9vdCA9IHJvb3RfbWVtX2Nncm91cDtcXG41MjY2OlxcdFxcbjUyNjc6XFx0XFx0aWYgKG1lbWNnID09IHJvb3QpXFxuNTI2ODpcXHRcXHRcXHRyZXR1cm47XFxuNTI2OTpcXHRcXG41MjcwOlxcdFxcdHJvb3RfbGV2ZWwgPSByb290LVxcdTAwM2Vjc3MuY2dyb3VwLVxcdTAwM2VsZXZlbDtcXG41MjcxOlxcdFxcdGNnID0gbWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXA7XFxuNTI3MjpcXHRcXG41MjczOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG41Mjc0OlxcdFxcdGZvciAoaSA9IHJvb3RfbGV2ZWwgKyAxOyBpIFxcdTAwM2M9IGNnLVxcdTAwM2VsZXZlbDsgaSsrKSB7XFxuNTI3NTpcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyO1xcbjUyNzY6XFx0XFxuNTI3NzpcXHRcXHRcXHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXFx1MDAzZWFuY2VzdG9yc1tpXSxcXG41Mjc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cykpO1xcbjUyNzk6XFx0XFx0XFx0aWYgKGN1cilcXG41MjgwOlxcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcXHUwMDI2cm9vdC1cXHUwMDNlbWVtb3J5LFxcbjUyODE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y3VyLVxcdTAwM2VtZW1vcnksXFxuNTI4MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcXG41MjgzOlxcdFxcdH1cXG41Mjg0OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjUyODU6XFx0fVxcbjUyODY6XFx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuNTI4NzpcXHRcXG41Mjg4OlxcdHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG41Mjg5OlxcdFxcdFxcdFxcdGdmcF90IGdmcClcXG41MjkwOlxcdHtcXG41MjkxOlxcdFxcdGludCByZXQgPSAwO1xcbjUyOTI6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbjUyOTM6XFx0XFxuNTI5NDpcXHRcXHRvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fbWVtY2cobWVtY2csIGZvbGlvX25pZChmb2xpbykpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozODozOC4xMzU0ODg5MTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY4MTkwMDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBLTVNBTiBOb3QgTmVlZGVkIEhlcmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZXNlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBwYWdlIGNvdW50ZXIgY2FsY3VsYXRpb25zIGFuZCBwcm92aWRpbmcgYSBtb3JlIGFjY3VyYXRlIHByb3RlY3Rpb24gcGF0aCBjYWxjdWxhdGlvbiBmb3IgTUdMUlUgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5OlxuXG4xLiAgSSd2ZSBmaXhlZCBzb21lIHBvdGVudGlhbCBhcml0aG1ldGljIG92ZXJmbG93cyBpbiB0aGUgYHBhZ2VfY291bnRlcmAgY2FsY3VsYXRpb24sIGFkZHJlc3NpbmcgaXNzdWVzIGluIGBtdWxfdTY0X3U2NF9kaXZfdTY0YCBhbmQgdGhlIGBtaW4odW5wcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZClgIGxvZ2ljLiBUaGlzIGlzIGdvb2QgcHJldmVudGF0aXZlIG1haW50ZW5hbmNlLlxuMi4gIEknbSBhZGRpbmcgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpYCB0byBtb3JlIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSBlZmZlY3RpdmUgcHJvdGVjdGlvbiBsZXZlbHMgaW4gYSBoaWVyYXJjaGljYWwgbWVtb3J5IGNncm91cCBzZXR1cCwgbGV2ZXJhZ2luZyBhbiBSQ1UgcmVhZCBsb2NrIGZvciBNR0xSVS5cbjMuICBJJ3ZlIGludGVncmF0ZWQgdGhpcyBuZXcgZnVuY3Rpb24gaW50byBgc2hyaW5rX29uZSgpYCB3aGVuIG5vdCB0cmlnZ2VyZWQgYnkga3N3YXBkLlxuXG5DcnVjaWFsbHksIG5vbmUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBpbnRyb2R1Y2UgYW55IG5ldyBhdmVudWVzIGZvciB1c2VyLXNwYWNlIGRhdGEgbGVha3MsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgc2NhbGFycyBvciBwb2ludGVycy4gVGhlIHBvc3NpYmxlIHBpdGZhbGxzIGhlcmUgYXJlIHN0YW5kYXJkIGtlcm5lbCBidWcgdGVycml0b3J5OiBsb2dpYyBlcnJvcnMsIGRpdmlzaW9uIGJ5IHplcm8sIGFyaXRobWV0aWMgb3ZlcmZsb3cgdGhhdCBzbGlwcGVkIHRocm91Z2ggdGhlIGluaXRpYWwgZml4LCBsb2NraW5nL1JDVSBpc3N1ZXMsIG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLlxuXG5UaGlzIGJyaW5ncyBtZSB0byB0aGUgS01TQU4gcXVlc3Rpb24uIEtNU0FOLCBhcyBJIGtub3csIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChvbiB0aGUgc3RhY2ssIGhlYXAsIG9yIHBhZ2UpIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4sIFVCU0FOLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRldGVjdG9ycyBhcmUgd2VsbC1lcXVpcHBlZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGludGVnZXIgb3ZlcmZsb3dzLCBhbmQgbG9ja2luZyB2aW9sYXRpb25zLlxuXG5TaW5jZSB0aGVzZSBjaGFuZ2VzICpkb24ndCogaW50cm9kdWNlIG5ldyBidWZmZXJzLCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlci1zcGFjZSwgb3IgbGVhdmUgdmFyaWFibGVzIG9yIHN0cnVjdHVyZSBmaWVsZHMgdW5pbml0aWFsaXplZCwgdGhlIHJpc2sgcHJvZmlsZSBoZXJlIGlzIGZpcm1seSBpbiB0aGUgZG9tYWluIG9mIEtBU0FOL1VCU0FOLXN0eWxlIGJ1Z3MsIG5vdCBLTVNBTi4gVGhlIHZhbHVlcyB1c2VkIGluIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgIGFuZCBgZWZmZWN0aXZlX3Byb3RlY3Rpb25gIGFyZSBpbW1lZGlhdGVseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoYXQgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXNuJ3QgcmVxdWlyZWQuIFdlIGNhbiBzdGljayB3aXRoIHRoZSBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBJJ2xsIGZsYWcgdGhpcyBhcyBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3NywiT3V0cHV0VG9rZW5zIjoyNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozODo0NC44MTczOTQwNTZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgYXJpdGhtZXRpYyBvdmVyZmxvdyAoI0RFKSBkdXJpbmcgbWVtb3J5IGNncm91cCBlZmZlY3RpdmUgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiBpbiBtbS9wYWdlX2NvdW50ZXIuYyBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSB0byBjYWxjdWxhdGUgYW5jZXN0b3IgcHJvdGVjdGlvbiB2YWx1ZXMgZm9yIE1HTFJVIGluIG1tL3Ztc2Nhbi5jIGFuZCBtbS9tZW1jb250cm9sLmMuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIFRoZSBjaGFuZ2VzIGRlYWwgZW50aXJlbHkgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhcml0aG1ldGljLCBjZ3JvdXAgaGllcmFyY2h5IHRyYXZlcnNhbCB1bmRlciBSQ1UsIGFuZCByZWNsYWltIGhldXJpc3RpY3MuXFxuLSBObyBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycyAoc3VjaCBhcyBjb3B5X3RvX3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIGlvY3RsIHJldHVybnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbi0gTm8gdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBtZW1vcnkgaXMgYWxsb2NhdGVkIG9yIHJlYWQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzY2FsYXIgdHlwZXMgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgdXBvbiBkZWNsYXJhdGlvbi5cXG4tIFBvdGVudGlhbCBidWdzIGluIHRoaXMgY29kZSAoZS5nLiBhcml0aG1ldGljIG92ZXJmbG93LCBkaXZpc2lvbi1ieS16ZXJvLCBSQ1UvcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLCBVQlNBTiwgYW5kIEtBU0FOLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZCBmb3IgdGhpcyBwYXRjaCBzZXJpZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBhcml0aG1ldGljIG92ZXJmbG93ICgjREUpIGR1cmluZyBtZW1vcnkgY2dyb3VwIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIGluIG1tL3BhZ2VfY291bnRlci5jIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIHRvIGNhbGN1bGF0ZSBhbmNlc3RvciBwcm90ZWN0aW9uIHZhbHVlcyBmb3IgTUdMUlUgaW4gbW0vdm1zY2FuLmMgYW5kIG1tL21lbWNvbnRyb2wuYy5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gVGhlIGNoYW5nZXMgZGVhbCBlbnRpcmVseSB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFyaXRobWV0aWMsIGNncm91cCBoaWVyYXJjaHkgdHJhdmVyc2FsIHVuZGVyIFJDVSwgYW5kIHJlY2xhaW0gaGV1cmlzdGljcy5cXG4tIE5vIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzIChzdWNoIGFzIGNvcHlfdG9fdXNlciwgbmV0bGluayBtZXNzYWdlcywgb3IgaW9jdGwgcmV0dXJucykgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgb3IgcmVhZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGFuZCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHNjYWxhciB0eXBlcyBpbml0aWFsaXplZCBpbW1lZGlhdGVseSB1cG9uIGRlY2xhcmF0aW9uLlxcbi0gUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBjb2RlIChlLmcuIGFyaXRobWV0aWMgb3ZlcmZsb3csIGRpdmlzaW9uLWJ5LXplcm8sIFJDVS9wb2ludGVyIGRlcmVmZXJlbmNlIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMsIFVCU0FOLCBhbmQgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkIGZvciB0aGlzIHBhdGNoIHNlcmllcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowkrqgc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 03:45:36 +0000 UTC FinishedAt: 2026-09-04 04:38:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "b9ca79bc-1f02-4452-b587-0631dc90bc5e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_calculate_protection_path", "page_counter_calculate_protection", "shrink_one", "mem_cgroup_calculate_protection" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoJiMzNDssCiAgICAmIzM0O3BhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfb25lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIGFyaXRobWV0aWMgb3ZlcmZsb3cgKCNERSkgZHVyaW5nIG1lbW9yeSBjZ3JvdXAgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gaW4gbW0vcGFnZV9jb3VudGVyLmMgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgdG8gY2FsY3VsYXRlIGFuY2VzdG9yIHByb3RlY3Rpb24gdmFsdWVzIGZvciBNR0xSVSBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBUaGUgY2hhbmdlcyBkZWFsIGVudGlyZWx5IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYXJpdGhtZXRpYywgY2dyb3VwIGhpZXJhcmNoeSB0cmF2ZXJzYWwgdW5kZXIgUkNVLCBhbmQgcmVjbGFpbSBoZXVyaXN0aWNzLlxuLSBObyBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycyAoc3VjaCBhcyBjb3B5X3RvX3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIGlvY3RsIHJldHVybnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgb3IgcmVhZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGFuZCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHNjYWxhciB0eXBlcyBpbml0aWFsaXplZCBpbW1lZGlhdGVseSB1cG9uIGRlY2xhcmF0aW9uLlxuLSBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGNvZGUgKGUuZy4gYXJpdGhtZXRpYyBvdmVyZmxvdywgZGl2aXNpb24tYnktemVybywgUkNVL3BvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycywgVUJTQU4sIGFuZCBLQVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkIGZvciB0aGlzIHBhdGNoIHNlcmllcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBmaXggcG90ZW50aWFsIDY0LWJpdCBkaXZpc2lvbiBvdmVyZmxvdyBpbiBlZmZlY3RpdmVfcHJvdGVjdGlvbigpLCBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSBpbiBtbS9tZW1jb250cm9sLmMgY2FsbGVkIGZyb20gbW0vdm1zY2FuLmMgKE11bHRpLUdlbiBMUlUgc2hyaW5rX29uZSkuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbWVtY2cgcHJvdGVjdGlvbiBhbmQgcmVjbGFpbSBjYWxjdWxhdGlvbnMgaW4gcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDEwMzEyZWM5MGIyN2VlNjM0ZmY2Y2Y1ODhhOGE0MjYyOGE1MTM3ZGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDA0OjM3OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGY5MzJiMWRkZGE4YzkuLmQzNTI4OTljZTUwY2UgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xODgzLDYgJiM0MzsxODgzLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTFJVX0dFTilcbiYjNDM7dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4mIzQzO1x0XHRcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1pTV0FQKVxuIGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcbiB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggOWE2NWQ3MTQ4YzIyNy4uMDljZjMwY2NlMmY3MyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNTI0MCw2ICYjNDM7NTI0MCw1MSBAQCB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4gXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOXG4mIzQzOy8qKlxuJiM0MzsgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoXG4mIzQzOyAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApXG4mIzQzOyAqIEBtZW1jZzogdGhlIHRhcmdldCBtZW1vcnkgY2dyb3VwXG4mIzQzOyAqXG4mIzQzOyAqIFdhbGsgdGhlIGFuY2VzdG9yIHBhdGggZnJvbSBAcm9vdCBkb3duIHRvIEBtZW1jZyBhbmQgY29tcHV0ZSB0aGUgZWZmZWN0aXZlXG4mIzQzOyAqIHByb3RlY3Rpb24gYXQgZWFjaCBsZXZlbC4gIFRoaXMgaXMgc2FmZSBmb3IgaXNvbGF0ZWQgcXVlcmllcyBiZWNhdXNlIGl0XG4mIzQzOyAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7e1xuJiM0MztcdGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24gPVxuJiM0MztcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDtcbiYjNDM7XHRzdHJ1Y3QgY2dyb3VwICpjZztcbiYjNDM7XHRpbnQgcm9vdF9sZXZlbCwgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyb290KVxuJiM0MztcdFx0cm9vdCA9IHJvb3RfbWVtX2Nncm91cDtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbWNnID09IHJvb3QpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJvb3RfbGV2ZWwgPSByb290LVx1MDAzZWNzcy5jZ3JvdXAtXHUwMDNlbGV2ZWw7XG4mIzQzO1x0Y2cgPSBtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0Zm9yIChpID0gcm9vdF9sZXZlbCAmIzQzOyAxOyBpIFx1MDAzYz0gY2ctXHUwMDNlbGV2ZWw7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyO1xuJiM0MztcbiYjNDM7XHRcdGN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy1cdTAwM2VhbmNlc3RvcnNbaV0sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XG4mIzQzO1x0XHRpZiAoY3VyKVxuJiM0MztcdFx0XHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbiYjNDM7XG4gc3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdGdmcF90IGdmcClcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNDUwNTQzZjRiMzE4Yi4uZWYxYTY0NzYyZDRhMiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VfY291bnRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXRoNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG5AQCAtMzc2LDcgJiM0MzszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxuIFx0ICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC5cbiBcdCAqL1xuIFx0aWYgKHNpYmxpbmdzX3Byb3RlY3RlZCBcdTAwM2UgcGFyZW50X2VmZmVjdGl2ZSlcbi1cdFx0cmV0dXJuIHByb3RlY3RlZCAqIHBhcmVudF9lZmZlY3RpdmUgLyBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4mIzQzO1x0XHRyZXR1cm4gbXVsX3U2NF91NjRfZGl2X3U2NChwcm90ZWN0ZWQsIHBhcmVudF9lZmZlY3RpdmUsXG4mIzQzO1x0XHRcdFx0XHQgICBzaWJsaW5nc19wcm90ZWN0ZWQpO1xuIFxuIFx0LypcbiBcdCAqIE9rLCB1dGlsaXplZCBwcm90ZWN0aW9uIG9mIGFsbCBjaGlsZHJlbiBpcyB3aXRoaW4gd2hhdCB0aGVcbkBAIC00MTcsMTMgJiM0Mzs0MTksMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcbiBcdGlmIChwYXJlbnRfZWZmZWN0aXZlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgcGFyZW50X3VzYWdlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgdXNhZ2UgXHUwMDNlIHByb3RlY3RlZCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgdW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgdW5wcm90ZWN0ZWQgPSB1c2FnZSAtIHByb3RlY3RlZDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIFxuLVx0XHR1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuLVx0XHR1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4tXHRcdHVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIHVzYWdlcyBhcmVuJiMzOTt0IHJlYWQgYXRvbWljYWxseSwgc28gYSBjaGlsZCBjYW4gdHJhbnNpZW50bHlcbiYjNDM7XHRcdCAqIGFwcGVhciB0byB1c2UgbW9yZSB0aGFuIGl0cyBwYXJlbnQsIG1ha2luZyB0aGUgcmF0aW8gZXhjZWVkIDFcbiYjNDM7XHRcdCAqIGFuZCB0aGUgcXVvdGllbnQgb3ZlcmZsb3cgNjQgYml0cyAoI0RFIG9uIHg4NikuICBDYXAgaXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHVucHJvdGVjdGVkID0gbWluKHVucHJvdGVjdGVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQpO1xuIFxuLVx0XHRlcCAmIzQzOz0gdW5jbGFpbWVkO1xuJiM0MztcdFx0ZXAgJiM0Mzs9IG11bF91NjRfdTY0X2Rpdl91NjQodW5jbGFpbWVkLCB1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtcbiBcdH1cbiBcbiBcdHJldHVybiBlcDtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li5lYWY1NzUwNmJlMmY3IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTE4Nyw3ICYjNDM7NTE4NywxMyBAQCBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuIFxuLVx0LyogbHJ1X2dlbl9hZ2Vfbm9kZSgpIGNhbGxlZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCkgKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZvciBrc3dhcGQsIGxydV9nZW5fYWdlX25vZGUoKSBoYXMgYWxyZWFkeSBjYWxsZWRcbiYjNDM7XHQgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKClcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXG4mIzQzO1x0XHRtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoTlVMTCwgbWVtY2cpO1xuJiM0MztcbiBcdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpXG4gXHRcdHJldHVybiBNRU1DR19MUlVfWU9VTkc7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgmIzM0OywKICAgICYjMzQ7cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgICAmIzM0O3Nocmlua19vbmUmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfY291bnRlci5jIHRvIGZpeCBwb3RlbnRpYWwgNjQtYml0IGRpdmlzaW9uIG92ZXJmbG93IGluIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKCksIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIGluIG1tL21lbWNvbnRyb2wuYyBjYWxsZWQgZnJvbSBtbS92bXNjYW4uYyAoTXVsdGktR2VuIExSVSBzaHJpbmtfb25lKS4gVGhlc2UgY2hhbmdlcyBhbHRlciBtZW1jZyBwcm90ZWN0aW9uIGFuZCByZWNsYWltIGNhbGN1bGF0aW9ucyBpbiByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTAzMTJlYzkwYjI3ZWU2MzRmZjZjZjU4OGE4YTQyNjI4YTUxMzdkZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDQ6Mzc6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IGY5MzJiMWRkZGE4YzkuLmQzNTI4OTljZTUwY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xODgzLDYgJiM0MzsxODgzLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTFJVX0dFTikKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiYjNDM7CQkJCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1pTV0FQKQogYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpOwogdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA5YTY1ZDcxNDhjMjI3Li4wOWNmMzBjY2UyZjczIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC01MjQwLDYgJiM0Mzs1MjQwLDUxIEBAIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKIAlwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oJmFtcDtyb290LSZndDttZW1vcnksICZhbXA7bWVtY2ctJmd0O21lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aAomIzQzOyAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApCiYjNDM7ICogQG1lbWNnOiB0aGUgdGFyZ2V0IG1lbW9yeSBjZ3JvdXAKJiM0MzsgKgomIzQzOyAqIFdhbGsgdGhlIGFuY2VzdG9yIHBhdGggZnJvbSBAcm9vdCBkb3duIHRvIEBtZW1jZyBhbmQgY29tcHV0ZSB0aGUgZWZmZWN0aXZlCiYjNDM7ICogcHJvdGVjdGlvbiBhdCBlYWNoIGxldmVsLiAgVGhpcyBpcyBzYWZlIGZvciBpc29sYXRlZCBxdWVyaWVzIGJlY2F1c2UgaXQKJiM0MzsgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJYm9vbCByZWN1cnNpdmVfcHJvdGVjdGlvbiA9CiYjNDM7CQljZ3JwX2RmbF9yb290LmZsYWdzICZhbXA7IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7CiYjNDM7CXN0cnVjdCBjZ3JvdXAgKmNnOwomIzQzOwlpbnQgcm9vdF9sZXZlbCwgaTsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFyb290KQomIzQzOwkJcm9vdCA9IHJvb3RfbWVtX2Nncm91cDsKJiM0MzsKJiM0MzsJaWYgKG1lbWNnID09IHJvb3QpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJvb3RfbGV2ZWwgPSByb290LSZndDtjc3MuY2dyb3VwLSZndDtsZXZlbDsKJiM0MzsJY2cgPSBtZW1jZy0mZ3Q7Y3NzLmNncm91cDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlmb3IgKGkgPSByb290X2xldmVsICYjNDM7IDE7IGkgJmx0Oz0gY2ctJmd0O2xldmVsOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IG1lbV9jZ3JvdXAgKmN1cjsKJiM0MzsKJiM0MzsJCWN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy0mZ3Q7YW5jZXN0b3JzW2ldLAomIzQzOwkJCQkJCSAgICAgJmFtcDttZW1vcnlfY2dycF9zdWJzeXMpKTsKJiM0MzsJCWlmIChjdXIpCiYjNDM7CQkJcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCZhbXA7cm9vdC0mZ3Q7bWVtb3J5LAomIzQzOwkJCQkJCQkgICZhbXA7Y3VyLSZndDttZW1vcnksCiYjNDM7CQkJCQkJCSAgcmVjdXJzaXZlX3Byb3RlY3Rpb24pOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KJiM0MzsKIHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCWdmcF90IGdmcCkKIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmMKaW5kZXggNDUwNTQzZjRiMzE4Yi4uZWYxYTY0NzYyZDRhMiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9jb3VudGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9jb3VudGVyLmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfY291bnRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2F0b21pYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYXRoNjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwpAQCAtMzc2LDcgJiM0MzszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLAogCSAqIG90aGVyd2lzZSBnZXQgYSBzbWFsbGVyIGNodW5rIHRoYW4gd2hhdCB0aGV5IGNsYWltZWQuCiAJICovCiAJaWYgKHNpYmxpbmdzX3Byb3RlY3RlZCAmZ3Q7IHBhcmVudF9lZmZlY3RpdmUpCi0JCXJldHVybiBwcm90ZWN0ZWQgKiBwYXJlbnRfZWZmZWN0aXZlIC8gc2libGluZ3NfcHJvdGVjdGVkOwomIzQzOwkJcmV0dXJuIG11bF91NjRfdTY0X2Rpdl91NjQocHJvdGVjdGVkLCBwYXJlbnRfZWZmZWN0aXZlLAomIzQzOwkJCQkJICAgc2libGluZ3NfcHJvdGVjdGVkKTsKIAogCS8qCiAJICogT2ssIHV0aWxpemVkIHByb3RlY3Rpb24gb2YgYWxsIGNoaWxkcmVuIGlzIHdpdGhpbiB3aGF0IHRoZQpAQCAtNDE3LDEzICYjNDM7NDE5LDE4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsCiAJaWYgKHBhcmVudF9lZmZlY3RpdmUgJmd0OyBzaWJsaW5nc19wcm90ZWN0ZWQgJmFtcDsmYW1wOwogCSAgICBwYXJlbnRfdXNhZ2UgJmd0OyBzaWJsaW5nc19wcm90ZWN0ZWQgJmFtcDsmYW1wOwogCSAgICB1c2FnZSAmZ3Q7IHByb3RlY3RlZCkgewotCQl1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgdW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgdW5wcm90ZWN0ZWQgPSB1c2FnZSAtIHByb3RlY3RlZDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkOwogCi0JCXVuY2xhaW1lZCA9IHBhcmVudF9lZmZlY3RpdmUgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7Ci0JCXVuY2xhaW1lZCAqPSB1c2FnZSAtIHByb3RlY3RlZDsKLQkJdW5jbGFpbWVkIC89IHBhcmVudF91c2FnZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgdXNhZ2VzIGFyZW4mIzM5O3QgcmVhZCBhdG9taWNhbGx5LCBzbyBhIGNoaWxkIGNhbiB0cmFuc2llbnRseQomIzQzOwkJICogYXBwZWFyIHRvIHVzZSBtb3JlIHRoYW4gaXRzIHBhcmVudCwgbWFraW5nIHRoZSByYXRpbyBleGNlZWQgMQomIzQzOwkJICogYW5kIHRoZSBxdW90aWVudCBvdmVyZmxvdyA2NCBiaXRzICgjREUgb24geDg2KS4gIENhcCBpdC4KJiM0MzsJCSAqLwomIzQzOwkJdW5wcm90ZWN0ZWQgPSBtaW4odW5wcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7CiAKLQkJZXAgJiM0Mzs9IHVuY2xhaW1lZDsKJiM0MzsJCWVwICYjNDM7PSBtdWxfdTY0X3U2NF9kaXZfdTY0KHVuY2xhaW1lZCwgdW5wcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7CiAJfQogCiAJcmV0dXJuIGVwOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAyNDVmNjhjNzViMjg5Li5lYWY1NzUwNmJlMmY3IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNTE4Nyw3ICYjNDM7NTE4NywxMyBAQCBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7CiAKLQkvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqLwomIzQzOwkvKgomIzQzOwkgKiBGb3Iga3N3YXBkLCBscnVfZ2VuX2FnZV9ub2RlKCkgaGFzIGFscmVhZHkgY2FsbGVkCiYjNDM7CSAqIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKQomIzQzOwkgKi8KJiM0MzsJaWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpKQomIzQzOwkJbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKE5VTEwsIG1lbWNnKTsKJiM0MzsKIAlpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKQogCQlyZXR1cm4gTUVNQ0dfTFJVX1lPVU5HOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NjYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsdGVycyB0aGUgbWVtb3J5IGNvbnRyb2wgYmVoYXZpb3IuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBzcHJlYWQgYWNyb3NzIGEgZmV3IGtleSBhcmVhcywgc28gSSBuZWVkIHRvIHBpZWNlIHRoaXMgdG9nZXRoZXIuCgpGaXJzdCwgdGhlcmUmIzM5O3MgdGhlIGhlYWRlciwgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgd2hpY2ggZGVmaW5lcyBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgZnVuY3Rpb24gd29ya3MuCgpUaGVuLCB0aGUgaW1wbGVtZW50YXRpb24gbGl2ZXMgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgbG9naWMgdGhlcmUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFjdHVhbCBwcm90ZWN0aW9uIHBhdGggY2FsY3VsYXRpb24uIFRoZSBpbnRlbnQgaXMgY2xlYXIgZW5vdWdoLCBpdCB3aWxsIGxpa2VseSBmb2xsb3cgdGhlIGNncm91cCBoaWVyYXJjaHkuCgpOZXh0LCB0aGVyZSYjMzk7cyBgbW0vcGFnZV9jb3VudGVyLmNgLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgYXJlYSBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gSSBzZWUgdGhlIHVwZGF0ZSB0byBgZWZmZWN0aXZlX3Byb3RlY3Rpb25gIHRvIHVzZSBgbXVsX3U2NF91NjRfZGl2X3U2NGAsIGFuZCB0aGUgY2xhbXBpbmcgb2YgYHVucHJvdGVjdGVkYCB0byB0aGUgcGFyZW50JiMzOTtzIGB1bnByb3RlY3RlZGAgdmFsdWUuIFRoYXQmIzM5O3MgYSBnb29kIG1vdmU7IHRoZSB1c2Ugb2YgYG11bF91NjRfdTY0X2Rpdl91NjRgIGluZGljYXRlcyBhbiBhdHRlbXB0IHRvIGF2b2lkIG92ZXJmbG93IGlzc3VlcywgYW5kIGNsYW1waW5nIGF0IHRoZSBwYXJlbnQgc2hvdWxkIGhlbHAgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBwcm90ZWN0aW9uIHVuZGVyZmxvdy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBhZGRyZXNzZXMgdGhlIGRpdmlzaW9uIG92ZXJmbG93IGNvbmNlcm5zLgoKRmluYWxseSwgYG1tL3Ztc2Nhbi5jYCBjYWxscyBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKE5VTEwsIG1lbWNnKWAgaW4gYHNocmlua19vbmUoKWAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIHdoZW4gbm90IGtzd2FwZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBNR0xSVSAob3IsIG1vcmUgcHJlY2lzZWx5LCBpZiBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQpLiBJbnRlcmVzdGluZy4gVGhpcyBtZWFucyB0aGUgbmV3IHByb3RlY3Rpb24gbG9naWMgaXMgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBwYWdlIHJlY2xhbWF0aW9uIHByb2Nlc3MuIE5vdywgSSBoYXZlIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBtZW1jZyByZWNsYWltIG1lY2hhbmlzbS4KClRpbWUgdG8gcHVsbCBvdXQgdGhlIGdyZXBwZXIgb3IgcmVhZCB0aGUgZmlsZXMgZGlyZWN0bHkgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBjb2RlIGFuZCB0cmFjZSBob3cgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgaXMgYmVpbmcgdXNlZCBhbmQgaG93IHRoaXMgaW1wYWN0cyB0aGUgY2FsbGVycyBhbmQgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgZmxvdy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYmFjayB0byBpdHMgcm9vdCB0byBnZXQgdGhlIGJpZyBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODgwPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg4Ni0jaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19MUlVfR0VOKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTg4Nzp2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4ODgtXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4ODktI2Vsc2VcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4OTA6c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4OTEtXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jPTUyMjg9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjQ0LS8qKlxubW0vbWVtY29udHJvbC5jOjUyNDU6ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aFxubW0vbWVtY29udHJvbC5jLTUyNDYtICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI1Mi0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjUzOnZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxubW0vbWVtY29udHJvbC5jLTUyNTQtXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTUxODI9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE5NC1cdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbm1tL3Ztc2Nhbi5jOjUxOTU6XHRcdG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChOVUxMLCBtZW1jZyk7XG5tbS92bXNjYW4uYy01MTk2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBmb2N1c2luZyBvbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zOgoKKipEaXZpbmcgRGVlcCBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKgoKT2theSwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aG9zZSBmaWxlczogYG1tL3BhZ2VfY291bnRlci5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLiBUaGVzZSBhcmUgY3J1Y2lhbC4gYHBhZ2VfY291bnRlci5jYCBkZWFscyB3aXRoIHRyYWNraW5nIHBhZ2UgdXNhZ2UsIGZ1bmRhbWVudGFsIGZvciBhbnkgc2FuZSBtZW1vcnkgbWFuYWdlbWVudC4gYG1lbWNvbnRyb2wuY2AgaXMgd2hlcmUgdGhlIGNvbnRyb2wgZ3JvdXBzIGZvciBtZW1vcnkgaXNvbGF0aW9uIGxpdmUsIGFmZmVjdGluZyByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBhY2NvdW50aW5nIGJldHdlZW4gcHJvY2Vzc2VzIGFuZCBjb250YWluZXJzLiBBbmQsIG9mIGNvdXJzZSwgYHZtc2Nhbi5jYCBoYW5kbGVzIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmluZyBhbmQgcmVjbGFpbWluZyBwcm9jZXNzLCB0aGUgaGVhcnQgb2YgaG93IHdlIG1hbmFnZSBzd2FwcGluZyBhbmQgZnJlZWluZyB1cCBtZW1vcnkgcHJlc3N1cmUuIEJ5IGV4YW1pbmluZyB0aGUgY2hhbmdlcyBhY3Jvc3MgdGhlc2UgdGhyZWUsIEkgc2hvdWxkIGdldCBhIHByZXR0eSBnb29kIHNlbnNlIG9mIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB3aGF0ZXZlciYjMzk7cyBiZWVuIG1vZGlmaWVkLiBUaGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHBhZ2UgYWNjb3VudGluZywgY29udHJvbCBncm91cHMsIGFuZCB0aGUgc2Nhbm5pbmcgc3RyYXRlZ3kgYXJlIGFsd2F5cyBpbnRlcnR3aW5lZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIG5ldyByZXNvdXJjZSBsaW1pdHMsIGNoYW5nZXMgaW4gaG93IHBhZ2VzIGFyZSBjbGFzc2lmaWVkLCBvciBzaGlmdHMgaW4gdGhlIHJlY2xhaW0gYmVoYXZpb3IuIEhvcGVmdWxseSB0aGlzIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9jb3VudGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2NTpcdFx0dW5zaWduZWQgbG9uZyBwcm90ZWN0ZWQ7XG4gMzY2Olx0XHR1bnNpZ25lZCBsb25nIGVwO1xuIDM2NzpcdFxuIDM2ODpcdFx0cHJvdGVjdGVkID0gbWluKHVzYWdlLCBzZXR0aW5nKTtcbiAzNjk6XHRcdC8qXG4gMzcwOlx0XHQgKiBJZiBhbGwgY2dyb3VwcyBhdCB0aGlzIGxldmVsIGNvbWJpbmVkIGNsYWltIGFuZCB1c2UgbW9yZVxuIDM3MTpcdFx0ICogcHJvdGVjdGlvbiB0aGFuIHdoYXQgdGhlIHBhcmVudCBhZmZvcmRzIHRoZW0sIGRpc3RyaWJ1dGVcbiAzNzI6XHRcdCAqIHNoYXJlcyBpbiBwcm9wb3J0aW9uIHRvIHV0aWxpemF0aW9uLlxuIDM3MzpcdFx0ICpcbiAzNzQ6XHRcdCAqIFdlIGFyZSB1c2luZyBhY3R1YWwgdXRpbGl6YXRpb24gcmF0aGVyIHRoYW4gdGhlIHN0YXRpY2FsbHlcbiAzNzU6XHRcdCAqIGNsYWltZWQgcHJvdGVjdGlvbiBpbiBvcmRlciB0byBiZSB3b3JrLWNvbnNlcnZpbmc6IGNsYWltZWRcbiAzNzY6XHRcdCAqIGJ1dCB1bnVzZWQgcHJvdGVjdGlvbiBpcyBhdmFpbGFibGUgdG8gc2libGluZ3MgdGhhdCB3b3VsZFxuIDM3NzpcdFx0ICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC5cbiAzNzg6XHRcdCAqL1xuIDM3OTpcdFx0aWYgKHNpYmxpbmdzX3Byb3RlY3RlZCBcdTAwM2UgcGFyZW50X2VmZmVjdGl2ZSlcbiAzODA6XHRcdFx0cmV0dXJuIG11bF91NjRfdTY0X2Rpdl91NjQocHJvdGVjdGVkLCBwYXJlbnRfZWZmZWN0aXZlLFxuIDM4MTpcdFx0XHRcdFx0XHQgICBzaWJsaW5nc19wcm90ZWN0ZWQpO1xuIDM4MjpcdFxuIDM4MzpcdFx0LypcbiAzODQ6XHRcdCAqIE9rLCB1dGlsaXplZCBwcm90ZWN0aW9uIG9mIGFsbCBjaGlsZHJlbiBpcyB3aXRoaW4gd2hhdCB0aGVcbiAzODU6XHRcdCAqIHBhcmVudCBhZmZvcmRzIHRoZW0sIHNvIHdlIGtub3cgd2hhdGV2ZXIgdGhpcyBjaGlsZCBjbGFpbXNcbiAzODY6XHRcdCAqIGFuZCB1dGlsaXplcyBpcyBlZmZlY3RpdmVseSBwcm90ZWN0ZWQuXG4gMzg3Olx0XHQgKlxuIDM4ODpcdFx0ICogSWYgdGhlcmUgaXMgdW5wcm90ZWN0ZWQgdXNhZ2UgYmV5b25kIHRoaXMgdmFsdWUsIHJlY2xhaW1cbiAzODk6XHRcdCAqIHdpbGwgYXBwbHkgcHJlc3N1cmUgaW4gcHJvcG9ydGlvbiB0byB0aGF0IGFtb3VudC5cbiAzOTA6XHRcdCAqXG4gMzkxOlx0XHQgKiBJZiB0aGVyZSBpcyB1bnV0aWxpemVkIHByb3RlY3Rpb24sIHRoZSBjZ3JvdXAgd2lsbCBiZSBmdWxseVxuIDM5MjpcdFx0ICogc2hpZWxkZWQgZnJvbSByZWNsYWltLCBidXQgd2UgZG8gcmV0dXJuIGEgc21hbGxlciB2YWx1ZSBmb3JcbiAzOTM6XHRcdCAqIHByb3RlY3Rpb24gdGhhbiB3aGF0IHRoZSBncm91cCBjb3VsZCBlbmpveSBpbiB0aGVvcnkuIFRoaXNcbiAzOTQ6XHRcdCAqIGlzIG9rYXkuIFdpdGggdGhlIG92ZXJjb21taXQgZGlzdHJpYnV0aW9uIGFib3ZlLCBlZmZlY3RpdmVcbiAzOTU6XHRcdCAqIHByb3RlY3Rpb24gaXMgYWx3YXlzIGRlcGVuZGVudCBvbiBob3cgbWVtb3J5IGlzIGFjdHVhbGx5XG4gMzk2Olx0XHQgKiBjb25zdW1lZCBhbW9uZyB0aGUgc2libGluZ3MgYW55d2F5LlxuIDM5NzpcdFx0ICovXG4gMzk4Olx0XHRlcCA9IHByb3RlY3RlZDtcbiAzOTk6XHRcbiA0MDA6XHRcdC8qXG4gNDAxOlx0XHQgKiBJZiB0aGUgY2hpbGRyZW4gYXJlbiYjMzk7dCBjbGFpbWluZyAoYWxsIG9mKSB0aGUgcHJvdGVjdGlvblxuIDQwMjpcdFx0ICogYWZmb3JkZWQgdG8gdGhlbSBieSB0aGUgcGFyZW50LCBkaXN0cmlidXRlIHRoZSByZW1haW5kZXIgaW5cbiA0MDM6XHRcdCAqIHByb3BvcnRpb24gdG8gdGhlICh1bnByb3RlY3RlZCkgbWVtb3J5IG9mIGVhY2ggY2dyb3VwLiBUaGF0XG4gNDA0Olx0XHQgKiB3YXksIGNncm91cHMgdGhhdCBhcmVuJiMzOTt0IGV4cGxpY2l0bHkgcHJpb3JpdGl6ZWQgd3J0IGVhY2hcbiA0MDU6XHRcdCAqIG90aGVyIGNvbXBldGUgZnJlZWx5IG92ZXIgdGhlIGFsbG93YW5jZSwgYnV0IHRoZXkgYXJlXG4gNDA2Olx0XHQgKiBjb2xsZWN0aXZlbHkgcHJvdGVjdGVkIGZyb20gbmVpZ2hib3JpbmcgdHJlZXMuXG4gNDA3Olx0XHQgKlxuIDQwODpcdFx0ICogV2UmIzM5O3JlIHVzaW5nIHVucHJvdGVjdGVkIG1lbW9yeSBmb3IgdGhlIHdlaWdodCBzbyB0aGF0IGlmXG4gNDA5Olx0XHQgKiBzb21lIGNncm91cHMgRE8gY2xhaW0gZXhwbGljaXQgcHJvdGVjdGlvbiwgd2UgZG9uJiMzOTt0IHByb3RlY3RcbiA0MTA6XHRcdCAqIHRoZSBzYW1lIGJ5dGVzIHR3aWNlLlxuIDQxMTpcdFx0ICpcbiA0MTI6XHRcdCAqIENoZWNrIGJvdGggdXNhZ2UgYW5kIHBhcmVudF91c2FnZSBhZ2FpbnN0IHRoZSByZXNwZWN0aXZlXG4gNDEzOlx0XHQgKiBwcm90ZWN0ZWQgdmFsdWVzLiBPbmUgc2hvdWxkIGltcGx5IHRoZSBvdGhlciwgYnV0IHRoZXlcbiA0MTQ6XHRcdCAqIGFyZW4mIzM5O3QgcmVhZCBhdG9taWNhbGx5IC0gbWFrZSBzdXJlIHRoZSBkaXZpc2lvbiBpcyBzYW5lLlxuIDQxNTpcdFx0ICovXG4gNDE2Olx0XHRpZiAoIXJlY3Vyc2l2ZV9wcm90ZWN0aW9uKVxuIDQxNzpcdFx0XHRyZXR1cm4gZXA7XG4gNDE4Olx0XG4gNDE5Olx0XHRpZiAocGFyZW50X2VmZmVjdGl2ZSBcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFx1MDAyNlx1MDAyNlxuIDQyMDpcdFx0ICAgIHBhcmVudF91c2FnZSBcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFx1MDAyNlx1MDAyNlxuIDQyMTpcdFx0ICAgIHVzYWdlIFx1MDAzZSBwcm90ZWN0ZWQpIHtcbiA0MjI6XHRcdFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIDQyMzpcdFx0XHR1bnNpZ25lZCBsb25nIHVucHJvdGVjdGVkID0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4gNDI0Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIDQyNTpcdFxuIDQyNjpcdFx0XHQvKlxuIDQyNzpcdFx0XHQgKiBUaGUgdXNhZ2VzIGFyZW4mIzM5O3QgcmVhZCBhdG9taWNhbGx5LCBzbyBhIGNoaWxkIGNhbiB0cmFuc2llbnRseVxuIDQyODpcdFx0XHQgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxXG4gNDI5Olx0XHRcdCAqIGFuZCB0aGUgcXVvdGllbnQgb3ZlcmZsb3cgNjQgYml0cyAoI0RFIG9uIHg4NikuICBDYXAgaXQuXG4gNDMwOlx0XHRcdCAqL1xuIDQzMTpcdFx0XHR1bnByb3RlY3RlZCA9IG1pbih1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtcbiA0MzI6XHRcbiA0MzM6XHRcdFx0ZXAgJiM0Mzs9IG11bF91NjRfdTY0X2Rpdl91NjQodW5jbGFpbWVkLCB1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtcbiA0MzQ6XHRcdH1cbiA0MzU6XHRcbiA0MzY6XHRcdHJldHVybiBlcDtcbiA0Mzc6XHR9XG4gNDM4Olx0XG4gNDM5Olx0XG4gNDQwOlx0LyoqXG4gNDQxOlx0ICogcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uIC0gY2hlY2sgaWYgbWVtb3J5IGNvbnN1bXB0aW9uIGlzIGluIHRoZSBub3JtYWwgcmFuZ2VcbiA0NDI6XHQgKiBAcm9vdDogdGhlIHRvcCBhbmNlc3RvciBvZiB0aGUgc3ViLXRyZWUgYmVpbmcgY2hlY2tlZFxuIDQ0MzpcdCAqIEBjb3VudGVyOiB0aGUgcGFnZV9jb3VudGVyIHRoZSBjb3VudGVyIHRvIHVwZGF0ZVxuIDQ0NDpcdCAqIEByZWN1cnNpdmVfcHJvdGVjdGlvbjogV2hldGhlciB0byB1c2UgbWVtb3J5X3JlY3Vyc2l2ZXByb3QgYmVoYXZpb3IuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBQcm90ZWN0aW9uIGluIGBtbS9tZW1jb250cm9sLmNgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG1lbW9yeSBjZ3JvdXBzIGFuZCBob3cgcHJvdGVjdGlvbiBpcyBoYW5kbGVkLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgcGxhY2Ugd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGRldGVybWluaW5nIG1lbW9yeSBwcm90ZWN0aW9uIHN0cmF0ZWdpZXMgcmVzaWRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZmlndXJlcyBvdXQgdGhlIGFwcHJvcHJpYXRlICYjMzQ7cGF0aCYjMzQ7IOKAkyB0aGUgc2VxdWVuY2Ugb2YgY2hlY2tzIGFuZCBkZWNpc2lvbnMg4oCTIHRvIGVuc3VyZSBtZW1vcnkgaXNvbGF0aW9uIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGhpbiBhIGNncm91cCBjb250ZXh0LiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBnb29kIGRlYWwgb2YgY29tcGxleGl0eSBoZXJlLCBiYWxhbmNpbmcgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgd2l0aCByb2J1c3QgcHJvdGVjdGlvbi4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhlIGtlcm5lbCBhcmNoaXRlY3RzIHRhY2tsZWQgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRlcmlhIGFuZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhhdCBjYWxjdWxhdGlvbjogaXMgaXQgYmFzZWQgb24gdGhlIGN1cnJlbnQgd29ya2xvYWQsIHRoZSBjZ3JvdXAmIzM5O3MgbGltaXRzLCBvdmVyYWxsIHN5c3RlbSBsb2FkLCBvciBzb21lIGNvbWJpbmF0aW9uIG9mIHRoZXNlPyBVbmRlcnN0YW5kaW5nIHRoaXMgaXMga2V5IHRvIHBlcmZvcm1hbmNlIHRyb3VibGVzaG9vdGluZyBhbmQgdHVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjMwOlx0e1xuNTIzMTpcdFx0Ym9vbCByZWN1cnNpdmVfcHJvdGVjdGlvbiA9XG41MjMyOlx0XHRcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7XG41MjMzOlx0XG41MjM0Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuNTIzNTpcdFx0XHRyZXR1cm47XG41MjM2Olx0XG41MjM3Olx0XHRpZiAoIXJvb3QpXG41MjM4Olx0XHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG41MjM5Olx0XG41MjQwOlx0XHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuNTI0MTpcdH1cbjUyNDI6XHRcbjUyNDM6XHQjaWZkZWYgQ09ORklHX0xSVV9HRU5cbjUyNDQ6XHQvKipcbjUyNDU6XHQgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoXG41MjQ2Olx0ICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cClcbjUyNDc6XHQgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cFxuNTI0ODpcdCAqXG41MjQ5Olx0ICogV2FsayB0aGUgYW5jZXN0b3IgcGF0aCBmcm9tIEByb290IGRvd24gdG8gQG1lbWNnIGFuZCBjb21wdXRlIHRoZSBlZmZlY3RpdmVcbjUyNTA6XHQgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxuNTI1MTpcdCAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLlxuNTI1MjpcdCAqL1xuNTI1MzpcdHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuNTI1NDpcdFx0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjUyNTU6XHR7XG41MjU2Olx0XHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cbjUyNTc6XHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDtcbjUyNTg6XHRcdHN0cnVjdCBjZ3JvdXAgKmNnO1xuNTI1OTpcdFx0aW50IHJvb3RfbGV2ZWwsIGk7XG41MjYwOlx0XG41MjYxOlx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuNTI2MjpcdFx0XHRyZXR1cm47XG41MjYzOlx0XG41MjY0Olx0XHRpZiAoIXJvb3QpXG41MjY1Olx0XHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG41MjY2Olx0XG41MjY3Olx0XHRpZiAobWVtY2cgPT0gcm9vdClcbjUyNjg6XHRcdFx0cmV0dXJuO1xuNTI2OTpcdFxuNTI3MDpcdFx0cm9vdF9sZXZlbCA9IHJvb3QtXHUwMDNlY3NzLmNncm91cC1cdTAwM2VsZXZlbDtcbjUyNzE6XHRcdGNnID0gbWVtY2ctXHUwMDNlY3NzLmNncm91cDtcbjUyNzI6XHRcbjUyNzM6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjUyNzQ6XHRcdGZvciAoaSA9IHJvb3RfbGV2ZWwgJiM0MzsgMTsgaSBcdTAwM2M9IGNnLVx1MDAzZWxldmVsOyBpJiM0MzsmIzQzOykge1xuNTI3NTpcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyO1xuNTI3NjpcdFxuNTI3NzpcdFx0XHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXHUwMDNlYW5jZXN0b3JzW2ldLFxuNTI3ODpcdFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XG41Mjc5Olx0XHRcdGlmIChjdXIpXG41MjgwOlx0XHRcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LFxuNTI4MTpcdFx0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuNTI4MjpcdFx0XHRcdFx0XHRcdFx0ICByZWN1cnNpdmVfcHJvdGVjdGlvbik7XG41MjgzOlx0XHR9XG41Mjg0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjUyODU6XHR9XG41Mjg2Olx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG41Mjg3Olx0XG41Mjg4Olx0c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuNTI4OTpcdFx0XHRcdGdmcF90IGdmcClcbjUyOTA6XHR7XG41MjkxOlx0XHRpbnQgcmV0ID0gMDtcbjUyOTI6XHRcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbjUyOTM6XHRcbjUyOTQ6XHRcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9tZW1jZyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7XG41Mjk1Olx0XHQvKiBEbyBub3QgYWNjb3VudCBhdCB0aGUgcm9vdCBvYmpjZyBsZXZlbC4gKi9cbjUyOTY6XHRcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbjUyOTc6XHRcdFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuNTI5ODpcdFx0aWYgKHJldCkge1xuNTI5OTpcdFx0XHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgYHNocmlua19vbmVgKioKCk9rYXksIHNvIHRoZSBwcm9ibGVtIGlzIGxpa2VseSBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGgsIGFuZCB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgYXJvdW5kIGBzaHJpbmtfb25lYCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUsIGVzcGVjaWFsbHkgaG93IHRoZSB2YXJpb3VzIHBhZ2Ugc3RhdGVzIGFuZCBMUlUgbGlzdHMgYXJlIGhhbmRsZWQgZHVyaW5nIGEgcmVjbGFpbSBjeWNsZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBgc2hyaW5rX29uZWAgYmVjYXVzZSBpdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZXZhbHVhdGluZyBhbmQgcG90ZW50aWFsbHkgZnJlZWluZyBhIHNpbmdsZSBwYWdlLiBJdCYjMzk7cyB3aGVyZSB0aGUgZGVjaXNpb24gbWFraW5nIGhhcHBlbnMg4oCTIGlzIHRoZSBwYWdlIGRpcnR5PyBJcyBpdCBmaWxlLWJhY2tlZCBvciBhbm9ueW1vdXM/IEhvdyBsb25nIGhhcyBpdCBiZWVuIGlkbGU/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvZiByZWNsYWltaW5nIHRoaXMgcGFnZSBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2U/CgpJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIGF0IGhvdyB0aGUgYHNocmlua19vbmVgIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBMUlUgbGlzdHMsIHRoZSBwYWdlIGZsYWdzIChsaWtlIFBHX2RpcnR5LCBQR19zd2FwYmFja2VkLCBQR19sb2NrZWQpLCBhbmQgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEsIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIE5VTUEgc3lzdGVtIGFuZCB0aGVyZSBhcmUgbW9yZSBudWFuY2VzIHRvIGNvbnNpZGVyIGFyb3VuZCBwYWdlIHBsYWNlbWVudCBhbmQgbWlncmF0aW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVjaWRlcyB3aGljaCBwYWdlIHRvIHJlY2xhaW0sIGFuZCB3aGF0IGFjdGlvbnMgaXQgdGFrZXMgYmFzZWQgb24gaXRzIHByb3BlcnRpZXMuIFRpbWUgdG8gc3RhcnQgcmVhZGluZyB0aGUgY29kZSBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUxODA6XHR9XG41MTgxOlx0XG41MTgyOlx0c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG41MTgzOlx0e1xuNTE4NDpcdFx0Ym9vbCBuZWVkX3JvdGF0ZTtcbjUxODU6XHRcdHVuc2lnbmVkIGxvbmcgc2Nhbm5lZCA9IHNjLVx1MDAzZW5yX3NjYW5uZWQ7XG41MTg2Olx0XHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZCA9IHNjLVx1MDAzZW5yX3JlY2xhaW1lZDtcbjUxODc6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuNTE4ODpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuNTE4OTpcdFxuNTE5MDpcdFx0LypcbjUxOTE6XHRcdCAqIEZvciBrc3dhcGQsIGxydV9nZW5fYWdlX25vZGUoKSBoYXMgYWxyZWFkeSBjYWxsZWRcbjUxOTI6XHRcdCAqIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKVxuNTE5MzpcdFx0ICovXG41MTk0Olx0XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXG41MTk1Olx0XHRcdG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChOVUxMLCBtZW1jZyk7XG41MTk2Olx0XG41MTk3Olx0XHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKVxuNTE5ODpcdFx0XHRyZXR1cm4gTUVNQ0dfTFJVX1lPVU5HO1xuNTE5OTpcdFxuNTIwMDpcdFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbG93KE5VTEwsIG1lbWNnKSkge1xuNTIwMTpcdFx0XHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xuNTIwMjpcdFx0XHRpZiAoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfVEFJTClcbjUyMDM6XHRcdFx0XHRyZXR1cm4gTUVNQ0dfTFJVX1RBSUw7XG41MjA0Olx0XG41MjA1Olx0XHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfTE9XKTtcbjUyMDY6XHRcdH1cbjUyMDc6XHRcbjUyMDg6XHRcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG41MjA5Olx0XG41MjEwOlx0XHRzaHJpbmtfc2xhYihzYy1cdTAwM2VnZnBfbWFzaywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgbWVtY2csIHNjLVx1MDAzZXByaW9yaXR5KTtcbjUyMTE6XHRcbjUyMTI6XHRcdGlmICghc2MtXHUwMDNlcHJvYWN0aXZlKVxuNTIxMzpcdFx0XHR2bXByZXNzdXJlKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2VvcmRlciwgbWVtY2csIGZhbHNlLFxuNTIxNDpcdFx0XHRcdCAgIHNjLVx1MDAzZW5yX3NjYW5uZWQgLSBzY2FubmVkLCBzYy1cdTAwM2Vucl9yZWNsYWltZWQgLSByZWNsYWltZWQpO1xuNTIxNTpcdFxuNTIxNjpcdFx0Zmx1c2hfcmVjbGFpbV9zdGF0ZShzYyk7XG41MjE3Olx0XG41MjE4Olx0XHRpZiAobmVlZF9yb3RhdGUgXHUwMDI2XHUwMDI2IG1lbV9jZ3JvdXBfb25saW5lKG1lbWNnKSlcbjUyMTk6XHRcdFx0cmV0dXJuIE1FTUNHX0xSVV9ZT1VORztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGlzc3VlcyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMgKG1lbWNnKSwgTUdMUlUgKExSVSBHZW4pLCBwYWdlIGNvdW50ZXJzLCBhbmQgbWVtb3J5IHJlY2xhaW0sIGZvdW5kIGluIHRoZSBgbW0vYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgYSBrZXkgYXJlYSB0byB3YXRjaC4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBtb2RpZnlpbmcgaG93IGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAgaXMgY2FsY3VsYXRlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vcGFnZV9jb3VudGVyLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBwcmV2ZW50IGEgNjQtYml0IG92ZXJmbG93IG9yIGRpdmlzaW9uIGVycm9yIGR1cmluZyB0aGlzIGNhbGN1bGF0aW9uLCBlc3BlY2lhbGx5IHdoZW4gdXNpbmcgYG11bF91NjRfdTY0X2Rpdl91NjRgIGFuZCB0YWtpbmcgdGhlIGBtaW5gIG9mIGB1bnByb3RlY3RlZGAgYW5kIGBwYXJlbnRfdW5wcm90ZWN0ZWRgLiBBIHN1YnRsZSBidWcgdGhhdCBjb3VsZCBsZWFkIHRvIHNlcmlvdXMgcHJvYmxlbXMgbGF0ZXIgb24sIHNvIHRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKSXQgYWxzbyBpbnRyb2R1Y2VzIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgIHRvIGhhbmRsZSBtZW1vcnkgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbnMgY29ycmVjdGx5IGFsb25nIGFuY2VzdG9yIHBhdGhzLCBwYXJ0aWN1bGFybHkgZHVyaW5nIE1HTFJVIGRpcmVjdCByZWNsYWltIHdpdGhpbiBgc2hyaW5rX29uZWAuIFRoZSBmYWN0IHRoYXQgYHNocmlua19vbmUoKWAgaXMgaW52b2x2ZWQgbWVhbnMgdGhpcyBpbXBhY3RzIHRoZSBjb3JlIHJlY2xhaW0gcHJvY2VzcywgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuCgpHaXZlbiB0aGUgcGF0Y2gmIzM5O3Mgc2NvcGUgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXRzIGRpcmVjdCBpbXBhY3Qgb24gY3J1Y2lhbCBmdW5jdGlvbnMgbGlrZSBgc2hyaW5rX29uZSgpYCwgSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBmdXp6aW5nIHBvdGVudGlhbC4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdHJpYWdlIGd1aWRlbGluZXMsIGFuZCBjb25zaWRlcmluZyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gdGhlIGNvcmUgTU0gYXJlYSwgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXI6IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgaW1tZWRpYXRlbHkgd2FycmFudCBmdXp6aW5nIGF0dGVudGlvbi4KCk5vdyBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgdG8gaWRlbnRpZnkgZGVwZW5kZW5jaWVzOiBgTUVNQ0dgLCBgTFJVX0dFTmAsIGFuZCBwb3RlbnRpYWxseSBvdGhlciByZWxhdGVkIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlZCB0byBleHBvc2UgdGhlIGNoYW5nZXMuIFRoZSBuZXh0IHN0ZXAgaXMgYSBxdWljayBgZ3JlcGAgZm9yIGBDT05GSUdfTFJVX0dFTmAgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzg4PWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTEzOTgtIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTM5OTpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDAwLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDA3LVxubW0vS2NvbmZpZzoxNDA4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQwOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTMtXG5tbS9LY29uZmlnOjE0MTQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQxNS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDIyLVxubW0vS2NvbmZpZzoxNDIzOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU3OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGFzcGVjdHMgb2YgYG1tL0tjb25maWdgOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYG1tL0tjb25maWdgLiBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgdGhlIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgZ2VuZXJhdGlvbiBhbmQgTWVtb3J5IENvbnRyb2wgR3JvdXBzIChNRU1DRykgYXJlIGNvbmZpZ3VyZWQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBhcm91bmQgYGNvbmZpZyBMUlVfR0VOYCBhbmQgYE1FTUNHYCBpbiB0aGUgS2NvbmZpZyBmaWxlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyBhcmUgdGllZCB0b2dldGhlci4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIGFyZSBkZWZpbmVkIOKAkyB3aGljaCBvcHRpb25zIGVuYWJsZSB3aGljaCwgYW5kIHdoYXQgY29uc3RyYWludHMgYXJlIGluIHBsYWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kLCBlc3BlY2lhbGx5IGlmIEkmIzM5O20gcGxhbm5pbmcgYW55IG1vZGlmaWNhdGlvbnMgb3IgZW5oYW5jZW1lbnRzIHRvIHRoZSBtZW1vcnkgc3Vic3lzdGVtIG9yIHRyeWluZyB0byB1bmRlcnN0YW5kIGV4aXN0aW5nIGJlaGF2aW9ycy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gc2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzOTU6XHRcdCAgcHVycG9zZXMuICBJdCBpcyByZXF1aXJlZCB0byBlbmFibGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBvblxuMTM5NjpcdFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxuMTM5NzpcdFxuMTM5ODpcdCMgbXVsdGktZ2VuIExSVSB7XG4xMzk5Olx0Y29uZmlnIExSVV9HRU5cbjE0MDA6XHRcdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuMTQwMTpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE0MDI6XHRcdCMgbWFrZSBzdXJlIGZvbGlvLVx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xuMTQwMzpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXG4xNDA0Olx0XHRoZWxwXG4xNDA1Olx0XHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxuMTQwNjpcdFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXG4xNDA3Olx0XG4xNDA4Olx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxuMTQwOTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuMTQxMDpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDExOlx0XHRoZWxwXG4xNDEyOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cbjE0MTM6XHRcbjE0MTQ6XHRjb25maWcgTFJVX0dFTl9TVEFUU1xuMTQxNTpcdFx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbjE0MTY6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxNzpcdFx0aGVscFxuMTQxODpcdFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcbjE0MTk6XHRcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cbjE0MjA6XHRcbjE0MjE6XHRcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXG4xNDIyOlx0XG4xNDIzOlx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG4xNDI0Olx0XHRkZWZfYm9vbCB5XG4xNDI1Olx0XHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuMTQyNjpcdCMgfVxuMTQyNzpcdFxuMTQyODpcdGNvbmZpZyBMT0NLX01NX0FORF9GSU5EX1ZNQVxuMTQyOTpcdFx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM0MgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBoaWdoIGxldmVsIG9mIGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYE1FTUNHYCBpbiBgaW5pdC9LY29uZmlnYCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtZW1vcnkgY29udHJvbCBncm91cHMsIGFuZCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gYW55dGhpbmcgZWxzZSwgaXQgbWFrZXMgc2Vuc2UgdG8gZ28gYmFjayB0byBiYXNpY3MgYW5kIGVuc3VyZSB3ZSB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYGluaXQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBrZXJuZWwgZmVhdHVyZSBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIGBNRU1DR2AgKG9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMpIHdvdWxkIGJlIHRoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIHN0YXR1czogaXMgaXQgZW5hYmxlZCBieSBkZWZhdWx0LCBjb25kaXRpb25hbGx5IGVuYWJsZWQsIG9yIGVudGlyZWx5IGRpc2FibGVkPyBLbm93aW5nIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgdml0YWwgdG8gbm90IGR1cGxpY2F0ZSBleGlzdGluZyBlZmZvcnQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGhvdyBkZWVwIEkgbWlnaHQgbmVlZCB0byBnbyB0byBhY2NvbXBsaXNoIHRoZSBpbnRlbmRlZCBnb2FsLiBJIGFsc28gbmVlZCB0byBiZSBhd2FyZSBvZiBob3cgdGhlIHZhcmlvdXMgZGVwZW5kZW5jaWVzIGFuZCBmZWF0dXJlcyBhcm91bmQgYE1FTUNHYCBhcmUgZGVzY3JpYmVkLiBUaGlzIHN0ZXAgaXMgYmFzaWMsIGJ1dCBmb3VuZGF0aW9uYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTExMDItXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDctXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTA5LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODE3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1HTFJVIENvbmZpZ3VyYXRpb24gYW5kIEtleSBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIE1HTFJVIGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJJiMzOTttIGNoZWNraW5nIGlmIHdlIHJlYWxseSBuZWVkIGBMUlVfR0VOX0VOQUJMRURgICppbiBhZGRpdGlvbiB0byogYExSVV9HRU5gLiBCZXN0IHByYWN0aWNlLCBJIHRoaW5rLCBpcyB0byBoYXZlIGBMUlVfR0VOX0VOQUJMRURgIGVuYWJsZWQgYWxvbmdzaWRlIGBMUlVfR0VOYCBhbmQgYE1FTUNHYCB0byBlbnN1cmUgTUdMUlUgaXMgYWN0aXZlIGJ5IGRlZmF1bHQuIFNvLCB0aGF0IG1lYW5zIGRpZ2dpbmcgaW50byBgQ09ORklHX01FTUNHYCwgYENPTkZJR19MUlVfR0VOYCwgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBhZ2Fpbi4KCk5vdywgSSYjMzk7bSBpZGVudGlmeWluZyB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgdGhpcy4gTGV0JiMzOTtzIGdldCB0aGUgY29yZSBzZXQgb2Ygc3ltYm9scyB0aGF0IGFyZSBhZGRlZCwgb3IgZGlyZWN0bHkgbW9kaWZpZWQuIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaW1wb3J0YW50IGhlcmUuIEkgc2VlIHRoZXNlIGFzIGtleToKCjEuICBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCB3aGljaCB3YXMgYWRkZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AuCjIuICBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCAtIGRlZmluZWQgaW4gYG1tL3BhZ2VfY291bnRlci5jYCBhbmQgY3J1Y2lhbGx5IGNhbGxzIGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAuIExvb2tzIGxpa2UgdGhhdCBvbmUgaGFzIGJlZW4gbW9kaWZpZWQuCjMuICBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgLSBhbHNvIGRlZmluZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AuCjQuICBgc2hyaW5rX29uZWAgd2hpY2ggaGFzIGJlZW4gbW9kaWZpZWQgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgaXMgYSBjYWxsZXIgb2YgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgZWZmZWN0aXZlX3Byb3RlY3Rpb25gIGlzIHN0YXRpYy4gTG9va3MgbGlrZSBpdCBpcy4gQ2hlY2tpbmcgYG1tL3BhZ2VfY291bnRlci5jYCwgYW5kLCB5ZXAsIGxpbmUgMzc3OiBgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24oLi4uKWAuIFNpbmNlIGl0JiMzOTtzIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBJIHNob3VsZCBjb25maXJtIHRoYXQgb25lIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oPTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2NvdW50ZXJfcmVzZXRfd2F0ZXJtYXJrKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaC0xMDMtI2lmIElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSB8fCBJU19FTkFCTEVEKENPTkZJR19DR1JPVVBfRE1FTSlcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg6MTA0OnZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwNS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgtMTA3LSNlbHNlXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oOjEwODpzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwOS1cdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG4tLVxua2VybmVsL2Nncm91cC9kbWVtLmM9MzA3PWRtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBkbWVtX2Nncm91cF9wb29sX3N0YXRlICpsaW1pdF9wb29sLFxuLS1cbmtlcm5lbC9jZ3JvdXAvZG1lbS5jLTMzMS1cbmtlcm5lbC9jZ3JvdXAvZG1lbS5jOjMzMjpcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFxua2VybmVsL2Nncm91cC9kbWVtLmMtMzMzLVx0XHRcdGNsaW1pdCwgXHUwMDI2Zm91bmRfcG9vbC1cdTAwM2VjbnQsIHRydWUpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjI4PXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIzOS1cbm1tL21lbWNvbnRyb2wuYzo1MjQwOlx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LCBcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcbm1tL21lbWNvbnRyb2wuYy01MjQxLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTI1Mz12b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI3OS1cdFx0aWYgKGN1cilcbm1tL21lbWNvbnRyb2wuYzo1MjgwOlx0XHRcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcdTAwMjZyb290LVx1MDAzZW1lbW9yeSxcbm1tL21lbWNvbnRyb2wuYy01MjgxLVx0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuLS1cbm1tL3BhZ2VfY291bnRlci5jPTM1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxuLS1cbm1tL3BhZ2VfY291bnRlci5jLTQ0MC0vKipcbm1tL3BhZ2VfY291bnRlci5jOjQ0MTogKiBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24gLSBjaGVjayBpZiBtZW1vcnkgY29uc3VtcHRpb24gaXMgaW4gdGhlIG5vcm1hbCByYW5nZVxubW0vcGFnZV9jb3VudGVyLmMtNDQyLSAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtNDUwLSAqL1xubW0vcGFnZV9jb3VudGVyLmM6NDUxOnZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG5tbS9wYWdlX2NvdW50ZXIuYy00NTItXHRcdFx0XHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzEKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogMjE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiBzb21lIHByb21pc2luZyBzeW1ib2xzIGZvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHk6IGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCwgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBhbmQgYHNocmlua19vbmVgLiBUaGVzZSBsb29rIGdvb2QgYmVjYXVzZSB0aGV5JiMzOTtyZSByZWFzb25hYmx5IHNwZWNpZmljIGFuZCBub3QgdXNlZCAqZXZlcnl3aGVyZSogaW4gdGhlIGNvZGViYXNlLiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRhcmdldCBzZWxlY3Rpb24uCgpOb3csIGxldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSYjMzk7cmUgY292ZXJpbmcgYWxsIHRoZSBiYXNlcyBvZiB0aGUgc3VnZ2VzdGVkIGd1aWRhbmNlLiBJIG5lZWQgdG8gY29uZmlybToKCjEuICAqKmBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLioqIFRoaXMgaXMgdGhlIGdyZWVuIGxpZ2h0OyB3ZSYjMzk7cmUgb24gdGhlIHJpZ2h0IHRyYWNrLgoyLiAgKipUaGUgcmVhc29uaW5nIG1ha2VzIHNlbnNlLioqIEl0JiMzOTtzIG1lbnRpb25pbmcgbW9kaWZpY2F0aW9ucyB0byAqZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb25zKiB3aXRoaW4gYG1tL3BhZ2VfY291bnRlci5jYCB0byBoYW5kbGUgNjQtYml0IG92ZXJmbG93ICphbmQqIGFuY2VzdG9yIHBhdGggcHJvdGVjdGlvbiBpbiBgbWVtY29udHJvbC5jYCBhbmQgYHZtc2Nhbi5jYCByZWxhdGVkIHRvIE1HTFJVLiBUaGF0JiMzOTtzIGEganVpY3kgdGFyZ2V0OyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYWNjb3VudGluZyBhcmUgYWx3YXlzIHBvdGVudGlhbCBhcmVhcyBmb3Igc3VidGxlIGJ1Z3MuCjMuICAqKlRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BvdC1vbi4qKiBJJiMzOTt2ZSBhbHJlYWR5IGRvdWJsZS1jaGVja2VkIHRoZW0gYWJvdmUsIGJ1dCBzZWVpbmcgdGhlbSBhZ2FpbiByZWFzc3VyZXMgbWUuIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgLCBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCwgYHNocmlua19vbmVgLCBhbmQgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25gIGFsbCBzZWVtIGhpZ2hseSByZWxldmFudC4KNC4gICoqVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdC4qKiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYE1FTUNHYCwgYExSVV9HRU5gLCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgYXJlIGVuYWJsZWQgZHVyaW5nIHRlc3RpbmcuIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBsaWtlbHkgY3J1Y2lhbCB0byB0cmlnZ2VyIHRoZSBjb2RlIHBhdGhzIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLgoKQWxyaWdodCwgdGhhdCBjb3ZlcnMgdGhlIGFzc2Vzc21lbnQuIExldCYjMzk7cyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIHRvIG1vdmUgb24gdG8gdGhlIG5leHQgc3RlcCBhbmQgZm9ybWFsaXplIHRoZSB0YXJnZXQgc2VsZWN0aW9uIGFuZCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoJiMzNDssCiAgICAmIzM0O3BhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfb25lJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBmaXggcG90ZW50aWFsIDY0LWJpdCBkaXZpc2lvbiBvdmVyZmxvdyBpbiBlZmZlY3RpdmVfcHJvdGVjdGlvbigpLCBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSBpbiBtbS9tZW1jb250cm9sLmMgY2FsbGVkIGZyb20gbW0vdm1zY2FuLmMgKE11bHRpLUdlbiBMUlUgc2hyaW5rX29uZSkuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbWVtY2cgcHJvdGVjdGlvbiBhbmQgcmVjbGFpbSBjYWxjdWxhdGlvbnMgaW4gcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgmIzM0OywKICAgICYjMzQ7cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgICAmIzM0O3Nocmlua19vbmUmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfY291bnRlci5jIHRvIGZpeCBwb3RlbnRpYWwgNjQtYml0IGRpdmlzaW9uIG92ZXJmbG93IGluIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKCksIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIGluIG1tL21lbWNvbnRyb2wuYyBjYWxsZWQgZnJvbSBtbS92bXNjYW4uYyAoTXVsdGktR2VuIExSVSBzaHJpbmtfb25lKS4gVGhlc2UgY2hhbmdlcyBhbHRlciBtZW1jZyBwcm90ZWN0aW9uIGFuZCByZWNsYWltIGNhbGN1bGF0aW9ucyBpbiByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBhcml0aG1ldGljIG92ZXJmbG93ICgjREUpIGR1cmluZyBtZW1vcnkgY2dyb3VwIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIGluIG1tL3BhZ2VfY291bnRlci5jIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIHRvIGNhbGN1bGF0ZSBhbmNlc3RvciBwcm90ZWN0aW9uIHZhbHVlcyBmb3IgTUdMUlUgaW4gbW0vdm1zY2FuLmMgYW5kIG1tL21lbWNvbnRyb2wuYy5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gVGhlIGNoYW5nZXMgZGVhbCBlbnRpcmVseSB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFyaXRobWV0aWMsIGNncm91cCBoaWVyYXJjaHkgdHJhdmVyc2FsIHVuZGVyIFJDVSwgYW5kIHJlY2xhaW0gaGV1cmlzdGljcy5cbi0gTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMgKHN1Y2ggYXMgY29weV90b191c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBpb2N0bCByZXR1cm5zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbi0gTm8gdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBtZW1vcnkgaXMgYWxsb2NhdGVkIG9yIHJlYWQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzY2FsYXIgdHlwZXMgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgdXBvbiBkZWNsYXJhdGlvbi5cbi0gUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBjb2RlIChlLmcuIGFyaXRobWV0aWMgb3ZlcmZsb3csIGRpdmlzaW9uLWJ5LXplcm8sIFJDVS9wb2ludGVyIGRlcmVmZXJlbmNlIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMsIFVCU0FOLCBhbmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZCBmb3IgdGhpcyBwYXRjaCBzZXJpZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMDMxMmVjOTBiMjdlZTYzNGZmNmNmNTg4YThhNDI2MjhhNTEzN2RkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwNDozNzozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZjkzMmIxZGRkYThjOS4uZDM1Mjg5OWNlNTBjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTE4ODMsNiAmIzQzOzE4ODMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIH0KICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi8KIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19MUlVfR0VOKQomIzQzO3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LAomIzQzOwkJCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfWlNXQVApCiBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7CiB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDlhNjVkNzE0OGMyMjcuLjA5Y2YzMGNjZTJmNzMgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTUyNDAsNiAmIzQzOzUyNDAsNTEgQEAgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LAogCXBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbigmYW1wO3Jvb3QtJmd0O21lbW9yeSwgJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LCByZWN1cnNpdmVfcHJvdGVjdGlvbik7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0xSVV9HRU4KJiM0MzsvKioKJiM0MzsgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoCiYjNDM7ICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cCkKJiM0MzsgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cAomIzQzOyAqCiYjNDM7ICogV2FsayB0aGUgYW5jZXN0b3IgcGF0aCBmcm9tIEByb290IGRvd24gdG8gQG1lbWNnIGFuZCBjb21wdXRlIHRoZSBlZmZlY3RpdmUKJiM0MzsgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdAomIzQzOyAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLgomIzQzOyAqLwomIzQzO3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LAomIzQzOwkJCQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID0KJiM0MzsJCWNncnBfZGZsX3Jvb3QuZmxhZ3MgJmFtcDsgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDsKJiM0MzsJc3RydWN0IGNncm91cCAqY2c7CiYjNDM7CWludCByb290X2xldmVsLCBpOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIXJvb3QpCiYjNDM7CQlyb290ID0gcm9vdF9tZW1fY2dyb3VwOwomIzQzOwomIzQzOwlpZiAobWVtY2cgPT0gcm9vdCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcm9vdF9sZXZlbCA9IHJvb3QtJmd0O2Nzcy5jZ3JvdXAtJmd0O2xldmVsOwomIzQzOwljZyA9IG1lbWNnLSZndDtjc3MuY2dyb3VwOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWZvciAoaSA9IHJvb3RfbGV2ZWwgJiM0MzsgMTsgaSAmbHQ7PSBjZy0mZ3Q7bGV2ZWw7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyOwomIzQzOwomIzQzOwkJY3VyID0gbWVtX2Nncm91cF9mcm9tX2NzcyhjZ3JvdXBfY3NzKGNnLSZndDthbmNlc3RvcnNbaV0sCiYjNDM7CQkJCQkJICAgICAmYW1wO21lbW9yeV9jZ3JwX3N1YnN5cykpOwomIzQzOwkJaWYgKGN1cikKJiM0MzsJCQlwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oJmFtcDtyb290LSZndDttZW1vcnksCiYjNDM7CQkJCQkJCSAgJmFtcDtjdXItJmd0O21lbW9yeSwKJiM0MzsJCQkJCQkJICByZWN1cnNpdmVfcHJvdGVjdGlvbik7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7fQomIzQzOyNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLwomIzQzOwogc3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJZ2ZwX3QgZ2ZwKQogewpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuYwppbmRleCA0NTA1NDNmNGIzMThiLi5lZjFhNjQ3NjJkNGEyIDEwMDY0NAotLS0gYS9tbS9wYWdlX2NvdW50ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZV9jb3VudGVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYXRvbWljLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21hdGg2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CkBAIC0zNzYsNyAmIzQzOzM3Nyw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsCiAJICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC4KIAkgKi8KIAlpZiAoc2libGluZ3NfcHJvdGVjdGVkICZndDsgcGFyZW50X2VmZmVjdGl2ZSkKLQkJcmV0dXJuIHByb3RlY3RlZCAqIHBhcmVudF9lZmZlY3RpdmUgLyBzaWJsaW5nc19wcm90ZWN0ZWQ7CiYjNDM7CQlyZXR1cm4gbXVsX3U2NF91NjRfZGl2X3U2NChwcm90ZWN0ZWQsIHBhcmVudF9lZmZlY3RpdmUsCiYjNDM7CQkJCQkgICBzaWJsaW5nc19wcm90ZWN0ZWQpOwogCiAJLyoKIAkgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlCkBAIC00MTcsMTMgJiM0Mzs0MTksMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSwKIAlpZiAocGFyZW50X2VmZmVjdGl2ZSAmZ3Q7IHNpYmxpbmdzX3Byb3RlY3RlZCAmYW1wOyZhbXA7CiAJICAgIHBhcmVudF91c2FnZSAmZ3Q7IHNpYmxpbmdzX3Byb3RlY3RlZCAmYW1wOyZhbXA7CiAJICAgIHVzYWdlICZndDsgcHJvdGVjdGVkKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdW5jbGFpbWVkOwomIzQzOwkJdW5zaWduZWQgbG9uZyB1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkOwomIzQzOwkJdW5zaWduZWQgbG9uZyB1bnByb3RlY3RlZCA9IHVzYWdlIC0gcHJvdGVjdGVkOwomIzQzOwkJdW5zaWduZWQgbG9uZyBwYXJlbnRfdW5wcm90ZWN0ZWQgPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7CiAKLQkJdW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKLQkJdW5jbGFpbWVkICo9IHVzYWdlIC0gcHJvdGVjdGVkOwotCQl1bmNsYWltZWQgLz0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSB1c2FnZXMgYXJlbiYjMzk7dCByZWFkIGF0b21pY2FsbHksIHNvIGEgY2hpbGQgY2FuIHRyYW5zaWVudGx5CiYjNDM7CQkgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxCiYjNDM7CQkgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LgomIzQzOwkJICovCiYjNDM7CQl1bnByb3RlY3RlZCA9IG1pbih1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTsKIAotCQllcCAmIzQzOz0gdW5jbGFpbWVkOwomIzQzOwkJZXAgJiM0Mzs9IG11bF91NjRfdTY0X2Rpdl91NjQodW5jbGFpbWVkLCB1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTsKIAl9CiAKIAlyZXR1cm4gZXA7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDI0NWY2OGM3NWIyODkuLmVhZjU3NTA2YmUyZjcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC01MTg3LDcgJiM0Mzs1MTg3LDEzIEBAIHN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKIAotCS8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovCiYjNDM7CS8qCiYjNDM7CSAqIEZvciBrc3dhcGQsIGxydV9nZW5fYWdlX25vZGUoKSBoYXMgYWxyZWFkeSBjYWxsZWQKJiM0MzsJICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpCiYjNDM7CSAqLwomIzQzOwlpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpCiYjNDM7CQltZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoTlVMTCwgbWVtY2cpOwomIzQzOwogCWlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpCiAJCXJldHVybiBNRU1DR19MUlVfWU9VTkc7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IEtNU0FOIGNvbmNlcm5zLiBGaXJzdCwgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAsIHdoaWNoIGlzIGNhbGN1bGF0aW5nIG1lbW9yeSBwcm90ZWN0aW9uIGFsb25nIHRoZSBjZ3JvdXAgaGllcmFyY2h5LCBwYXJ0aWN1bGFybHkgZm9yIHRoZSBMUlVfR0VOL01HTFJVIHJlY2xhaW0gcGF0aC4gVGhlIGNvZGUgdG91Y2hlcyBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBgbW0vbWVtY29udHJvbC5jYCwgYG1tL3BhZ2VfY291bnRlci5jYCwgYW5kIGBtbS92bXNjYW4uY2AuCgpJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBtYWluIGNoYW5nZXMgYXJlOgoKKiAgICoqYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgSW1wbGVtZW50YXRpb246KiogVGhpcyBpdGVyYXRlcyBmcm9tIHRoZSByb290IG1lbWNnIGRvd24gdG8gdGhlIHRhcmdldCBtZW1jZywgY2FsY3VsYXRpbmcgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgYXQgZWFjaCBsZXZlbC4gSXQmIzM5O3MgdXNpbmcgYHJjdV9yZWFkX2xvY2soKWAvYHJjdV9yZWFkX3VubG9jaygpYCBzbyB0aGUgYWNjZXNzZXMgYXJlIHByb3RlY3RlZC4KCiogICAqKmBwYWdlX2NvdW50ZXIuY2AgSW1wcm92ZW1lbnRzOioqIFJlcGxhY2luZyBpbnRlZ2VyIGFyaXRobWV0aWMgd2l0aCBgbXVsX3U2NF91NjRfZGl2X3U2NCgpYCBpcyBhIGdvb2QgY2FsbCB0byBwcmV2ZW50IG92ZXJmbG93IGFuZCBkaXZpZGUgZXJyb3JzLiBUaGUgYWRkaXRpb24gb2YgYHVucHJvdGVjdGVkID0gbWluKHVucHJvdGVjdGVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQpO2Agc2VlbXMgZGVzaWduZWQgdG8gZW5mb3JjZSBhIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXAgaW4gcHJvdGVjdGlvbiB1c2FnZSwgYXZvaWRpbmcgb3Zlci1yZXBvcnRpbmcuCgoqICAgKipDYWxsIGluIGB2bXNjYW4uY2A6KiogVGhlIGNhbGwgdG8gYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgd2l0aGluIGBzaHJpbmtfb25lYCAoTFJVX0dFTi9NR0xSVSkgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBmb2N1cyBvbiBtZW1vcnkgcmVjbGFpbS4gSXQgaGFwcGVucyAqYmVmb3JlKiBjaGVja2luZyBgbWVtX2Nncm91cF9iZWxvd19taW4oKWAsIHdoaWNoIGFwcGVhcnMgbG9naWNhbC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBsb29rIGF0IGl0LgoKKiAgICoqRGF0YSB0cmFuc2ZlciBvciBVc2VyLXNwYWNlIEV4cG9zdXJlOioqIFRoZXJlIGFyZSBubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMgY2hhbmdlZCBvciBpbnRyb2R1Y2VkLiBUaGF0JiMzOTtzIGdvb2Q7IHdlJiMzOTtyZSBub3QgZGlyZWN0bHkgZXhwb3NpbmcgaW50ZXJuYWwgc3RhdGUgdG8gdXNlci1zcGFjZS4KCiogICAqKkxvY2FsIFZhcmlhYmxlIEluaXRpYWxpemF0aW9uOioqIEV4YW1pbmluZyB0aGUgbG9jYWwgdmFyaWFibGVzIGluIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgOiBgcmVjdXJzaXZlX3Byb3RlY3Rpb25gLCBgY2dgLCBgcm9vdF9sZXZlbGAsIGFuZCBgaWAgYXJlIGFsbCBpbml0aWFsaXplZCBpbW1lZGlhdGVseS4gU2ltaWxhcmx5LCBpbiBgcGFnZV9jb3VudGVyLmNgLCB0aGUgbG9jYWxzIGFyZSBhbHNvIGluaXRpYWxpemVkLiBObyBpbW1lZGlhdGUgcmVkIGZsYWdzIHRoZXJlLgoKKiAgICoqRGF0YSBTdHJ1Y3R1cmUgQ2hhbmdlczoqKiBObyBjaGFuZ2VzIGluIGRhdGEgc3RydWN0dXJlIHNpemVzLCBwYWRkaW5nLCBvciBkYXRhIGxlYWtzIHRvIHVzZXItc3BhY2UuCgoqICAgKipDb250cm9sIEZsb3cgYW5kIEJvdW5kcyBDaGVja3M6KiogVGhlcmUgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGFueSB3YXkgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIHRocm91Z2ggdGhlc2UgY2hhbmdlcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIHJlY2xhaW0gcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiBhbmQgYXJpdGhtZXRpYyBvdmVyZmxvdyBwcm90ZWN0aW9uLgoKT2theSwgbGV0JiMzOTtzIG5vdyBjb25zaWRlciB0aGF0IHRoZXNlIGNoYW5nZXMgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSBzb21ld2hlcmUgZWxzZS4gV2UgaGF2ZSB0byBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMuIEl0IHdpbGwgbGlrZWx5IGNvbWUgZG93biB0byBpbnNwZWN0aW5nIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gIGFuZCBgc2hyaW5rX29uZWAgc3BlY2lmaWNhbGx5LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3Igc2NhbiB0aGUgY29kZSBtYW51YWxseSB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGJ1dCBiYXNlZCBvbiB0aGlzIGluaXRpYWwgcGFzcywgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBvYnZpb3VzIEtNU0FOIGlzc3Vlcy4gSSB3b3VsZCBuZWVkIHRvIGZ1cnRoZXIgaW52ZXN0aWdhdGUgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB3aXRoIGNlcnRhaW50eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01MjI4PXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIzOS1cbm1tL21lbWNvbnRyb2wuYzo1MjQwOlx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LCBcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcbm1tL21lbWNvbnRyb2wuYy01MjQxLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTI1Mz12b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI3OS1cdFx0aWYgKGN1cilcbm1tL21lbWNvbnRyb2wuYzo1MjgwOlx0XHRcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcdTAwMjZyb290LVx1MDAzZW1lbW9yeSxcbm1tL21lbWNvbnRyb2wuYy01MjgxLVx0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuLS1cbm1tL3BhZ2VfY291bnRlci5jPTM1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxuLS1cbm1tL3BhZ2VfY291bnRlci5jLTQ0MC0vKipcbm1tL3BhZ2VfY291bnRlci5jOjQ0MTogKiBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24gLSBjaGVjayBpZiBtZW1vcnkgY29uc3VtcHRpb24gaXMgaW4gdGhlIG5vcm1hbCByYW5nZVxubW0vcGFnZV9jb3VudGVyLmMtNDQyLSAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtNDUwLSAqL1xubW0vcGFnZV9jb3VudGVyLmM6NDUxOnZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG5tbS9wYWdlX2NvdW50ZXIuYy00NTItXHRcdFx0XHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUyMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYWdhaW4uIEkmIzM5O20gc3BlY2lmaWNhbGx5IHRoaW5raW5nIGFib3V0IHRoaXMgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgc2VlaW5nIGl0cyBuYW1lIHBvcCB1cCBpbiBhIGZldyByZWNlbnQgZGlzY3Vzc2lvbnMgcmVnYXJkaW5nIG1lbW9yeSBhY2NvdW50aW5nLCBhbmQgSSYjMzk7dmUgZ290IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gbW9yZSBkZXRhaWwuIExldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IHRvIGBtbS9wYWdlX2NvdW50ZXIuY2AgYW5kIGdldCBhIGxvb2sgYXQgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGhvdyB0aGUga2VybmVsIHRyYWNrcyBhbmQgcHJvdGVjdHMgbWVtb3J5IHBhZ2VzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiwgaXRzIHVzYWdlIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCBhZmZlY3RzIHN5c3RlbSBjYWxscyBhbmQgb3RoZXIgY29yZSBPUyBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHByb3RlY3Rpb24gbWVjaGFuaXNtcyBpdCBpbXBsZW1lbnRzIGFuZCBob3cgdGhlc2UgcmVsYXRlZCB0byBtZW1vcnkgcHJvdGVjdGlvbi4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA0OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9jb3VudGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0MDpcdC8qKlxuIDQ0MTpcdCAqIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiAtIGNoZWNrIGlmIG1lbW9yeSBjb25zdW1wdGlvbiBpcyBpbiB0aGUgbm9ybWFsIHJhbmdlXG4gNDQyOlx0ICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWRcbiA0NDM6XHQgKiBAY291bnRlcjogdGhlIHBhZ2VfY291bnRlciB0aGUgY291bnRlciB0byB1cGRhdGVcbiA0NDQ6XHQgKiBAcmVjdXJzaXZlX3Byb3RlY3Rpb246IFdoZXRoZXIgdG8gdXNlIG1lbW9yeV9yZWN1cnNpdmVwcm90IGJlaGF2aW9yLlxuIDQ0NTpcdCAqXG4gNDQ2Olx0ICogQ2FsY3VsYXRlcyBlbG93L2VtaW4gdGhyZXNob2xkcyBmb3IgZ2l2ZW4gcGFnZV9jb3VudGVyLlxuIDQ0NzpcdCAqXG4gNDQ4Olx0ICogV0FSTklORzogVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3RhdGVsZXNzISBJdCBjYW4gb25seSBiZSB1c2VkIGFzIHBhcnRcbiA0NDk6XHQgKiAgICAgICAgICBvZiBhIHRvcC1kb3duIHRyZWUgaXRlcmF0aW9uLCBub3QgZm9yIGlzb2xhdGVkIHF1ZXJpZXMuXG4gNDUwOlx0ICovXG4gNDUxOlx0dm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IHBhZ2VfY291bnRlciAqcm9vdCxcbiA0NTI6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuIDQ1MzpcdFx0XHRcdFx0ICAgICAgIGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24pXG4gNDU0Olx0e1xuIDQ1NTpcdFx0dW5zaWduZWQgbG9uZyB1c2FnZSwgcGFyZW50X3VzYWdlO1xuIDQ1NjpcdFx0c3RydWN0IHBhZ2VfY291bnRlciAqcGFyZW50ID0gY291bnRlci1cdTAwM2VwYXJlbnQ7XG4gNDU3Olx0XG4gNDU4Olx0XHQvKlxuIDQ1OTpcdFx0ICogRWZmZWN0aXZlIHZhbHVlcyBvZiB0aGUgcmVjbGFpbSB0YXJnZXRzIGFyZSBpZ25vcmVkIHNvIHRoZXlcbiA0NjA6XHRcdCAqIGNhbiBiZSBzdGFsZS4gSGF2ZSBhIGxvb2sgYXQgbWVtX2Nncm91cF9wcm90ZWN0aW9uIGZvciBtb3JlXG4gNDYxOlx0XHQgKiBkZXRhaWxzLlxuIDQ2MjpcdFx0ICogVE9ETzogY2FsY3VsYXRpb24gc2hvdWxkIGJlIG1vcmUgcm9idXN0IHNvIHRoYXQgd2UgZG8gbm90IG5lZWRcbiA0NjM6XHRcdCAqIHRoYXQgc3BlY2lhbCBjYXNpbmcuXG4gNDY0Olx0XHQgKi9cbiA0NjU6XHRcdGlmIChyb290ID09IGNvdW50ZXIpXG4gNDY2Olx0XHRcdHJldHVybjtcbiA0Njc6XHRcbiA0Njg6XHRcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XG4gNDY5Olx0XHRpZiAoIXVzYWdlKVxuIDQ3MDpcdFx0XHRyZXR1cm47XG4gNDcxOlx0XG4gNDcyOlx0XHRpZiAocGFyZW50ID09IHJvb3QpIHtcbiA0NzM6XHRcdFx0Y291bnRlci1cdTAwM2VlbWluID0gUkVBRF9PTkNFKGNvdW50ZXItXHUwMDNlbWluKTtcbiA0NzQ6XHRcdFx0Y291bnRlci1cdTAwM2VlbG93ID0gUkVBRF9PTkNFKGNvdW50ZXItXHUwMDNlbG93KTtcbiA0NzU6XHRcdFx0cmV0dXJuO1xuIDQ3NjpcdFx0fVxuIDQ3NzpcdFxuIDQ3ODpcdFx0cGFyZW50X3VzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGFyZW50KTtcbiA0Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY2dyb3VwIHByb3RlY3Rpb24gcGF0aCBpcyBjYWxjdWxhdGVkLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyB0aGluZyBhY3R1YWxseSB3b3JrcyB1bmRlciB0aGUgaG9vZC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGxvZ2ljIGhlcmUsIHByb2JhYmx5IGludm9sdmluZyB0cmF2ZXJzaW5nIHRoZSBjZ3JvdXAgaGllcmFyY2h5IGFuZCBleGFtaW5pbmcgbWVtb3J5IGxpbWl0cyBvciBhY2NvdW50aW5nLiBJJiMzOTttIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBtb3JlIGNvbXBsZXggbWVtb3J5IHByb3RlY3Rpb24gbWVjaGFuaXNtcyB3ZSYjMzk7dmUgZGlzY3Vzc2VkIGxhdGVseS4gR290dGEgc3RheSBzaGFycCBhbmQgbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgc3VidGxlIGhlcmUsIGFzIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgY291bGQgYmUgc2lnbmlmaWNhbnQgaWYgc29tZXRoaW5nIGdvZXMgYXdyeS4gUmlnaHQsIGBtbS9tZW1jb250cm9sLmNgIGl0IGlzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwNDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTI1MDpcdCAqIHByb3RlY3Rpb24gYXQgZWFjaCBsZXZlbC4gIFRoaXMgaXMgc2FmZSBmb3IgaXNvbGF0ZWQgcXVlcmllcyBiZWNhdXNlIGl0XG41MjUxOlx0ICogZW5zdXJlcyBwYXJlbnRzIGFyZSBjb21wdXRlZCBiZWZvcmUgY2hpbGRyZW4uXG41MjUyOlx0ICovXG41MjUzOlx0dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG41MjU0Olx0XHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuNTI1NTpcdHtcbjUyNTY6XHRcdGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24gPVxuNTI1NzpcdFx0XHRjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNiBDR1JQX1JPT1RfTUVNT1JZX1JFQ1VSU0lWRV9QUk9UO1xuNTI1ODpcdFx0c3RydWN0IGNncm91cCAqY2c7XG41MjU5Olx0XHRpbnQgcm9vdF9sZXZlbCwgaTtcbjUyNjA6XHRcbjUyNjE6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG41MjYyOlx0XHRcdHJldHVybjtcbjUyNjM6XHRcbjUyNjQ6XHRcdGlmICghcm9vdClcbjUyNjU6XHRcdFx0cm9vdCA9IHJvb3RfbWVtX2Nncm91cDtcbjUyNjY6XHRcbjUyNjc6XHRcdGlmIChtZW1jZyA9PSByb290KVxuNTI2ODpcdFx0XHRyZXR1cm47XG41MjY5Olx0XG41MjcwOlx0XHRyb290X2xldmVsID0gcm9vdC1cdTAwM2Vjc3MuY2dyb3VwLVx1MDAzZWxldmVsO1xuNTI3MTpcdFx0Y2cgPSBtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwO1xuNTI3MjpcdFxuNTI3MzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuNTI3NDpcdFx0Zm9yIChpID0gcm9vdF9sZXZlbCAmIzQzOyAxOyBpIFx1MDAzYz0gY2ctXHUwMDNlbGV2ZWw7IGkmIzQzOyYjNDM7KSB7XG41Mjc1Olx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpjdXI7XG41Mjc2Olx0XG41Mjc3Olx0XHRcdGN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy1cdTAwM2VhbmNlc3RvcnNbaV0sXG41Mjc4Olx0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMpKTtcbjUyNzk6XHRcdFx0aWYgKGN1cilcbjUyODA6XHRcdFx0XHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksXG41MjgxOlx0XHRcdFx0XHRcdFx0XHQgIFx1MDAyNmN1ci1cdTAwM2VtZW1vcnksXG41MjgyOlx0XHRcdFx0XHRcdFx0XHQgIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcbjUyODM6XHRcdH1cbjUyODQ6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNTI4NTpcdH1cbjUyODY6XHQjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbjUyODc6XHRcbjUyODg6XHRzdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG41Mjg5Olx0XHRcdFx0Z2ZwX3QgZ2ZwKVxuNTI5MDpcdHtcbjUyOTE6XHRcdGludCByZXQgPSAwO1xuNTI5MjpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuNTI5MzpcdFxuNTI5NDpcdFx0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX21lbWNnKG1lbWNnLCBmb2xpb19uaWQoZm9saW8pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3NwoJCQkJCQkJb3V0cHV0OiAyNDgKCQkJCQkJCXRob3VnaHRzOiA0MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogS01TQU4gTm90IE5lZWRlZCBIZXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZXNlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBwYWdlIGNvdW50ZXIgY2FsY3VsYXRpb25zIGFuZCBwcm92aWRpbmcgYSBtb3JlIGFjY3VyYXRlIHByb3RlY3Rpb24gcGF0aCBjYWxjdWxhdGlvbiBmb3IgTUdMUlUgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5OgoKMS4gIEkmIzM5O3ZlIGZpeGVkIHNvbWUgcG90ZW50aWFsIGFyaXRobWV0aWMgb3ZlcmZsb3dzIGluIHRoZSBgcGFnZV9jb3VudGVyYCBjYWxjdWxhdGlvbiwgYWRkcmVzc2luZyBpc3N1ZXMgaW4gYG11bF91NjRfdTY0X2Rpdl91NjRgIGFuZCB0aGUgYG1pbih1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKWAgbG9naWMuIFRoaXMgaXMgZ29vZCBwcmV2ZW50YXRpdmUgbWFpbnRlbmFuY2UuCjIuICBJJiMzOTttIGFkZGluZyBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKClgIHRvIG1vcmUgYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGxldmVscyBpbiBhIGhpZXJhcmNoaWNhbCBtZW1vcnkgY2dyb3VwIHNldHVwLCBsZXZlcmFnaW5nIGFuIFJDVSByZWFkIGxvY2sgZm9yIE1HTFJVLgozLiAgSSYjMzk7dmUgaW50ZWdyYXRlZCB0aGlzIG5ldyBmdW5jdGlvbiBpbnRvIGBzaHJpbmtfb25lKClgIHdoZW4gbm90IHRyaWdnZXJlZCBieSBrc3dhcGQuCgpDcnVjaWFsbHksIG5vbmUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBpbnRyb2R1Y2UgYW55IG5ldyBhdmVudWVzIGZvciB1c2VyLXNwYWNlIGRhdGEgbGVha3MsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgc2NhbGFycyBvciBwb2ludGVycy4gVGhlIHBvc3NpYmxlIHBpdGZhbGxzIGhlcmUgYXJlIHN0YW5kYXJkIGtlcm5lbCBidWcgdGVycml0b3J5OiBsb2dpYyBlcnJvcnMsIGRpdmlzaW9uIGJ5IHplcm8sIGFyaXRobWV0aWMgb3ZlcmZsb3cgdGhhdCBzbGlwcGVkIHRocm91Z2ggdGhlIGluaXRpYWwgZml4LCBsb2NraW5nL1JDVSBpc3N1ZXMsIG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLgoKVGhpcyBicmluZ3MgbWUgdG8gdGhlIEtNU0FOIHF1ZXN0aW9uLiBLTVNBTiwgYXMgSSBrbm93LCBpcyBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAob24gdGhlIHN0YWNrLCBoZWFwLCBvciBwYWdlKSBhbmQga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEtBU0FOLCBVQlNBTiwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZXRlY3RvcnMgYXJlIHdlbGwtZXF1aXBwZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBpbnRlZ2VyIG92ZXJmbG93cywgYW5kIGxvY2tpbmcgdmlvbGF0aW9ucy4KClNpbmNlIHRoZXNlIGNoYW5nZXMgKmRvbiYjMzk7dCogaW50cm9kdWNlIG5ldyBidWZmZXJzLCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlci1zcGFjZSwgb3IgbGVhdmUgdmFyaWFibGVzIG9yIHN0cnVjdHVyZSBmaWVsZHMgdW5pbml0aWFsaXplZCwgdGhlIHJpc2sgcHJvZmlsZSBoZXJlIGlzIGZpcm1seSBpbiB0aGUgZG9tYWluIG9mIEtBU0FOL1VCU0FOLXN0eWxlIGJ1Z3MsIG5vdCBLTVNBTi4gVGhlIHZhbHVlcyB1c2VkIGluIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgIGFuZCBgZWZmZWN0aXZlX3Byb3RlY3Rpb25gIGFyZSBpbW1lZGlhdGVseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzbiYjMzk7dCByZXF1aXJlZC4gV2UgY2FuIHN0aWNrIHdpdGggdGhlIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBhcml0aG1ldGljIG92ZXJmbG93ICgjREUpIGR1cmluZyBtZW1vcnkgY2dyb3VwIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIGluIG1tL3BhZ2VfY291bnRlci5jIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIHRvIGNhbGN1bGF0ZSBhbmNlc3RvciBwcm90ZWN0aW9uIHZhbHVlcyBmb3IgTUdMUlUgaW4gbW0vdm1zY2FuLmMgYW5kIG1tL21lbWNvbnRyb2wuYy5cblxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcbi0gVGhlIGNoYW5nZXMgZGVhbCBlbnRpcmVseSB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFyaXRobWV0aWMsIGNncm91cCBoaWVyYXJjaHkgdHJhdmVyc2FsIHVuZGVyIFJDVSwgYW5kIHJlY2xhaW0gaGV1cmlzdGljcy5cbi0gTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMgKHN1Y2ggYXMgY29weV90b191c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBpb2N0bCByZXR1cm5zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cbi0gTm8gdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBtZW1vcnkgaXMgYWxsb2NhdGVkIG9yIHJlYWQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzY2FsYXIgdHlwZXMgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgdXBvbiBkZWNsYXJhdGlvbi5cbi0gUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBjb2RlIChlLmcuIGFyaXRobWV0aWMgb3ZlcmZsb3csIGRpdmlzaW9uLWJ5LXplcm8sIFJDVS9wb2ludGVyIGRlcmVmZXJlbmNlIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMsIFVCU0FOLCBhbmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZCBmb3IgdGhpcyBwYXRjaCBzZXJpZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIGFyaXRobWV0aWMgb3ZlcmZsb3cgKCNERSkgZHVyaW5nIG1lbW9yeSBjZ3JvdXAgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gaW4gbW0vcGFnZV9jb3VudGVyLmMgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgdG8gY2FsY3VsYXRlIGFuY2VzdG9yIHByb3RlY3Rpb24gdmFsdWVzIGZvciBNR0xSVSBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLlxuXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBUaGUgY2hhbmdlcyBkZWFsIGVudGlyZWx5IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYXJpdGhtZXRpYywgY2dyb3VwIGhpZXJhcmNoeSB0cmF2ZXJzYWwgdW5kZXIgUkNVLCBhbmQgcmVjbGFpbSBoZXVyaXN0aWNzLlxuLSBObyBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycyAoc3VjaCBhcyBjb3B5X3RvX3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIGlvY3RsIHJldHVybnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgb3IgcmVhZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGFuZCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHNjYWxhciB0eXBlcyBpbml0aWFsaXplZCBpbW1lZGlhdGVseSB1cG9uIGRlY2xhcmF0aW9uLlxuLSBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGNvZGUgKGUuZy4gYXJpdGhtZXRpYyBvdmVyZmxvdywgZGl2aXNpb24tYnktemVybywgUkNVL3BvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycywgVUJTQU4sIGFuZCBLQVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkIGZvciB0aGlzIHBhdGNoIHNlcmllcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzc6MzguNzU1NjMwNzA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYwNjE4MjEyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aFwiLFxuICAgIFwicGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gICAgXCJzaHJpbmtfb25lXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcmVzc2VzIGFyaXRobWV0aWMgb3ZlcmZsb3cgKCNERSkgZHVyaW5nIG1lbW9yeSBjZ3JvdXAgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gaW4gbW0vcGFnZV9jb3VudGVyLmMgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgdG8gY2FsY3VsYXRlIGFuY2VzdG9yIHByb3RlY3Rpb24gdmFsdWVzIGZvciBNR0xSVSBpbiBtbS92bXNjYW4uYyBhbmQgbW0vbWVtY29udHJvbC5jLlxcblxcbktNU0FOIHZzIEtBU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBUaGUgY2hhbmdlcyBkZWFsIGVudGlyZWx5IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYXJpdGhtZXRpYywgY2dyb3VwIGhpZXJhcmNoeSB0cmF2ZXJzYWwgdW5kZXIgUkNVLCBhbmQgcmVjbGFpbSBoZXVyaXN0aWNzLlxcbi0gTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMgKHN1Y2ggYXMgY29weV90b191c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBvciBpb2N0bCByZXR1cm5zKSBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgaGVhcCwgc3RhY2ssIG9yIHBhZ2UgbWVtb3J5IGlzIGFsbG9jYXRlZCBvciByZWFkLiBBbGwgbG9jYWwgdmFyaWFibGVzIGluIHRoZSBuZXcgYW5kIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgc2NhbGFyIHR5cGVzIGluaXRpYWxpemVkIGltbWVkaWF0ZWx5IHVwb24gZGVjbGFyYXRpb24uXFxuLSBQb3RlbnRpYWwgYnVncyBpbiB0aGlzIGNvZGUgKGUuZy4gYXJpdGhtZXRpYyBvdmVyZmxvdywgZGl2aXNpb24tYnktemVybywgUkNVL3BvaW50ZXIgZGVyZWZlcmVuY2UgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycywgVUJTQU4sIGFuZCBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQgZm9yIHRoaXMgcGF0Y2ggc2VyaWVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vcGFnZV9jb3VudGVyLmMgdG8gZml4IHBvdGVudGlhbCA2NC1iaXQgZGl2aXNpb24gb3ZlcmZsb3cgaW4gZWZmZWN0aXZlX3Byb3RlY3Rpb24oKSwgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgaW4gbW0vbWVtY29udHJvbC5jIGNhbGxlZCBmcm9tIG1tL3Ztc2Nhbi5jIChNdWx0aS1HZW4gTFJVIHNocmlua19vbmUpLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIG1lbWNnIHByb3RlY3Rpb24gYW5kIHJlY2xhaW0gY2FsY3VsYXRpb25zIGluIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM3OjM4Ljc1NTYzNjQ1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5ODE0MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTAzMTJlYzkwYjI3ZWU2MzRmZjZjZjU4OGE4YTQyNjI4YTUxMzdkZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDA0OjM3OjM3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCBmOTMyYjFkZGRhOGM5Li5kMzUyODk5Y2U1MGNlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTg4Myw2ICsxODgzLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4rI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19MUlVfR0VOKVxcbit2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3tcXG4rfVxcbisjZW5kaWZcXG4rXFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfWlNXQVApXFxuIGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcXG4gdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggOWE2NWQ3MTQ4YzIyNy4uMDljZjMwY2NlMmY3MyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNTI0MCw2ICs1MjQwLDUxIEBAIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4gXFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFxcdTAwMjZyb290LVxcdTAwM2VtZW1vcnksIFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCByZWN1cnNpdmVfcHJvdGVjdGlvbik7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbisvKipcXG4rICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aFxcbisgKiBAcm9vdDogdGhlIHRvcCBhbmNlc3RvciBvZiB0aGUgc3ViLXRyZWUgYmVpbmcgY2hlY2tlZCAoTlVMTCBmb3Igcm9vdF9tZW1fY2dyb3VwKVxcbisgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cFxcbisgKlxcbisgKiBXYWxrIHRoZSBhbmNlc3RvciBwYXRoIGZyb20gQHJvb3QgZG93biB0byBAbWVtY2cgYW5kIGNvbXB1dGUgdGhlIGVmZmVjdGl2ZVxcbisgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxcbisgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi5cXG4rICovXFxuK3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cXG4rXFx0XFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7XFxuK1xcdHN0cnVjdCBjZ3JvdXAgKmNnO1xcbitcXHRpbnQgcm9vdF9sZXZlbCwgaTtcXG4rXFxuK1xcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghcm9vdClcXG4rXFx0XFx0cm9vdCA9IHJvb3RfbWVtX2Nncm91cDtcXG4rXFxuK1xcdGlmIChtZW1jZyA9PSByb290KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyb290X2xldmVsID0gcm9vdC1cXHUwMDNlY3NzLmNncm91cC1cXHUwMDNlbGV2ZWw7XFxuK1xcdGNnID0gbWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXA7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGZvciAoaSA9IHJvb3RfbGV2ZWwgKyAxOyBpIFxcdTAwM2M9IGNnLVxcdTAwM2VsZXZlbDsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpjdXI7XFxuK1xcbitcXHRcXHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXFx1MDAzZWFuY2VzdG9yc1tpXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XFxuK1xcdFxcdGlmIChjdXIpXFxuK1xcdFxcdFxcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcXHUwMDI2cm9vdC1cXHUwMDNlbWVtb3J5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZjdXItXFx1MDAzZW1lbW9yeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICByZWN1cnNpdmVfcHJvdGVjdGlvbik7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK31cXG4rI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuK1xcbiBzdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdGdmcF90IGdmcClcXG4ge1xcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXFxuaW5kZXggNDUwNTQzZjRiMzE4Yi4uZWYxYTY0NzYyZDRhMiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xcbisrKyBiL21tL3BhZ2VfY291bnRlci5jXFxuQEAgLTgsNiArOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX2NvdW50ZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYXRoNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbkBAIC0zNzYsNyArMzc3LDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcXG4gXFx0ICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC5cXG4gXFx0ICovXFxuIFxcdGlmIChzaWJsaW5nc19wcm90ZWN0ZWQgXFx1MDAzZSBwYXJlbnRfZWZmZWN0aXZlKVxcbi1cXHRcXHRyZXR1cm4gcHJvdGVjdGVkICogcGFyZW50X2VmZmVjdGl2ZSAvIHNpYmxpbmdzX3Byb3RlY3RlZDtcXG4rXFx0XFx0cmV0dXJuIG11bF91NjRfdTY0X2Rpdl91NjQocHJvdGVjdGVkLCBwYXJlbnRfZWZmZWN0aXZlLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzaWJsaW5nc19wcm90ZWN0ZWQpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogT2ssIHV0aWxpemVkIHByb3RlY3Rpb24gb2YgYWxsIGNoaWxkcmVuIGlzIHdpdGhpbiB3aGF0IHRoZVxcbkBAIC00MTcsMTMgKzQxOSwxOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxcbiBcXHRpZiAocGFyZW50X2VmZmVjdGl2ZSBcXHUwMDNlIHNpYmxpbmdzX3Byb3RlY3RlZCBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgcGFyZW50X3VzYWdlIFxcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICB1c2FnZSBcXHUwMDNlIHByb3RlY3RlZCkge1xcbi1cXHRcXHR1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHVucHJvdGVjdGVkID0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xcbiBcXG4tXFx0XFx0dW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDtcXG4tXFx0XFx0dW5jbGFpbWVkICo9IHVzYWdlIC0gcHJvdGVjdGVkO1xcbi1cXHRcXHR1bmNsYWltZWQgLz0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgdXNhZ2VzIGFyZW4ndCByZWFkIGF0b21pY2FsbHksIHNvIGEgY2hpbGQgY2FuIHRyYW5zaWVudGx5XFxuK1xcdFxcdCAqIGFwcGVhciB0byB1c2UgbW9yZSB0aGFuIGl0cyBwYXJlbnQsIG1ha2luZyB0aGUgcmF0aW8gZXhjZWVkIDFcXG4rXFx0XFx0ICogYW5kIHRoZSBxdW90aWVudCBvdmVyZmxvdyA2NCBiaXRzICgjREUgb24geDg2KS4gIENhcCBpdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHVucHJvdGVjdGVkID0gbWluKHVucHJvdGVjdGVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQpO1xcbiBcXG4tXFx0XFx0ZXAgKz0gdW5jbGFpbWVkO1xcbitcXHRcXHRlcCArPSBtdWxfdTY0X3U2NF9kaXZfdTY0KHVuY2xhaW1lZCwgdW5wcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBlcDtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDI0NWY2OGM3NWIyODkuLmVhZjU3NTA2YmUyZjcgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC01MTg3LDcgKzUxODcsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuIFxcbi1cXHQvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqL1xcbitcXHQvKlxcbitcXHQgKiBGb3Iga3N3YXBkLCBscnVfZ2VuX2FnZV9ub2RlKCkgaGFzIGFscmVhZHkgY2FsbGVkXFxuK1xcdCAqIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKVxcbitcXHQgKi9cXG4rXFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpKVxcbitcXHRcXHRtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoTlVMTCwgbWVtY2cpO1xcbitcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSlcXG4gXFx0XFx0cmV0dXJuIE1FTUNHX0xSVV9ZT1VORztcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM3OjM5LjU0NjE1NDg5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDM3OTY0MzUyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aFwiLFxuICAgIFwicGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gICAgXCJzaHJpbmtfb25lXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBmaXggcG90ZW50aWFsIDY0LWJpdCBkaXZpc2lvbiBvdmVyZmxvdyBpbiBlZmZlY3RpdmVfcHJvdGVjdGlvbigpLCBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSBpbiBtbS9tZW1jb250cm9sLmMgY2FsbGVkIGZyb20gbW0vdm1zY2FuLmMgKE11bHRpLUdlbiBMUlUgc2hyaW5rX29uZSkuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbWVtY2cgcHJvdGVjdGlvbiBhbmQgcmVjbGFpbSBjYWxjdWxhdGlvbnMgaW4gcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMDMxMmVjOTBiMjdlZTYzNGZmNmNmNTg4YThhNDI2MjhhNTEzN2RkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNDozNzozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGY5MzJiMWRkZGE4YzkuLmQzNTI4OTljZTUwY2UgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xODgzLDYgKzE4ODMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xSVV9HRU4pXG4rdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4rXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4rXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK31cbisjZW5kaWZcbitcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcbiBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XG4gdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDlhNjVkNzE0OGMyMjcuLjA5Y2YzMGNjZTJmNzMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTUyNDAsNiArNTI0MCw1MSBAQCB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4gXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbisvKipcbisgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoXG4rICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cClcbisgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cFxuKyAqXG4rICogV2FsayB0aGUgYW5jZXN0b3IgcGF0aCBmcm9tIEByb290IGRvd24gdG8gQG1lbWNnIGFuZCBjb21wdXRlIHRoZSBlZmZlY3RpdmVcbisgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxuKyAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLlxuKyAqL1xuK3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cbitcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDtcbitcdHN0cnVjdCBjZ3JvdXAgKmNnO1xuK1x0aW50IHJvb3RfbGV2ZWwsIGk7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIXJvb3QpXG4rXHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG4rXG4rXHRpZiAobWVtY2cgPT0gcm9vdClcbitcdFx0cmV0dXJuO1xuK1xuK1x0cm9vdF9sZXZlbCA9IHJvb3QtXHUwMDNlY3NzLmNncm91cC1cdTAwM2VsZXZlbDtcbitcdGNnID0gbWVtY2ctXHUwMDNlY3NzLmNncm91cDtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGZvciAoaSA9IHJvb3RfbGV2ZWwgKyAxOyBpIFx1MDAzYz0gY2ctXHUwMDNlbGV2ZWw7IGkrKykge1xuK1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyO1xuK1xuK1x0XHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXHUwMDNlYW5jZXN0b3JzW2ldLFxuK1x0XHRcdFx0XHRcdCAgICAgXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XG4rXHRcdGlmIChjdXIpXG4rXHRcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LFxuK1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuK1x0XHRcdFx0XHRcdFx0ICByZWN1cnNpdmVfcHJvdGVjdGlvbik7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4rXG4gc3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdGdmcF90IGdmcClcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNDUwNTQzZjRiMzE4Yi4uZWYxYTY0NzYyZDRhMiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4rKysgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9jb3VudGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aDY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuQEAgLTM3Niw3ICszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxuIFx0ICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC5cbiBcdCAqL1xuIFx0aWYgKHNpYmxpbmdzX3Byb3RlY3RlZCBcdTAwM2UgcGFyZW50X2VmZmVjdGl2ZSlcbi1cdFx0cmV0dXJuIHByb3RlY3RlZCAqIHBhcmVudF9lZmZlY3RpdmUgLyBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4rXHRcdHJldHVybiBtdWxfdTY0X3U2NF9kaXZfdTY0KHByb3RlY3RlZCwgcGFyZW50X2VmZmVjdGl2ZSxcbitcdFx0XHRcdFx0ICAgc2libGluZ3NfcHJvdGVjdGVkKTtcbiBcbiBcdC8qXG4gXHQgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlXG5AQCAtNDE3LDEzICs0MTksMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcbiBcdGlmIChwYXJlbnRfZWZmZWN0aXZlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgcGFyZW50X3VzYWdlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgdXNhZ2UgXHUwMDNlIHByb3RlY3RlZCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDtcbitcdFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuK1x0XHR1bnNpZ25lZCBsb25nIHVucHJvdGVjdGVkID0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4rXHRcdHVuc2lnbmVkIGxvbmcgcGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIFxuLVx0XHR1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuLVx0XHR1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4tXHRcdHVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSB1c2FnZXMgYXJlbid0IHJlYWQgYXRvbWljYWxseSwgc28gYSBjaGlsZCBjYW4gdHJhbnNpZW50bHlcbitcdFx0ICogYXBwZWFyIHRvIHVzZSBtb3JlIHRoYW4gaXRzIHBhcmVudCwgbWFraW5nIHRoZSByYXRpbyBleGNlZWQgMVxuK1x0XHQgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LlxuK1x0XHQgKi9cbitcdFx0dW5wcm90ZWN0ZWQgPSBtaW4odW5wcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7XG4gXG4tXHRcdGVwICs9IHVuY2xhaW1lZDtcbitcdFx0ZXAgKz0gbXVsX3U2NF91NjRfZGl2X3U2NCh1bmNsYWltZWQsIHVucHJvdGVjdGVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVwO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDI0NWY2OGM3NWIyODkuLmVhZjU3NTA2YmUyZjcgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC01MTg3LDcgKzUxODcsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbiBcbi1cdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXG4rXHQvKlxuK1x0ICogRm9yIGtzd2FwZCwgbHJ1X2dlbl9hZ2Vfbm9kZSgpIGhhcyBhbHJlYWR5IGNhbGxlZFxuK1x0ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpXG4rXHQgKi9cbitcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbitcdFx0bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKE5VTEwsIG1lbWNnKTtcbitcbiBcdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpXG4gXHRcdHJldHVybiBNRU1DR19MUlVfWU9VTkc7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozNzozOS41NDYxNTc0OTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTkzMTM0NDc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBQcm90ZWN0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsdGVycyB0aGUgbWVtb3J5IGNvbnRyb2wgYmVoYXZpb3IuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBzcHJlYWQgYWNyb3NzIGEgZmV3IGtleSBhcmVhcywgc28gSSBuZWVkIHRvIHBpZWNlIHRoaXMgdG9nZXRoZXIuXG5cbkZpcnN0LCB0aGVyZSdzIHRoZSBoZWFkZXIsIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIHdoaWNoIGRlZmluZXMgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLCBzbyBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBmdW5jdGlvbiB3b3Jrcy5cblxuVGhlbiwgdGhlIGltcGxlbWVudGF0aW9uIGxpdmVzIGluIGBtbS9tZW1jb250cm9sLmNgLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgbG9naWMgdGhlcmUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFjdHVhbCBwcm90ZWN0aW9uIHBhdGggY2FsY3VsYXRpb24uIFRoZSBpbnRlbnQgaXMgY2xlYXIgZW5vdWdoLCBpdCB3aWxsIGxpa2VseSBmb2xsb3cgdGhlIGNncm91cCBoaWVyYXJjaHkuXG5cbk5leHQsIHRoZXJlJ3MgYG1tL3BhZ2VfY291bnRlci5jYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIGFyZWEgb2YgdGhpcyBtb2RpZmljYXRpb24uIEkgc2VlIHRoZSB1cGRhdGUgdG8gYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYCB0byB1c2UgYG11bF91NjRfdTY0X2Rpdl91NjRgLCBhbmQgdGhlIGNsYW1waW5nIG9mIGB1bnByb3RlY3RlZGAgdG8gdGhlIHBhcmVudCdzIGB1bnByb3RlY3RlZGAgdmFsdWUuIFRoYXQncyBhIGdvb2QgbW92ZTsgdGhlIHVzZSBvZiBgbXVsX3U2NF91NjRfZGl2X3U2NGAgaW5kaWNhdGVzIGFuIGF0dGVtcHQgdG8gYXZvaWQgb3ZlcmZsb3cgaXNzdWVzLCBhbmQgY2xhbXBpbmcgYXQgdGhlIHBhcmVudCBzaG91bGQgaGVscCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIHByb3RlY3Rpb24gdW5kZXJmbG93LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgYWRkcmVzc2VzIHRoZSBkaXZpc2lvbiBvdmVyZmxvdyBjb25jZXJucy5cblxuRmluYWxseSwgYG1tL3Ztc2Nhbi5jYCBjYWxscyBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKE5VTEwsIG1lbWNnKWAgaW4gYHNocmlua19vbmUoKWAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIHdoZW4gbm90IGtzd2FwZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBNR0xSVSAob3IsIG1vcmUgcHJlY2lzZWx5LCBpZiBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQpLiBJbnRlcmVzdGluZy4gVGhpcyBtZWFucyB0aGUgbmV3IHByb3RlY3Rpb24gbG9naWMgaXMgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBwYWdlIHJlY2xhbWF0aW9uIHByb2Nlc3MuIE5vdywgSSBoYXZlIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBleGlzdGluZyBtZW1jZyByZWNsYWltIG1lY2hhbmlzbS5cblxuVGltZSB0byBwdWxsIG91dCB0aGUgZ3JlcHBlciBvciByZWFkIHRoZSBmaWxlcyBkaXJlY3RseSB0byBkaWcgaW50byB0aGUgYWN0dWFsIGNvZGUgYW5kIHRyYWNlIGhvdyBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCBpcyBiZWluZyB1c2VkIGFuZCBob3cgdGhpcyBpbXBhY3RzIHRoZSBjYWxsZXJzIGFuZCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBmbG93LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbiBiYWNrIHRvIGl0cyByb290IHRvIGdldCB0aGUgYmlnIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjYsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozNzo1MS40Nzc1MDUzMDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxODg0OTYxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTg4MD1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg4Ni0jaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0xSVV9HRU4pXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTg4Nzp2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODg4LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODg5LSNlbHNlXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTg5MDpzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4OTEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMjg9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNDQtLyoqXFxubW0vbWVtY29udHJvbC5jOjUyNDU6ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aFxcbm1tL21lbWNvbnRyb2wuYy01MjQ2LSAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI1Mi0gKi9cXG5tbS9tZW1jb250cm9sLmM6NTI1Mzp2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG5tbS9tZW1jb250cm9sLmMtNTI1NC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxODI9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTk0LVxcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcXG5tbS92bXNjYW4uYzo1MTk1OlxcdFxcdG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChOVUxMLCBtZW1jZyk7XFxubW0vdm1zY2FuLmMtNTE5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzc6NTQuMTk2MzYyODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDAxMjg3MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgZm9jdXNpbmcgb24gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtczpcblxuKipEaXZpbmcgRGVlcCBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhvc2UgZmlsZXM6IGBtbS9wYWdlX2NvdW50ZXIuY2AsIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgYG1tL3Ztc2Nhbi5jYC4gVGhlc2UgYXJlIGNydWNpYWwuIGBwYWdlX2NvdW50ZXIuY2AgZGVhbHMgd2l0aCB0cmFja2luZyBwYWdlIHVzYWdlLCBmdW5kYW1lbnRhbCBmb3IgYW55IHNhbmUgbWVtb3J5IG1hbmFnZW1lbnQuIGBtZW1jb250cm9sLmNgIGlzIHdoZXJlIHRoZSBjb250cm9sIGdyb3VwcyBmb3IgbWVtb3J5IGlzb2xhdGlvbiBsaXZlLCBhZmZlY3RpbmcgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgYWNjb3VudGluZyBiZXR3ZWVuIHByb2Nlc3NlcyBhbmQgY29udGFpbmVycy4gQW5kLCBvZiBjb3Vyc2UsIGB2bXNjYW4uY2AgaGFuZGxlcyB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5pbmcgYW5kIHJlY2xhaW1pbmcgcHJvY2VzcywgdGhlIGhlYXJ0IG9mIGhvdyB3ZSBtYW5hZ2Ugc3dhcHBpbmcgYW5kIGZyZWVpbmcgdXAgbWVtb3J5IHByZXNzdXJlLiBCeSBleGFtaW5pbmcgdGhlIGNoYW5nZXMgYWNyb3NzIHRoZXNlIHRocmVlLCBJIHNob3VsZCBnZXQgYSBwcmV0dHkgZ29vZCBzZW5zZSBvZiB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2Ygd2hhdGV2ZXIncyBiZWVuIG1vZGlmaWVkLiBUaGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHBhZ2UgYWNjb3VudGluZywgY29udHJvbCBncm91cHMsIGFuZCB0aGUgc2Nhbm5pbmcgc3RyYXRlZ3kgYXJlIGFsd2F5cyBpbnRlcnR3aW5lZC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5kaWNhdGlvbnMgb2YgbmV3IHJlc291cmNlIGxpbWl0cywgY2hhbmdlcyBpbiBob3cgcGFnZXMgYXJlIGNsYXNzaWZpZWQsIG9yIHNoaWZ0cyBpbiB0aGUgcmVjbGFpbSBiZWhhdmlvci4gSG9wZWZ1bGx5IHRoaXMgd2lsbCBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozNzo1Ni41OTc2NTI5NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2NvdW50ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjU6XFx0XFx0dW5zaWduZWQgbG9uZyBwcm90ZWN0ZWQ7XFxuIDM2NjpcXHRcXHR1bnNpZ25lZCBsb25nIGVwO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRwcm90ZWN0ZWQgPSBtaW4odXNhZ2UsIHNldHRpbmcpO1xcbiAzNjk6XFx0XFx0LypcXG4gMzcwOlxcdFxcdCAqIElmIGFsbCBjZ3JvdXBzIGF0IHRoaXMgbGV2ZWwgY29tYmluZWQgY2xhaW0gYW5kIHVzZSBtb3JlXFxuIDM3MTpcXHRcXHQgKiBwcm90ZWN0aW9uIHRoYW4gd2hhdCB0aGUgcGFyZW50IGFmZm9yZHMgdGhlbSwgZGlzdHJpYnV0ZVxcbiAzNzI6XFx0XFx0ICogc2hhcmVzIGluIHByb3BvcnRpb24gdG8gdXRpbGl6YXRpb24uXFxuIDM3MzpcXHRcXHQgKlxcbiAzNzQ6XFx0XFx0ICogV2UgYXJlIHVzaW5nIGFjdHVhbCB1dGlsaXphdGlvbiByYXRoZXIgdGhhbiB0aGUgc3RhdGljYWxseVxcbiAzNzU6XFx0XFx0ICogY2xhaW1lZCBwcm90ZWN0aW9uIGluIG9yZGVyIHRvIGJlIHdvcmstY29uc2VydmluZzogY2xhaW1lZFxcbiAzNzY6XFx0XFx0ICogYnV0IHVudXNlZCBwcm90ZWN0aW9uIGlzIGF2YWlsYWJsZSB0byBzaWJsaW5ncyB0aGF0IHdvdWxkXFxuIDM3NzpcXHRcXHQgKiBvdGhlcndpc2UgZ2V0IGEgc21hbGxlciBjaHVuayB0aGFuIHdoYXQgdGhleSBjbGFpbWVkLlxcbiAzNzg6XFx0XFx0ICovXFxuIDM3OTpcXHRcXHRpZiAoc2libGluZ3NfcHJvdGVjdGVkIFxcdTAwM2UgcGFyZW50X2VmZmVjdGl2ZSlcXG4gMzgwOlxcdFxcdFxcdHJldHVybiBtdWxfdTY0X3U2NF9kaXZfdTY0KHByb3RlY3RlZCwgcGFyZW50X2VmZmVjdGl2ZSxcXG4gMzgxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNpYmxpbmdzX3Byb3RlY3RlZCk7XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdC8qXFxuIDM4NDpcXHRcXHQgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlXFxuIDM4NTpcXHRcXHQgKiBwYXJlbnQgYWZmb3JkcyB0aGVtLCBzbyB3ZSBrbm93IHdoYXRldmVyIHRoaXMgY2hpbGQgY2xhaW1zXFxuIDM4NjpcXHRcXHQgKiBhbmQgdXRpbGl6ZXMgaXMgZWZmZWN0aXZlbHkgcHJvdGVjdGVkLlxcbiAzODc6XFx0XFx0ICpcXG4gMzg4OlxcdFxcdCAqIElmIHRoZXJlIGlzIHVucHJvdGVjdGVkIHVzYWdlIGJleW9uZCB0aGlzIHZhbHVlLCByZWNsYWltXFxuIDM4OTpcXHRcXHQgKiB3aWxsIGFwcGx5IHByZXNzdXJlIGluIHByb3BvcnRpb24gdG8gdGhhdCBhbW91bnQuXFxuIDM5MDpcXHRcXHQgKlxcbiAzOTE6XFx0XFx0ICogSWYgdGhlcmUgaXMgdW51dGlsaXplZCBwcm90ZWN0aW9uLCB0aGUgY2dyb3VwIHdpbGwgYmUgZnVsbHlcXG4gMzkyOlxcdFxcdCAqIHNoaWVsZGVkIGZyb20gcmVjbGFpbSwgYnV0IHdlIGRvIHJldHVybiBhIHNtYWxsZXIgdmFsdWUgZm9yXFxuIDM5MzpcXHRcXHQgKiBwcm90ZWN0aW9uIHRoYW4gd2hhdCB0aGUgZ3JvdXAgY291bGQgZW5qb3kgaW4gdGhlb3J5LiBUaGlzXFxuIDM5NDpcXHRcXHQgKiBpcyBva2F5LiBXaXRoIHRoZSBvdmVyY29tbWl0IGRpc3RyaWJ1dGlvbiBhYm92ZSwgZWZmZWN0aXZlXFxuIDM5NTpcXHRcXHQgKiBwcm90ZWN0aW9uIGlzIGFsd2F5cyBkZXBlbmRlbnQgb24gaG93IG1lbW9yeSBpcyBhY3R1YWxseVxcbiAzOTY6XFx0XFx0ICogY29uc3VtZWQgYW1vbmcgdGhlIHNpYmxpbmdzIGFueXdheS5cXG4gMzk3OlxcdFxcdCAqL1xcbiAzOTg6XFx0XFx0ZXAgPSBwcm90ZWN0ZWQ7XFxuIDM5OTpcXHRcXG4gNDAwOlxcdFxcdC8qXFxuIDQwMTpcXHRcXHQgKiBJZiB0aGUgY2hpbGRyZW4gYXJlbid0IGNsYWltaW5nIChhbGwgb2YpIHRoZSBwcm90ZWN0aW9uXFxuIDQwMjpcXHRcXHQgKiBhZmZvcmRlZCB0byB0aGVtIGJ5IHRoZSBwYXJlbnQsIGRpc3RyaWJ1dGUgdGhlIHJlbWFpbmRlciBpblxcbiA0MDM6XFx0XFx0ICogcHJvcG9ydGlvbiB0byB0aGUgKHVucHJvdGVjdGVkKSBtZW1vcnkgb2YgZWFjaCBjZ3JvdXAuIFRoYXRcXG4gNDA0OlxcdFxcdCAqIHdheSwgY2dyb3VwcyB0aGF0IGFyZW4ndCBleHBsaWNpdGx5IHByaW9yaXRpemVkIHdydCBlYWNoXFxuIDQwNTpcXHRcXHQgKiBvdGhlciBjb21wZXRlIGZyZWVseSBvdmVyIHRoZSBhbGxvd2FuY2UsIGJ1dCB0aGV5IGFyZVxcbiA0MDY6XFx0XFx0ICogY29sbGVjdGl2ZWx5IHByb3RlY3RlZCBmcm9tIG5laWdoYm9yaW5nIHRyZWVzLlxcbiA0MDc6XFx0XFx0ICpcXG4gNDA4OlxcdFxcdCAqIFdlJ3JlIHVzaW5nIHVucHJvdGVjdGVkIG1lbW9yeSBmb3IgdGhlIHdlaWdodCBzbyB0aGF0IGlmXFxuIDQwOTpcXHRcXHQgKiBzb21lIGNncm91cHMgRE8gY2xhaW0gZXhwbGljaXQgcHJvdGVjdGlvbiwgd2UgZG9uJ3QgcHJvdGVjdFxcbiA0MTA6XFx0XFx0ICogdGhlIHNhbWUgYnl0ZXMgdHdpY2UuXFxuIDQxMTpcXHRcXHQgKlxcbiA0MTI6XFx0XFx0ICogQ2hlY2sgYm90aCB1c2FnZSBhbmQgcGFyZW50X3VzYWdlIGFnYWluc3QgdGhlIHJlc3BlY3RpdmVcXG4gNDEzOlxcdFxcdCAqIHByb3RlY3RlZCB2YWx1ZXMuIE9uZSBzaG91bGQgaW1wbHkgdGhlIG90aGVyLCBidXQgdGhleVxcbiA0MTQ6XFx0XFx0ICogYXJlbid0IHJlYWQgYXRvbWljYWxseSAtIG1ha2Ugc3VyZSB0aGUgZGl2aXNpb24gaXMgc2FuZS5cXG4gNDE1OlxcdFxcdCAqL1xcbiA0MTY6XFx0XFx0aWYgKCFyZWN1cnNpdmVfcHJvdGVjdGlvbilcXG4gNDE3OlxcdFxcdFxcdHJldHVybiBlcDtcXG4gNDE4OlxcdFxcbiA0MTk6XFx0XFx0aWYgKHBhcmVudF9lZmZlY3RpdmUgXFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4gNDIwOlxcdFxcdCAgICBwYXJlbnRfdXNhZ2UgXFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4gNDIxOlxcdFxcdCAgICB1c2FnZSBcXHUwMDNlIHByb3RlY3RlZCkge1xcbiA0MjI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xcbiA0MjM6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB1bnByb3RlY3RlZCA9IHVzYWdlIC0gcHJvdGVjdGVkO1xcbiA0MjQ6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwYXJlbnRfdW5wcm90ZWN0ZWQgPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XFxuIDQyNTpcXHRcXG4gNDI2OlxcdFxcdFxcdC8qXFxuIDQyNzpcXHRcXHRcXHQgKiBUaGUgdXNhZ2VzIGFyZW4ndCByZWFkIGF0b21pY2FsbHksIHNvIGEgY2hpbGQgY2FuIHRyYW5zaWVudGx5XFxuIDQyODpcXHRcXHRcXHQgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxXFxuIDQyOTpcXHRcXHRcXHQgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LlxcbiA0MzA6XFx0XFx0XFx0ICovXFxuIDQzMTpcXHRcXHRcXHR1bnByb3RlY3RlZCA9IG1pbih1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtcXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0XFx0ZXAgKz0gbXVsX3U2NF91NjRfZGl2X3U2NCh1bmNsYWltZWQsIHVucHJvdGVjdGVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQpO1xcbiA0MzQ6XFx0XFx0fVxcbiA0MzU6XFx0XFxuIDQzNjpcXHRcXHRyZXR1cm4gZXA7XFxuIDQzNzpcXHR9XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcbiA0NDA6XFx0LyoqXFxuIDQ0MTpcXHQgKiBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24gLSBjaGVjayBpZiBtZW1vcnkgY29uc3VtcHRpb24gaXMgaW4gdGhlIG5vcm1hbCByYW5nZVxcbiA0NDI6XFx0ICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWRcXG4gNDQzOlxcdCAqIEBjb3VudGVyOiB0aGUgcGFnZV9jb3VudGVyIHRoZSBjb3VudGVyIHRvIHVwZGF0ZVxcbiA0NDQ6XFx0ICogQHJlY3Vyc2l2ZV9wcm90ZWN0aW9uOiBXaGV0aGVyIHRvIHVzZSBtZW1vcnlfcmVjdXJzaXZlcHJvdCBiZWhhdmlvci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzc6NTYuNTk3ODIxMzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg1OTkwOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgUHJvdGVjdGlvbiBpbiBgbW0vbWVtY29udHJvbC5jYCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgbWVtb3J5IGNncm91cHMgYW5kIGhvdyBwcm90ZWN0aW9uIGlzIGhhbmRsZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgZnVuY3Rpb24uIFRoYXQncyB0aGUgbGlrZWx5IHBsYWNlIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBkZXRlcm1pbmluZyBtZW1vcnkgcHJvdGVjdGlvbiBzdHJhdGVnaWVzIHJlc2lkZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGZpZ3VyZXMgb3V0IHRoZSBhcHByb3ByaWF0ZSBcInBhdGhcIiDigJMgdGhlIHNlcXVlbmNlIG9mIGNoZWNrcyBhbmQgZGVjaXNpb25zIOKAkyB0byBlbnN1cmUgbWVtb3J5IGlzb2xhdGlvbiBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiB3aXRoaW4gYSBjZ3JvdXAgY29udGV4dC4gSSBzdXNwZWN0IHRoZXJlJ3MgYSBnb29kIGRlYWwgb2YgY29tcGxleGl0eSBoZXJlLCBiYWxhbmNpbmcgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgd2l0aCByb2J1c3QgcHJvdGVjdGlvbi4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGUga2VybmVsIGFyY2hpdGVjdHMgdGFja2xlZCB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGVyaWEgYW5kIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGF0IGNhbGN1bGF0aW9uOiBpcyBpdCBiYXNlZCBvbiB0aGUgY3VycmVudCB3b3JrbG9hZCwgdGhlIGNncm91cCdzIGxpbWl0cywgb3ZlcmFsbCBzeXN0ZW0gbG9hZCwgb3Igc29tZSBjb21iaW5hdGlvbiBvZiB0aGVzZT8gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBwZXJmb3JtYW5jZSB0cm91Ymxlc2hvb3RpbmcgYW5kIHR1bmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzc6NTguOTgzODE2NTAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAzODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjMwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MjMwOlxcdHtcXG41MjMxOlxcdFxcdGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24gPVxcbjUyMzI6XFx0XFx0XFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7XFxuNTIzMzpcXHRcXG41MjM0OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuNTIzNTpcXHRcXHRcXHRyZXR1cm47XFxuNTIzNjpcXHRcXG41MjM3OlxcdFxcdGlmICghcm9vdClcXG41MjM4OlxcdFxcdFxcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XFxuNTIzOTpcXHRcXG41MjQwOlxcdFxcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcXHUwMDI2cm9vdC1cXHUwMDNlbWVtb3J5LCBcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xcbjUyNDE6XFx0fVxcbjUyNDI6XFx0XFxuNTI0MzpcXHQjaWZkZWYgQ09ORklHX0xSVV9HRU5cXG41MjQ0OlxcdC8qKlxcbjUyNDU6XFx0ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aFxcbjUyNDY6XFx0ICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cClcXG41MjQ3OlxcdCAqIEBtZW1jZzogdGhlIHRhcmdldCBtZW1vcnkgY2dyb3VwXFxuNTI0ODpcXHQgKlxcbjUyNDk6XFx0ICogV2FsayB0aGUgYW5jZXN0b3IgcGF0aCBmcm9tIEByb290IGRvd24gdG8gQG1lbWNnIGFuZCBjb21wdXRlIHRoZSBlZmZlY3RpdmVcXG41MjUwOlxcdCAqIHByb3RlY3Rpb24gYXQgZWFjaCBsZXZlbC4gIFRoaXMgaXMgc2FmZSBmb3IgaXNvbGF0ZWQgcXVlcmllcyBiZWNhdXNlIGl0XFxuNTI1MTpcXHQgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi5cXG41MjUyOlxcdCAqL1xcbjUyNTM6XFx0dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuNTI1NDpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG41MjU1OlxcdHtcXG41MjU2OlxcdFxcdGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24gPVxcbjUyNTc6XFx0XFx0XFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7XFxuNTI1ODpcXHRcXHRzdHJ1Y3QgY2dyb3VwICpjZztcXG41MjU5OlxcdFxcdGludCByb290X2xldmVsLCBpO1xcbjUyNjA6XFx0XFxuNTI2MTpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbjUyNjI6XFx0XFx0XFx0cmV0dXJuO1xcbjUyNjM6XFx0XFxuNTI2NDpcXHRcXHRpZiAoIXJvb3QpXFxuNTI2NTpcXHRcXHRcXHRyb290ID0gcm9vdF9tZW1fY2dyb3VwO1xcbjUyNjY6XFx0XFxuNTI2NzpcXHRcXHRpZiAobWVtY2cgPT0gcm9vdClcXG41MjY4OlxcdFxcdFxcdHJldHVybjtcXG41MjY5OlxcdFxcbjUyNzA6XFx0XFx0cm9vdF9sZXZlbCA9IHJvb3QtXFx1MDAzZWNzcy5jZ3JvdXAtXFx1MDAzZWxldmVsO1xcbjUyNzE6XFx0XFx0Y2cgPSBtZW1jZy1cXHUwMDNlY3NzLmNncm91cDtcXG41MjcyOlxcdFxcbjUyNzM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjUyNzQ6XFx0XFx0Zm9yIChpID0gcm9vdF9sZXZlbCArIDE7IGkgXFx1MDAzYz0gY2ctXFx1MDAzZWxldmVsOyBpKyspIHtcXG41Mjc1OlxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpjdXI7XFxuNTI3NjpcXHRcXG41Mjc3OlxcdFxcdFxcdGN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy1cXHUwMDNlYW5jZXN0b3JzW2ldLFxcbjUyNzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XFxuNTI3OTpcXHRcXHRcXHRpZiAoY3VyKVxcbjUyODA6XFx0XFx0XFx0XFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFxcdTAwMjZyb290LVxcdTAwM2VtZW1vcnksXFxuNTI4MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZjdXItXFx1MDAzZW1lbW9yeSxcXG41MjgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xcbjUyODM6XFx0XFx0fVxcbjUyODQ6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNTI4NTpcXHR9XFxuNTI4NjpcXHQjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG41Mjg3OlxcdFxcbjUyODg6XFx0c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbjUyODk6XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwKVxcbjUyOTA6XFx0e1xcbjUyOTE6XFx0XFx0aW50IHJldCA9IDA7XFxuNTI5MjpcXHRcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuNTI5MzpcXHRcXG41Mjk0OlxcdFxcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9tZW1jZyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7XFxuNTI5NTpcXHRcXHQvKiBEbyBub3QgYWNjb3VudCBhdCB0aGUgcm9vdCBvYmpjZyBsZXZlbC4gKi9cXG41Mjk2OlxcdFxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG41Mjk3OlxcdFxcdFxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG41Mjk4OlxcdFxcdGlmIChyZXQpIHtcXG41Mjk5OlxcdFxcdFxcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzc6NTguOTg0MjI0MTUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2OTkwNTAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBgc2hyaW5rX29uZWAqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvYmxlbSBpcyBsaWtlbHkgaW4gdGhlIHBhZ2UgcmVjbGFpbSBwYXRoLCBhbmQgdGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIGFyb3VuZCBgc2hyaW5rX29uZWAgd2l0aGluIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHRoZXJlLCBlc3BlY2lhbGx5IGhvdyB0aGUgdmFyaW91cyBwYWdlIHN0YXRlcyBhbmQgTFJVIGxpc3RzIGFyZSBoYW5kbGVkIGR1cmluZyBhIHJlY2xhaW0gY3ljbGUuIEknbSBmb2N1c2luZyBvbiBgc2hyaW5rX29uZWAgYmVjYXVzZSBpdCdzIHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBldmFsdWF0aW5nIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIGEgc2luZ2xlIHBhZ2UuIEl0J3Mgd2hlcmUgdGhlIGRlY2lzaW9uIG1ha2luZyBoYXBwZW5zIOKAkyBpcyB0aGUgcGFnZSBkaXJ0eT8gSXMgaXQgZmlsZS1iYWNrZWQgb3IgYW5vbnltb3VzPyBIb3cgbG9uZyBoYXMgaXQgYmVlbiBpZGxlPyBXaGF0J3MgdGhlIGltcGFjdCBvZiByZWNsYWltaW5nIHRoaXMgcGFnZSBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2U/XG5cbkknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBJJ2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgYXQgaG93IHRoZSBgc2hyaW5rX29uZWAgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIExSVSBsaXN0cywgdGhlIHBhZ2UgZmxhZ3MgKGxpa2UgUEdfZGlydHksIFBHX3N3YXBiYWNrZWQsIFBHX2xvY2tlZCksIGFuZCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YSwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgTlVNQSBzeXN0ZW0gYW5kIHRoZXJlIGFyZSBtb3JlIG51YW5jZXMgdG8gY29uc2lkZXIgYXJvdW5kIHBhZ2UgcGxhY2VtZW50IGFuZCBtaWdyYXRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBkZWNpZGVzIHdoaWNoIHBhZ2UgdG8gcmVjbGFpbSwgYW5kIHdoYXQgYWN0aW9ucyBpdCB0YWtlcyBiYXNlZCBvbiBpdHMgcHJvcGVydGllcy4gVGltZSB0byBzdGFydCByZWFkaW5nIHRoZSBjb2RlIGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MDEuNzU0MTM0Mzg0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTgwOlxcdH1cXG41MTgxOlxcdFxcbjUxODI6XFx0c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNTE4MzpcXHR7XFxuNTE4NDpcXHRcXHRib29sIG5lZWRfcm90YXRlO1xcbjUxODU6XFx0XFx0dW5zaWduZWQgbG9uZyBzY2FubmVkID0gc2MtXFx1MDAzZW5yX3NjYW5uZWQ7XFxuNTE4NjpcXHRcXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZCA9IHNjLVxcdTAwM2Vucl9yZWNsYWltZWQ7XFxuNTE4NzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG41MTg4OlxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcXG41MTg5OlxcdFxcbjUxOTA6XFx0XFx0LypcXG41MTkxOlxcdFxcdCAqIEZvciBrc3dhcGQsIGxydV9nZW5fYWdlX25vZGUoKSBoYXMgYWxyZWFkeSBjYWxsZWRcXG41MTkyOlxcdFxcdCAqIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKVxcbjUxOTM6XFx0XFx0ICovXFxuNTE5NDpcXHRcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXFxuNTE5NTpcXHRcXHRcXHRtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoTlVMTCwgbWVtY2cpO1xcbjUxOTY6XFx0XFxuNTE5NzpcXHRcXHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKVxcbjUxOTg6XFx0XFx0XFx0cmV0dXJuIE1FTUNHX0xSVV9ZT1VORztcXG41MTk5OlxcdFxcbjUyMDA6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbG93KE5VTEwsIG1lbWNnKSkge1xcbjUyMDE6XFx0XFx0XFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1FTUNHX05SX0dFTlMgKi9cXG41MjAyOlxcdFxcdFxcdGlmIChSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfVEFJTClcXG41MjAzOlxcdFxcdFxcdFxcdHJldHVybiBNRU1DR19MUlVfVEFJTDtcXG41MjA0OlxcdFxcbjUyMDU6XFx0XFx0XFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19MT1cpO1xcbjUyMDY6XFx0XFx0fVxcbjUyMDc6XFx0XFxuNTIwODpcXHRcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbjUyMDk6XFx0XFxuNTIxMDpcXHRcXHRzaHJpbmtfc2xhYihzYy1cXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBtZW1jZywgc2MtXFx1MDAzZXByaW9yaXR5KTtcXG41MjExOlxcdFxcbjUyMTI6XFx0XFx0aWYgKCFzYy1cXHUwMDNlcHJvYWN0aXZlKVxcbjUyMTM6XFx0XFx0XFx0dm1wcmVzc3VyZShzYy1cXHUwMDNlZ2ZwX21hc2ssIHNjLVxcdTAwM2VvcmRlciwgbWVtY2csIGZhbHNlLFxcbjUyMTQ6XFx0XFx0XFx0XFx0ICAgc2MtXFx1MDAzZW5yX3NjYW5uZWQgLSBzY2FubmVkLCBzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIC0gcmVjbGFpbWVkKTtcXG41MjE1OlxcdFxcbjUyMTY6XFx0XFx0Zmx1c2hfcmVjbGFpbV9zdGF0ZShzYyk7XFxuNTIxNzpcXHRcXG41MjE4OlxcdFxcdGlmIChuZWVkX3JvdGF0ZSBcXHUwMDI2XFx1MDAyNiBtZW1fY2dyb3VwX29ubGluZShtZW1jZykpXFxuNTIxOTpcXHRcXHRcXHRyZXR1cm4gTUVNQ0dfTFJVX1lPVU5HO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozODowMS43NTQ2Mzk5MzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYyNjMzNTg5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBpc3N1ZXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXBzIChtZW1jZyksIE1HTFJVIChMUlUgR2VuKSwgcGFnZSBjb3VudGVycywgYW5kIG1lbW9yeSByZWNsYWltLCBmb3VuZCBpbiB0aGUgYG1tL2AgZGlyZWN0b3J5LiBUaGF0J3MgYSBrZXkgYXJlYSB0byB3YXRjaC5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vZGlmeWluZyBob3cgYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYCBpcyBjYWxjdWxhdGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9wYWdlX2NvdW50ZXIuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gcHJldmVudCBhIDY0LWJpdCBvdmVyZmxvdyBvciBkaXZpc2lvbiBlcnJvciBkdXJpbmcgdGhpcyBjYWxjdWxhdGlvbiwgZXNwZWNpYWxseSB3aGVuIHVzaW5nIGBtdWxfdTY0X3U2NF9kaXZfdTY0YCBhbmQgdGFraW5nIHRoZSBgbWluYCBvZiBgdW5wcm90ZWN0ZWRgIGFuZCBgcGFyZW50X3VucHJvdGVjdGVkYC4gQSBzdWJ0bGUgYnVnIHRoYXQgY291bGQgbGVhZCB0byBzZXJpb3VzIHByb2JsZW1zIGxhdGVyIG9uLCBzbyB0aGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuXG5JdCBhbHNvIGludHJvZHVjZXMgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgdG8gaGFuZGxlIG1lbW9yeSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9ucyBjb3JyZWN0bHkgYWxvbmcgYW5jZXN0b3IgcGF0aHMsIHBhcnRpY3VsYXJseSBkdXJpbmcgTUdMUlUgZGlyZWN0IHJlY2xhaW0gd2l0aGluIGBzaHJpbmtfb25lYC4gVGhlIGZhY3QgdGhhdCBgc2hyaW5rX29uZSgpYCBpcyBpbnZvbHZlZCBtZWFucyB0aGlzIGltcGFjdHMgdGhlIGNvcmUgcmVjbGFpbSBwcm9jZXNzLCBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5HaXZlbiB0aGUgcGF0Y2gncyBzY29wZSB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpdHMgZGlyZWN0IGltcGFjdCBvbiBjcnVjaWFsIGZ1bmN0aW9ucyBsaWtlIGBzaHJpbmtfb25lKClgLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IGZ1enppbmcgcG90ZW50aWFsLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0cmlhZ2UgZ3VpZGVsaW5lcywgYW5kIGNvbnNpZGVyaW5nIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiB0aGUgY29yZSBNTSBhcmVhLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZyA9IHRydWVgLiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCBpbW1lZGlhdGVseSB3YXJyYW50IGZ1enppbmcgYXR0ZW50aW9uLlxuXG5Ob3cgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZGVmaW5pdGlvbnMgdG8gaWRlbnRpZnkgZGVwZW5kZW5jaWVzOiBgTUVNQ0dgLCBgTFJVX0dFTmAsIGFuZCBwb3RlbnRpYWxseSBvdGhlciByZWxhdGVkIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlZCB0byBleHBvc2UgdGhlIGNoYW5nZXMuIFRoZSBuZXh0IHN0ZXAgaXMgYSBxdWljayBgZ3JlcGAgZm9yIGBDT05GSUdfTFJVX0dFTmAgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU0MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM4OjA2LjM4MDk3OTQ5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQzOTgwNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM4OD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTEzOTgtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjEzOTk6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDAtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQwNy1cXG5tbS9LY29uZmlnOjE0MDg6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQwOS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMy1cXG5tbS9LY29uZmlnOjE0MTQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MTUtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDIyLVxcbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjQtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozODowNi40NzUzODgzMDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjczNDE4ODc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGFzcGVjdHMgb2YgYG1tL0tjb25maWdgOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBtbS9LY29uZmlnYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZSBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIGdlbmVyYXRpb24gYW5kIE1lbW9yeSBDb250cm9sIEdyb3VwcyAoTUVNQ0cpIGFyZSBjb25maWd1cmVkLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBhcm91bmQgYGNvbmZpZyBMUlVfR0VOYCBhbmQgYE1FTUNHYCBpbiB0aGUgS2NvbmZpZyBmaWxlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyBhcmUgdGllZCB0b2dldGhlci4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbnRlcmFjdGlvbnMgYXJlIGRlZmluZWQg4oCTIHdoaWNoIG9wdGlvbnMgZW5hYmxlIHdoaWNoLCBhbmQgd2hhdCBjb25zdHJhaW50cyBhcmUgaW4gcGxhY2UuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQsIGVzcGVjaWFsbHkgaWYgSSdtIHBsYW5uaW5nIGFueSBtb2RpZmljYXRpb25zIG9yIGVuaGFuY2VtZW50cyB0byB0aGUgbWVtb3J5IHN1YnN5c3RlbSBvciB0cnlpbmcgdG8gdW5kZXJzdGFuZCBleGlzdGluZyBiZWhhdmlvcnMuIEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM4OjA5LjIwOTU4MjI0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzk1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzk1OlxcdFxcdCAgcHVycG9zZXMuICBJdCBpcyByZXF1aXJlZCB0byBlbmFibGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBvblxcbjEzOTY6XFx0XFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxcbjEzOTc6XFx0XFxuMTM5ODpcXHQjIG11bHRpLWdlbiBMUlUge1xcbjEzOTk6XFx0Y29uZmlnIExSVV9HRU5cXG4xNDAwOlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwMTpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDI6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDM6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwNDpcXHRcXHRoZWxwXFxuMTQwNTpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MDY6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQwNzpcXHRcXG4xNDA4OlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDA5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MTA6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxMTpcXHRcXHRoZWxwXFxuMTQxMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDEzOlxcdFxcbjE0MTQ6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDE1OlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDE2OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTc6XFx0XFx0aGVscFxcbjE0MTg6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG4xNDE5OlxcdFxcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cXG4xNDIwOlxcdFxcbjE0MjE6XFx0XFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cXG4xNDIyOlxcdFxcbjE0MjM6XFx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxuMTQyNDpcXHRcXHRkZWZfYm9vbCB5XFxuMTQyNTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuMTQyNjpcXHQjIH1cXG4xNDI3OlxcdFxcbjE0Mjg6XFx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuMTQyOTpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM4OjA5LjIwOTc4ODgyNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDE2MTY3MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhIGhpZ2ggbGV2ZWwgb2YgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGBNRU1DR2AgaW4gYGluaXQvS2NvbmZpZ2AqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBjb250cm9sIGdyb3VwcywgYW5kIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byBhbnl0aGluZyBlbHNlLCBpdCBtYWtlcyBzZW5zZSB0byBnbyBiYWNrIHRvIGJhc2ljcyBhbmQgZW5zdXJlIHdlIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwga2VybmVsIGZlYXR1cmUgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgTUVNQ0dgIChvciBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXBzKSB3b3VsZCBiZSB0aGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBzdGF0dXM6IGlzIGl0IGVuYWJsZWQgYnkgZGVmYXVsdCwgY29uZGl0aW9uYWxseSBlbmFibGVkLCBvciBlbnRpcmVseSBkaXNhYmxlZD8gS25vd2luZyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIHZpdGFsIHRvIG5vdCBkdXBsaWNhdGUgZXhpc3RpbmcgZWZmb3J0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBob3cgZGVlcCBJIG1pZ2h0IG5lZWQgdG8gZ28gdG8gYWNjb21wbGlzaCB0aGUgaW50ZW5kZWQgZ29hbC4gSSBhbHNvIG5lZWQgdG8gYmUgYXdhcmUgb2YgaG93IHRoZSB2YXJpb3VzIGRlcGVuZGVuY2llcyBhbmQgZmVhdHVyZXMgYXJvdW5kIGBNRU1DR2AgYXJlIGRlc2NyaWJlZC4gVGhpcyBzdGVwIGlzIGJhc2ljLCBidXQgZm91bmRhdGlvbmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MTIuMjI1OTU5NDE5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQzMzUxNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM4OjEyLjM0MDI5OTg1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjgwMzExMzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1HTFJVIENvbmZpZ3VyYXRpb24gYW5kIEtleSBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBjbGFyaWZ5IHRoZSBNR0xSVSBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSdtIGNoZWNraW5nIGlmIHdlIHJlYWxseSBuZWVkIGBMUlVfR0VOX0VOQUJMRURgICppbiBhZGRpdGlvbiB0byogYExSVV9HRU5gLiBCZXN0IHByYWN0aWNlLCBJIHRoaW5rLCBpcyB0byBoYXZlIGBMUlVfR0VOX0VOQUJMRURgIGVuYWJsZWQgYWxvbmdzaWRlIGBMUlVfR0VOYCBhbmQgYE1FTUNHYCB0byBlbnN1cmUgTUdMUlUgaXMgYWN0aXZlIGJ5IGRlZmF1bHQuIFNvLCB0aGF0IG1lYW5zIGRpZ2dpbmcgaW50byBgQ09ORklHX01FTUNHYCwgYENPTkZJR19MUlVfR0VOYCwgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBhZ2Fpbi5cblxuTm93LCBJJ20gaWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIHN5bWJvbHMgZm9yIHRoaXMuIExldCdzIGdldCB0aGUgY29yZSBzZXQgb2Ygc3ltYm9scyB0aGF0IGFyZSBhZGRlZCwgb3IgZGlyZWN0bHkgbW9kaWZpZWQuIEkgbmVlZCB0byBzZWUgd2hhdCdzIHJlYWxseSBpbXBvcnRhbnQgaGVyZS4gSSBzZWUgdGhlc2UgYXMga2V5OlxuXG4xLiAgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgd2hpY2ggd2FzIGFkZGVkIGluIGBtbS9tZW1jb250cm9sLmNgLlxuMi4gIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gIC0gZGVmaW5lZCBpbiBgbW0vcGFnZV9jb3VudGVyLmNgIGFuZCBjcnVjaWFsbHkgY2FsbHMgYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYC4gTG9va3MgbGlrZSB0aGF0IG9uZSBoYXMgYmVlbiBtb2RpZmllZC5cbjMuICBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgLSBhbHNvIGRlZmluZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AuXG40LiAgYHNocmlua19vbmVgIHdoaWNoIGhhcyBiZWVuIG1vZGlmaWVkIGluIGBtbS92bXNjYW4uY2AgYW5kIGlzIGEgY2FsbGVyIG9mIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBgZWZmZWN0aXZlX3Byb3RlY3Rpb25gIGlzIHN0YXRpYy4gTG9va3MgbGlrZSBpdCBpcy4gQ2hlY2tpbmcgYG1tL3BhZ2VfY291bnRlci5jYCwgYW5kLCB5ZXAsIGxpbmUgMzc3OiBgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24oLi4uKWAuIFNpbmNlIGl0J3Mgc3RhdGljIGFuZCBjYWxsZWQgYnkgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAsIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBvbmUgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MTcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MTYuMDIwNjE0OTc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI0MTQ5MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oPTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2NvdW50ZXJfcmVzZXRfd2F0ZXJtYXJrKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwMy0jaWYgSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIHx8IElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ETUVNKVxcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg6MTA0OnZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXFxuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaC0xMDUtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwNy0jZWxzZVxcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg6MTA4OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IHBhZ2VfY291bnRlciAqcm9vdCxcXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTEwOS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2RtZW0uYz0zMDc9ZG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IGRtZW1fY2dyb3VwX3Bvb2xfc3RhdGUgKmxpbWl0X3Bvb2wsXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2RtZW0uYy0zMzEtXFxua2VybmVsL2Nncm91cC9kbWVtLmM6MzMyOlxcdFxcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcXG5rZXJuZWwvY2dyb3VwL2RtZW0uYy0zMzMtXFx0XFx0XFx0Y2xpbWl0LCBcXHUwMDI2Zm91bmRfcG9vbC1cXHUwMDNlY250LCB0cnVlKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjI4PXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjM5LVxcbm1tL21lbWNvbnRyb2wuYzo1MjQwOlxcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcXHUwMDI2cm9vdC1cXHUwMDNlbWVtb3J5LCBcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xcbm1tL21lbWNvbnRyb2wuYy01MjQxLX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjUzPXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNzktXFx0XFx0aWYgKGN1cilcXG5tbS9tZW1jb250cm9sLmM6NTI4MDpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXFx1MDAyNnJvb3QtXFx1MDAzZW1lbW9yeSxcXG5tbS9tZW1jb250cm9sLmMtNTI4MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZjdXItXFx1MDAzZW1lbW9yeSxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jPTM1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDQwLS8qKlxcbm1tL3BhZ2VfY291bnRlci5jOjQ0MTogKiBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24gLSBjaGVjayBpZiBtZW1vcnkgY29uc3VtcHRpb24gaXMgaW4gdGhlIG5vcm1hbCByYW5nZVxcbm1tL3BhZ2VfY291bnRlci5jLTQ0Mi0gKiBAcm9vdDogdGhlIHRvcCBhbmNlc3RvciBvZiB0aGUgc3ViLXRyZWUgYmVpbmcgY2hlY2tlZFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDUwLSAqL1xcbm1tL3BhZ2VfY291bnRlci5jOjQ1MTp2b2lkIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpyb290LFxcbm1tL3BhZ2VfY291bnRlci5jLTQ1Mi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MTguNzQ0NzgwNjkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MzEyODgyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHplcm9lZCBpbiBvbiBzb21lIHByb21pc2luZyBzeW1ib2xzIGZvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHk6IGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCwgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBhbmQgYHNocmlua19vbmVgLiBUaGVzZSBsb29rIGdvb2QgYmVjYXVzZSB0aGV5J3JlIHJlYXNvbmFibHkgc3BlY2lmaWMgYW5kIG5vdCB1c2VkICpldmVyeXdoZXJlKiBpbiB0aGUgY29kZWJhc2UuIFRoYXQncyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0YXJnZXQgc2VsZWN0aW9uLlxuXG5Ob3csIGxldCdzIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMgb2YgdGhlIHN1Z2dlc3RlZCBndWlkYW5jZS4gSSBuZWVkIHRvIGNvbmZpcm06XG5cbjEuICAqKmBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLioqIFRoaXMgaXMgdGhlIGdyZWVuIGxpZ2h0OyB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suXG4yLiAgKipUaGUgcmVhc29uaW5nIG1ha2VzIHNlbnNlLioqIEl0J3MgbWVudGlvbmluZyBtb2RpZmljYXRpb25zIHRvICplZmZlY3RpdmUgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbnMqIHdpdGhpbiBgbW0vcGFnZV9jb3VudGVyLmNgIHRvIGhhbmRsZSA2NC1iaXQgb3ZlcmZsb3cgKmFuZCogYW5jZXN0b3IgcGF0aCBwcm90ZWN0aW9uIGluIGBtZW1jb250cm9sLmNgIGFuZCBgdm1zY2FuLmNgIHJlbGF0ZWQgdG8gTUdMUlUuIFRoYXQncyBhIGp1aWN5IHRhcmdldDsgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGFjY291bnRpbmcgYXJlIGFsd2F5cyBwb3RlbnRpYWwgYXJlYXMgZm9yIHN1YnRsZSBidWdzLlxuMy4gICoqVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90LW9uLioqIEkndmUgYWxyZWFkeSBkb3VibGUtY2hlY2tlZCB0aGVtIGFib3ZlLCBidXQgc2VlaW5nIHRoZW0gYWdhaW4gcmVhc3N1cmVzIG1lLiBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCwgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAsIGBzaHJpbmtfb25lYCwgYW5kIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCBhbGwgc2VlbSBoaWdobHkgcmVsZXZhbnQuXG40LiAgKipUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb3JyZWN0LioqIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgTUVNQ0dgLCBgTFJVX0dFTmAsIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcmUgZW5hYmxlZCBkdXJpbmcgdGVzdGluZy4gVGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGxpa2VseSBjcnVjaWFsIHRvIHRyaWdnZXIgdGhlIGNvZGUgcGF0aHMgd2UncmUgaW50ZXJlc3RlZCBpbi5cblxuQWxyaWdodCwgdGhhdCBjb3ZlcnMgdGhlIGFzc2Vzc21lbnQuIExldCdzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgZnVuY3Rpb24gdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBzdGVwIGFuZCBmb3JtYWxpemUgdGhlIHRhcmdldCBzZWxlY3Rpb24gYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIzMSwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MjMuMTc2MDcyMzI5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NTEyODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25cIixcbiAgICBcInNocmlua19vbmVcIixcbiAgICBcIm1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIG1tL3BhZ2VfY291bnRlci5jIHRvIGZpeCBwb3RlbnRpYWwgNjQtYml0IGRpdmlzaW9uIG92ZXJmbG93IGluIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKCksIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIGluIG1tL21lbWNvbnRyb2wuYyBjYWxsZWQgZnJvbSBtbS92bXNjYW4uYyAoTXVsdGktR2VuIExSVSBzaHJpbmtfb25lKS4gVGhlc2UgY2hhbmdlcyBhbHRlciBtZW1jZyBwcm90ZWN0aW9uIGFuZCByZWNsYWltIGNhbGN1bGF0aW9ucyBpbiByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhcIixcbiAgICBcInBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvblwiLFxuICAgIFwic2hyaW5rX29uZVwiLFxuICAgIFwibWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gbW0vcGFnZV9jb3VudGVyLmMgdG8gZml4IHBvdGVudGlhbCA2NC1iaXQgZGl2aXNpb24gb3ZlcmZsb3cgaW4gZWZmZWN0aXZlX3Byb3RlY3Rpb24oKSwgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgaW4gbW0vbWVtY29udHJvbC5jIGNhbGxlZCBmcm9tIG1tL3Ztc2Nhbi5jIChNdWx0aS1HZW4gTFJVIHNocmlua19vbmUpLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIG1lbWNnIHByb3RlY3Rpb24gYW5kIHJlY2xhaW0gY2FsY3VsYXRpb25zIGluIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM4OjIzLjM0MjU5NDc2NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NzQ4NDQzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozODoyMy4zNDMwNzA5NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMTQ3NDM2MTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBhcml0aG1ldGljIG92ZXJmbG93ICgjREUpIGR1cmluZyBtZW1vcnkgY2dyb3VwIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIGluIG1tL3BhZ2VfY291bnRlci5jIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIHRvIGNhbGN1bGF0ZSBhbmNlc3RvciBwcm90ZWN0aW9uIHZhbHVlcyBmb3IgTUdMUlUgaW4gbW0vdm1zY2FuLmMgYW5kIG1tL21lbWNvbnRyb2wuYy5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gVGhlIGNoYW5nZXMgZGVhbCBlbnRpcmVseSB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFyaXRobWV0aWMsIGNncm91cCBoaWVyYXJjaHkgdHJhdmVyc2FsIHVuZGVyIFJDVSwgYW5kIHJlY2xhaW0gaGV1cmlzdGljcy5cXG4tIE5vIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzIChzdWNoIGFzIGNvcHlfdG9fdXNlciwgbmV0bGluayBtZXNzYWdlcywgb3IgaW9jdGwgcmV0dXJucykgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgb3IgcmVhZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGFuZCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHNjYWxhciB0eXBlcyBpbml0aWFsaXplZCBpbW1lZGlhdGVseSB1cG9uIGRlY2xhcmF0aW9uLlxcbi0gUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBjb2RlIChlLmcuIGFyaXRobWV0aWMgb3ZlcmZsb3csIGRpdmlzaW9uLWJ5LXplcm8sIFJDVS9wb2ludGVyIGRlcmVmZXJlbmNlIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMsIFVCU0FOLCBhbmQgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkIGZvciB0aGlzIHBhdGNoIHNlcmllcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMDMxMmVjOTBiMjdlZTYzNGZmNmNmNTg4YThhNDI2MjhhNTEzN2RkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwNDozNzozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGY5MzJiMWRkZGE4YzkuLmQzNTI4OTljZTUwY2UgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xODgzLDYgKzE4ODMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xSVV9HRU4pXG4rdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4rXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4rXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK31cbisjZW5kaWZcbitcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcbiBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XG4gdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDlhNjVkNzE0OGMyMjcuLjA5Y2YzMGNjZTJmNzMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTUyNDAsNiArNTI0MCw1MSBAQCB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4gXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbisvKipcbisgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoXG4rICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cClcbisgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cFxuKyAqXG4rICogV2FsayB0aGUgYW5jZXN0b3IgcGF0aCBmcm9tIEByb290IGRvd24gdG8gQG1lbWNnIGFuZCBjb21wdXRlIHRoZSBlZmZlY3RpdmVcbisgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxuKyAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLlxuKyAqL1xuK3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cbitcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDtcbitcdHN0cnVjdCBjZ3JvdXAgKmNnO1xuK1x0aW50IHJvb3RfbGV2ZWwsIGk7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIXJvb3QpXG4rXHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG4rXG4rXHRpZiAobWVtY2cgPT0gcm9vdClcbitcdFx0cmV0dXJuO1xuK1xuK1x0cm9vdF9sZXZlbCA9IHJvb3QtXHUwMDNlY3NzLmNncm91cC1cdTAwM2VsZXZlbDtcbitcdGNnID0gbWVtY2ctXHUwMDNlY3NzLmNncm91cDtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGZvciAoaSA9IHJvb3RfbGV2ZWwgKyAxOyBpIFx1MDAzYz0gY2ctXHUwMDNlbGV2ZWw7IGkrKykge1xuK1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyO1xuK1xuK1x0XHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXHUwMDNlYW5jZXN0b3JzW2ldLFxuK1x0XHRcdFx0XHRcdCAgICAgXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XG4rXHRcdGlmIChjdXIpXG4rXHRcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LFxuK1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuK1x0XHRcdFx0XHRcdFx0ICByZWN1cnNpdmVfcHJvdGVjdGlvbik7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4rXG4gc3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdGdmcF90IGdmcClcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNDUwNTQzZjRiMzE4Yi4uZWYxYTY0NzYyZDRhMiAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4rKysgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9jb3VudGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aDY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuQEAgLTM3Niw3ICszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxuIFx0ICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC5cbiBcdCAqL1xuIFx0aWYgKHNpYmxpbmdzX3Byb3RlY3RlZCBcdTAwM2UgcGFyZW50X2VmZmVjdGl2ZSlcbi1cdFx0cmV0dXJuIHByb3RlY3RlZCAqIHBhcmVudF9lZmZlY3RpdmUgLyBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4rXHRcdHJldHVybiBtdWxfdTY0X3U2NF9kaXZfdTY0KHByb3RlY3RlZCwgcGFyZW50X2VmZmVjdGl2ZSxcbitcdFx0XHRcdFx0ICAgc2libGluZ3NfcHJvdGVjdGVkKTtcbiBcbiBcdC8qXG4gXHQgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlXG5AQCAtNDE3LDEzICs0MTksMTggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcbiBcdGlmIChwYXJlbnRfZWZmZWN0aXZlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgcGFyZW50X3VzYWdlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgdXNhZ2UgXHUwMDNlIHByb3RlY3RlZCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDtcbitcdFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuK1x0XHR1bnNpZ25lZCBsb25nIHVucHJvdGVjdGVkID0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4rXHRcdHVuc2lnbmVkIGxvbmcgcGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIFxuLVx0XHR1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuLVx0XHR1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4tXHRcdHVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSB1c2FnZXMgYXJlbid0IHJlYWQgYXRvbWljYWxseSwgc28gYSBjaGlsZCBjYW4gdHJhbnNpZW50bHlcbitcdFx0ICogYXBwZWFyIHRvIHVzZSBtb3JlIHRoYW4gaXRzIHBhcmVudCwgbWFraW5nIHRoZSByYXRpbyBleGNlZWQgMVxuK1x0XHQgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LlxuK1x0XHQgKi9cbitcdFx0dW5wcm90ZWN0ZWQgPSBtaW4odW5wcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7XG4gXG4tXHRcdGVwICs9IHVuY2xhaW1lZDtcbitcdFx0ZXAgKz0gbXVsX3U2NF91NjRfZGl2X3U2NCh1bmNsYWltZWQsIHVucHJvdGVjdGVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVwO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDI0NWY2OGM3NWIyODkuLmVhZjU3NTA2YmUyZjcgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC01MTg3LDcgKzUxODcsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbiBcbi1cdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXG4rXHQvKlxuK1x0ICogRm9yIGtzd2FwZCwgbHJ1X2dlbl9hZ2Vfbm9kZSgpIGhhcyBhbHJlYWR5IGNhbGxlZFxuK1x0ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpXG4rXHQgKi9cbitcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbitcdFx0bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKE5VTEwsIG1lbWNnKTtcbitcbiBcdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpXG4gXHRcdHJldHVybiBNRU1DR19MUlVfWU9VTkc7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozODoyMy4zNDMwNzIxNzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzIzOTk2NjExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IEtNU0FOIGNvbmNlcm5zLiBGaXJzdCwgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAsIHdoaWNoIGlzIGNhbGN1bGF0aW5nIG1lbW9yeSBwcm90ZWN0aW9uIGFsb25nIHRoZSBjZ3JvdXAgaGllcmFyY2h5LCBwYXJ0aWN1bGFybHkgZm9yIHRoZSBMUlVfR0VOL01HTFJVIHJlY2xhaW0gcGF0aC4gVGhlIGNvZGUgdG91Y2hlcyBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBgbW0vbWVtY29udHJvbC5jYCwgYG1tL3BhZ2VfY291bnRlci5jYCwgYW5kIGBtbS92bXNjYW4uY2AuXG5cbkl0J3MgY2xlYXIgdGhhdCB0aGUgbWFpbiBjaGFuZ2VzIGFyZTpcblxuKiAgICoqYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgSW1wbGVtZW50YXRpb246KiogVGhpcyBpdGVyYXRlcyBmcm9tIHRoZSByb290IG1lbWNnIGRvd24gdG8gdGhlIHRhcmdldCBtZW1jZywgY2FsY3VsYXRpbmcgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgYXQgZWFjaCBsZXZlbC4gSXQncyB1c2luZyBgcmN1X3JlYWRfbG9jaygpYC9gcmN1X3JlYWRfdW5sb2NrKClgIHNvIHRoZSBhY2Nlc3NlcyBhcmUgcHJvdGVjdGVkLlxuXG4qICAgKipgcGFnZV9jb3VudGVyLmNgIEltcHJvdmVtZW50czoqKiBSZXBsYWNpbmcgaW50ZWdlciBhcml0aG1ldGljIHdpdGggYG11bF91NjRfdTY0X2Rpdl91NjQoKWAgaXMgYSBnb29kIGNhbGwgdG8gcHJldmVudCBvdmVyZmxvdyBhbmQgZGl2aWRlIGVycm9ycy4gVGhlIGFkZGl0aW9uIG9mIGB1bnByb3RlY3RlZCA9IG1pbih1bnByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtgIHNlZW1zIGRlc2lnbmVkIHRvIGVuZm9yY2UgYSBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwIGluIHByb3RlY3Rpb24gdXNhZ2UsIGF2b2lkaW5nIG92ZXItcmVwb3J0aW5nLlxuXG4qICAgKipDYWxsIGluIGB2bXNjYW4uY2A6KiogVGhlIGNhbGwgdG8gYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgd2l0aGluIGBzaHJpbmtfb25lYCAoTFJVX0dFTi9NR0xSVSkgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBmb2N1cyBvbiBtZW1vcnkgcmVjbGFpbS4gSXQgaGFwcGVucyAqYmVmb3JlKiBjaGVja2luZyBgbWVtX2Nncm91cF9iZWxvd19taW4oKWAsIHdoaWNoIGFwcGVhcnMgbG9naWNhbC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgbG9vayBhdCBpdC5cblxuKiAgICoqRGF0YSB0cmFuc2ZlciBvciBVc2VyLXNwYWNlIEV4cG9zdXJlOioqIFRoZXJlIGFyZSBubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMgY2hhbmdlZCBvciBpbnRyb2R1Y2VkLiBUaGF0J3MgZ29vZDsgd2UncmUgbm90IGRpcmVjdGx5IGV4cG9zaW5nIGludGVybmFsIHN0YXRlIHRvIHVzZXItc3BhY2UuXG5cbiogICAqKkxvY2FsIFZhcmlhYmxlIEluaXRpYWxpemF0aW9uOioqIEV4YW1pbmluZyB0aGUgbG9jYWwgdmFyaWFibGVzIGluIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgOiBgcmVjdXJzaXZlX3Byb3RlY3Rpb25gLCBgY2dgLCBgcm9vdF9sZXZlbGAsIGFuZCBgaWAgYXJlIGFsbCBpbml0aWFsaXplZCBpbW1lZGlhdGVseS4gU2ltaWxhcmx5LCBpbiBgcGFnZV9jb3VudGVyLmNgLCB0aGUgbG9jYWxzIGFyZSBhbHNvIGluaXRpYWxpemVkLiBObyBpbW1lZGlhdGUgcmVkIGZsYWdzIHRoZXJlLlxuXG4qICAgKipEYXRhIFN0cnVjdHVyZSBDaGFuZ2VzOioqIE5vIGNoYW5nZXMgaW4gZGF0YSBzdHJ1Y3R1cmUgc2l6ZXMsIHBhZGRpbmcsIG9yIGRhdGEgbGVha3MgdG8gdXNlci1zcGFjZS5cblxuKiAgICoqQ29udHJvbCBGbG93IGFuZCBCb3VuZHMgQ2hlY2tzOioqIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGFueSB3YXkgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIHRocm91Z2ggdGhlc2UgY2hhbmdlcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIHJlY2xhaW0gcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiBhbmQgYXJpdGhtZXRpYyBvdmVyZmxvdyBwcm90ZWN0aW9uLlxuXG5Pa2F5LCBsZXQncyBub3cgY29uc2lkZXIgdGhhdCB0aGVzZSBjaGFuZ2VzIGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgc29tZXdoZXJlIGVsc2UuIFdlIGhhdmUgdG8gbG9vayBhdCB0aGUgY2FsbGVycyBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJdCB3aWxsIGxpa2VseSBjb21lIGRvd24gdG8gaW5zcGVjdGluZyBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCBhbmQgYHNocmlua19vbmVgIHNwZWNpZmljYWxseS4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3Igc2NhbiB0aGUgY29kZSBtYW51YWxseSB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIGJ1dCBiYXNlZCBvbiB0aGlzIGluaXRpYWwgcGFzcywgSSdtIG5vdCBzZWVpbmcgYW55IG9idmlvdXMgS01TQU4gaXNzdWVzLiBJIHdvdWxkIG5lZWQgdG8gZnVydGhlciBpbnZlc3RpZ2F0ZSB0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHdpdGggY2VydGFpbnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjc4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MzAuNTgzMDQxNzM0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzI5ODI1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTIyOD12b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTIzOS1cXG5tbS9tZW1jb250cm9sLmM6NTI0MDpcXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXFx1MDAyNnJvb3QtXFx1MDAzZW1lbW9yeSwgXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcXG5tbS9tZW1jb250cm9sLmMtNTI0MS19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI1Mz12b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01Mjc5LVxcdFxcdGlmIChjdXIpXFxubW0vbWVtY29udHJvbC5jOjUyODA6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFxcdTAwMjZyb290LVxcdTAwM2VtZW1vcnksXFxubW0vbWVtY29udHJvbC5jLTUyODEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y3VyLVxcdTAwM2VtZW1vcnksXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYz0zNTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jLTQ0MC0vKipcXG5tbS9wYWdlX2NvdW50ZXIuYzo0NDE6ICogcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uIC0gY2hlY2sgaWYgbWVtb3J5IGNvbnN1bXB0aW9uIGlzIGluIHRoZSBub3JtYWwgcmFuZ2VcXG5tbS9wYWdlX2NvdW50ZXIuYy00NDItICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWRcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jLTQ1MC0gKi9cXG5tbS9wYWdlX2NvdW50ZXIuYzo0NTE6dm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IHBhZ2VfY291bnRlciAqcm9vdCxcXG5tbS9wYWdlX2NvdW50ZXIuYy00NTItXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA0OjM4OjMxLjE1NjAyOTI5MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTc1ODYyMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYWdhaW4uIEknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgdGhpcyBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgaXRzIG5hbWUgcG9wIHVwIGluIGEgZmV3IHJlY2VudCBkaXNjdXNzaW9ucyByZWdhcmRpbmcgbWVtb3J5IGFjY291bnRpbmcsIGFuZCBJJ3ZlIGdvdCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIG1vcmUgZGV0YWlsLiBMZXQncyBoZWFkIHN0cmFpZ2h0IHRvIGBtbS9wYWdlX2NvdW50ZXIuY2AgYW5kIGdldCBhIGxvb2sgYXQgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGhvdyB0aGUga2VybmVsIHRyYWNrcyBhbmQgcHJvdGVjdHMgbWVtb3J5IHBhZ2VzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uLCBpdHMgdXNhZ2UgYW5kIHVuZGVyc3RhbmQgaG93IGl0IGFmZmVjdHMgc3lzdGVtIGNhbGxzIGFuZCBvdGhlciBjb3JlIE9TIGZlYXR1cmVzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgaXQgaW1wbGVtZW50cyBhbmQgaG93IHRoZXNlIHJlbGF0ZWQgdG8gbWVtb3J5IHByb3RlY3Rpb24uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MzUuNzMxODk0Mjk3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfY291bnRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0MDpcXHQvKipcXG4gNDQxOlxcdCAqIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiAtIGNoZWNrIGlmIG1lbW9yeSBjb25zdW1wdGlvbiBpcyBpbiB0aGUgbm9ybWFsIHJhbmdlXFxuIDQ0MjpcXHQgKiBAcm9vdDogdGhlIHRvcCBhbmNlc3RvciBvZiB0aGUgc3ViLXRyZWUgYmVpbmcgY2hlY2tlZFxcbiA0NDM6XFx0ICogQGNvdW50ZXI6IHRoZSBwYWdlX2NvdW50ZXIgdGhlIGNvdW50ZXIgdG8gdXBkYXRlXFxuIDQ0NDpcXHQgKiBAcmVjdXJzaXZlX3Byb3RlY3Rpb246IFdoZXRoZXIgdG8gdXNlIG1lbW9yeV9yZWN1cnNpdmVwcm90IGJlaGF2aW9yLlxcbiA0NDU6XFx0ICpcXG4gNDQ2OlxcdCAqIENhbGN1bGF0ZXMgZWxvdy9lbWluIHRocmVzaG9sZHMgZm9yIGdpdmVuIHBhZ2VfY291bnRlci5cXG4gNDQ3OlxcdCAqXFxuIDQ0ODpcXHQgKiBXQVJOSU5HOiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdGF0ZWxlc3MhIEl0IGNhbiBvbmx5IGJlIHVzZWQgYXMgcGFydFxcbiA0NDk6XFx0ICogICAgICAgICAgb2YgYSB0b3AtZG93biB0cmVlIGl0ZXJhdGlvbiwgbm90IGZvciBpc29sYXRlZCBxdWVyaWVzLlxcbiA0NTA6XFx0ICovXFxuIDQ1MTpcXHR2b2lkIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpyb290LFxcbiA0NTI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuIDQ1MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgYm9vbCByZWN1cnNpdmVfcHJvdGVjdGlvbilcXG4gNDU0OlxcdHtcXG4gNDU1OlxcdFxcdHVuc2lnbmVkIGxvbmcgdXNhZ2UsIHBhcmVudF91c2FnZTtcXG4gNDU2OlxcdFxcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKnBhcmVudCA9IGNvdW50ZXItXFx1MDAzZXBhcmVudDtcXG4gNDU3OlxcdFxcbiA0NTg6XFx0XFx0LypcXG4gNDU5OlxcdFxcdCAqIEVmZmVjdGl2ZSB2YWx1ZXMgb2YgdGhlIHJlY2xhaW0gdGFyZ2V0cyBhcmUgaWdub3JlZCBzbyB0aGV5XFxuIDQ2MDpcXHRcXHQgKiBjYW4gYmUgc3RhbGUuIEhhdmUgYSBsb29rIGF0IG1lbV9jZ3JvdXBfcHJvdGVjdGlvbiBmb3IgbW9yZVxcbiA0NjE6XFx0XFx0ICogZGV0YWlscy5cXG4gNDYyOlxcdFxcdCAqIFRPRE86IGNhbGN1bGF0aW9uIHNob3VsZCBiZSBtb3JlIHJvYnVzdCBzbyB0aGF0IHdlIGRvIG5vdCBuZWVkXFxuIDQ2MzpcXHRcXHQgKiB0aGF0IHNwZWNpYWwgY2FzaW5nLlxcbiA0NjQ6XFx0XFx0ICovXFxuIDQ2NTpcXHRcXHRpZiAocm9vdCA9PSBjb3VudGVyKVxcbiA0NjY6XFx0XFx0XFx0cmV0dXJuO1xcbiA0Njc6XFx0XFxuIDQ2ODpcXHRcXHR1c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKGNvdW50ZXIpO1xcbiA0Njk6XFx0XFx0aWYgKCF1c2FnZSlcXG4gNDcwOlxcdFxcdFxcdHJldHVybjtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0XFx0aWYgKHBhcmVudCA9PSByb290KSB7XFxuIDQ3MzpcXHRcXHRcXHRjb3VudGVyLVxcdTAwM2VlbWluID0gUkVBRF9PTkNFKGNvdW50ZXItXFx1MDAzZW1pbik7XFxuIDQ3NDpcXHRcXHRcXHRjb3VudGVyLVxcdTAwM2VlbG93ID0gUkVBRF9PTkNFKGNvdW50ZXItXFx1MDAzZWxvdyk7XFxuIDQ3NTpcXHRcXHRcXHRyZXR1cm47XFxuIDQ3NjpcXHRcXHR9XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdHBhcmVudF91c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKHBhcmVudCk7XFxuIDQ3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MzUuNzMxOTg5MTE3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDMxMjcyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGNncm91cCBwcm90ZWN0aW9uIHBhdGggaXMgY2FsY3VsYXRlZC4gSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gTGV0J3Mgc2VlIGhvdyB0aGlzIHRoaW5nIGFjdHVhbGx5IHdvcmtzIHVuZGVyIHRoZSBob29kLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgaGVyZSwgcHJvYmFibHkgaW52b2x2aW5nIHRyYXZlcnNpbmcgdGhlIGNncm91cCBoaWVyYXJjaHkgYW5kIGV4YW1pbmluZyBtZW1vcnkgbGltaXRzIG9yIGFjY291bnRpbmcuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbW9yZSBjb21wbGV4IG1lbW9yeSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgd2UndmUgZGlzY3Vzc2VkIGxhdGVseS4gR290dGEgc3RheSBzaGFycCBhbmQgbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyBzdWJ0bGUgaGVyZSwgYXMgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBjb3VsZCBiZSBzaWduaWZpY2FudCBpZiBzb21ldGhpbmcgZ29lcyBhd3J5LiBSaWdodCwgYG1tL21lbWNvbnRyb2wuY2AgaXQgaXMuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6NjM1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDQ6Mzg6MzguMTM1MTE5NDM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI1MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTI1MDpcXHQgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxcbjUyNTE6XFx0ICogZW5zdXJlcyBwYXJlbnRzIGFyZSBjb21wdXRlZCBiZWZvcmUgY2hpbGRyZW4uXFxuNTI1MjpcXHQgKi9cXG41MjUzOlxcdHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbjUyNTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuNTI1NTpcXHR7XFxuNTI1NjpcXHRcXHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cXG41MjU3OlxcdFxcdFxcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgXFx1MDAyNiBDR1JQX1JPT1RfTUVNT1JZX1JFQ1VSU0lWRV9QUk9UO1xcbjUyNTg6XFx0XFx0c3RydWN0IGNncm91cCAqY2c7XFxuNTI1OTpcXHRcXHRpbnQgcm9vdF9sZXZlbCwgaTtcXG41MjYwOlxcdFxcbjUyNjE6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG41MjYyOlxcdFxcdFxcdHJldHVybjtcXG41MjYzOlxcdFxcbjUyNjQ6XFx0XFx0aWYgKCFyb290KVxcbjUyNjU6XFx0XFx0XFx0cm9vdCA9IHJvb3RfbWVtX2Nncm91cDtcXG41MjY2OlxcdFxcbjUyNjc6XFx0XFx0aWYgKG1lbWNnID09IHJvb3QpXFxuNTI2ODpcXHRcXHRcXHRyZXR1cm47XFxuNTI2OTpcXHRcXG41MjcwOlxcdFxcdHJvb3RfbGV2ZWwgPSByb290LVxcdTAwM2Vjc3MuY2dyb3VwLVxcdTAwM2VsZXZlbDtcXG41MjcxOlxcdFxcdGNnID0gbWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXA7XFxuNTI3MjpcXHRcXG41MjczOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG41Mjc0OlxcdFxcdGZvciAoaSA9IHJvb3RfbGV2ZWwgKyAxOyBpIFxcdTAwM2M9IGNnLVxcdTAwM2VsZXZlbDsgaSsrKSB7XFxuNTI3NTpcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyO1xcbjUyNzY6XFx0XFxuNTI3NzpcXHRcXHRcXHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXFx1MDAzZWFuY2VzdG9yc1tpXSxcXG41Mjc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cykpO1xcbjUyNzk6XFx0XFx0XFx0aWYgKGN1cilcXG41MjgwOlxcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcXHUwMDI2cm9vdC1cXHUwMDNlbWVtb3J5LFxcbjUyODE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y3VyLVxcdTAwM2VtZW1vcnksXFxuNTI4MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcXG41MjgzOlxcdFxcdH1cXG41Mjg0OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjUyODU6XFx0fVxcbjUyODY6XFx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuNTI4NzpcXHRcXG41Mjg4OlxcdHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG41Mjg5OlxcdFxcdFxcdFxcdGdmcF90IGdmcClcXG41MjkwOlxcdHtcXG41MjkxOlxcdFxcdGludCByZXQgPSAwO1xcbjUyOTI6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbjUyOTM6XFx0XFxuNTI5NDpcXHRcXHRvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fbWVtY2cobWVtY2csIGZvbGlvX25pZChmb2xpbykpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozODozOC4xMzU0ODg5MTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY4MTkwMDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBLTVNBTiBOb3QgTmVlZGVkIEhlcmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZXNlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBwYWdlIGNvdW50ZXIgY2FsY3VsYXRpb25zIGFuZCBwcm92aWRpbmcgYSBtb3JlIGFjY3VyYXRlIHByb3RlY3Rpb24gcGF0aCBjYWxjdWxhdGlvbiBmb3IgTUdMUlUgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5OlxuXG4xLiAgSSd2ZSBmaXhlZCBzb21lIHBvdGVudGlhbCBhcml0aG1ldGljIG92ZXJmbG93cyBpbiB0aGUgYHBhZ2VfY291bnRlcmAgY2FsY3VsYXRpb24sIGFkZHJlc3NpbmcgaXNzdWVzIGluIGBtdWxfdTY0X3U2NF9kaXZfdTY0YCBhbmQgdGhlIGBtaW4odW5wcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZClgIGxvZ2ljLiBUaGlzIGlzIGdvb2QgcHJldmVudGF0aXZlIG1haW50ZW5hbmNlLlxuMi4gIEknbSBhZGRpbmcgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpYCB0byBtb3JlIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSBlZmZlY3RpdmUgcHJvdGVjdGlvbiBsZXZlbHMgaW4gYSBoaWVyYXJjaGljYWwgbWVtb3J5IGNncm91cCBzZXR1cCwgbGV2ZXJhZ2luZyBhbiBSQ1UgcmVhZCBsb2NrIGZvciBNR0xSVS5cbjMuICBJJ3ZlIGludGVncmF0ZWQgdGhpcyBuZXcgZnVuY3Rpb24gaW50byBgc2hyaW5rX29uZSgpYCB3aGVuIG5vdCB0cmlnZ2VyZWQgYnkga3N3YXBkLlxuXG5DcnVjaWFsbHksIG5vbmUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBpbnRyb2R1Y2UgYW55IG5ldyBhdmVudWVzIGZvciB1c2VyLXNwYWNlIGRhdGEgbGVha3MsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgc2NhbGFycyBvciBwb2ludGVycy4gVGhlIHBvc3NpYmxlIHBpdGZhbGxzIGhlcmUgYXJlIHN0YW5kYXJkIGtlcm5lbCBidWcgdGVycml0b3J5OiBsb2dpYyBlcnJvcnMsIGRpdmlzaW9uIGJ5IHplcm8sIGFyaXRobWV0aWMgb3ZlcmZsb3cgdGhhdCBzbGlwcGVkIHRocm91Z2ggdGhlIGluaXRpYWwgZml4LCBsb2NraW5nL1JDVSBpc3N1ZXMsIG9yIHBvaW50ZXIgZGVyZWZlcmVuY2VzLlxuXG5UaGlzIGJyaW5ncyBtZSB0byB0aGUgS01TQU4gcXVlc3Rpb24uIEtNU0FOLCBhcyBJIGtub3csIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChvbiB0aGUgc3RhY2ssIGhlYXAsIG9yIHBhZ2UpIGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gS0FTQU4sIFVCU0FOLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRldGVjdG9ycyBhcmUgd2VsbC1lcXVpcHBlZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGludGVnZXIgb3ZlcmZsb3dzLCBhbmQgbG9ja2luZyB2aW9sYXRpb25zLlxuXG5TaW5jZSB0aGVzZSBjaGFuZ2VzICpkb24ndCogaW50cm9kdWNlIG5ldyBidWZmZXJzLCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlci1zcGFjZSwgb3IgbGVhdmUgdmFyaWFibGVzIG9yIHN0cnVjdHVyZSBmaWVsZHMgdW5pbml0aWFsaXplZCwgdGhlIHJpc2sgcHJvZmlsZSBoZXJlIGlzIGZpcm1seSBpbiB0aGUgZG9tYWluIG9mIEtBU0FOL1VCU0FOLXN0eWxlIGJ1Z3MsIG5vdCBLTVNBTi4gVGhlIHZhbHVlcyB1c2VkIGluIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgIGFuZCBgZWZmZWN0aXZlX3Byb3RlY3Rpb25gIGFyZSBpbW1lZGlhdGVseSBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoYXQgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXNuJ3QgcmVxdWlyZWQuIFdlIGNhbiBzdGljayB3aXRoIHRoZSBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBJJ2xsIGZsYWcgdGhpcyBhcyBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3NywiT3V0cHV0VG9rZW5zIjoyNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwNDozODo0NC44MTczOTQwNTZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgYXJpdGhtZXRpYyBvdmVyZmxvdyAoI0RFKSBkdXJpbmcgbWVtb3J5IGNncm91cCBlZmZlY3RpdmUgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiBpbiBtbS9wYWdlX2NvdW50ZXIuYyBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSB0byBjYWxjdWxhdGUgYW5jZXN0b3IgcHJvdGVjdGlvbiB2YWx1ZXMgZm9yIE1HTFJVIGluIG1tL3Ztc2Nhbi5jIGFuZCBtbS9tZW1jb250cm9sLmMuXFxuXFxuS01TQU4gdnMgS0FTQU4gYXBwbGljYWJpbGl0eTpcXG4tIFRoZSBjaGFuZ2VzIGRlYWwgZW50aXJlbHkgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhcml0aG1ldGljLCBjZ3JvdXAgaGllcmFyY2h5IHRyYXZlcnNhbCB1bmRlciBSQ1UsIGFuZCByZWNsYWltIGhldXJpc3RpY3MuXFxuLSBObyBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycyAoc3VjaCBhcyBjb3B5X3RvX3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIG9yIGlvY3RsIHJldHVybnMpIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbi0gTm8gdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBtZW1vcnkgaXMgYWxsb2NhdGVkIG9yIHJlYWQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBzY2FsYXIgdHlwZXMgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkgdXBvbiBkZWNsYXJhdGlvbi5cXG4tIFBvdGVudGlhbCBidWdzIGluIHRoaXMgY29kZSAoZS5nLiBhcml0aG1ldGljIG92ZXJmbG93LCBkaXZpc2lvbi1ieS16ZXJvLCBSQ1UvcG9pbnRlciBkZXJlZmVyZW5jZSBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLCBVQlNBTiwgYW5kIEtBU0FOLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZCBmb3IgdGhpcyBwYXRjaCBzZXJpZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBhcml0aG1ldGljIG92ZXJmbG93ICgjREUpIGR1cmluZyBtZW1vcnkgY2dyb3VwIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIGluIG1tL3BhZ2VfY291bnRlci5jIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIHRvIGNhbGN1bGF0ZSBhbmNlc3RvciBwcm90ZWN0aW9uIHZhbHVlcyBmb3IgTUdMUlUgaW4gbW0vdm1zY2FuLmMgYW5kIG1tL21lbWNvbnRyb2wuYy5cXG5cXG5LTVNBTiB2cyBLQVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gVGhlIGNoYW5nZXMgZGVhbCBlbnRpcmVseSB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFyaXRobWV0aWMsIGNncm91cCBoaWVyYXJjaHkgdHJhdmVyc2FsIHVuZGVyIFJDVSwgYW5kIHJlY2xhaW0gaGV1cmlzdGljcy5cXG4tIE5vIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzIChzdWNoIGFzIGNvcHlfdG9fdXNlciwgbmV0bGluayBtZXNzYWdlcywgb3IgaW9jdGwgcmV0dXJucykgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgb3IgcmVhZC4gQWxsIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgbmV3IGFuZCBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHNjYWxhciB0eXBlcyBpbml0aWFsaXplZCBpbW1lZGlhdGVseSB1cG9uIGRlY2xhcmF0aW9uLlxcbi0gUG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBjb2RlIChlLmcuIGFyaXRobWV0aWMgb3ZlcmZsb3csIGRpdmlzaW9uLWJ5LXplcm8sIFJDVS9wb2ludGVyIGRlcmVmZXJlbmNlIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMsIFVCU0FOLCBhbmQgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkIGZvciB0aGlzIHBhdGNoIHNlcmllcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowkrqgc[1] Phase: Succeeded StartedAt: 2026-09-04 04:38:56 +0000 UTC FinishedAt: 2026-09-04 04:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 04:38:56 +0000 UTC FinishedAt: 2026-09-04 04:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2] Phase: Succeeded StartedAt: 2026-09-04 04:38:56 +0000 UTC FinishedAt: 2026-09-04 08:16:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 04:38:56 +0000 UTC FinishedAt: 2026-09-04 08:16:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 04:38:56 +0000 UTC FinishedAt: 2026-09-04 04:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 04:38:56 +0000 UTC FinishedAt: 2026-09-04 04:39:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowkrqgc/series-workflowkrqgc-convert-artifact-1276613869/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 04:39:06 +0000 UTC FinishedAt: 2026-09-04 04:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 04:39:06 +0000 UTC FinishedAt: 2026-09-04 04:54:44 +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:*ddee8692-5d3c-4c8a-87b1-09af7908c998,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-workflowkrqgc/series-workflowkrqgc-convert-artifact-1276613869/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": "76915bca-7d62-4a4f-ac4a-4999e9db94aa", "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-workflowkrqgc/series-workflowkrqgc-build-action-3265003235/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 04:39:06 +0000 UTC FinishedAt: 2026-09-04 04:54:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ddee8692-5d3c-4c8a-87b1-09af7908c998,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-workflowkrqgc/series-workflowkrqgc-convert-artifact-1276613869/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": "76915bca-7d62-4a4f-ac4a-4999e9db94aa", "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-workflowkrqgc/series-workflowkrqgc-build-action-3265003235/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 04:54:44 +0000 UTC FinishedAt: 2026-09-04 04:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 04:54:44 +0000 UTC FinishedAt: 2026-09-04 04:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 04:54:44 +0000 UTC FinishedAt: 2026-09-04 04:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 04:54:44 +0000 UTC FinishedAt: 2026-09-04 04:54:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowkrqgc/series-workflowkrqgc-convert-artifact-3630185544/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 04:54:54 +0000 UTC FinishedAt: 2026-09-04 04:56:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 04:54:54 +0000 UTC FinishedAt: 2026-09-04 04:56:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*76915bca-7d62-4a4f-ac4a-4999e9db94aa,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-workflowkrqgc/series-workflowkrqgc-build-action-3265003235/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-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 04:56:53 +0000 UTC FinishedAt: 2026-09-04 04:56:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 04:56:53 +0000 UTC FinishedAt: 2026-09-04 04:56:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 04:56:53 +0000 UTC FinishedAt: 2026-09-04 05:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 04:56:53 +0000 UTC FinishedAt: 2026-09-04 05:13:01 +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:*ddee8692-5d3c-4c8a-87b1-09af7908c998,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-workflowkrqgc/series-workflowkrqgc-convert-artifact-3630185544/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": "10855413-62dc-4877-8630-7cdf0c8d105e", "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-workflowkrqgc/series-workflowkrqgc-build-action-1548316916/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 04:56:53 +0000 UTC FinishedAt: 2026-09-04 05:12:51 +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:*ddee8692-5d3c-4c8a-87b1-09af7908c998,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-workflowkrqgc/series-workflowkrqgc-convert-artifact-3630185544/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": "10855413-62dc-4877-8630-7cdf0c8d105e", "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-workflowkrqgc/series-workflowkrqgc-build-action-1548316916/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 05:13:01 +0000 UTC FinishedAt: 2026-09-04 05:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 05:13:01 +0000 UTC FinishedAt: 2026-09-04 05:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 05:13:01 +0000 UTC FinishedAt: 2026-09-04 05:15:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 05:13:01 +0000 UTC FinishedAt: 2026-09-04 05:14:50 +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:*10855413-62dc-4877-8630-7cdf0c8d105e,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-workflowkrqgc/series-workflowkrqgc-build-action-1548316916/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-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 05:15:00 +0000 UTC FinishedAt: 2026-09-04 08:16:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 05:15:00 +0000 UTC FinishedAt: 2026-09-04 08:16:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*76915bca-7d62-4a4f-ac4a-4999e9db94aa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*10855413-62dc-4877-8630-7cdf0c8d105e,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-workflowkrqgc/series-workflowkrqgc-build-action-3265003235/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-workflowkrqgc/series-workflowkrqgc-build-action-1548316916/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 05:15:00 +0000 UTC FinishedAt: 2026-09-04 05:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 05:15:00 +0000 UTC FinishedAt: 2026-09-04 05:15:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkrqgc/series-workflowkrqgc-convert-artifact-4205909249/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 05:15:00 +0000 UTC FinishedAt: 2026-09-04 05:15:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 05:15:00 +0000 UTC FinishedAt: 2026-09-04 05:15:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 05:15:00 +0000 UTC FinishedAt: 2026-09-04 05:15:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 05:15:10 +0000 UTC FinishedAt: 2026-09-04 08:16:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkrqgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","shrink_one","mem_cgroup_calculate_protection"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bd05e5398d6e93dd6e363680cdb0f9c8a85e28b8","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"b9ca79bc-1f02-4452-b587-0631dc90bc5e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 05:15:10 +0000 UTC FinishedAt: 2026-09-04 08:16:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*76915bca-7d62-4a4f-ac4a-4999e9db94aa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*10855413-62dc-4877-8630-7cdf0c8d105e,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-workflowkrqgc/series-workflowkrqgc-build-action-3265003235/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-workflowkrqgc/series-workflowkrqgc-build-action-1548316916/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-workflowkrqgc/series-workflowkrqgc-convert-artifact-4205909249/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,}