Name: series-workflowscxfh Phase: Succeeded StartedAt: 2026-08-25 05:34:37 +0000 UTC FinishedAt: 2026-08-25 06:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[0] Phase: Succeeded StartedAt: 2026-08-25 05:34:37 +0000 UTC FinishedAt: 2026-08-25 06:13:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 05:34:37 +0000 UTC FinishedAt: 2026-08-25 06:13:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9e8581a090c02ffa35e8439b90b024956a735de9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CLASS_EXT", "CGROUP_SCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9e8581a090c02ffa35e8439b90b024956a735de9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CLASS_EXT", "CGROUP_SCHED" ], "series_id": "04ecb5b3-1610-40b1-8f47-dcc7de16534a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "scx_group_set_weight", "scx_group_set_idle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3hfZ3JvdXBfc2V0X3dlaWdodCYjMzQ7LAogICAgJiMzNDtzY3hfZ3JvdXBfc2V0X2lkbGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNjaGVkX2V4dCAoc2N4KSBzdWJzeXN0ZW0gdG8gYWxsb3cgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzIHRvIGJlIHNsZWVwYWJsZS4gSXQgZG9lcyB0aGlzIGJ5IGFkZGluZyB0aGVtIHRvIHRoZSBhbGxvd2VkIGxpc3QgaW4gYGJwZl9zY3hfY2hlY2tfbWVtYmVyYCBhbmQgZGVmaW5pbmcgY29tcGF0aWJpbGl0eSBtYXJrZXJzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gQlBGIHZlcmlmaWVyIGNoZWNrcyBmb3Igc2xlZXBhYmxlIGNhbGxiYWNrcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGNvbnN0cmFpbnRzIGZvciB0aGUgc2NoZWRfZXh0IHN1YnN5c3RlbSwgYWxsb3dpbmcgdGhlIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxiYWNrcyB0byBiZSBpbXBsZW1lbnRlZCBhcyBzbGVlcGFibGUgQlBGIHByb2dyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IGFuZCBjb25zdHJhaW50cyBvZiB0aGVzZSBjYWxsYmFja3MsIHdoaWNoIGFyZSB0cmlnZ2VyZWQgdmlhIGNncm91cCBhdHRyaWJ1dGUgd3JpdGVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgZW50cnkgcG9pbnRzIHRoYXQgaW52b2tlIHRoZXNlIGNhbGxiYWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY0MTFjZTI4ZTMzYWQ5MDE2NWIwNzJhNjYwNTcwN2VjODc4YjVjOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwNjoxMToyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuaW5kZXggYjY0NjcxMWE0NWZlZS4uNTNiODg4ZjVhNmM1MSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbkBAIC04MDc5LDcgJiM0Mzs4MDc5LDkgQEAgc3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfaW5pdCk6XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfZXhpdCk6XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfcHJlcF9tb3ZlKTpcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X3dlaWdodCk6XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCk6XG4mIzQzO1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKTpcbiAjZW5kaWZcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vbmxpbmUpOlxuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY3B1X29mZmxpbmUpOlxuQEAgLTExMDU1LDMgJiM0MzsxMTA1NywxOSBAQCBfX2luaXRjYWxsKHNjeF9pbml0KTtcbiAjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxuIERFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X2JhbmR3aWR0aF9tYXlfc2xlZXApO1xuICNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXRcbiYjNDM7ICogb3BzLmNncm91cF9zZXRfd2VpZ2h0KCkgbWF5IGJlIGltcGxlbWVudGVkIGFzIGEgc2xlZXBhYmxlIGNhbGxiYWNrLlxuJiM0MzsgKi9cbiYjNDM7I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbiYjNDM7REVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcCk7XG4mIzQzOyNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcDogYWR2ZXJ0aXNlcyB0aGF0XG4mIzQzOyAqIG9wcy5jZ3JvdXBfc2V0X2lkbGUoKSBtYXkgYmUgaW1wbGVtZW50ZWQgYXMgYSBzbGVlcGFibGUgY2FsbGJhY2suXG4mIzQzOyAqL1xuJiM0MzsjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxuJiM0MztERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcCk7XG4mIzQzOyNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaCBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuaW5kZXggNTNlMTM2YTQ3OTI0ZC4uZjgxZDAzZGUyZDNjNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oXG5AQCAtNzM2LDcgJiM0Mzs3MzYsNyBAQCBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XG4gXHQgKiBAY2dycDogY2dyb3VwIHdob3NlIHdlaWdodCBpcyBiZWluZyB1cGRhdGVkXG4gXHQgKiBAd2VpZ2h0OiBuZXcgd2VpZ2h0IFsxLi4xMDAwMF1cbiBcdCAqXG4tXHQgKiBVcGRhdGUgQGNncnAmIzM5O3Mgd2VpZ2h0IHRvIEB3ZWlnaHQuXG4mIzQzO1x0ICogVXBkYXRlIEBjZ3JwJiMzOTtzIHdlaWdodCB0byBAd2VpZ2h0LiBUaGlzIG9wZXJhdGlvbiBtYXkgYmxvY2suXG4gXHQgKlxuIFx0ICogS25vYnMgb2YgYSBjZ3JvdXAgYmVsb25nIHRvIHRoZSBwYXJlbnQsIHNvIHRoZSBzZXRfKiBvcHMgYXJlXG4gXHQgKiBkZWxpdmVyZWQgdG8gQGNncnAmIzM5O3MgcGFyZW50JiMzOTtzIHNjaGVkLiBUaGF0IHNjaGVkIG1heSBuZXZlciBoYXZlIHNlZW5cbkBAIC03NzMsOSAmIzQzOzc3MywxMCBAQCBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XG4gXHQgKiBAY2dycDogY2dyb3VwIHdob3NlIGlkbGUgc3RhdGUgaXMgYmVpbmcgdXBkYXRlZFxuIFx0ICogQGlkbGU6IHdoZXRoZXIgdGhlIGNncm91cCBpcyBlbnRlcmluZyBvciBleGl0aW5nIGlkbGUgc3RhdGVcbiBcdCAqXG4tXHQgKiBVcGRhdGUgQGNncnAmIzM5O3MgaWRsZSBzdGF0ZSB0byBAaWRsZS4gVGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW5cbi1cdCAqIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmQgbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGVcbi1cdCAqIEJQRiBzY2hlZHVsZXIgdG8gYWRqdXN0IGl0cyBiZWhhdmlvciBhY2NvcmRpbmdseS5cbiYjNDM7XHQgKiBVcGRhdGUgQGNncnAmIzM5O3MgaWRsZSBzdGF0ZSB0byBAaWRsZS4gVGhpcyBvcGVyYXRpb24gbWF5IGJsb2NrLiBUaGlzXG4mIzQzO1x0ICogY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmRcbiYjNDM7XHQgKiBub24taWRsZSBzdGF0ZXMsIGFsbG93aW5nIHRoZSBCUEYgc2NoZWR1bGVyIHRvIGFkanVzdCBpdHMgYmVoYXZpb3JcbiYjNDM7XHQgKiBhY2NvcmRpbmdseS5cbiBcdCAqXG4gXHQgKiBEZWxpdmVyeSBmb2xsb3dzIHRoZSBzYW1lIHJ1bGUgYXMgY2dyb3VwX3NldF93ZWlnaHQoKS5cbiBcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X2dyb3VwX3NldF93ZWlnaHQmIzM0OywKICAgICYjMzQ7c2N4X2dyb3VwX3NldF9pZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgY29uc3RyYWludHMgZm9yIHRoZSBzY2hlZF9leHQgc3Vic3lzdGVtLCBhbGxvd2luZyB0aGUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzIHRvIGJlIGltcGxlbWVudGVkIGFzIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgYW5kIGNvbnN0cmFpbnRzIG9mIHRoZXNlIGNhbGxiYWNrcywgd2hpY2ggYXJlIHRyaWdnZXJlZCB2aWEgY2dyb3VwIGF0dHJpYnV0ZSB3cml0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBpbnZva2UgdGhlc2UgY2FsbGJhY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjQxMWNlMjhlMzNhZDkwMTY1YjA3MmE2NjA1NzA3ZWM4NzhiNWM5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDA2OjExOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMKaW5kZXggYjY0NjcxMWE0NWZlZS4uNTNiODg4ZjVhNmM1MSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2V4dC9leHQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jCkBAIC04MDc5LDcgJiM0Mzs4MDc5LDkgQEAgc3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2luaXQpOgogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9leGl0KToKIAljYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfcHJlcF9tb3ZlKToKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF93ZWlnaHQpOgogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfYmFuZHdpZHRoKToKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKToKICNlbmRpZgogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vbmxpbmUpOgogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vZmZsaW5lKToKQEAgLTExMDU1LDMgJiM0MzsxMTA1NywxOSBAQCBfX2luaXRjYWxsKHNjeF9pbml0KTsKICNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVECiBERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9iYW5kd2lkdGhfbWF5X3NsZWVwKTsKICNlbmRpZgkvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXA6IGFkdmVydGlzZXMgdGhhdAomIzQzOyAqIG9wcy5jZ3JvdXBfc2V0X3dlaWdodCgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay4KJiM0MzsgKi8KJiM0MzsjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRAomIzQzO0RFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXApOwomIzQzOyNlbmRpZgkvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXQKJiM0MzsgKiBvcHMuY2dyb3VwX3NldF9pZGxlKCkgbWF5IGJlIGltcGxlbWVudGVkIGFzIGEgc2xlZXBhYmxlIGNhbGxiYWNrLgomIzQzOyAqLwomIzQzOyNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVECiYjNDM7REVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfaWRsZV9tYXlfc2xlZXApOwomIzQzOyNlbmRpZgkvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmggYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgKaW5kZXggNTNlMTM2YTQ3OTI0ZC4uZjgxZDAzZGUyZDNjNyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaApAQCAtNzM2LDcgJiM0Mzs3MzYsNyBAQCBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7CiAJICogQGNncnA6IGNncm91cCB3aG9zZSB3ZWlnaHQgaXMgYmVpbmcgdXBkYXRlZAogCSAqIEB3ZWlnaHQ6IG5ldyB3ZWlnaHQgWzEuLjEwMDAwXQogCSAqCi0JICogVXBkYXRlIEBjZ3JwJiMzOTtzIHdlaWdodCB0byBAd2VpZ2h0LgomIzQzOwkgKiBVcGRhdGUgQGNncnAmIzM5O3Mgd2VpZ2h0IHRvIEB3ZWlnaHQuIFRoaXMgb3BlcmF0aW9uIG1heSBibG9jay4KIAkgKgogCSAqIEtub2JzIG9mIGEgY2dyb3VwIGJlbG9uZyB0byB0aGUgcGFyZW50LCBzbyB0aGUgc2V0Xyogb3BzIGFyZQogCSAqIGRlbGl2ZXJlZCB0byBAY2dycCYjMzk7cyBwYXJlbnQmIzM5O3Mgc2NoZWQuIFRoYXQgc2NoZWQgbWF5IG5ldmVyIGhhdmUgc2VlbgpAQCAtNzczLDkgJiM0Mzs3NzMsMTAgQEAgc3RydWN0IHNjaGVkX2V4dF9vcHMgewogCSAqIEBjZ3JwOiBjZ3JvdXAgd2hvc2UgaWRsZSBzdGF0ZSBpcyBiZWluZyB1cGRhdGVkCiAJICogQGlkbGU6IHdoZXRoZXIgdGhlIGNncm91cCBpcyBlbnRlcmluZyBvciBleGl0aW5nIGlkbGUgc3RhdGUKIAkgKgotCSAqIFVwZGF0ZSBAY2dycCYjMzk7cyBpZGxlIHN0YXRlIHRvIEBpZGxlLiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgd2hlbgotCSAqIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmQgbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGUKLQkgKiBCUEYgc2NoZWR1bGVyIHRvIGFkanVzdCBpdHMgYmVoYXZpb3IgYWNjb3JkaW5nbHkuCiYjNDM7CSAqIFVwZGF0ZSBAY2dycCYjMzk7cyBpZGxlIHN0YXRlIHRvIEBpZGxlLiBUaGlzIG9wZXJhdGlvbiBtYXkgYmxvY2suIFRoaXMKJiM0MzsJICogY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmQKJiM0MzsJICogbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGUgQlBGIHNjaGVkdWxlciB0byBhZGp1c3QgaXRzIGJlaGF2aW9yCiYjNDM7CSAqIGFjY29yZGluZ2x5LgogCSAqCiAJICogRGVsaXZlcnkgZm9sbG93cyB0aGUgc2FtZSBydWxlIGFzIGNncm91cF9zZXRfd2VpZ2h0KCkuCiAJICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2NoZWRfZXh0IEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIGFuZCBga2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0JiMzOTtzIGludHJvZHVjaW5nIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIHRvIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgd2l0aGluIGBleHQuY2AuIFRoZW4gdGhlcmUgYXJlIHRoZXNlIGBERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVJgIG1hY3JvcyBmb3IgYGNncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwYC4gIEhtbSwganVzdCBhZGRpbmcgQlBGIHN0cnVjdCBvcHMgbWVtYmVycyBhbmQgY29tcGF0aWJpbGl0eSBtYXJrZXJzLCBub3RoaW5nIGVhcnRoLXNoYXR0ZXJpbmcgeWV0LiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZz8KClRoaXMgY2hhbmdlIGVzc2VudGlhbGx5IGVuYWJsZXMgQlBGLWJhc2VkIHNjaGVkX2V4dCBzY2hlZHVsZXJzIHRvIGltcGxlbWVudCBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBhcyBjYWxsYmFja3MgdGhhdCAqY2FuKiBzbGVlcC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcy4gTm93LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGF0IGBicGZfc2N4X2NoZWNrX21lbWJlcmAgaXMgcmVhbGx5IGRvaW5nLiAgSSB0aGluayBpdCYjMzk7cyB1c2VkIHRvIGRldGVybWluZSBpZiBhIG1lbWJlciBvZiBgc3RydWN0IHNjaGVkX2V4dF9vcHNgIGlzIHBlcm1pdHRlZCB0byBzbGVlcCwgb3IgYXQgbGVhc3QgYSBjaGVjayBmb3IgdGhhdC4gSSBiZXR0ZXIgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgaGVyZS4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2N4X2NoZWNrX21lbWJlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTc5OTg9c3RhdGljIGludCBicGZfc2N4X2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNjktXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwNzA6c3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNzEtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODMwMj1zdGF0aWMgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIGJwZl9zY2hlZF9leHRfb3BzID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODMwNS1cdC51bnJlZyA9IGJwZl9zY3hfdW5yZWcsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzMDY6XHQuY2hlY2tfbWVtYmVyID0gYnBmX3NjeF9jaGVja19tZW1iZXIsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzMDctXHQuaW5pdF9tZW1iZXIgPSBicGZfc2N4X2luaXRfbWVtYmVyLFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODM3ND1zdGF0aWMgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIGJwZl9zY2hlZF9leHRfb3BzX2NpZCA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNzctXHQudW5yZWcgPSBicGZfc2N4X3VucmVnLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4Mzc4Olx0LmNoZWNrX21lbWJlciA9IGJwZl9zY3hfY2hlY2tfbWVtYmVyLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04Mzc5LVx0LmluaXRfbWVtYmVyID0gYnBmX3NjeF9pbml0X21lbWJlcixcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODkzPXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDg5OC1cdCAqIHNjaGVkX2V4dF9vcHNfY2lkIG1pcnJvcnMgc2NoZWRfZXh0X29wcyB1cCB0byBhbmQgaW5jbHVkaW5nIEBwcml2Llxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDg5OTpcdCAqIEJvdGggYnBmX3NjeF9pbml0X21lbWJlcigpIGFuZCBicGZfc2N4X2NoZWNrX21lbWJlcigpIHVzZSBvZmZzZXRzXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTAwLVx0ICogZnJvbSBzdHJ1Y3Qgc2NoZWRfZXh0X29wczsgc2NoZWRfZXh0X29wc19jaWQgcmVsaWVzIG9uIHRob3NlIG9mZnNldHNcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzE5PXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTAyMy0gKiBzaGFyZWQgZmllbGQgb2Zmc2V0cyB3b3JrIGZvciBib3RoIHN0cnVjdCB0eXBlcyBpbiBicGZfc2N4X2luaXRfbWVtYmVyKClcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMDI0OiAqIGFuZCBicGZfc2N4X2NoZWNrX21lbWJlcigpLiBUaGUgZGVwcmVjYXRlZCBjcHVfYWNxdWlyZS9jcHVfcmVsZWFzZVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwMjUtICogY2FsbGJhY2tzIGF0IHRoZSB0YWlsIG9mIHNjaGVkX2V4dF9vcHMgYXJlIG9taXR0ZWQgaGVyZSBlbnRpcmVseS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBicGZfc2N4X2NoZWNrX21lbWJlcmAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgYnBmX3NjeF9jaGVja19tZW1iZXJgIHdpdGhpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBlQlBGIGNoZWNrcyByZWxhdGVkIHRvIHNjaGVkdWxpbmcgY29udGV4dCBleHRlbnNpb25zLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHByb2JhYmx5IHZhbGlkYXRpbmcgc29tZSB1c2VyLXByb3ZpZGVkIHN0cnVjdHVyZSBtZW1iZXJzIGFnYWluc3QgYWxsb3dlZCB2YWx1ZXMgb3IgYWdhaW5zdCBzb21lIGludGVybmFsIHN0YXRlLCBtYXliZSBjaGVja2luZyBhbGlnbm1lbnQgb3Igc2l6ZSBjb25zdHJhaW50cyBiZWZvcmUgdGhlIHNjaGVkdWxlciBkb2VzIHNvbWV0aGluZyB3aXRoIHRoZW0uIEdpdmVuIHRoZSBuYW1lLCBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBpbiBtYWludGFpbmluZyBzZWN1cml0eSBhbmQgc3RhYmlsaXR5IHdoZW4gZGVhbGluZyB3aXRoIEJQRiBwcm9ncmFtcyB0aGF0IGludGVyYWN0IHdpdGggdGhlIHNjaGVkdWxlciBleHRlbnNpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgYXRvbWljaXR5IGNvbmNlcm5zLCBlc3BlY2lhbGx5IGlmIHRoZSBjaGVja3MgaW52b2x2ZSBzaGFyZWQgZGF0YSBvciBpZiB0aGV5IGFyZSBwZXJmb3JtaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhcyB0aG9zZSBhcmUgYWx3YXlzIGhvdHNwb3RzIGZvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgZWRnZSBjYXNlcywgYW5kIHdoYXQgZXJyb3ItaGFuZGxpbmcgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZXh0L2V4dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs4MDY1Olx0XHR9XG44MDY2Olx0XG44MDY3Olx0XHRyZXR1cm4gMDtcbjgwNjg6XHR9XG44MDY5Olx0XG44MDcwOlx0c3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG44MDcxOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLFxuODA3MjpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuODA3MzpcdHtcbjgwNzQ6XHRcdHUzMiBtb2ZmID0gX19idGZfbWVtYmVyX2JpdF9vZmZzZXQodCwgbWVtYmVyKSAvIDg7XG44MDc1Olx0XG44MDc2Olx0XHRzd2l0Y2ggKG1vZmYpIHtcbjgwNzc6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXRfdGFzayk6XG44MDc4Olx0I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbjgwNzk6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KTpcbjgwODA6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9leGl0KTpcbjgwODE6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9wcmVwX21vdmUpOlxuODA4MjpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF93ZWlnaHQpOlxuODA4MzpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9iYW5kd2lkdGgpOlxuODA4NDpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKTpcbjgwODU6XHQjZW5kaWZcbjgwODY6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vbmxpbmUpOlxuODA4NzpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY3B1X29mZmxpbmUpOlxuODA4ODpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgaW5pdF9jaWRzKTpcbjgwODk6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXQpOlxuODA5MDpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgZXhpdCk6XG44MDkxOlx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBzdWJfYXR0YWNoKTpcbjgwOTI6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIHN1Yl9kZXRhY2gpOlxuODA5MzpcdFx0XHRicmVhaztcbjgwOTQ6XHRcdGRlZmF1bHQ6XG44MDk1Olx0XHRcdGlmIChwcm9nLVx1MDAzZXNsZWVwYWJsZSlcbjgwOTY6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjgwOTc6XHRcdH1cbjgwOTg6XHRcbjgwOTk6XHQjaWZkZWYgQ09ORklHX0VYVF9TVUJfU0NIRURcbjgxMDA6XHRcdC8qXG44MTAxOlx0XHQgKiBFbmFibGUgcHJpdmF0ZSBzdGFjayBmb3Igb3BlcmF0aW9ucyB0aGF0IGNhbiBuZXN0IGFsb25nIHRoZVxuODEwMjpcdFx0ICogaGllcmFyY2h5LlxuODEwMzpcdFx0ICpcbjgxMDQ6XHRcdCAqIFhYWCAtIElkZWFsbHksIHdlIHNob3VsZCBvbmx5IGRvIHRoaXMgZm9yIHNjaGVkcyB0aGF0IGFsbG93XG44MTA1Olx0XHQgKiBzdWItc2NoZWRzIGFuZCBzdWItc2NoZWRzIHRoZW1zZWx2ZXMgYnV0IEkgZG9uJiMzOTt0IGtub3cgaG93IHRvIGFjY2Vzc1xuODEwNjpcdFx0ICogc3RydWN0X29wcyBmcm9tIGhlcmUuXG44MTA3Olx0XHQgKi9cbjgxMDg6XHRcdHN3aXRjaCAobW9mZikge1xuODEwOTpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgZGlzcGF0Y2gpOlxuODExMDpcdFx0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2Vwcml2X3N0YWNrX3JlcXVlc3RlZCA9IHRydWU7XG44MTExOlx0XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZXJlY3Vyc2lvbl9kZXRlY3RlZCA9IHNjeF9wc3RhY2tfcmVjdXJzaW9uX29uX2Rpc3BhdGNoO1xuODExMjpcdFx0XHRicmVhaztcbjgxMTM6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIHN1Yl9jYXBzX3VwZGF0ZWQpOlxuODExNDpcdFx0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2Vwcml2X3N0YWNrX3JlcXVlc3RlZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE3NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBob3cgQlBGIGludGVyYWN0cyB3aXRoIGNlcnRhaW4gY2dyb3VwIGNhbGxiYWNrcy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBsZXZlcmFnaW5nIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgdG8gZW5hYmxlIHNsZWVwYWJsZSBiZWhhdmlvciBpbiB0aGUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgc2hpZnQgYmVjYXVzZSBpdCBhbGxvd3MgQlBGIHByb2dyYW1zIHRvIHV0aWxpemUgdGhlc2UgZm9ybWVybHkgbm9uLXNsZWVwYWJsZSBmdW5jdGlvbnMuCgpUaGUgcGF0Y2ggaW5jbHVkZXMgdGhlIG5lY2Vzc2FyeSBgREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSYCBtYWNyb3M6IGBjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXBgIGFuZCBgY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcGAsIHdoaWNoIGFyZSBpbXBvcnRhbnQgZm9yIGNvbXBhdGliaWxpdHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZnV6emFibGU/JiMzNDsgVGhlIGFuc3dlciBpcyBkZWZpbml0ZWx5IHllcywgYmVjYXVzZSBpdCBhbHRlcnMgdGhlIEJQRiB2ZXJpZmllciBhbmQgcG90ZW50aWFsbHkgdGhlIHN0cnVjdF9vcHMgY29uc3RyYWludHMgcmVsYXRlZCB0byBgc2NoZWRfZXh0YC4gVGhhdCBvcGVucyB0aGUgZG9vciB0byBuZXcgYXR0YWNrIHN1cmZhY2VzLgoKSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gYGJwZl9zY3hfY2hlY2tfbWVtYmVyYCBpcyBhIGtleSBmdW5jdGlvbiB0byBleGFtaW5lLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMuIEkgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgdGhlIG9ubHkgcmVsZXZhbnQgb25lLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgZnVuY3Rpb24gY2FsbHMgYW5kIHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9mIHRoZXNlIGNhbGxiYWNrczsgdGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIGNyaXRpY2FsIHBvaW50cy4gV2hlcmUgYXJlIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIGFjdHVhbGx5IGludm9rZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgd2lsbCBiZSBjcnVjaWFsIGZvciBlZmZlY3RpdmUgZnV6emluZyBzdHJhdGVneSBkZXZlbG9wbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfc2V0X3dlaWdodCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3Q9MTE0MT13aWxsIGJlIHJlZmVycmVkIHRvLiBBbGwgdGltZSBkdXJhdGlvbnMgYXJlIGluIG1pY3Jvc2Vjb25kcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTE3My1cdFRoaXMgZmlsZSBhZmZlY3RzIG9ubHkgcHJvY2Vzc2VzIHVuZGVyIHRoZSBmYWlyLWNsYXNzIHNjaGVkdWxlciBhbmQgYSBCUEZcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdDoxMTc0Olx0c2NoZWR1bGVyIHdpdGggdGhlIGBgY2dyb3VwX3NldF93ZWlnaHRgYCBjYWxsYmFjayBkZXBlbmRpbmcgb24gd2hhdCB0aGVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xMTc1LVx0Y2FsbGJhY2sgYWN0dWFsbHkgZG9lcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTE4OS1cdFRoaXMgZmlsZSBhZmZlY3RzIG9ubHkgcHJvY2Vzc2VzIHVuZGVyIHRoZSBmYWlyLWNsYXNzIHNjaGVkdWxlciBhbmQgYSBCUEZcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdDoxMTkwOlx0c2NoZWR1bGVyIHdpdGggdGhlIGBgY2dyb3VwX3NldF93ZWlnaHRgYCBjYWxsYmFjayBkZXBlbmRpbmcgb24gd2hhdCB0aGVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xMTkxLVx0Y2FsbGJhY2sgYWN0dWFsbHkgZG9lcy5cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5MTA9dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgd2VpZ2h0KVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkxNi1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDkxNzpcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfd2VpZ2h0KSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkxOC1cdCAgICB0Zy1cdTAwM2VzY3gud2VpZ2h0ICE9IHdlaWdodClcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDkxOTpcdFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X3dlaWdodCwgTlVMTCwgdGdfY2dycCh0ZyksIHdlaWdodCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MjAtXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDcwPXN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA4MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9wcmVwX21vdmUpOlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDgyOlx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF93ZWlnaHQpOlxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9iYW5kd2lkdGgpOlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI0Mz1zdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19jZ3JvdXBfY2FuY2VsX21vdmUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgY2dyb3VwICpmcm9tLCBzdHJ1Y3QgY2dyb3VwICp0bykge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI0NDpzdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCB1MzIgd2VpZ2h0KSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjQ1LXN0YXRpYyB2b2lkIHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKSB7fVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI1OT1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHMgX19icGZfb3BzX3NjaGVkX2V4dF9vcHMgPSB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04Mjg1LVx0LmNncm91cF9jYW5jZWxfbW92ZVx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfY2FuY2VsX21vdmUsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyODY6XHQuY2dyb3VwX3NldF93ZWlnaHRcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF93ZWlnaHQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODctXHQuY2dyb3VwX3NldF9iYW5kd2lkdGhcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9iYW5kd2lkdGgsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MzI2PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wc19jaWQgX19icGZfb3BzX3NjaGVkX2V4dF9vcHNfY2lkID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM1MC1cdC5jcHVjdGxfY2FuY2VsX21vdmVcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2NhbmNlbF9tb3ZlLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MzUxOlx0LmNwdWN0bF9zZXRfd2VpZ2h0XHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfd2VpZ2h0LFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzUyLVx0LmNwdWN0bF9zZXRfYmFuZHdpZHRoXHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfYmFuZHdpZHRoLFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA3Nzg9c3RhdGljIGNvbnN0IHUzMiBzY3hfa2ZfYWxsb3dfZmxhZ3NbXSA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzg5LVx0W1NDWF9PUF9JRFgoY2dyb3VwX2NhbmNlbF9tb3ZlKV0gPSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwNzkwOlx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF93ZWlnaHQpXVx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzkxLVx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF9iYW5kd2lkdGgpXSA9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODkzPXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1NC1cdENJRF9PRkZTRVRfTUFUQ0goY2dyb3VwX2NhbmNlbF9tb3ZlLCBjcHVjdGxfY2FuY2VsX21vdmUpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk1NTpcdENJRF9PRkZTRVRfTUFUQ0goY2dyb3VwX3NldF93ZWlnaHQsIGNwdWN0bF9zZXRfd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTYtXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9zZXRfYmFuZHdpZHRoLCBjcHVjdGxfc2V0X2JhbmR3aWR0aCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMTA1OD1ERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9iYW5kd2lkdGhfbWF5X3NsZWVwKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDYxLS8qXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDYyOiAqIHNjeF9jb21wYXRfbWFya2VyX2Nncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcDogYWR2ZXJ0aXNlcyB0aGF0XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDYzOiAqIG9wcy5jZ3JvdXBfc2V0X3dlaWdodCgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay5cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNjQtICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDY1LSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDY2OkRFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXApO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA2Ny0jZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzE5PXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzM0LVx0LyoqXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzM1Olx0ICogQGNncm91cF9zZXRfd2VpZ2h0OiBBIGNncm91cCYjMzk7cyB3ZWlnaHQgaXMgYmVpbmcgY2hhbmdlZFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTczNi1cdCAqIEBjZ3JwOiBjZ3JvdXAgd2hvc2Ugd2VpZ2h0IGlzIGJlaW5nIHVwZGF0ZWRcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzQ1LVx0ICovXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzQ2Olx0dm9pZCAoKmNncm91cF9zZXRfd2VpZ2h0KShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCB1MzIgd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03NDctXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc2NS1cdCAqXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzY2Olx0ICogRGVsaXZlcnkgZm9sbG93cyB0aGUgc2FtZSBydWxlIGFzIGNncm91cF9zZXRfd2VpZ2h0KCkuXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzY3LVx0ICovXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc4MC1cdCAqXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzgxOlx0ICogRGVsaXZlcnkgZm9sbG93cyB0aGUgc2FtZSBydWxlIGFzIGNncm91cF9zZXRfd2VpZ2h0KCkuXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzgyLVx0ICovXG4tLVxudG9vbHMvc2NoZWRfZXh0L3NjeF9mbGF0Y2cuYnBmLmM9NTgwPXZvaWQgQlBGX1NUUlVDVF9PUFMoZmNnX3F1aWVzY2VudCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgZGVxX2ZsYWdzKVxuLS1cbnRvb2xzL3NjaGVkX2V4dC9zY3hfZmxhdGNnLmJwZi5jLTU4OC1cbnRvb2xzL3NjaGVkX2V4dC9zY3hfZmxhdGNnLmJwZi5jOjU4OTp2b2lkIEJQRl9TVFJVQ1RfT1BTKGZjZ19jZ3JvdXBfc2V0X3dlaWdodCwgc3RydWN0IGNncm91cCAqY2dycCwgdTMyIHdlaWdodClcbnRvb2xzL3NjaGVkX2V4dC9zY3hfZmxhdGNnLmJwZi5jLTU5MC17XG4tLVxudG9vbHMvc2NoZWRfZXh0L3NjeF9mbGF0Y2cuYnBmLmM9OTYyPVNDWF9PUFNfREVGSU5FKGZsYXRjZ19vcHMsXG4tLVxudG9vbHMvc2NoZWRfZXh0L3NjeF9mbGF0Y2cuYnBmLmMtOTcwLVx0ICAgICAgIC5pbml0X3Rhc2tcdFx0PSAodm9pZCAqKWZjZ19pbml0X3Rhc2ssXG50b29scy9zY2hlZF9leHQvc2N4X2ZsYXRjZy5icGYuYzo5NzE6XHQgICAgICAgLmNncm91cF9zZXRfd2VpZ2h0XHQ9ICh2b2lkICopZmNnX2Nncm91cF9zZXRfd2VpZ2h0LFxudG9vbHMvc2NoZWRfZXh0L3NjeF9mbGF0Y2cuYnBmLmMtOTcyLVx0ICAgICAgIC5jZ3JvdXBfaW5pdFx0XHQ9ICh2b2lkICopZmNnX2Nncm91cF9pbml0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXhpbWFsLmJwZi5jPTExOD12b2lkIEJQRl9TVFJVQ1RfT1BTKG1heGltYWxfY2dyb3VwX2NhbmNlbF9tb3ZlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heGltYWwuYnBmLmMtMTIxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heGltYWwuYnBmLmM6MTIyOnZvaWQgQlBGX1NUUlVDVF9PUFMobWF4aW1hbF9jZ3JvdXBfc2V0X3dlaWdodCwgc3RydWN0IGNncm91cCAqY2dycCwgdTMyIHdlaWdodClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXhpbWFsLmJwZi5jLTEyMy17fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXhpbWFsLmJwZi5jPTEzOD1zdHJ1Y3Qgc2NoZWRfZXh0X29wcyBtYXhpbWFsX29wcyA9IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF4aW1hbC5icGYuYy0xNjItXHQuY2dyb3VwX2NhbmNlbF9tb3ZlXHQ9ICh2b2lkICopIG1heGltYWxfY2dyb3VwX2NhbmNlbF9tb3ZlLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heGltYWwuYnBmLmM6MTYzOlx0LmNncm91cF9zZXRfd2VpZ2h0XHQ9ICh2b2lkICopIG1heGltYWxfY2dyb3VwX3NldF93ZWlnaHQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF4aW1hbC5icGYuYy0xNjQtXHQuY2dyb3VwX3NldF9iYW5kd2lkdGhcdD0gKHZvaWQgKikgbWF4aW1hbF9jZ3JvdXBfc2V0X2JhbmR3aWR0aCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzA3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkludmVzdGlnYXRpbmcgV2VpZ2h0IGFuZCBJZGxlIFNldHRpbmdzIGluIHRoZSBDZ3JvdXAgQ29udGV4dCoqCgpIbW0sIHNvIGBzY3hfZ3JvdXBfc2V0X3dlaWdodGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY2FsbHMgYGNncm91cF9zZXRfd2VpZ2h0YC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgSSB3YW50IHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaGVyZSwgYW5kIHNlZSBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBzZXR0aW5ncyBwcm9wYWdhdGUsIGFuZCB0aGUgY2hhaW4gb2Ygb3BlcmF0aW9ucy4gTm93LCBsZXQmIzM5O3Mgc2VlLCB0aGUgb3RoZXIgcGFydCBvZiBteSBtZW50YWwgcHV6emxlIGlzIHdoZXJlIGlzIGBjZ3JvdXBfc2V0X2lkbGVgIGJlaW5nIGNhbGxlZD8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyBvZiB0aGF0IHdpbGwgZ2l2ZSBhIGdvb2QgaW5zaWdodCBpbnRvIHRoZSBvdGhlciByZWxhdGVkIG9wZXJhdGlvbnMgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX3NldF9pZGxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdD0xMTQxPXdpbGwgYmUgcmVmZXJyZWQgdG8uIEFsbCB0aW1lIGR1cmF0aW9ucyBhcmUgaW4gbWljcm9zZWNvbmRzLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xMjY5LVx0VGhpcyBmaWxlIGFmZmVjdHMgb25seSBwcm9jZXNzZXMgdW5kZXIgdGhlIGZhaXItY2xhc3Mgc2NoZWR1bGVyIGFuZCBhIEJQRlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0OjEyNzA6XHRzY2hlZHVsZXIgd2l0aCB0aGUgYGBjZ3JvdXBfc2V0X2lkbGVgYCBjYWxsYmFjayBkZXBlbmRpbmcgb24gd2hhdCB0aGVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xMjcxLVx0Y2FsbGJhY2sgYWN0dWFsbHkgZG9lcy5cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5MjY9dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTMyLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTMzOlx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgc2NoIFx1MDAyNlx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSlcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDkzNDpcdFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkzNS1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgwNzA9c3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9iYW5kd2lkdGgpOlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDg0Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKTpcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA4NS0jZW5kaWZcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNDU9c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IGNncm91cCAqY2dycCwgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyNDY6c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9pZGxlKHN0cnVjdCBjZ3JvdXAgKmNncnAsIGJvb2wgaWRsZSkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI0Ny0jZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNTk9c3RhdGljIHN0cnVjdCBzY2hlZF9leHRfb3BzIF9fYnBmX29wc19zY2hlZF9leHRfb3BzID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI4Ny1cdC5jZ3JvdXBfc2V0X2JhbmR3aWR0aFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X2JhbmR3aWR0aCxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI4ODpcdC5jZ3JvdXBfc2V0X2lkbGVcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9pZGxlLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04Mjg5LSNlbmRpZlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODMyNj1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIF9fYnBmX29wc19zY2hlZF9leHRfb3BzX2NpZCA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNTItXHQuY3B1Y3RsX3NldF9iYW5kd2lkdGhcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9iYW5kd2lkdGgsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzNTM6XHQuY3B1Y3RsX3NldF9pZGxlXHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfaWRsZSxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM1NC0jZW5kaWZcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwNzc4PXN0YXRpYyBjb25zdCB1MzIgc2N4X2tmX2FsbG93X2ZsYWdzW10gPSB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5MS1cdFtTQ1hfT1BfSURYKGNncm91cF9zZXRfYmFuZHdpZHRoKV0gPSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwNzkyOlx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF9pZGxlKV1cdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5My0jZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODkzPXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1Ni1cdENJRF9PRkZTRVRfTUFUQ0goY2dyb3VwX3NldF9iYW5kd2lkdGgsIGNwdWN0bF9zZXRfYmFuZHdpZHRoKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5NTc6XHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9zZXRfaWRsZSwgY3B1Y3RsX3NldF9pZGxlKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTgtI2VuZGlmXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMTA2Nj1ERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDY5LS8qXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDcwOiAqIHNjeF9jb21wYXRfbWFya2VyX2Nncm91cF9zZXRfaWRsZV9tYXlfc2xlZXA6IGFkdmVydGlzZXMgdGhhdFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMTA3MTogKiBvcHMuY2dyb3VwX3NldF9pZGxlKCkgbWF5IGJlIGltcGxlbWVudGVkIGFzIGEgc2xlZXBhYmxlIGNhbGxiYWNrLlxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA3Mi0gKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNzMtI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTEwNzQ6REVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfaWRsZV9tYXlfc2xlZXApO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA3NS0jZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzE5PXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzcxLVx0LyoqXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzcyOlx0ICogQGNncm91cF9zZXRfaWRsZTogQSBjZ3JvdXAmIzM5O3MgaWRsZSBzdGF0ZSBpcyBiZWluZyBjaGFuZ2VkXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzczLVx0ICogQGNncnA6IGNncm91cCB3aG9zZSBpZGxlIHN0YXRlIGlzIGJlaW5nIHVwZGF0ZWRcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzgyLVx0ICovXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzgzOlx0dm9pZCAoKmNncm91cF9zZXRfaWRsZSkoc3RydWN0IGNncm91cCAqY2dycCwgYm9vbCBpZGxlKTtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODQtXG4tLVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbXBhdC5oPTIyMz1zdGF0aWMgaW5saW5lIGxvbmcgc2N4X2hvdHBsdWdfc2VxKHZvaWQpXG4tLVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbXBhdC5oLTI3Mi0gKiAtIHY2LjE3OiBvcHMuY2dyb3VwX3NldF9iYW5kd2lkdGgoKVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbXBhdC5oOjI3MzogKiAtIHY2LjE5OiBvcHMuY2dyb3VwX3NldF9pZGxlKClcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaC0yNzQtICogLSB2Ny4xOiAgb3BzLnN1Yl9hdHRhY2goKSwgb3BzLnN1Yl9kZXRhY2goKSwgb3BzLnN1Yl9jZ3JvdXBfaWRcbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0LmgtMjk4LVx0fVx0XHRcdFx0XHRcdFx0XHRcdFxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0Lmg6Mjk5Olx0aWYgKF9fc2tlbC1cdTAwM2VzdHJ1Y3Rfb3BzLl9fb3BzX25hbWUtXHUwMDNlY2dyb3VwX3NldF9pZGxlIFx1MDAyNlx1MDAyNlx0XHRcdFxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0Lmg6MzAwOlx0ICAgICFfX0NPTVBBVF9zdHJ1Y3RfaGFzX2ZpZWxkKFwmIzM0O3NjaGVkX2V4dF9vcHNcJiMzNDssIFwmIzM0O2Nncm91cF9zZXRfaWRsZVwmIzM0OykpIHsgXFxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaDozMDE6XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtXQVJOSU5HOiBrZXJuZWwgZG9lc24mIzM5O3Qgc3VwcG9ydCBvcHMuY2dyb3VwX3NldF9pZGxlKClcXG5cJiMzNDspOyBcXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbXBhdC5oOjMwMjpcdFx0X19za2VsLVx1MDAzZXN0cnVjdF9vcHMuX19vcHNfbmFtZS1cdTAwM2VjZ3JvdXBfc2V0X2lkbGUgPSBOVUxMO1x0XFxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaC0zMDMtXHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipSZWFjaGluZyB0aGUgQ2FsbGJhY2tzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlc2UgY2FsbGJhY2tzIGFyZSBpbnZva2VkLCBzcGVjaWZpY2FsbHkgdGhvc2Ugc2V0IGJ5IGBzY3hfZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgY2FsbCBwYXRoLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCB3aHkgdGhlc2UgY2FsbGJhY2tzIGFyZSB0cmlnZ2VyZWQuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBzY3hfZ3JvdXBfc2V0X3dlaWdodGAgcHJvYmFibHkgaGFzIGEgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBpbiB0aGUgc2NoZWR1bGVyIGNvcmUgdG8gc2V0IENQVSB3ZWlnaHRzLCBwcm9iYWJseSBzb21ldGhpbmcgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgLiBJJiMzOTtsbCB3YW50IHRvIGNvbmZpcm0gaWYgYGNwdV93ZWlnaHRfd3JpdGVfczY0YCBvciBzb21ldGhpbmcgc2ltaWxhciwgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24uIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc3RhY2tzIGFuZCBzZWUgd2hlcmUgdGhleSBlbmQgdXAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjeF9ncm91cF9zZXRfd2VpZ2h0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmM9OTgyMD1zdGF0aWMgaW50IGNwdV9zaGFyZXNfd3JpdGVfdTY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy05ODI4LVx0aWYgKCFyZXQpXG5rZXJuZWwvc2NoZWQvY29yZS5jOjk4Mjk6XHRcdHNjeF9ncm91cF9zZXRfd2VpZ2h0KGNzc190Zyhjc3MpLFxua2VybmVsL3NjaGVkL2NvcmUuYy05ODMwLVx0XHRcdFx0ICAgICBzY2hlZF93ZWlnaHRfdG9fY2dyb3VwKHNoYXJldmFsKSk7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz0xMDQyNT1zdGF0aWMgaW50IGNwdV93ZWlnaHRfd3JpdGVfdTY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDQzNy1cdGlmICghcmV0KVxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDQzODpcdFx0c2N4X2dyb3VwX3NldF93ZWlnaHQoY3NzX3RnKGNzcyksIGNncnBfd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTA0MzktXHRyZXR1cm4gcmV0O1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTA0NjA9c3RhdGljIGludCBjcHVfd2VpZ2h0X25pY2Vfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDQ3NC1cdGlmICghcmV0KVxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDQ3NTpcdFx0c2N4X2dyb3VwX3NldF93ZWlnaHQoY3NzX3RnKGNzcyksXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwNDc2LVx0XHRcdFx0ICAgICBzY2hlZF93ZWlnaHRfdG9fY2dyb3VwKHdlaWdodCkpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDg5MT12b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTA5LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTEwOnZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIHdlaWdodClcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkxMS17XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaD04MD12b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaDo4MTp2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTgyLXZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTkwPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo5MTpzdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05Mi1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKSB7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQzNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBCcmFpbiYjMzk7cyBRdWljayBDaGVjayoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNvZGUsIGFuZCBJIHNlZSB0aGUgZnVuY3Rpb24gYHNjeF9ncm91cF9zZXRfaWRsZWAuLi4gYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCByZWxhdGVkIGNvbmNlcHRzLiBJJiMzOTttIHdvbmRlcmluZyBpZiBpdCYjMzk7cyBnb3QgYW4gaW1wYWN0IG9uIGFueSBvZiB0aGUgY29yZSBhbGdvcml0aG1zLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBpbXBsaWNhdGlvbnMgb24gd2hhdGV2ZXIgcHJvY2VzcyBpcyBiZWluZyBtYW5hZ2VkLCBzbyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gaW5mbHVlbmNlcyBjb25jdXJyZW5jeSBvciByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgc3lzdGVtLCBsaWtlIHRocmVhZCBwb29saW5nLCBtZW1vcnkgdXNhZ2UsIGFuZCBpZGxlIHRpbWUgbWFuYWdlbWVudCB0byBlbnN1cmUgdGhpbmdzIHN0YXkgZWZmaWNpZW50IGFuZCBzdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jPTEwMjU1PXN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2MS1cdGlmICghcmV0KVxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDI2MjpcdFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTAyNjMtXHRyZXR1cm4gcmV0O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDkxMD12b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyB3ZWlnaHQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI1LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTI2OnZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI3LXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTgxPXZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC04My12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTI6c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOTMtc3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTA4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IEJQRiBDYWxsYmFjayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgdGhlIGFiaWxpdHkgZm9yIHRoZXNlIEJQRiBjYWxsYmFja3MgdG8gc2xlZXAsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBzaGlmdC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgaW50byBgc2N4X2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgc2N4X2dyb3VwX3NldF9pZGxlYCBkaXJlY3RseSwgZXhwZWN0aW5nIG1vZGlmaWNhdGlvbnMgdGhlcmUuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgYWN0dWFsbHkgdG91Y2ggdGhvc2UgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIEl0JiMzOTtzIG1vZGlmeWluZyBgYnBmX3NjeF9jaGVja19tZW1iZXJgLCBlbmFibGluZyBCUEYgcHJvZ3JhbXMgdG8gdXRpbGl6ZSBzbGVlcGFibGUgZnVuY3Rpb25zIHdpdGhpbiBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYC4gRXNzZW50aWFsbHksIHRoZSBCUEYgdmVyaWZpZXIgaXMgYmVpbmcgcmVsYXhlZCB0byBwZXJtaXQgc2xlZXBhYmxlIHByb2dyYW1zIGZvciB0aGVzZSBzcGVjaWZpYyBjYWxsYmFja3MuIE5vdyBJIHVuZGVyc3RhbmQuIFRoaXMgaXMgY2xldmVyLgoKVGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYENPTkZJR19TQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRGAuIFRpbWUgdG8gY2hlY2sgS2NvbmZpZyBhbmQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgb2YgYENPTkZJR19FWFRfR1JPVVBfU0NIRURgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFRfR1JPVVBfU0NIRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTExODc9Y29uZmlnIFJUX0dST1VQX1NDSEVEX0RFRkFVTFRfRElTQUJMRURcbi0tXG5pbml0L0tjb25maWctMTE5Ny1cbmluaXQvS2NvbmZpZzoxMTk4OmNvbmZpZyBFWFRfR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMTk5LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYxMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gRVhUX0dST1VQX1NDSEVEIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYEVYVF9HUk9VUF9TQ0hFRGAgbW9kdWxlIGluc2lkZSBhbmQgb3V0LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyBieSBtYXBwaW5nIGl0cyBkZXBlbmRlbmNpZXMuIFdoZXJlIGRvZXMgdGhpcyB0aGluZyBsaXZlPyBXaGF0IGRvZXMgaXQgcmVseSBvbiB0byBmdW5jdGlvbj8gV2hhdCBwaWVjZXMgb2YgdGhlIHN5c3RlbSBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciBpdCB0byBldmVuICpiZSo/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSwgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZSBvdGhlciBtb2R1bGVzIGluIHRoaXMsIGZyYW5rbHksIGNvbXBsZXggc3lzdGVtLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBlY29zeXN0ZW0uIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTk1Olx0XG4xMTk2Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjExOTc6XHRcbjExOTg6XHRjb25maWcgRVhUX0dST1VQX1NDSEVEXG4xMTk5Olx0XHRib29sXG4xMjAwOlx0XHRkZXBlbmRzIG9uIFNDSEVEX0NMQVNTX0VYVCBcdTAwMjZcdTAwMjYgQ0dST1VQX1NDSEVEXG4xMjAxOlx0XHRzZWxlY3QgR1JPVVBfU0NIRURfV0VJR0hUXG4xMjAyOlx0XHRzZWxlY3QgR1JPVVBfU0NIRURfQkFORFdJRFRIXG4xMjAzOlx0XHRkZWZhdWx0IHlcbjEyMDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NDIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIGludG8gU2NoZWR1bGVyIEV4dGVuc2lvbnMgYW5kIGNncm91cHMqKgoKUmlnaHQsIHNvIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYFNDSEVEX0NMQVNTX0VYVGAgYW5kIGBDR1JPVVBfU0NIRURgLiBNYWtlcyBzZW5zZSwgdGhleSYjMzk7cmUgb2Z0ZW4gaW50ZXJ0d2luZWQgd2hlbiB5b3UmIzM5O3JlIGxvb2tpbmcgYXQgZXh0ZW5kaW5nIHNjaGVkdWxlciBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIGBTQ0hFRF9DTEFTU19FWFRgLiBJdCYjMzk7cyBsaWtlbHkgdGhlIGNvcmUgZWxlbWVudCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgZmlyc3QuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBncmFzcCBpdHMgaW1wbGljYXRpb25zIGJlZm9yZSBJIG1vdmUgb24gdG8gaG93IGl0IGludGVncmF0ZXMgd2l0aCwgb3IgaXMgbGV2ZXJhZ2VkIGJ5LCB0aGUgY2dyb3VwIHNjaGVkdWxpbmcgZnJhbWV3b3JrLiBXaGF0IGV4YWN0bHkgZG9lcyB0aGlzIGV4dGVuc2lvbiBwcm92aWRlLCBhbmQgaG93IGRvZXMgaXQgbW9kaWZ5IG9yIGF1Z21lbnQgdGhlIHN0YW5kYXJkIHNjaGVkdWxlciBjbGFzc2VzPyBMZXQmIzM5O3MgZ2V0IGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBhbmQgaG93IGl0IGlzIGVtcGxveWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0NIRURfQ0xBU1NfRVhUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLnByZWVtcHQ9MTUxPWNvbmZpZyBTQ0hFRF9DT1JFXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC0xNjgtXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjE2OTpjb25maWcgU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTE3MC1cdGJvb2wgXCYjMzQ7RXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgUHJlZW1wdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgU0NIRURfQ0xBU1NfRVhUYCBpcyBiZWluZyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIGBrZXJuZWwvS2NvbmZpZy5wcmVlbXB0YC4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIHByZWVtcHRpb24tcmVsYXRlZCBvcHRpb25zIGFyZSBkZWZpbmVkLiBJdCYjMzk7cyBhIGtleSBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSBpZiBgU0NIRURfQ0xBU1NfRVhUYCBpcyBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgd2l0aGluIHRoYXQgY29udGV4dC4gRnJvbSB0aGF0LCBJIGNhbiBkZXRlcm1pbmUgaG93IHRoZSBzZXR0aW5nIGlzIGNvbnRyb2xsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTY1Olx0XHQgIFNDSEVEX0NPUkUgaXMgZGVmYXVsdCBkaXNhYmxlZC4gV2hlbiBpdCBpcyBlbmFibGVkIGFuZCB1bnVzZWQsXG4gMTY2Olx0XHQgIHdoaWNoIGlzIHRoZSBsaWtlbHkgdXNhZ2UgYnkgTGludXggZGlzdHJpYnV0aW9ucywgdGhlcmUgc2hvdWxkXG4gMTY3Olx0XHQgIGJlIG5vIG1lYXN1cmFibGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLlxuIDE2ODpcdFxuIDE2OTpcdGNvbmZpZyBTQ0hFRF9DTEFTU19FWFRcbiAxNzA6XHRcdGJvb2wgXCYjMzQ7RXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXCYjMzQ7XG4gMTcxOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBERUJVR19JTkZPX0JURlxuIDE3MjpcdFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG4gMTczOlx0XHRzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcbiAxNzQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MDcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTY2hlZHVsaW5nIEV4dGVuc2lvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGFuZCBpbW1lZGlhdGVseSwgdGhlIGZsYWdzIGp1bXAgb3V0IOKAkyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBTQ0hFRF9DTEFTU19FWFRgLCBgQ0dST1VQX1NDSEVEYCwgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC4gVGhlc2UgYXJlIHRoZSBmb3VuZGF0aW9uYWwgcGllY2VzIG9mIHRoaXMgYXJjaGl0ZWN0dXJlLiBNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHNjaGVkdWxpbmcgYW5kIGdyb3VwaW5nLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBzY3hfZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBjb250cm9sIHBvaW50cy4gSSBhbHNvIG5vdGVkIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgYnV0IHRoYXQmIzM5O3Mgc3RhdGljIHNvIHdoaWxlIEkgY2FuJiMzOTt0IGxvb2sgZGlyZWN0bHkgYXQgaXQsIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgd29ydGgga2VlcGluZyBpbiBtaW5kLiBXYWl0IGEgbWludXRlLCBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBmdW5jdGlvbiBhcmVuJiMzOTt0IHN0YXRpYy4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgc2N4X2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgc2N4X2dyb3VwX3NldF9pZGxlYCBhcmVuJiMzOTt0IHN0YXRpYyBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AuIEp1c3Qgd2FudCB0byBjb25maXJtIGJlZm9yZSBjb250aW51aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDg5MT12b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTA5LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTEwOnZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIHdlaWdodClcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkxMS17XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaD04MD12b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaDo4MTp2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTgyLXZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTkwPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo5MTpzdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05Mi1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKSB7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM5NAoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgVmVyaWZpZXIgRW5oYW5jZW1lbnQgZm9yIFNjaGVkX0V4dCBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyB0aGUgQlBGIHZlcmlmaWVyIGZvciBgc2NoZWRfZXh0YCBoYXMgYmVlbiB1cGRhdGVkIOKAkyB0aGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIHBpY2tpbmcgdXAgb24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzbGVlcGFibGUgcHJvZ3JhbXMgc3BlY2lmaWNhbGx5IGZvciBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtJbnRlcmVzdGluZywgdGhpcyBvcGVucyB1cCBzb21lIG5ldyBhdHRhY2sgdmVjdG9ycy4mIzM0OyBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3ZlIG1hZGUgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciwgcGFydGljdWxhcmx5IGVuYWJsaW5nIHNsZWVwYWJsZSBwcm9ncmFtcywgZGVmaW5pdGVseSB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaW50cm9kdWNlcyBtb3JlIGZsZXhpYmlsaXR5IHRvIHdoYXQgY2FuIGJlIGRvbmUgaW4ga2VybmVsIHNwYWNlLCBhbmQgdGhlcmVmb3JlIG1vcmUgcG90ZW50aWFsIGZvciBleHBsb2l0LgoKTXkgaW1tZWRpYXRlIGZvY3VzIGNvbmZpZ3VyYXRpb24td2lzZSBpcyBnb2luZyB0byBiZSBgU0NIRURfQ0xBU1NfRVhUYCBhbmQgYENHUk9VUF9TQ0hFRGAsIGJlY2F1c2UgdGhhdOKAmXMgdGhlIHNjb3BlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZW4sIEnigJlsbCBiZSBob25pbmcgaW4gb24gYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAg4oCTIHRob3NlIGZ1bmN0aW9ucyB3aWxsIGJlIHRoZSBwcmltYXJ5IHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGVzdCB0aGUgbmV3bHkgYXZhaWxhYmxlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X2dyb3VwX3NldF93ZWlnaHQmIzM0OywKICAgICYjMzQ7c2N4X2dyb3VwX3NldF9pZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgY29uc3RyYWludHMgZm9yIHRoZSBzY2hlZF9leHQgc3Vic3lzdGVtLCBhbGxvd2luZyB0aGUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzIHRvIGJlIGltcGxlbWVudGVkIGFzIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgYW5kIGNvbnN0cmFpbnRzIG9mIHRoZXNlIGNhbGxiYWNrcywgd2hpY2ggYXJlIHRyaWdnZXJlZCB2aWEgY2dyb3VwIGF0dHJpYnV0ZSB3cml0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBpbnZva2UgdGhlc2UgY2FsbGJhY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X2dyb3VwX3NldF93ZWlnaHQmIzM0OywKICAgICYjMzQ7c2N4X2dyb3VwX3NldF9pZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgY29uc3RyYWludHMgZm9yIHRoZSBzY2hlZF9leHQgc3Vic3lzdGVtLCBhbGxvd2luZyB0aGUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzIHRvIGJlIGltcGxlbWVudGVkIGFzIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgYW5kIGNvbnN0cmFpbnRzIG9mIHRoZXNlIGNhbGxiYWNrcywgd2hpY2ggYXJlIHRyaWdnZXJlZCB2aWEgY2dyb3VwIGF0dHJpYnV0ZSB3cml0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBpbnZva2UgdGhlc2UgY2FsbGJhY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc2NoZWRfZXh0IChzY3gpIHN1YnN5c3RlbSB0byBhbGxvdyBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBjYWxsYmFja3MgdG8gYmUgc2xlZXBhYmxlLiBJdCBkb2VzIHRoaXMgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGFsbG93ZWQgbGlzdCBpbiBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGFuZCBkZWZpbmluZyBjb21wYXRpYmlsaXR5IG1hcmtlcnMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBCUEYgdmVyaWZpZXIgY2hlY2tzIGZvciBzbGVlcGFibGUgY2FsbGJhY2tzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY0MTFjZTI4ZTMzYWQ5MDE2NWIwNzJhNjYwNTcwN2VjODc4YjVjOWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAwNjoxMToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jCmluZGV4IGI2NDY3MTFhNDVmZWUuLjUzYjg4OGY1YTZjNTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9leHQuYwpAQCAtODA3OSw3ICYjNDM7ODA3OSw5IEBAIHN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KToKIAljYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfZXhpdCk6CiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3ByZXBfbW92ZSk6CiYjNDM7CWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfd2VpZ2h0KToKIAljYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCk6CiYjNDM7CWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfaWRsZSk6CiAjZW5kaWYKIAljYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb25saW5lKToKIAljYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb2ZmbGluZSk6CkBAIC0xMTA1NSwzICYjNDM7MTEwNTcsMTkgQEAgX19pbml0Y2FsbChzY3hfaW5pdCk7CiAjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRAogREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfYmFuZHdpZHRoX21heV9zbGVlcCk7CiAjZW5kaWYJLyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXQKJiM0MzsgKiBvcHMuY2dyb3VwX3NldF93ZWlnaHQoKSBtYXkgYmUgaW1wbGVtZW50ZWQgYXMgYSBzbGVlcGFibGUgY2FsbGJhY2suCiYjNDM7ICovCiYjNDM7I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRUQKJiM0MztERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwKTsKJiM0MzsjZW5kaWYJLyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcDogYWR2ZXJ0aXNlcyB0aGF0CiYjNDM7ICogb3BzLmNncm91cF9zZXRfaWRsZSgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay4KJiM0MzsgKi8KJiM0MzsjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRAomIzQzO0RFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwKTsKJiM0MzsjZW5kaWYJLyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oIGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oCmluZGV4IDUzZTEzNmE0NzkyNGQuLmY4MWQwM2RlMmQzYzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgKQEAgLTczNiw3ICYjNDM7NzM2LDcgQEAgc3RydWN0IHNjaGVkX2V4dF9vcHMgewogCSAqIEBjZ3JwOiBjZ3JvdXAgd2hvc2Ugd2VpZ2h0IGlzIGJlaW5nIHVwZGF0ZWQKIAkgKiBAd2VpZ2h0OiBuZXcgd2VpZ2h0IFsxLi4xMDAwMF0KIAkgKgotCSAqIFVwZGF0ZSBAY2dycCYjMzk7cyB3ZWlnaHQgdG8gQHdlaWdodC4KJiM0MzsJICogVXBkYXRlIEBjZ3JwJiMzOTtzIHdlaWdodCB0byBAd2VpZ2h0LiBUaGlzIG9wZXJhdGlvbiBtYXkgYmxvY2suCiAJICoKIAkgKiBLbm9icyBvZiBhIGNncm91cCBiZWxvbmcgdG8gdGhlIHBhcmVudCwgc28gdGhlIHNldF8qIG9wcyBhcmUKIAkgKiBkZWxpdmVyZWQgdG8gQGNncnAmIzM5O3MgcGFyZW50JiMzOTtzIHNjaGVkLiBUaGF0IHNjaGVkIG1heSBuZXZlciBoYXZlIHNlZW4KQEAgLTc3Myw5ICYjNDM7NzczLDEwIEBAIHN0cnVjdCBzY2hlZF9leHRfb3BzIHsKIAkgKiBAY2dycDogY2dyb3VwIHdob3NlIGlkbGUgc3RhdGUgaXMgYmVpbmcgdXBkYXRlZAogCSAqIEBpZGxlOiB3aGV0aGVyIHRoZSBjZ3JvdXAgaXMgZW50ZXJpbmcgb3IgZXhpdGluZyBpZGxlIHN0YXRlCiAJICoKLQkgKiBVcGRhdGUgQGNncnAmIzM5O3MgaWRsZSBzdGF0ZSB0byBAaWRsZS4gVGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4KLQkgKiBhIGNncm91cCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGlkbGUgYW5kIG5vbi1pZGxlIHN0YXRlcywgYWxsb3dpbmcgdGhlCi0JICogQlBGIHNjaGVkdWxlciB0byBhZGp1c3QgaXRzIGJlaGF2aW9yIGFjY29yZGluZ2x5LgomIzQzOwkgKiBVcGRhdGUgQGNncnAmIzM5O3MgaWRsZSBzdGF0ZSB0byBAaWRsZS4gVGhpcyBvcGVyYXRpb24gbWF5IGJsb2NrLiBUaGlzCiYjNDM7CSAqIGNhbGxiYWNrIGlzIGludm9rZWQgd2hlbiBhIGNncm91cCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGlkbGUgYW5kCiYjNDM7CSAqIG5vbi1pZGxlIHN0YXRlcywgYWxsb3dpbmcgdGhlIEJQRiBzY2hlZHVsZXIgdG8gYWRqdXN0IGl0cyBiZWhhdmlvcgomIzQzOwkgKiBhY2NvcmRpbmdseS4KIAkgKgogCSAqIERlbGl2ZXJ5IGZvbGxvd3MgdGhlIHNhbWUgcnVsZSBhcyBjZ3JvdXBfc2V0X3dlaWdodCgpLgogCSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgU2NoZWRfRXh0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgc2NoZWRfZXh0YC4gSXQmIzM5O3MgdG91Y2hpbmcgYGV4dC5jYCBhbmQgYGludGVybmFsLmhgLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIHRvIHRoZSBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGZ1bmN0aW9uIHdpdGhpbiBgZXh0LmNgLiBUaGUgYGludGVybmFsLmhgIGNoYW5nZXMganVzdCBzZWVtIHRvIGJlIHVwZGF0aW5nIHRoZSBjb21tZW50cyBhcm91bmQgdGhvc2UgdHdvIGZ1bmN0aW9ucywgZXhwbGljaXRseSBtZW50aW9uaW5nIHRoYXQgdGhleSAmIzM0O21heSBibG9jay4mIzM0OyBUaGF0JiMzOTtzIHRoZSBrZXkgdGhpbmcgaGVyZSDigJMgd2UmIzM5O3JlIGFsbG93aW5nIHRoZXNlIGNncm91cCBvcGVyYXRpb25zIHRvIHBvdGVudGlhbGx5IHNsZWVwLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGFib3V0IGVuYWJsaW5nIHNsZWVwYWJsZSBjYWxsYmFja3MgZm9yIHRob3NlIHNwZWNpZmljIGNncm91cCBmdW5jdGlvbnMgd2l0aGluIHRoZSBCUEYgc2NoZWRfZXh0IGNvbnRleHQuIE5vIG5ldyB1c2VyLXNwYWNlIGRhdGEgc3RydWN0dXJlcywgbm8gbWVtb3J5IHNhZmV0eSBpc3N1ZXMg4oCTIGl0JiMzOTtzIGFsbCB2ZXJpZmllciBjaGVja3MgYW5kIGNvbXBhdCBtYXJrZXJzLiBUaGF0JiMzOTtzIGdvb2Q7IGtlZXBpbmcgaXQgY29udGFpbmVkIGFuZCBmb2N1c2VkIG9uIHRoZSBCUEYgc2lkZSBtZWFucyBsZXNzIGNoYW5jZSBvZiB1bmZvcmVzZWVuIGNvbnNlcXVlbmNlcy4KCk5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHdoYXQgdGhlIHBhdGNoIGlzIGNoYW5naW5nIGV4YWN0bHkgaW4gYGJwZl9zY3hfY2hlY2tfbWVtYmVyYC4gQWhhLCBoZXJlJiMzOTtzIHRoZSByZWxldmFudCBjb2RlOgoKYGBgYwoJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2luaXQpOgoJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2V4aXQpOgoJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3ByZXBfbW92ZSk6CiYjNDM7CWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfd2VpZ2h0KToKCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfYmFuZHdpZHRoKToKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKToKYGBgCgpZZXAsIGl0JiMzOTtzIGV4YWN0bHkgYXMgSSBleHBlY3RlZC4gVGhlc2UgbmV3IGNhc2VzIGFyZSBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aGluIGBicGZfc2N4X2NoZWNrX21lbWJlcmAsIGFuZCBpdCBwcm9iYWJseSBqdXN0IHJldHVybnMgc29tZSBzb3J0IG9mIGJvb2xlYW4gb3IgZW51bSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1lbWJlciBpcyBhbGxvd2VkIHRvIGJlIHNsZWVwYWJsZS4gVGhlIGNvbXBhdCBtYXJrZXJzIGFyZSBwcm9iYWJseSBuZWVkZWQgZm9yIG9sZGVyIEJQRiBwcm9ncmFtcywgYnV0IHRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2Ugd2l0aCB0aGlzIGtpbmQgb2YgY2hhbmdlLiBTZWVtcyBsaWtlIGEgc2FmZSBhbmQgd2VsbC1jb250YWluZWQgbW9kaWZpY2F0aW9uIHRvIHN1cHBvcnQgcG90ZW50aWFsbHkgYmxvY2tpbmcgY2dyb3VwIG9wZXJhdGlvbnMgaW4gdGhlIHNjaGVkX2V4dCBlbnZpcm9ubWVudCwgd2hpY2ggaXMgYmVjb21pbmcgaW5jcmVhc2luZ2x5IGNvbW1vbi4gSSYjMzk7ZCB3YW50IHRvIGNoZWNrIGhvdyB0aGUgYnBmIHZlcmlmaWVyIGJlaGF2ZXMgYWZ0ZXIgdGhpcyBjaGFuZ2UsIHRob3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NjeF9jaGVja19tZW1iZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZXh0L2V4dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9leHQvZXh0LmM9Nzk5OD1zdGF0aWMgaW50IGJwZl9zY3hfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA2OS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODA3MDpzdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA3MS1cdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MzAyPXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX3NjaGVkX2V4dF9vcHMgPSB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzA1LVx0LnVucmVnID0gYnBmX3NjeF91bnJlZyxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODMwNjpcdC5jaGVja19tZW1iZXIgPSBicGZfc2N4X2NoZWNrX21lbWJlcixcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODMwNy1cdC5pbml0X21lbWJlciA9IGJwZl9zY3hfaW5pdF9tZW1iZXIsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04Mzc0PXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX3NjaGVkX2V4dF9vcHNfY2lkID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM3Ny1cdC51bnJlZyA9IGJwZl9zY3hfdW5yZWcsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzNzg6XHQuY2hlY2tfbWVtYmVyID0gYnBmX3NjeF9jaGVja19tZW1iZXIsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNzktXHQuaW5pdF9tZW1iZXIgPSBicGZfc2N4X2luaXRfbWVtYmVyLFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA4OTM9c3RhdGljIGludCBfX2luaXQgc2N4X2luaXQodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwODk4LVx0ICogc2NoZWRfZXh0X29wc19jaWQgbWlycm9ycyBzY2hlZF9leHRfb3BzIHVwIHRvIGFuZCBpbmNsdWRpbmcgQHByaXYuXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwODk5Olx0ICogQm90aCBicGZfc2N4X2luaXRfbWVtYmVyKCkgYW5kIGJwZl9zY3hfY2hlY2tfbWVtYmVyKCkgdXNlIG9mZnNldHNcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5MDAtXHQgKiBmcm9tIHN0cnVjdCBzY2hlZF9leHRfb3BzOyBzY2hlZF9leHRfb3BzX2NpZCByZWxpZXMgb24gdGhvc2Ugb2Zmc2V0c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjkzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYnBmX3NjeF9jaGVja19tZW1iZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBicGZfc2N4X2NoZWNrX21lbWJlcmAuIFRoZSBuYW1lIGlzIHByZXR0eSBkZXNjcmlwdGl2ZSwgc28gSSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IHNlcnZlcyBhcyBhIGdhdGVrZWVwZXIgb2Ygc29ydHMsIHByb2JhYmx5IHJlbGF0ZWQgdG8gY2hlY2tpbmcgYWNjZXNzIHRvIHN0cnVjdHVyZSBtZW1iZXJzIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIEkmIzM5O20gZ3Vlc3NpbmcgaXTigJlzIGludGVuZGVkIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3Igb3RoZXIgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCB1c2VyLXByb3ZpZGVkIGRhdGEgd2l0aGluIEJQRiBwcm9ncmFtcy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjb2RlIHRvIHNlZSB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjaGVja3MgaXQgcGVyZm9ybXMg4oCTIHBhcnRpY3VsYXJseSBhcm91bmQgcG90ZW50aWFsIG9mZnNldHMsIHNpemVzLCBhbmQgYW55IGFzc29jaWF0ZWQgcG9pbnRlciBkZXJlZmVyZW5jaW5nLiBJ4oCZbSBhbHNvIGN1cmlvdXMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIEJQRiBoZWxwZXJzIGFuZCB3aGF0IGtpbmQgb2YgZXJyb3IgY29kZXMgaXQgcmV0dXJucyB0byB0aGUgQlBGIHByb2dyYW0gaWYgYSBjaGVjayBmYWlscy4gVW5kZXJzdGFuZGluZyB0aGUgZmluZXIgZGV0YWlscyBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY3J1Y2lhbCBmb3Igc2VjdXJlIGFuZCByZWxpYWJsZSBCUEYgcHJvZ3JhbSBkZXZlbG9wbWVudCwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9leHQvZXh0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzgwNzA6XHRzdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbjgwNzE6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG44MDcyOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG44MDczOlx0e1xuODA3NDpcdFx0dTMyIG1vZmYgPSBfX2J0Zl9tZW1iZXJfYml0X29mZnNldCh0LCBtZW1iZXIpIC8gODtcbjgwNzU6XHRcbjgwNzY6XHRcdHN3aXRjaCAobW9mZikge1xuODA3NzpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgaW5pdF90YXNrKTpcbjgwNzg6XHQjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxuODA3OTpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2luaXQpOlxuODA4MDpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2V4aXQpOlxuODA4MTpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3ByZXBfbW92ZSk6XG44MDgyOlx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X3dlaWdodCk6XG44MDgzOlx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCk6XG44MDg0Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2lkbGUpOlxuODA4NTpcdCNlbmRpZlxuODA4NjpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY3B1X29ubGluZSk6XG44MDg3Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb2ZmbGluZSk6XG44MDg4Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBpbml0X2NpZHMpOlxuODA4OTpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgaW5pdCk6XG44MDkwOlx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBleGl0KTpcbjgwOTE6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIHN1Yl9hdHRhY2gpOlxuODA5MjpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgc3ViX2RldGFjaCk6XG44MDkzOlx0XHRcdGJyZWFrO1xuODA5NDpcdFx0ZGVmYXVsdDpcbjgwOTU6XHRcdFx0aWYgKHByb2ctXHUwMDNlc2xlZXBhYmxlKVxuODA5NjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuODA5NzpcdFx0fVxuODA5ODpcdFxuODA5OTpcdCNpZmRlZiBDT05GSUdfRVhUX1NVQl9TQ0hFRFxuODEwMDpcdFx0LypcbjgxMDE6XHRcdCAqIEVuYWJsZSBwcml2YXRlIHN0YWNrIGZvciBvcGVyYXRpb25zIHRoYXQgY2FuIG5lc3QgYWxvbmcgdGhlXG44MTAyOlx0XHQgKiBoaWVyYXJjaHkuXG44MTAzOlx0XHQgKlxuODEwNDpcdFx0ICogWFhYIC0gSWRlYWxseSwgd2Ugc2hvdWxkIG9ubHkgZG8gdGhpcyBmb3Igc2NoZWRzIHRoYXQgYWxsb3dcbjgxMDU6XHRcdCAqIHN1Yi1zY2hlZHMgYW5kIHN1Yi1zY2hlZHMgdGhlbXNlbHZlcyBidXQgSSBkb24mIzM5O3Qga25vdyBob3cgdG8gYWNjZXNzXG44MTA2Olx0XHQgKiBzdHJ1Y3Rfb3BzIGZyb20gaGVyZS5cbjgxMDc6XHRcdCAqL1xuODEwODpcdFx0c3dpdGNoIChtb2ZmKSB7XG44MTA5Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBkaXNwYXRjaCk6XG44MTEwOlx0XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZXByaXZfc3RhY2tfcmVxdWVzdGVkID0gdHJ1ZTtcbjgxMTE6XHRcdFx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlcmVjdXJzaW9uX2RldGVjdGVkID0gc2N4X3BzdGFja19yZWN1cnNpb25fb25fZGlzcGF0Y2g7XG44MTEyOlx0XHRcdGJyZWFrO1xuODExMzpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgc3ViX2NhcHNfdXBkYXRlZCk6XG44MTE0Olx0XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZXByaXZfc3RhY2tfcmVxdWVzdGVkID0gdHJ1ZTtcbjgxMTU6XHRcdFx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlcmVjdXJzaW9uX2RldGVjdGVkID0gc2N4X3BzdGFja19yZWN1cnNpb25fb25fY2Fwc191cGRhdGVkO1xuODExNjpcdFx0XHRicmVhaztcbjgxMTc6XHRcdH1cbjgxMTg6XHQjZW5kaWZcdC8qIENPTkZJR19FWFRfU1VCX1NDSEVEICovXG44MTE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NTEKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGV4dGVuZGluZyB0aGUgcmFuZ2Ugb2Ygb3BlcmF0aW9ucyBjb25zaWRlcmVkICYjMzQ7c2xlZXBhYmxlJiMzNDsgd2l0aGluIHRoZSBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCB0byB0aGF0IGFsbG93ZWQgbGlzdC4gUmVhbGx5LCBpdCYjMzk7cyBxdWl0ZSBtaW5pbWFsIGFuZCBsb2NhbGl6ZWQuIEFuZCBmb3IgY29tcGF0aWJpbGl0eSYjMzk7cyBzYWtlLCBpdCBhbHNvIGRlZmluZXMgYHNjeF9jb21wYXRfbWFya2VyX2Nncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcGAgYW5kIGBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwYC4KCkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCBpbnRlcm5hbHMgYW5kIEJQRiB2ZXJpZmllciBsb2dpYywgdGhlcmUmIzM5O3MgemVybyBjaGFuY2Ugb2YgaW50cm9kdWNpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eSB3aXRoIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBhIHZlcnkgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uIHRvIGEgQlBGIHZlcmlmaWNhdGlvbiBjaGVjay4gU28sIEkgd2lsbCBtYXJrIHRoaXMgYXMgYE5lZWRzS01TQU49ZmFsc2VgIGJlY2F1c2UgdGhlIGNoYW5nZSBpcyB2ZXJ5IHNpbXBsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzY2hlZF9leHQgKHNjeCkgc3Vic3lzdGVtIHRvIGFsbG93IGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxiYWNrcyB0byBiZSBzbGVlcGFibGUuIEl0IGRvZXMgdGhpcyBieSBhZGRpbmcgdGhlbSB0byB0aGUgYWxsb3dlZCBsaXN0IGluIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgYW5kIGRlZmluaW5nIGNvbXBhdGliaWxpdHkgbWFya2Vycy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIEJQRiB2ZXJpZmllciBjaGVja3MgZm9yIHNsZWVwYWJsZSBjYWxsYmFja3MuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc2NoZWRfZXh0IChzY3gpIHN1YnN5c3RlbSB0byBhbGxvdyBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBjYWxsYmFja3MgdG8gYmUgc2xlZXBhYmxlLiBJdCBkb2VzIHRoaXMgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGFsbG93ZWQgbGlzdCBpbiBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGFuZCBkZWZpbmluZyBjb21wYXRpYmlsaXR5IG1hcmtlcnMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBCUEYgdmVyaWZpZXIgY2hlY2tzIGZvciBzbGVlcGFibGUgY2FsbGJhY2tzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjExOjI5Ljk1NDQ0MTkxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5ODk1OTM4NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNDSEVEX0NMQVNTX0VYVFwiLFxuICAgIFwiQ0dST1VQX1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N4X2dyb3VwX3NldF93ZWlnaHRcIixcbiAgICBcInNjeF9ncm91cF9zZXRfaWRsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzY2hlZF9leHQgKHNjeCkgc3Vic3lzdGVtIHRvIGFsbG93IGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxiYWNrcyB0byBiZSBzbGVlcGFibGUuIEl0IGRvZXMgdGhpcyBieSBhZGRpbmcgdGhlbSB0byB0aGUgYWxsb3dlZCBsaXN0IGluIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgYW5kIGRlZmluaW5nIGNvbXBhdGliaWxpdHkgbWFya2Vycy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIEJQRiB2ZXJpZmllciBjaGVja3MgZm9yIHNsZWVwYWJsZSBjYWxsYmFja3MuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGNvbnN0cmFpbnRzIGZvciB0aGUgc2NoZWRfZXh0IHN1YnN5c3RlbSwgYWxsb3dpbmcgdGhlIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxiYWNrcyB0byBiZSBpbXBsZW1lbnRlZCBhcyBzbGVlcGFibGUgQlBGIHByb2dyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IGFuZCBjb25zdHJhaW50cyBvZiB0aGVzZSBjYWxsYmFja3MsIHdoaWNoIGFyZSB0cmlnZ2VyZWQgdmlhIGNncm91cCBhdHRyaWJ1dGUgd3JpdGVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgZW50cnkgcG9pbnRzIHRoYXQgaW52b2tlIHRoZXNlIGNhbGxiYWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTE6MjkuOTU0NDQ3NzQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxOTk2ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjQxMWNlMjhlMzNhZDkwMTY1YjA3MmE2NjA1NzA3ZWM4NzhiNWM5ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwNjoxMToyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xcbmluZGV4IGI2NDY3MTFhNDVmZWUuLjUzYjg4OGY1YTZjNTEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC9leHQuY1xcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcXG5AQCAtODA3OSw3ICs4MDc5LDkgQEAgc3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuIFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KTpcXG4gXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2V4aXQpOlxcbiBcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfcHJlcF9tb3ZlKTpcXG4rXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF93ZWlnaHQpOlxcbiBcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCk6XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfaWRsZSk6XFxuICNlbmRpZlxcbiBcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb25saW5lKTpcXG4gXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY3B1X29mZmxpbmUpOlxcbkBAIC0xMTA1NSwzICsxMTA1NywxOSBAQCBfX2luaXRjYWxsKHNjeF9pbml0KTtcXG4gI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG4gREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfYmFuZHdpZHRoX21heV9zbGVlcCk7XFxuICNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG4rXFxuKy8qXFxuKyAqIHNjeF9jb21wYXRfbWFya2VyX2Nncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcDogYWR2ZXJ0aXNlcyB0aGF0XFxuKyAqIG9wcy5jZ3JvdXBfc2V0X3dlaWdodCgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay5cXG4rICovXFxuKyNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxuK0RFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXApO1xcbisjZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxuK1xcbisvKlxcbisgKiBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXRcXG4rICogb3BzLmNncm91cF9zZXRfaWRsZSgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay5cXG4rICovXFxuKyNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxuK0RFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwKTtcXG4rI2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmggYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcXG5pbmRleCA1M2UxMzZhNDc5MjRkLi5mODFkMDNkZTJkM2M3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxcbkBAIC03MzYsNyArNzM2LDcgQEAgc3RydWN0IHNjaGVkX2V4dF9vcHMge1xcbiBcXHQgKiBAY2dycDogY2dyb3VwIHdob3NlIHdlaWdodCBpcyBiZWluZyB1cGRhdGVkXFxuIFxcdCAqIEB3ZWlnaHQ6IG5ldyB3ZWlnaHQgWzEuLjEwMDAwXVxcbiBcXHQgKlxcbi1cXHQgKiBVcGRhdGUgQGNncnAncyB3ZWlnaHQgdG8gQHdlaWdodC5cXG4rXFx0ICogVXBkYXRlIEBjZ3JwJ3Mgd2VpZ2h0IHRvIEB3ZWlnaHQuIFRoaXMgb3BlcmF0aW9uIG1heSBibG9jay5cXG4gXFx0ICpcXG4gXFx0ICogS25vYnMgb2YgYSBjZ3JvdXAgYmVsb25nIHRvIHRoZSBwYXJlbnQsIHNvIHRoZSBzZXRfKiBvcHMgYXJlXFxuIFxcdCAqIGRlbGl2ZXJlZCB0byBAY2dycCdzIHBhcmVudCdzIHNjaGVkLiBUaGF0IHNjaGVkIG1heSBuZXZlciBoYXZlIHNlZW5cXG5AQCAtNzczLDkgKzc3MywxMCBAQCBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XFxuIFxcdCAqIEBjZ3JwOiBjZ3JvdXAgd2hvc2UgaWRsZSBzdGF0ZSBpcyBiZWluZyB1cGRhdGVkXFxuIFxcdCAqIEBpZGxlOiB3aGV0aGVyIHRoZSBjZ3JvdXAgaXMgZW50ZXJpbmcgb3IgZXhpdGluZyBpZGxlIHN0YXRlXFxuIFxcdCAqXFxuLVxcdCAqIFVwZGF0ZSBAY2dycCdzIGlkbGUgc3RhdGUgdG8gQGlkbGUuIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuXFxuLVxcdCAqIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmQgbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGVcXG4tXFx0ICogQlBGIHNjaGVkdWxlciB0byBhZGp1c3QgaXRzIGJlaGF2aW9yIGFjY29yZGluZ2x5LlxcbitcXHQgKiBVcGRhdGUgQGNncnAncyBpZGxlIHN0YXRlIHRvIEBpZGxlLiBUaGlzIG9wZXJhdGlvbiBtYXkgYmxvY2suIFRoaXNcXG4rXFx0ICogY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmRcXG4rXFx0ICogbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGUgQlBGIHNjaGVkdWxlciB0byBhZGp1c3QgaXRzIGJlaGF2aW9yXFxuK1xcdCAqIGFjY29yZGluZ2x5LlxcbiBcXHQgKlxcbiBcXHQgKiBEZWxpdmVyeSBmb2xsb3dzIHRoZSBzYW1lIHJ1bGUgYXMgY2dyb3VwX3NldF93ZWlnaHQoKS5cXG4gXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjExOjMxLjM5NzAwNDI5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcwNDI1NzUxMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNDSEVEX0NMQVNTX0VYVFwiLFxuICAgIFwiQ0dST1VQX1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N4X2dyb3VwX3NldF93ZWlnaHRcIixcbiAgICBcInNjeF9ncm91cF9zZXRfaWRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgY29uc3RyYWludHMgZm9yIHRoZSBzY2hlZF9leHQgc3Vic3lzdGVtLCBhbGxvd2luZyB0aGUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzIHRvIGJlIGltcGxlbWVudGVkIGFzIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgYW5kIGNvbnN0cmFpbnRzIG9mIHRoZXNlIGNhbGxiYWNrcywgd2hpY2ggYXJlIHRyaWdnZXJlZCB2aWEgY2dyb3VwIGF0dHJpYnV0ZSB3cml0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBpbnZva2UgdGhlc2UgY2FsbGJhY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NDExY2UyOGUzM2FkOTAxNjViMDcyYTY2MDU3MDdlYzg3OGI1YzlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDY6MTE6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuaW5kZXggYjY0NjcxMWE0NWZlZS4uNTNiODg4ZjVhNmM1MSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbkBAIC04MDc5LDcgKzgwNzksOSBAQCBzdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KTpcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9leGl0KTpcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9wcmVwX21vdmUpOlxuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF93ZWlnaHQpOlxuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9iYW5kd2lkdGgpOlxuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKTpcbiAjZW5kaWZcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vbmxpbmUpOlxuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY3B1X29mZmxpbmUpOlxuQEAgLTExMDU1LDMgKzExMDU3LDE5IEBAIF9faW5pdGNhbGwoc2N4X2luaXQpO1xuICNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG4gREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfYmFuZHdpZHRoX21heV9zbGVlcCk7XG4gI2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG4rXG4rLypcbisgKiBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXA6IGFkdmVydGlzZXMgdGhhdFxuKyAqIG9wcy5jZ3JvdXBfc2V0X3dlaWdodCgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay5cbisgKi9cbisjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxuK0RFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXApO1xuKyNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xuK1xuKy8qXG4rICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcDogYWR2ZXJ0aXNlcyB0aGF0XG4rICogb3BzLmNncm91cF9zZXRfaWRsZSgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay5cbisgKi9cbisjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxuK0RFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwKTtcbisjZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmggYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbmluZGV4IDUzZTEzNmE0NzkyNGQuLmY4MWQwM2RlMmQzYzcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuQEAgLTczNiw3ICs3MzYsNyBAQCBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XG4gXHQgKiBAY2dycDogY2dyb3VwIHdob3NlIHdlaWdodCBpcyBiZWluZyB1cGRhdGVkXG4gXHQgKiBAd2VpZ2h0OiBuZXcgd2VpZ2h0IFsxLi4xMDAwMF1cbiBcdCAqXG4tXHQgKiBVcGRhdGUgQGNncnAncyB3ZWlnaHQgdG8gQHdlaWdodC5cbitcdCAqIFVwZGF0ZSBAY2dycCdzIHdlaWdodCB0byBAd2VpZ2h0LiBUaGlzIG9wZXJhdGlvbiBtYXkgYmxvY2suXG4gXHQgKlxuIFx0ICogS25vYnMgb2YgYSBjZ3JvdXAgYmVsb25nIHRvIHRoZSBwYXJlbnQsIHNvIHRoZSBzZXRfKiBvcHMgYXJlXG4gXHQgKiBkZWxpdmVyZWQgdG8gQGNncnAncyBwYXJlbnQncyBzY2hlZC4gVGhhdCBzY2hlZCBtYXkgbmV2ZXIgaGF2ZSBzZWVuXG5AQCAtNzczLDkgKzc3MywxMCBAQCBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XG4gXHQgKiBAY2dycDogY2dyb3VwIHdob3NlIGlkbGUgc3RhdGUgaXMgYmVpbmcgdXBkYXRlZFxuIFx0ICogQGlkbGU6IHdoZXRoZXIgdGhlIGNncm91cCBpcyBlbnRlcmluZyBvciBleGl0aW5nIGlkbGUgc3RhdGVcbiBcdCAqXG4tXHQgKiBVcGRhdGUgQGNncnAncyBpZGxlIHN0YXRlIHRvIEBpZGxlLiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgd2hlblxuLVx0ICogYSBjZ3JvdXAgdHJhbnNpdGlvbnMgYmV0d2VlbiBpZGxlIGFuZCBub24taWRsZSBzdGF0ZXMsIGFsbG93aW5nIHRoZVxuLVx0ICogQlBGIHNjaGVkdWxlciB0byBhZGp1c3QgaXRzIGJlaGF2aW9yIGFjY29yZGluZ2x5LlxuK1x0ICogVXBkYXRlIEBjZ3JwJ3MgaWRsZSBzdGF0ZSB0byBAaWRsZS4gVGhpcyBvcGVyYXRpb24gbWF5IGJsb2NrLiBUaGlzXG4rXHQgKiBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4gYSBjZ3JvdXAgdHJhbnNpdGlvbnMgYmV0d2VlbiBpZGxlIGFuZFxuK1x0ICogbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGUgQlBGIHNjaGVkdWxlciB0byBhZGp1c3QgaXRzIGJlaGF2aW9yXG4rXHQgKiBhY2NvcmRpbmdseS5cbiBcdCAqXG4gXHQgKiBEZWxpdmVyeSBmb2xsb3dzIHRoZSBzYW1lIHJ1bGUgYXMgY2dyb3VwX3NldF93ZWlnaHQoKS5cbiBcdCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTE6MzEuMzk3MDA1NjU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MjM3MTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTY2hlZF9leHQgQlBGIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgYW5kIGBrZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQncyBpbnRyb2R1Y2luZyBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCB0byBgYnBmX3NjeF9jaGVja19tZW1iZXJgIHdpdGhpbiBgZXh0LmNgLiBUaGVuIHRoZXJlIGFyZSB0aGVzZSBgREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSYCBtYWNyb3MgZm9yIGBjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXBgIGFuZCBgY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcGAuICBIbW0sIGp1c3QgYWRkaW5nIEJQRiBzdHJ1Y3Qgb3BzIG1lbWJlcnMgYW5kIGNvbXBhdGliaWxpdHkgbWFya2Vycywgbm90aGluZyBlYXJ0aC1zaGF0dGVyaW5nIHlldC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmc/XG5cblRoaXMgY2hhbmdlIGVzc2VudGlhbGx5IGVuYWJsZXMgQlBGLWJhc2VkIHNjaGVkX2V4dCBzY2hlZHVsZXJzIHRvIGltcGxlbWVudCBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBhcyBjYWxsYmFja3MgdGhhdCAqY2FuKiBzbGVlcC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBvcGVucyB1cCBwb3NzaWJpbGl0aWVzLiBOb3csIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgYGJwZl9zY3hfY2hlY2tfbWVtYmVyYCBpcyByZWFsbHkgZG9pbmcuICBJIHRoaW5rIGl0J3MgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBtZW1iZXIgb2YgYHN0cnVjdCBzY2hlZF9leHRfb3BzYCBpcyBwZXJtaXR0ZWQgdG8gc2xlZXAsIG9yIGF0IGxlYXN0IGEgY2hlY2sgZm9yIHRoYXQuIEkgYmV0dGVyIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zIGhlcmUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMTozNi43NjkzNzk5NTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MTM1ODgzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2N4X2NoZWNrX21lbWJlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTc5OTg9c3RhdGljIGludCBicGZfc2N4X2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA2OS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwNzA6c3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDcxLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgzMDI9c3RhdGljIHN0cnVjdCBicGZfc3RydWN0X29wcyBicGZfc2NoZWRfZXh0X29wcyA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODMwNS1cXHQudW5yZWcgPSBicGZfc2N4X3VucmVnLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODMwNjpcXHQuY2hlY2tfbWVtYmVyID0gYnBmX3NjeF9jaGVja19tZW1iZXIsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzA3LVxcdC5pbml0X21lbWJlciA9IGJwZl9zY3hfaW5pdF9tZW1iZXIsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgzNzQ9c3RhdGljIHN0cnVjdCBicGZfc3RydWN0X29wcyBicGZfc2NoZWRfZXh0X29wc19jaWQgPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNzctXFx0LnVucmVnID0gYnBmX3NjeF91bnJlZyxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzNzg6XFx0LmNoZWNrX21lbWJlciA9IGJwZl9zY3hfY2hlY2tfbWVtYmVyLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM3OS1cXHQuaW5pdF9tZW1iZXIgPSBicGZfc2N4X2luaXRfbWVtYmVyLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDg5Mz1zdGF0aWMgaW50IF9faW5pdCBzY3hfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDg5OC1cXHQgKiBzY2hlZF9leHRfb3BzX2NpZCBtaXJyb3JzIHNjaGVkX2V4dF9vcHMgdXAgdG8gYW5kIGluY2x1ZGluZyBAcHJpdi5cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwODk5OlxcdCAqIEJvdGggYnBmX3NjeF9pbml0X21lbWJlcigpIGFuZCBicGZfc2N4X2NoZWNrX21lbWJlcigpIHVzZSBvZmZzZXRzXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDkwMC1cXHQgKiBmcm9tIHN0cnVjdCBzY2hlZF9leHRfb3BzOyBzY2hlZF9leHRfb3BzX2NpZCByZWxpZXMgb24gdGhvc2Ugb2Zmc2V0c1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTMxOT1zdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTAyMy0gKiBzaGFyZWQgZmllbGQgb2Zmc2V0cyB3b3JrIGZvciBib3RoIHN0cnVjdCB0eXBlcyBpbiBicGZfc2N4X2luaXRfbWVtYmVyKClcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MTAyNDogKiBhbmQgYnBmX3NjeF9jaGVja19tZW1iZXIoKS4gVGhlIGRlcHJlY2F0ZWQgY3B1X2FjcXVpcmUvY3B1X3JlbGVhc2VcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTAyNS0gKiBjYWxsYmFja3MgYXQgdGhlIHRhaWwgb2Ygc2NoZWRfZXh0X29wcyBhcmUgb21pdHRlZCBoZXJlIGVudGlyZWx5LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMTozOC4zMTA3NDI0NjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA4MDM0NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgYnBmX3NjeF9jaGVja19tZW1iZXJgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgYnBmX3NjeF9jaGVja19tZW1iZXJgIHdpdGhpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRob3NlIGVCUEYgY2hlY2tzIHJlbGF0ZWQgdG8gc2NoZWR1bGluZyBjb250ZXh0IGV4dGVuc2lvbnMuIEknbSBhc3N1bWluZyBpdCdzIHByb2JhYmx5IHZhbGlkYXRpbmcgc29tZSB1c2VyLXByb3ZpZGVkIHN0cnVjdHVyZSBtZW1iZXJzIGFnYWluc3QgYWxsb3dlZCB2YWx1ZXMgb3IgYWdhaW5zdCBzb21lIGludGVybmFsIHN0YXRlLCBtYXliZSBjaGVja2luZyBhbGlnbm1lbnQgb3Igc2l6ZSBjb25zdHJhaW50cyBiZWZvcmUgdGhlIHNjaGVkdWxlciBkb2VzIHNvbWV0aGluZyB3aXRoIHRoZW0uIEdpdmVuIHRoZSBuYW1lLCBpdCdzIGxpa2VseSBhIGNyaXRpY2FsIHBpZWNlIGluIG1haW50YWluaW5nIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkgd2hlbiBkZWFsaW5nIHdpdGggQlBGIHByb2dyYW1zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgc2NoZWR1bGVyIGV4dGVuc2lvbnMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGF0b21pY2l0eSBjb25jZXJucywgZXNwZWNpYWxseSBpZiB0aGUgY2hlY2tzIGludm9sdmUgc2hhcmVkIGRhdGEgb3IgaWYgdGhleSBhcmUgcGVyZm9ybWluZyBwb2ludGVyIGRlcmVmZXJlbmNlcywgYXMgdGhvc2UgYXJlIGFsd2F5cyBob3RzcG90cyBmb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMuIExldCdzIHNlZSBob3cgdGhleSd2ZSBoYW5kbGVkIHRoZSBlZGdlIGNhc2VzLCBhbmQgd2hhdCBlcnJvci1oYW5kbGluZyB0aGV5J3ZlIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDQ4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTE6NDEuOTE4Nzc4OTIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9zY2hlZC9leHQvZXh0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODA2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODA2NTpcXHRcXHR9XFxuODA2NjpcXHRcXG44MDY3OlxcdFxcdHJldHVybiAwO1xcbjgwNjg6XFx0fVxcbjgwNjk6XFx0XFxuODA3MDpcXHRzdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG44MDcxOlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXFxuODA3MjpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuODA3MzpcXHR7XFxuODA3NDpcXHRcXHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xcbjgwNzU6XFx0XFxuODA3NjpcXHRcXHRzd2l0Y2ggKG1vZmYpIHtcXG44MDc3OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXRfdGFzayk6XFxuODA3ODpcXHQjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbjgwNzk6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2luaXQpOlxcbjgwODA6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2V4aXQpOlxcbjgwODE6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3ByZXBfbW92ZSk6XFxuODA4MjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X3dlaWdodCk6XFxuODA4MzpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCk6XFxuODA4NDpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2lkbGUpOlxcbjgwODU6XFx0I2VuZGlmXFxuODA4NjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb25saW5lKTpcXG44MDg3OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vZmZsaW5lKTpcXG44MDg4OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXRfY2lkcyk6XFxuODA4OTpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBpbml0KTpcXG44MDkwOlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGV4aXQpOlxcbjgwOTE6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgc3ViX2F0dGFjaCk6XFxuODA5MjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBzdWJfZGV0YWNoKTpcXG44MDkzOlxcdFxcdFxcdGJyZWFrO1xcbjgwOTQ6XFx0XFx0ZGVmYXVsdDpcXG44MDk1OlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2VzbGVlcGFibGUpXFxuODA5NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDk3OlxcdFxcdH1cXG44MDk4OlxcdFxcbjgwOTk6XFx0I2lmZGVmIENPTkZJR19FWFRfU1VCX1NDSEVEXFxuODEwMDpcXHRcXHQvKlxcbjgxMDE6XFx0XFx0ICogRW5hYmxlIHByaXZhdGUgc3RhY2sgZm9yIG9wZXJhdGlvbnMgdGhhdCBjYW4gbmVzdCBhbG9uZyB0aGVcXG44MTAyOlxcdFxcdCAqIGhpZXJhcmNoeS5cXG44MTAzOlxcdFxcdCAqXFxuODEwNDpcXHRcXHQgKiBYWFggLSBJZGVhbGx5LCB3ZSBzaG91bGQgb25seSBkbyB0aGlzIGZvciBzY2hlZHMgdGhhdCBhbGxvd1xcbjgxMDU6XFx0XFx0ICogc3ViLXNjaGVkcyBhbmQgc3ViLXNjaGVkcyB0aGVtc2VsdmVzIGJ1dCBJIGRvbid0IGtub3cgaG93IHRvIGFjY2Vzc1xcbjgxMDY6XFx0XFx0ICogc3RydWN0X29wcyBmcm9tIGhlcmUuXFxuODEwNzpcXHRcXHQgKi9cXG44MTA4OlxcdFxcdHN3aXRjaCAobW9mZikge1xcbjgxMDk6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgZGlzcGF0Y2gpOlxcbjgxMTA6XFx0XFx0XFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2Vwcml2X3N0YWNrX3JlcXVlc3RlZCA9IHRydWU7XFxuODExMTpcXHRcXHRcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXJlY3Vyc2lvbl9kZXRlY3RlZCA9IHNjeF9wc3RhY2tfcmVjdXJzaW9uX29uX2Rpc3BhdGNoO1xcbjgxMTI6XFx0XFx0XFx0YnJlYWs7XFxuODExMzpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBzdWJfY2Fwc191cGRhdGVkKTpcXG44MTE0OlxcdFxcdFxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlcHJpdl9zdGFja19yZXF1ZXN0ZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMTo0MS45MTkyODUzOTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQwMjEzMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gaG93IEJQRiBpbnRlcmFjdHMgd2l0aCBjZXJ0YWluIGNncm91cCBjYWxsYmFja3MuIFNwZWNpZmljYWxseSwgaXQncyBsZXZlcmFnaW5nIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgdG8gZW5hYmxlIHNsZWVwYWJsZSBiZWhhdmlvciBpbiB0aGUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzLiBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdCBiZWNhdXNlIGl0IGFsbG93cyBCUEYgcHJvZ3JhbXMgdG8gdXRpbGl6ZSB0aGVzZSBmb3JtZXJseSBub24tc2xlZXBhYmxlIGZ1bmN0aW9ucy5cblxuVGhlIHBhdGNoIGluY2x1ZGVzIHRoZSBuZWNlc3NhcnkgYERFRklORV9TQ1hfQ09NUEFUX01BUktFUmAgbWFjcm9zOiBgY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwYCBhbmQgYGNncm91cF9zZXRfaWRsZV9tYXlfc2xlZXBgLCB3aGljaCBhcmUgaW1wb3J0YW50IGZvciBjb21wYXRpYmlsaXR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIGZ1enphYmxlP1wiIFRoZSBhbnN3ZXIgaXMgZGVmaW5pdGVseSB5ZXMsIGJlY2F1c2UgaXQgYWx0ZXJzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIHBvdGVudGlhbGx5IHRoZSBzdHJ1Y3Rfb3BzIGNvbnN0cmFpbnRzIHJlbGF0ZWQgdG8gYHNjaGVkX2V4dGAuIFRoYXQgb3BlbnMgdGhlIGRvb3IgdG8gbmV3IGF0dGFjayBzdXJmYWNlcy5cblxuSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gYGJwZl9zY3hfY2hlY2tfbWVtYmVyYCBpcyBhIGtleSBmdW5jdGlvbiB0byBleGFtaW5lLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gSSBuZWVkIHRvIHNlZSBpZiBpdCdzIHRoZSBvbmx5IHJlbGV2YW50IG9uZS4gTGV0J3MgZGVsdmUgaW50byB0aGUgZnVuY3Rpb24gY2FsbHMgYW5kIHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9mIHRoZXNlIGNhbGxiYWNrczsgdGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgY3JpdGljYWwgcG9pbnRzLiBXaGVyZSBhcmUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgYWN0dWFsbHkgaW52b2tlZD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayB3aWxsIGJlIGNydWNpYWwgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWd5IGRldmVsb3BtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTc2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTE6NDcuNjU5NTAxNTIxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzA5NDk1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwX3NldF93ZWlnaHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0PTExNDE9d2lsbCBiZSByZWZlcnJlZCB0by4gQWxsIHRpbWUgZHVyYXRpb25zIGFyZSBpbiBtaWNyb3NlY29uZHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTE3My1cXHRUaGlzIGZpbGUgYWZmZWN0cyBvbmx5IHByb2Nlc3NlcyB1bmRlciB0aGUgZmFpci1jbGFzcyBzY2hlZHVsZXIgYW5kIGEgQlBGXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0OjExNzQ6XFx0c2NoZWR1bGVyIHdpdGggdGhlIGBgY2dyb3VwX3NldF93ZWlnaHRgYCBjYWxsYmFjayBkZXBlbmRpbmcgb24gd2hhdCB0aGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTE3NS1cXHRjYWxsYmFjayBhY3R1YWxseSBkb2VzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTExODktXFx0VGhpcyBmaWxlIGFmZmVjdHMgb25seSBwcm9jZXNzZXMgdW5kZXIgdGhlIGZhaXItY2xhc3Mgc2NoZWR1bGVyIGFuZCBhIEJQRlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdDoxMTkwOlxcdHNjaGVkdWxlciB3aXRoIHRoZSBgYGNncm91cF9zZXRfd2VpZ2h0YGAgY2FsbGJhY2sgZGVwZW5kaW5nIG9uIHdoYXQgdGhlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTExOTEtXFx0Y2FsbGJhY2sgYWN0dWFsbHkgZG9lcy5cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDkxMD12b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyB3ZWlnaHQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MTYtXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTE3OlxcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgc2NoIFxcdTAwMjZcXHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X3dlaWdodCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MTgtXFx0ICAgIHRnLVxcdTAwM2VzY3gud2VpZ2h0ICE9IHdlaWdodClcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5MTk6XFx0XFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X3dlaWdodCwgTlVMTCwgdGdfY2dycCh0ZyksIHdlaWdodCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTIwLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDcwPXN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgxLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9wcmVwX21vdmUpOlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODA4MjpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X3dlaWdodCk6XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfYmFuZHdpZHRoKTpcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI0Mz1zdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19jZ3JvdXBfY2FuY2VsX21vdmUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgY2dyb3VwICpmcm9tLCBzdHJ1Y3QgY2dyb3VwICp0bykge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyNDQ6c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IGNncm91cCAqY2dycCwgdTMyIHdlaWdodCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyNDUtc3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IGNncm91cCAqY2dycCwgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNTk9c3RhdGljIHN0cnVjdCBzY2hlZF9leHRfb3BzIF9fYnBmX29wc19zY2hlZF9leHRfb3BzID0ge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04Mjg1LVxcdC5jZ3JvdXBfY2FuY2VsX21vdmVcXHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9jYW5jZWxfbW92ZSxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyODY6XFx0LmNncm91cF9zZXRfd2VpZ2h0XFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X3dlaWdodCxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODctXFx0LmNncm91cF9zZXRfYmFuZHdpZHRoXFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X2JhbmR3aWR0aCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODMyNj1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIF9fYnBmX29wc19zY2hlZF9leHRfb3BzX2NpZCA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM1MC1cXHQuY3B1Y3RsX2NhbmNlbF9tb3ZlXFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfY2FuY2VsX21vdmUsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MzUxOlxcdC5jcHVjdGxfc2V0X3dlaWdodFxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF93ZWlnaHQsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzUyLVxcdC5jcHVjdGxfc2V0X2JhbmR3aWR0aFxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9iYW5kd2lkdGgsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwNzc4PXN0YXRpYyBjb25zdCB1MzIgc2N4X2tmX2FsbG93X2ZsYWdzW10gPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzg5LVxcdFtTQ1hfT1BfSURYKGNncm91cF9jYW5jZWxfbW92ZSldID0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA3OTA6XFx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF93ZWlnaHQpXVxcdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA3OTEtXFx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF9iYW5kd2lkdGgpXSA9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA4OTM9c3RhdGljIGludCBfX2luaXQgc2N4X2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTQtXFx0Q0lEX09GRlNFVF9NQVRDSChjZ3JvdXBfY2FuY2VsX21vdmUsIGNwdWN0bF9jYW5jZWxfbW92ZSk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk1NTpcXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9zZXRfd2VpZ2h0LCBjcHVjdGxfc2V0X3dlaWdodCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1Ni1cXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9zZXRfYmFuZHdpZHRoLCBjcHVjdGxfc2V0X2JhbmR3aWR0aCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTExMDU4PURFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X2JhbmR3aWR0aF9tYXlfc2xlZXApO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA2MS0vKlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTEwNjI6ICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDYzOiAqIG9wcy5jZ3JvdXBfc2V0X3dlaWdodCgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay5cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDY0LSAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNjUtI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDY2OkRFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXApO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNjctI2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTMxOT1zdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzM0LVxcdC8qKlxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3MzU6XFx0ICogQGNncm91cF9zZXRfd2VpZ2h0OiBBIGNncm91cCdzIHdlaWdodCBpcyBiZWluZyBjaGFuZ2VkXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTczNi1cXHQgKiBAY2dycDogY2dyb3VwIHdob3NlIHdlaWdodCBpcyBiZWluZyB1cGRhdGVkXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzQ1LVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3NDY6XFx0dm9pZCAoKmNncm91cF9zZXRfd2VpZ2h0KShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCB1MzIgd2VpZ2h0KTtcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzQ3LVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc2NS1cXHQgKlxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3NjY6XFx0ICogRGVsaXZlcnkgZm9sbG93cyB0aGUgc2FtZSBydWxlIGFzIGNncm91cF9zZXRfd2VpZ2h0KCkuXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc2Ny1cXHQgKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODAtXFx0ICpcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzgxOlxcdCAqIERlbGl2ZXJ5IGZvbGxvd3MgdGhlIHNhbWUgcnVsZSBhcyBjZ3JvdXBfc2V0X3dlaWdodCgpLlxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODItXFx0ICovXFxuLS1cXG50b29scy9zY2hlZF9leHQvc2N4X2ZsYXRjZy5icGYuYz01ODA9dm9pZCBCUEZfU1RSVUNUX09QUyhmY2dfcXVpZXNjZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBkZXFfZmxhZ3MpXFxuLS1cXG50b29scy9zY2hlZF9leHQvc2N4X2ZsYXRjZy5icGYuYy01ODgtXFxudG9vbHMvc2NoZWRfZXh0L3NjeF9mbGF0Y2cuYnBmLmM6NTg5OnZvaWQgQlBGX1NUUlVDVF9PUFMoZmNnX2Nncm91cF9zZXRfd2VpZ2h0LCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCB1MzIgd2VpZ2h0KVxcbnRvb2xzL3NjaGVkX2V4dC9zY3hfZmxhdGNnLmJwZi5jLTU5MC17XFxuLS1cXG50b29scy9zY2hlZF9leHQvc2N4X2ZsYXRjZy5icGYuYz05NjI9U0NYX09QU19ERUZJTkUoZmxhdGNnX29wcyxcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9zY3hfZmxhdGNnLmJwZi5jLTk3MC1cXHQgICAgICAgLmluaXRfdGFza1xcdFxcdD0gKHZvaWQgKilmY2dfaW5pdF90YXNrLFxcbnRvb2xzL3NjaGVkX2V4dC9zY3hfZmxhdGNnLmJwZi5jOjk3MTpcXHQgICAgICAgLmNncm91cF9zZXRfd2VpZ2h0XFx0PSAodm9pZCAqKWZjZ19jZ3JvdXBfc2V0X3dlaWdodCxcXG50b29scy9zY2hlZF9leHQvc2N4X2ZsYXRjZy5icGYuYy05NzItXFx0ICAgICAgIC5jZ3JvdXBfaW5pdFxcdFxcdD0gKHZvaWQgKilmY2dfY2dyb3VwX2luaXQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF4aW1hbC5icGYuYz0xMTg9dm9pZCBCUEZfU1RSVUNUX09QUyhtYXhpbWFsX2Nncm91cF9jYW5jZWxfbW92ZSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heGltYWwuYnBmLmMtMTIxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXhpbWFsLmJwZi5jOjEyMjp2b2lkIEJQRl9TVFJVQ1RfT1BTKG1heGltYWxfY2dyb3VwX3NldF93ZWlnaHQsIHN0cnVjdCBjZ3JvdXAgKmNncnAsIHUzMiB3ZWlnaHQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heGltYWwuYnBmLmMtMTIzLXt9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF4aW1hbC5icGYuYz0xMzg9c3RydWN0IHNjaGVkX2V4dF9vcHMgbWF4aW1hbF9vcHMgPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF4aW1hbC5icGYuYy0xNjItXFx0LmNncm91cF9jYW5jZWxfbW92ZVxcdD0gKHZvaWQgKikgbWF4aW1hbF9jZ3JvdXBfY2FuY2VsX21vdmUsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heGltYWwuYnBmLmM6MTYzOlxcdC5jZ3JvdXBfc2V0X3dlaWdodFxcdD0gKHZvaWQgKikgbWF4aW1hbF9jZ3JvdXBfc2V0X3dlaWdodCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF4aW1hbC5icGYuYy0xNjQtXFx0LmNncm91cF9zZXRfYmFuZHdpZHRoXFx0PSAodm9pZCAqKSBtYXhpbWFsX2Nncm91cF9zZXRfYmFuZHdpZHRoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMTo0OS4xOTA0NTQ3NTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgyNTg1OTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkludmVzdGlnYXRpbmcgV2VpZ2h0IGFuZCBJZGxlIFNldHRpbmdzIGluIHRoZSBDZ3JvdXAgQ29udGV4dCoqXG5cbkhtbSwgc28gYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBjYWxscyBgY2dyb3VwX3NldF93ZWlnaHRgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTm93LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcywgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBoZXJlLCBhbmQgc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgcHJvcGFnYXRlLCBhbmQgdGhlIGNoYWluIG9mIG9wZXJhdGlvbnMuIE5vdywgbGV0J3Mgc2VlLCB0aGUgb3RoZXIgcGFydCBvZiBteSBtZW50YWwgcHV6emxlIGlzIHdoZXJlIGlzIGBjZ3JvdXBfc2V0X2lkbGVgIGJlaW5nIGNhbGxlZD8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyBvZiB0aGF0IHdpbGwgZ2l2ZSBhIGdvb2QgaW5zaWdodCBpbnRvIHRoZSBvdGhlciByZWxhdGVkIG9wZXJhdGlvbnMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMwNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjExOjUyLjU3MzA0Mjk3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NzkzNzcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfc2V0X2lkbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0PTExNDE9d2lsbCBiZSByZWZlcnJlZCB0by4gQWxsIHRpbWUgZHVyYXRpb25zIGFyZSBpbiBtaWNyb3NlY29uZHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTI2OS1cXHRUaGlzIGZpbGUgYWZmZWN0cyBvbmx5IHByb2Nlc3NlcyB1bmRlciB0aGUgZmFpci1jbGFzcyBzY2hlZHVsZXIgYW5kIGEgQlBGXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0OjEyNzA6XFx0c2NoZWR1bGVyIHdpdGggdGhlIGBgY2dyb3VwX3NldF9pZGxlYGAgY2FsbGJhY2sgZGVwZW5kaW5nIG9uIHdoYXQgdGhlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTEyNzEtXFx0Y2FsbGJhY2sgYWN0dWFsbHkgZG9lcy5cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDkyNj12b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkzMi1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5MzM6XFx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBzY2ggXFx1MDAyNlxcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTM0OlxcdFxcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTM1LVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDcwPXN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfYmFuZHdpZHRoKTpcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwODQ6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKTpcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwODUtI2VuZGlmXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNDU9c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IGNncm91cCAqY2dycCwgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MjQ2OnN0YXRpYyB2b2lkIHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfaWRsZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBib29sIGlkbGUpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjQ3LSNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI1OT1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHMgX19icGZfb3BzX3NjaGVkX2V4dF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODctXFx0LmNncm91cF9zZXRfYmFuZHdpZHRoXFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X2JhbmR3aWR0aCxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyODg6XFx0LmNncm91cF9zZXRfaWRsZVxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9pZGxlLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI4OS0jZW5kaWZcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODMyNj1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIF9fYnBmX29wc19zY2hlZF9leHRfb3BzX2NpZCA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM1Mi1cXHQuY3B1Y3RsX3NldF9iYW5kd2lkdGhcXHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfYmFuZHdpZHRoLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODM1MzpcXHQuY3B1Y3RsX3NldF9pZGxlXFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X2lkbGUsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzU0LSNlbmRpZlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDc3OD1zdGF0aWMgY29uc3QgdTMyIHNjeF9rZl9hbGxvd19mbGFnc1tdID0ge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5MS1cXHRbU0NYX09QX0lEWChjZ3JvdXBfc2V0X2JhbmR3aWR0aCldID0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA3OTI6XFx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF9pZGxlKV1cXHQ9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzkzLSNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA4OTM9c3RhdGljIGludCBfX2luaXQgc2N4X2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTYtXFx0Q0lEX09GRlNFVF9NQVRDSChjZ3JvdXBfc2V0X2JhbmR3aWR0aCwgY3B1Y3RsX3NldF9iYW5kd2lkdGgpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5NTc6XFx0Q0lEX09GRlNFVF9NQVRDSChjZ3JvdXBfc2V0X2lkbGUsIGNwdWN0bF9zZXRfaWRsZSk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1OC0jZW5kaWZcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTEwNjY9REVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDY5LS8qXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMTA3MDogKiBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDcxOiAqIG9wcy5jZ3JvdXBfc2V0X2lkbGUoKSBtYXkgYmUgaW1wbGVtZW50ZWQgYXMgYSBzbGVlcGFibGUgY2FsbGJhY2suXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA3Mi0gKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDczLSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMTA3NDpERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA3NS0jZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzE5PXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03NzEtXFx0LyoqXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjc3MjpcXHQgKiBAY2dyb3VwX3NldF9pZGxlOiBBIGNncm91cCdzIGlkbGUgc3RhdGUgaXMgYmVpbmcgY2hhbmdlZFxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03NzMtXFx0ICogQGNncnA6IGNncm91cCB3aG9zZSBpZGxlIHN0YXRlIGlzIGJlaW5nIHVwZGF0ZWRcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODItXFx0ICovXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjc4MzpcXHR2b2lkICgqY2dyb3VwX3NldF9pZGxlKShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBib29sIGlkbGUpO1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODQtXFxuLS1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0Lmg9MjIzPXN0YXRpYyBpbmxpbmUgbG9uZyBzY3hfaG90cGx1Z19zZXEodm9pZClcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaC0yNzItICogLSB2Ni4xNzogb3BzLmNncm91cF9zZXRfYmFuZHdpZHRoKClcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0Lmg6MjczOiAqIC0gdjYuMTk6IG9wcy5jZ3JvdXBfc2V0X2lkbGUoKVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaC0yNzQtICogLSB2Ny4xOiAgb3BzLnN1Yl9hdHRhY2goKSwgb3BzLnN1Yl9kZXRhY2goKSwgb3BzLnN1Yl9jZ3JvdXBfaWRcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaC0yOTgtXFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0Lmg6Mjk5OlxcdGlmIChfX3NrZWwtXFx1MDAzZXN0cnVjdF9vcHMuX19vcHNfbmFtZS1cXHUwMDNlY2dyb3VwX3NldF9pZGxlIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFxcXFxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaDozMDA6XFx0ICAgICFfX0NPTVBBVF9zdHJ1Y3RfaGFzX2ZpZWxkKFxcXCJzY2hlZF9leHRfb3BzXFxcIiwgXFxcImNncm91cF9zZXRfaWRsZVxcXCIpKSB7IFxcXFxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0Lmg6MzAxOlxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV0FSTklORzoga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBvcHMuY2dyb3VwX3NldF9pZGxlKClcXFxcblxcXCIpOyBcXFxcXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbXBhdC5oOjMwMjpcXHRcXHRfX3NrZWwtXFx1MDAzZXN0cnVjdF9vcHMuX19vcHNfbmFtZS1cXHUwMDNlY2dyb3VwX3NldF9pZGxlID0gTlVMTDtcXHRcXFxcXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbXBhdC5oLTMwMy1cXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMTo1NC42NDA5ODU3MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1NDQ0ODU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqUmVhY2hpbmcgdGhlIENhbGxiYWNrcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGVzZSBjYWxsYmFja3MgYXJlIGludm9rZWQsIHNwZWNpZmljYWxseSB0aG9zZSBzZXQgYnkgYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsIHBhdGguIEkgbmVlZCB0byB0cmFjZSB3aGVyZSB0aG9zZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSB0aGVzZSBjYWxsYmFja3MgYXJlIHRyaWdnZXJlZC4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBwcm9iYWJseSBoYXMgYSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGluIHRoZSBzY2hlZHVsZXIgY29yZSB0byBzZXQgQ1BVIHdlaWdodHMsIHByb2JhYmx5IHNvbWV0aGluZyBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AuIEknbGwgd2FudCB0byBjb25maXJtIGlmIGBjcHVfd2VpZ2h0X3dyaXRlX3M2NGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGlzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc3RhY2tzIGFuZCBzZWUgd2hlcmUgdGhleSBlbmQgdXAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDUzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTE6NTguNjk1NDM3MzI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgyMTEwMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjeF9ncm91cF9zZXRfd2VpZ2h0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9jb3JlLmM9OTgyMD1zdGF0aWMgaW50IGNwdV9zaGFyZXNfd3JpdGVfdTY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk4MjgtXFx0aWYgKCFyZXQpXFxua2VybmVsL3NjaGVkL2NvcmUuYzo5ODI5OlxcdFxcdHNjeF9ncm91cF9zZXRfd2VpZ2h0KGNzc190Zyhjc3MpLFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTgzMC1cXHRcXHRcXHRcXHQgICAgIHNjaGVkX3dlaWdodF90b19jZ3JvdXAoc2hhcmV2YWwpKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTA0MjU9c3RhdGljIGludCBjcHVfd2VpZ2h0X3dyaXRlX3U2NChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDQzNy1cXHRpZiAoIXJldClcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjEwNDM4OlxcdFxcdHNjeF9ncm91cF9zZXRfd2VpZ2h0KGNzc190Zyhjc3MpLCBjZ3JwX3dlaWdodCk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDQzOS1cXHRyZXR1cm4gcmV0O1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz0xMDQ2MD1zdGF0aWMgaW50IGNwdV93ZWlnaHRfbmljZV93cml0ZV9zNjQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTA0NzQtXFx0aWYgKCFyZXQpXFxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDQ3NTpcXHRcXHRzY3hfZ3JvdXBfc2V0X3dlaWdodChjc3NfdGcoY3NzKSxcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwNDc2LVxcdFxcdFxcdFxcdCAgICAgc2NoZWRfd2VpZ2h0X3RvX2Nncm91cCh3ZWlnaHQpKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDg5MT12b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MDktXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTEwOnZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIHdlaWdodClcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MTEte1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD04MD12b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODE6dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgY2dycF93ZWlnaHQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODItdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD05MD1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2Nncm91cF9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjkxOnN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgY2dycF93ZWlnaHQpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05Mi1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKSB7fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjowMC4wNzc1NTE5MDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMjczNDA0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IEJyYWluJ3MgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZSwgYW5kIEkgc2VlIHRoZSBmdW5jdGlvbiBgc2N4X2dyb3VwX3NldF9pZGxlYC4uLiBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHJlbGF0ZWQgY29uY2VwdHMuIEknbSB3b25kZXJpbmcgaWYgaXQncyBnb3QgYW4gaW1wYWN0IG9uIGFueSBvZiB0aGUgY29yZSBhbGdvcml0aG1zLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGltcGxpY2F0aW9ucyBvbiB3aGF0ZXZlciBwcm9jZXNzIGlzIGJlaW5nIG1hbmFnZWQsIHNvIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGluZmx1ZW5jZXMgY29uY3VycmVuY3kgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIHN5c3RlbSwgbGlrZSB0aHJlYWQgcG9vbGluZywgbWVtb3J5IHVzYWdlLCBhbmQgaWRsZSB0aW1lIG1hbmFnZW1lbnQgdG8gZW5zdXJlIHRoaW5ncyBzdGF5IGVmZmljaWVudCBhbmQgc3RhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjEyOjAzLjM5MDI4ODc5NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzQyNjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3hfZ3JvdXBfc2V0X2lkbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2NvcmUuYz0xMDI1NT1zdGF0aWMgaW50IGNwdV9pZGxlX3dyaXRlX3M2NChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2MS1cXHRpZiAoIXJldClcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjEwMjYyOlxcdFxcdHNjeF9ncm91cF9zZXRfaWRsZShjc3NfdGcoY3NzKSwgaWRsZSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2My1cXHRyZXR1cm4gcmV0O1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00OTEwPXZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIHdlaWdodClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkyNS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5MjY6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI3LXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9ODE9dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgY2dycF93ZWlnaHQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODMtdm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjkyOnN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05My1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cykge31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTI6MDQuNzQzNzIxMDkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMzIyMzE2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXcgQlBGIENhbGxiYWNrIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBhYmlsaXR5IGZvciB0aGVzZSBCUEYgY2FsbGJhY2tzIHRvIHNsZWVwLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgc2hpZnQuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGlnIGludG8gYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAgZGlyZWN0bHksIGV4cGVjdGluZyBtb2RpZmljYXRpb25zIHRoZXJlLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gdGhlIHBhdGNoIGRvZXNuJ3QgYWN0dWFsbHkgdG91Y2ggdGhvc2UgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIEl0J3MgbW9kaWZ5aW5nIGBicGZfc2N4X2NoZWNrX21lbWJlcmAsIGVuYWJsaW5nIEJQRiBwcm9ncmFtcyB0byB1dGlsaXplIHNsZWVwYWJsZSBmdW5jdGlvbnMgd2l0aGluIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgLiBFc3NlbnRpYWxseSwgdGhlIEJQRiB2ZXJpZmllciBpcyBiZWluZyByZWxheGVkIHRvIHBlcm1pdCBzbGVlcGFibGUgcHJvZ3JhbXMgZm9yIHRoZXNlIHNwZWNpZmljIGNhbGxiYWNrcy4gTm93IEkgdW5kZXJzdGFuZC4gVGhpcyBpcyBjbGV2ZXIuXG5cblRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8ga2VlcCBhbiBleWUgb24gYXJlIGBDT05GSUdfU0NIRURfQ0xBU1NfRVhUYCBhbmQgYENPTkZJR19FWFRfR1JPVVBfU0NIRURgLiBUaW1lIHRvIGNoZWNrIEtjb25maWcgYW5kIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIGBDT05GSUdfRVhUX0dST1VQX1NDSEVEYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgd2hhdCBJIHJlYWxseSBuZWVkIHRvIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjoxMC45NzU5NTQ0NjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTg5NzA2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVF9HUk9VUF9TQ0hFRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTE4Nz1jb25maWcgUlRfR1JPVVBfU0NIRURfREVGQVVMVF9ESVNBQkxFRFxcbi0tXFxuaW5pdC9LY29uZmlnLTExOTctXFxuaW5pdC9LY29uZmlnOjExOTg6Y29uZmlnIEVYVF9HUk9VUF9TQ0hFRFxcbmluaXQvS2NvbmZpZy0xMTk5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTI6MTIuODc0OTI5MzE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjMxMjI1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBFWFRfR1JPVVBfU0NIRUQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYEVYVF9HUk9VUF9TQ0hFRGAgbW9kdWxlIGluc2lkZSBhbmQgb3V0LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyBieSBtYXBwaW5nIGl0cyBkZXBlbmRlbmNpZXMuIFdoZXJlIGRvZXMgdGhpcyB0aGluZyBsaXZlPyBXaGF0IGRvZXMgaXQgcmVseSBvbiB0byBmdW5jdGlvbj8gV2hhdCBwaWVjZXMgb2YgdGhlIHN5c3RlbSBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciBpdCB0byBldmVuICpiZSo/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSwgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZSBvdGhlciBtb2R1bGVzIGluIHRoaXMsIGZyYW5rbHksIGNvbXBsZXggc3lzdGVtLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBlY29zeXN0ZW0uIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjExLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTI6MTYuMTk4MDUzNzg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTE5NSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE5NTpcXHRcXG4xMTk2OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjExOTc6XFx0XFxuMTE5ODpcXHRjb25maWcgRVhUX0dST1VQX1NDSEVEXFxuMTE5OTpcXHRcXHRib29sXFxuMTIwMDpcXHRcXHRkZXBlbmRzIG9uIFNDSEVEX0NMQVNTX0VYVCBcXHUwMDI2XFx1MDAyNiBDR1JPVVBfU0NIRURcXG4xMjAxOlxcdFxcdHNlbGVjdCBHUk9VUF9TQ0hFRF9XRUlHSFRcXG4xMjAyOlxcdFxcdHNlbGVjdCBHUk9VUF9TQ0hFRF9CQU5EV0lEVEhcXG4xMjAzOlxcdFxcdGRlZmF1bHQgeVxcbjEyMDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjEyOjE2LjE5ODE3NTk4NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTU0MDQ2NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gU2NoZWR1bGVyIEV4dGVuc2lvbnMgYW5kIGNncm91cHMqKlxuXG5SaWdodCwgc28gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYC4gTWFrZXMgc2Vuc2UsIHRoZXkncmUgb2Z0ZW4gaW50ZXJ0d2luZWQgd2hlbiB5b3UncmUgbG9va2luZyBhdCBleHRlbmRpbmcgc2NoZWR1bGVyIGNhcGFiaWxpdGllcyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCBgU0NIRURfQ0xBU1NfRVhUYC4gSXQncyBsaWtlbHkgdGhlIGNvcmUgZWxlbWVudCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgZmlyc3QuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBncmFzcCBpdHMgaW1wbGljYXRpb25zIGJlZm9yZSBJIG1vdmUgb24gdG8gaG93IGl0IGludGVncmF0ZXMgd2l0aCwgb3IgaXMgbGV2ZXJhZ2VkIGJ5LCB0aGUgY2dyb3VwIHNjaGVkdWxpbmcgZnJhbWV3b3JrLiBXaGF0IGV4YWN0bHkgZG9lcyB0aGlzIGV4dGVuc2lvbiBwcm92aWRlLCBhbmQgaG93IGRvZXMgaXQgbW9kaWZ5IG9yIGF1Z21lbnQgdGhlIHN0YW5kYXJkIHNjaGVkdWxlciBjbGFzc2VzPyBMZXQncyBnZXQgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIGFuZCBob3cgaXQgaXMgZW1wbG95ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTQyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjoxOS43NTIyMjQ0NDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTgxMTYzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNDSEVEX0NMQVNTX0VYVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTE1MT1jb25maWcgU0NIRURfQ09SRVxcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xNjgtXFxua2VybmVsL0tjb25maWcucHJlZW1wdDoxNjk6Y29uZmlnIFNDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTcwLVxcdGJvb2wgXFxcIkV4dGVuc2libGUgU2NoZWR1bGluZyBDbGFzc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTI6MjEuMTUwMzQ3Mjc3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MDk3ODM1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIFByZWVtcHRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgU0NIRURfQ0xBU1NfRVhUYCBpcyBiZWluZyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIGBrZXJuZWwvS2NvbmZpZy5wcmVlbXB0YC4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIHByZWVtcHRpb24tcmVsYXRlZCBvcHRpb25zIGFyZSBkZWZpbmVkLiBJdCdzIGEga2V5IGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBzdGFydCB0aGVyZSBhbmQgc2VlIGlmIGBTQ0hFRF9DTEFTU19FWFRgIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBGcm9tIHRoYXQsIEkgY2FuIGRldGVybWluZSBob3cgdGhlIHNldHRpbmcgaXMgY29udHJvbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjoyOC41NjAxMzI4NTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNjUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjU6XFx0XFx0ICBTQ0hFRF9DT1JFIGlzIGRlZmF1bHQgZGlzYWJsZWQuIFdoZW4gaXQgaXMgZW5hYmxlZCBhbmQgdW51c2VkLFxcbiAxNjY6XFx0XFx0ICB3aGljaCBpcyB0aGUgbGlrZWx5IHVzYWdlIGJ5IExpbnV4IGRpc3RyaWJ1dGlvbnMsIHRoZXJlIHNob3VsZFxcbiAxNjc6XFx0XFx0ICBiZSBubyBtZWFzdXJhYmxlIGltcGFjdCBvbiBwZXJmb3JtYW5jZS5cXG4gMTY4OlxcdFxcbiAxNjk6XFx0Y29uZmlnIFNDSEVEX0NMQVNTX0VYVFxcbiAxNzA6XFx0XFx0Ym9vbCBcXFwiRXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXFxcIlxcbiAxNzE6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuIDE3MjpcXHRcXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG4gMTczOlxcdFxcdHNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbiAxNzQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjoyOC41NjAxOTc2NjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYyNTE3NDc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNjaGVkdWxpbmcgRXh0ZW5zaW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGFuZCBpbW1lZGlhdGVseSwgdGhlIGZsYWdzIGp1bXAgb3V0IOKAkyB3ZSdyZSBkZWFsaW5nIHdpdGggYFNDSEVEX0NMQVNTX0VYVGAsIGBDR1JPVVBfU0NIRURgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLiBUaGVzZSBhcmUgdGhlIGZvdW5kYXRpb25hbCBwaWVjZXMgb2YgdGhpcyBhcmNoaXRlY3R1cmUuIE15IHByaW1hcnkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGludGVyYWN0IHdpdGggc2NoZWR1bGluZyBhbmQgZ3JvdXBpbmcuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAg4oCTIHRob3NlIGFyZSB0aGUga2V5IGNvbnRyb2wgcG9pbnRzLiBJIGFsc28gbm90ZWQgYGJwZl9zY3hfY2hlY2tfbWVtYmVyYCBidXQgdGhhdCdzIHN0YXRpYyBzbyB3aGlsZSBJIGNhbid0IGxvb2sgZGlyZWN0bHkgYXQgaXQsIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgd29ydGgga2VlcGluZyBpbiBtaW5kLiBXYWl0IGEgbWludXRlLCBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBmdW5jdGlvbiBhcmVuJ3Qgc3RhdGljLiBMZXQncyBjb25maXJtIHRoYXQgYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAgYXJlbid0IHN0YXRpYyBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AuIEp1c3Qgd2FudCB0byBjb25maXJtIGJlZm9yZSBjb250aW51aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYwNywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjEyOjM1LjE4NTM3NDk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQyODcyMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2V4dC9leHQuYz00ODkxPXZvaWQgc2N4X2Nncm91cF9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkwOS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5MTA6dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgd2VpZ2h0KVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkxMS17XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTgwPXZvaWQgc2N4X2Nncm91cF9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo4MTp2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC04Mi12b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTkwPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTE6c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTkyLXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpIHt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjEyOjM2LjYyODI1MjI1N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTI1MjI2NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBFbmhhbmNlbWVudCBmb3IgU2NoZWRfRXh0IGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gdGhlIEJQRiB2ZXJpZmllciBmb3IgYHNjaGVkX2V4dGAgaGFzIGJlZW4gdXBkYXRlZCDigJMgdGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJJ20gcGlja2luZyB1cCBvbi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNsZWVwYWJsZSBwcm9ncmFtcyBzcGVjaWZpY2FsbHkgZm9yIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIHdpdGhpbiB0aGF0IGNvbnRleHQuIEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcsIFwiSW50ZXJlc3RpbmcsIHRoaXMgb3BlbnMgdXAgc29tZSBuZXcgYXR0YWNrIHZlY3RvcnMuXCIgVGhlIGZhY3QgdGhhdCB0aGV5J3ZlIG1hZGUgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciwgcGFydGljdWxhcmx5IGVuYWJsaW5nIHNsZWVwYWJsZSBwcm9ncmFtcywgZGVmaW5pdGVseSB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaW50cm9kdWNlcyBtb3JlIGZsZXhpYmlsaXR5IHRvIHdoYXQgY2FuIGJlIGRvbmUgaW4ga2VybmVsIHNwYWNlLCBhbmQgdGhlcmVmb3JlIG1vcmUgcG90ZW50aWFsIGZvciBleHBsb2l0LlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgY29uZmlndXJhdGlvbi13aXNlIGlzIGdvaW5nIHRvIGJlIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYCwgYmVjYXVzZSB0aGF04oCZcyB0aGUgc2NvcGUgd2UncmUgZGVhbGluZyB3aXRoLiBUaGVuLCBJ4oCZbGwgYmUgaG9uaW5nIGluIG9uIGBzY3hfZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIOKAkyB0aG9zZSBmdW5jdGlvbnMgd2lsbCBiZSB0aGUgcHJpbWFyeSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHRlc3QgdGhlIG5ld2x5IGF2YWlsYWJsZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM5NCwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjo0MS43NTM0ODA0OTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTI3MzAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gICAgXCJDR1JPVVBfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3hfZ3JvdXBfc2V0X3dlaWdodFwiLFxuICAgIFwic2N4X2dyb3VwX3NldF9pZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBjb25zdHJhaW50cyBmb3IgdGhlIHNjaGVkX2V4dCBzdWJzeXN0ZW0sIGFsbG93aW5nIHRoZSBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBjYWxsYmFja3MgdG8gYmUgaW1wbGVtZW50ZWQgYXMgc2xlZXBhYmxlIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gY29udGV4dCBhbmQgY29uc3RyYWludHMgb2YgdGhlc2UgY2FsbGJhY2tzLCB3aGljaCBhcmUgdHJpZ2dlcmVkIHZpYSBjZ3JvdXAgYXR0cmlidXRlIHdyaXRlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGVudHJ5IHBvaW50cyB0aGF0IGludm9rZSB0aGVzZSBjYWxsYmFja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gICAgXCJDR1JPVVBfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3hfZ3JvdXBfc2V0X3dlaWdodFwiLFxuICAgIFwic2N4X2dyb3VwX3NldF9pZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBjb25zdHJhaW50cyBmb3IgdGhlIHNjaGVkX2V4dCBzdWJzeXN0ZW0sIGFsbG93aW5nIHRoZSBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBjYWxsYmFja3MgdG8gYmUgaW1wbGVtZW50ZWQgYXMgc2xlZXBhYmxlIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gY29udGV4dCBhbmQgY29uc3RyYWludHMgb2YgdGhlc2UgY2FsbGJhY2tzLCB3aGljaCBhcmUgdHJpZ2dlcmVkIHZpYSBjZ3JvdXAgYXR0cmlidXRlIHdyaXRlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGVudHJ5IHBvaW50cyB0aGF0IGludm9rZSB0aGVzZSBjYWxsYmFja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjEyOjQxLjgyMjc1ODk5MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMjc2MTI5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjo0MS44MjMxODExMDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTgwMjcxODYyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc2NoZWRfZXh0IChzY3gpIHN1YnN5c3RlbSB0byBhbGxvdyBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBjYWxsYmFja3MgdG8gYmUgc2xlZXBhYmxlLiBJdCBkb2VzIHRoaXMgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGFsbG93ZWQgbGlzdCBpbiBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGFuZCBkZWZpbmluZyBjb21wYXRpYmlsaXR5IG1hcmtlcnMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBCUEYgdmVyaWZpZXIgY2hlY2tzIGZvciBzbGVlcGFibGUgY2FsbGJhY2tzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjQxMWNlMjhlMzNhZDkwMTY1YjA3MmE2NjA1NzA3ZWM4NzhiNWM5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA2OjExOjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbmluZGV4IGI2NDY3MTFhNDVmZWUuLjUzYjg4OGY1YTZjNTEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG5AQCAtODA3OSw3ICs4MDc5LDkgQEAgc3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfaW5pdCk6XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfZXhpdCk6XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfcHJlcF9tb3ZlKTpcbitcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfd2VpZ2h0KTpcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfYmFuZHdpZHRoKTpcbitcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfaWRsZSk6XG4gI2VuZGlmXG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb25saW5lKTpcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vZmZsaW5lKTpcbkBAIC0xMTA1NSwzICsxMTA1NywxOSBAQCBfX2luaXRjYWxsKHNjeF9pbml0KTtcbiAjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxuIERFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X2JhbmR3aWR0aF9tYXlfc2xlZXApO1xuICNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xuK1xuKy8qXG4rICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXRcbisgKiBvcHMuY2dyb3VwX3NldF93ZWlnaHQoKSBtYXkgYmUgaW1wbGVtZW50ZWQgYXMgYSBzbGVlcGFibGUgY2FsbGJhY2suXG4rICovXG4rI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbitERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwKTtcbisjZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbitcbisvKlxuKyAqIHNjeF9jb21wYXRfbWFya2VyX2Nncm91cF9zZXRfaWRsZV9tYXlfc2xlZXA6IGFkdmVydGlzZXMgdGhhdFxuKyAqIG9wcy5jZ3JvdXBfc2V0X2lkbGUoKSBtYXkgYmUgaW1wbGVtZW50ZWQgYXMgYSBzbGVlcGFibGUgY2FsbGJhY2suXG4rICovXG4rI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbitERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcCk7XG4rI2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oIGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oXG5pbmRleCA1M2UxMzZhNDc5MjRkLi5mODFkMDNkZTJkM2M3IDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbkBAIC03MzYsNyArNzM2LDcgQEAgc3RydWN0IHNjaGVkX2V4dF9vcHMge1xuIFx0ICogQGNncnA6IGNncm91cCB3aG9zZSB3ZWlnaHQgaXMgYmVpbmcgdXBkYXRlZFxuIFx0ICogQHdlaWdodDogbmV3IHdlaWdodCBbMS4uMTAwMDBdXG4gXHQgKlxuLVx0ICogVXBkYXRlIEBjZ3JwJ3Mgd2VpZ2h0IHRvIEB3ZWlnaHQuXG4rXHQgKiBVcGRhdGUgQGNncnAncyB3ZWlnaHQgdG8gQHdlaWdodC4gVGhpcyBvcGVyYXRpb24gbWF5IGJsb2NrLlxuIFx0ICpcbiBcdCAqIEtub2JzIG9mIGEgY2dyb3VwIGJlbG9uZyB0byB0aGUgcGFyZW50LCBzbyB0aGUgc2V0Xyogb3BzIGFyZVxuIFx0ICogZGVsaXZlcmVkIHRvIEBjZ3JwJ3MgcGFyZW50J3Mgc2NoZWQuIFRoYXQgc2NoZWQgbWF5IG5ldmVyIGhhdmUgc2VlblxuQEAgLTc3Myw5ICs3NzMsMTAgQEAgc3RydWN0IHNjaGVkX2V4dF9vcHMge1xuIFx0ICogQGNncnA6IGNncm91cCB3aG9zZSBpZGxlIHN0YXRlIGlzIGJlaW5nIHVwZGF0ZWRcbiBcdCAqIEBpZGxlOiB3aGV0aGVyIHRoZSBjZ3JvdXAgaXMgZW50ZXJpbmcgb3IgZXhpdGluZyBpZGxlIHN0YXRlXG4gXHQgKlxuLVx0ICogVXBkYXRlIEBjZ3JwJ3MgaWRsZSBzdGF0ZSB0byBAaWRsZS4gVGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW5cbi1cdCAqIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmQgbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGVcbi1cdCAqIEJQRiBzY2hlZHVsZXIgdG8gYWRqdXN0IGl0cyBiZWhhdmlvciBhY2NvcmRpbmdseS5cbitcdCAqIFVwZGF0ZSBAY2dycCdzIGlkbGUgc3RhdGUgdG8gQGlkbGUuIFRoaXMgb3BlcmF0aW9uIG1heSBibG9jay4gVGhpc1xuK1x0ICogY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmRcbitcdCAqIG5vbi1pZGxlIHN0YXRlcywgYWxsb3dpbmcgdGhlIEJQRiBzY2hlZHVsZXIgdG8gYWRqdXN0IGl0cyBiZWhhdmlvclxuK1x0ICogYWNjb3JkaW5nbHkuXG4gXHQgKlxuIFx0ICogRGVsaXZlcnkgZm9sbG93cyB0aGUgc2FtZSBydWxlIGFzIGNncm91cF9zZXRfd2VpZ2h0KCkuXG4gXHQgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjEyOjQxLjgyMzE4MzYyMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDE5OTI4MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBTY2hlZF9FeHQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgc2NoZWRfZXh0YC4gSXQncyB0b3VjaGluZyBgZXh0LmNgIGFuZCBgaW50ZXJuYWwuaGAsIHNwZWNpZmljYWxseSBhZGRpbmcgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgdG8gdGhlIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgZnVuY3Rpb24gd2l0aGluIGBleHQuY2AuIFRoZSBgaW50ZXJuYWwuaGAgY2hhbmdlcyBqdXN0IHNlZW0gdG8gYmUgdXBkYXRpbmcgdGhlIGNvbW1lbnRzIGFyb3VuZCB0aG9zZSB0d28gZnVuY3Rpb25zLCBleHBsaWNpdGx5IG1lbnRpb25pbmcgdGhhdCB0aGV5IFwibWF5IGJsb2NrLlwiIFRoYXQncyB0aGUga2V5IHRoaW5nIGhlcmUg4oCTIHdlJ3JlIGFsbG93aW5nIHRoZXNlIGNncm91cCBvcGVyYXRpb25zIHRvIHBvdGVudGlhbGx5IHNsZWVwLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBhYm91dCBlbmFibGluZyBzbGVlcGFibGUgY2FsbGJhY2tzIGZvciB0aG9zZSBzcGVjaWZpYyBjZ3JvdXAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgQlBGIHNjaGVkX2V4dCBjb250ZXh0LiBObyBuZXcgdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMsIG5vIG1lbW9yeSBzYWZldHkgaXNzdWVzIOKAkyBpdCdzIGFsbCB2ZXJpZmllciBjaGVja3MgYW5kIGNvbXBhdCBtYXJrZXJzLiBUaGF0J3MgZ29vZDsga2VlcGluZyBpdCBjb250YWluZWQgYW5kIGZvY3VzZWQgb24gdGhlIEJQRiBzaWRlIG1lYW5zIGxlc3MgY2hhbmNlIG9mIHVuZm9yZXNlZW4gY29uc2VxdWVuY2VzLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgd2hhdCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgZXhhY3RseSBpbiBgYnBmX3NjeF9jaGVja19tZW1iZXJgLiBBaGEsIGhlcmUncyB0aGUgcmVsZXZhbnQgY29kZTpcblxuYGBgY1xuXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfaW5pdCk6XG5cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9leGl0KTpcblx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3ByZXBfbW92ZSk6XG4rXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X3dlaWdodCk6XG5cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfYmFuZHdpZHRoKTpcbitcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfaWRsZSk6XG5gYGBcblxuWWVwLCBpdCdzIGV4YWN0bHkgYXMgSSBleHBlY3RlZC4gVGhlc2UgbmV3IGNhc2VzIGFyZSBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aGluIGBicGZfc2N4X2NoZWNrX21lbWJlcmAsIGFuZCBpdCBwcm9iYWJseSBqdXN0IHJldHVybnMgc29tZSBzb3J0IG9mIGJvb2xlYW4gb3IgZW51bSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1lbWJlciBpcyBhbGxvd2VkIHRvIGJlIHNsZWVwYWJsZS4gVGhlIGNvbXBhdCBtYXJrZXJzIGFyZSBwcm9iYWJseSBuZWVkZWQgZm9yIG9sZGVyIEJQRiBwcm9ncmFtcywgYnV0IHRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSB3aXRoIHRoaXMga2luZCBvZiBjaGFuZ2UuIFNlZW1zIGxpa2UgYSBzYWZlIGFuZCB3ZWxsLWNvbnRhaW5lZCBtb2RpZmljYXRpb24gdG8gc3VwcG9ydCBwb3RlbnRpYWxseSBibG9ja2luZyBjZ3JvdXAgb3BlcmF0aW9ucyBpbiB0aGUgc2NoZWRfZXh0IGVudmlyb25tZW50LCB3aGljaCBpcyBiZWNvbWluZyBpbmNyZWFzaW5nbHkgY29tbW9uLiBJJ2Qgd2FudCB0byBjaGVjayBob3cgdGhlIGJwZiB2ZXJpZmllciBiZWhhdmVzIGFmdGVyIHRoaXMgY2hhbmdlLCB0aG91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjo1MC4yNDMxMTU0MTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDUxNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zY3hfY2hlY2tfbWVtYmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZC9leHQvZXh0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2V4dC9leHQuYz03OTk4PXN0YXRpYyBpbnQgYnBmX3NjeF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNjktXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDcwOnN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA3MS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MzAyPXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX3NjaGVkX2V4dF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzMDUtXFx0LnVucmVnID0gYnBmX3NjeF91bnJlZyxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzMDY6XFx0LmNoZWNrX21lbWJlciA9IGJwZl9zY3hfY2hlY2tfbWVtYmVyLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODMwNy1cXHQuaW5pdF9tZW1iZXIgPSBicGZfc2N4X2luaXRfbWVtYmVyLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04Mzc0PXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX3NjaGVkX2V4dF9vcHNfY2lkID0ge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04Mzc3LVxcdC51bnJlZyA9IGJwZl9zY3hfdW5yZWcsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4Mzc4OlxcdC5jaGVja19tZW1iZXIgPSBicGZfc2N4X2NoZWNrX21lbWJlcixcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNzktXFx0LmluaXRfbWVtYmVyID0gYnBmX3NjeF9pbml0X21lbWJlcixcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA4OTM9c3RhdGljIGludCBfX2luaXQgc2N4X2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA4OTgtXFx0ICogc2NoZWRfZXh0X29wc19jaWQgbWlycm9ycyBzY2hlZF9leHRfb3BzIHVwIHRvIGFuZCBpbmNsdWRpbmcgQHByaXYuXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDg5OTpcXHQgKiBCb3RoIGJwZl9zY3hfaW5pdF9tZW1iZXIoKSBhbmQgYnBmX3NjeF9jaGVja19tZW1iZXIoKSB1c2Ugb2Zmc2V0c1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5MDAtXFx0ICogZnJvbSBzdHJ1Y3Qgc2NoZWRfZXh0X29wczsgc2NoZWRfZXh0X29wc19jaWQgcmVsaWVzIG9uIHRob3NlIG9mZnNldHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTI6NTAuMzI1NTcxNTUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzY4MjI2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGJwZl9zY3hfY2hlY2tfbWVtYmVyYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGFraW5nIGEgbG9vayBhdCBgYnBmX3NjeF9jaGVja19tZW1iZXJgLiBUaGUgbmFtZSBpcyBwcmV0dHkgZGVzY3JpcHRpdmUsIHNvIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBzZXJ2ZXMgYXMgYSBnYXRla2VlcGVyIG9mIHNvcnRzLCBwcm9iYWJseSByZWxhdGVkIHRvIGNoZWNraW5nIGFjY2VzcyB0byBzdHJ1Y3R1cmUgbWVtYmVycyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBJJ20gZ3Vlc3NpbmcgaXTigJlzIGludGVuZGVkIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3Igb3RoZXIgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCB1c2VyLXByb3ZpZGVkIGRhdGEgd2l0aGluIEJQRiBwcm9ncmFtcy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgdG8gc2VlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNoZWNrcyBpdCBwZXJmb3JtcyDigJMgcGFydGljdWxhcmx5IGFyb3VuZCBwb3RlbnRpYWwgb2Zmc2V0cywgc2l6ZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBwb2ludGVyIGRlcmVmZXJlbmNpbmcuIEnigJltIGFsc28gY3VyaW91cyBhYm91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgQlBGIGhlbHBlcnMgYW5kIHdoYXQga2luZCBvZiBlcnJvciBjb2RlcyBpdCByZXR1cm5zIHRvIHRoZSBCUEYgcHJvZ3JhbSBpZiBhIGNoZWNrIGZhaWxzLiBVbmRlcnN0YW5kaW5nIHRoZSBmaW5lciBkZXRhaWxzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjcnVjaWFsIGZvciBzZWN1cmUgYW5kIHJlbGlhYmxlIEJQRiBwcm9ncmFtIGRldmVsb3BtZW50LCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyOTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjo1NC4xMDIzOTYyOThaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9zY2hlZC9leHQvZXh0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODA3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODA3MDpcXHRzdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG44MDcxOlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXFxuODA3MjpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuODA3MzpcXHR7XFxuODA3NDpcXHRcXHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xcbjgwNzU6XFx0XFxuODA3NjpcXHRcXHRzd2l0Y2ggKG1vZmYpIHtcXG44MDc3OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXRfdGFzayk6XFxuODA3ODpcXHQjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbjgwNzk6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2luaXQpOlxcbjgwODA6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2V4aXQpOlxcbjgwODE6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3ByZXBfbW92ZSk6XFxuODA4MjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X3dlaWdodCk6XFxuODA4MzpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCk6XFxuODA4NDpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2lkbGUpOlxcbjgwODU6XFx0I2VuZGlmXFxuODA4NjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb25saW5lKTpcXG44MDg3OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vZmZsaW5lKTpcXG44MDg4OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXRfY2lkcyk6XFxuODA4OTpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBpbml0KTpcXG44MDkwOlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGV4aXQpOlxcbjgwOTE6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgc3ViX2F0dGFjaCk6XFxuODA5MjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBzdWJfZGV0YWNoKTpcXG44MDkzOlxcdFxcdFxcdGJyZWFrO1xcbjgwOTQ6XFx0XFx0ZGVmYXVsdDpcXG44MDk1OlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2VzbGVlcGFibGUpXFxuODA5NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDk3OlxcdFxcdH1cXG44MDk4OlxcdFxcbjgwOTk6XFx0I2lmZGVmIENPTkZJR19FWFRfU1VCX1NDSEVEXFxuODEwMDpcXHRcXHQvKlxcbjgxMDE6XFx0XFx0ICogRW5hYmxlIHByaXZhdGUgc3RhY2sgZm9yIG9wZXJhdGlvbnMgdGhhdCBjYW4gbmVzdCBhbG9uZyB0aGVcXG44MTAyOlxcdFxcdCAqIGhpZXJhcmNoeS5cXG44MTAzOlxcdFxcdCAqXFxuODEwNDpcXHRcXHQgKiBYWFggLSBJZGVhbGx5LCB3ZSBzaG91bGQgb25seSBkbyB0aGlzIGZvciBzY2hlZHMgdGhhdCBhbGxvd1xcbjgxMDU6XFx0XFx0ICogc3ViLXNjaGVkcyBhbmQgc3ViLXNjaGVkcyB0aGVtc2VsdmVzIGJ1dCBJIGRvbid0IGtub3cgaG93IHRvIGFjY2Vzc1xcbjgxMDY6XFx0XFx0ICogc3RydWN0X29wcyBmcm9tIGhlcmUuXFxuODEwNzpcXHRcXHQgKi9cXG44MTA4OlxcdFxcdHN3aXRjaCAobW9mZikge1xcbjgxMDk6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgZGlzcGF0Y2gpOlxcbjgxMTA6XFx0XFx0XFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2Vwcml2X3N0YWNrX3JlcXVlc3RlZCA9IHRydWU7XFxuODExMTpcXHRcXHRcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXJlY3Vyc2lvbl9kZXRlY3RlZCA9IHNjeF9wc3RhY2tfcmVjdXJzaW9uX29uX2Rpc3BhdGNoO1xcbjgxMTI6XFx0XFx0XFx0YnJlYWs7XFxuODExMzpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBzdWJfY2Fwc191cGRhdGVkKTpcXG44MTE0OlxcdFxcdFxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlcHJpdl9zdGFja19yZXF1ZXN0ZWQgPSB0cnVlO1xcbjgxMTU6XFx0XFx0XFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VyZWN1cnNpb25fZGV0ZWN0ZWQgPSBzY3hfcHN0YWNrX3JlY3Vyc2lvbl9vbl9jYXBzX3VwZGF0ZWQ7XFxuODExNjpcXHRcXHRcXHRicmVhaztcXG44MTE3OlxcdFxcdH1cXG44MTE4OlxcdCNlbmRpZlxcdC8qIENPTkZJR19FWFRfU1VCX1NDSEVEICovXFxuODExOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTI6NTQuMTAyOTU1NjQ4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDczOTE2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEVzc2VudGlhbGx5LCBpdCdzIGV4dGVuZGluZyB0aGUgcmFuZ2Ugb2Ygb3BlcmF0aW9ucyBjb25zaWRlcmVkIFwic2xlZXBhYmxlXCIgd2l0aGluIHRoZSBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIHRvIHRoYXQgYWxsb3dlZCBsaXN0LiBSZWFsbHksIGl0J3MgcXVpdGUgbWluaW1hbCBhbmQgbG9jYWxpemVkLiBBbmQgZm9yIGNvbXBhdGliaWxpdHkncyBzYWtlLCBpdCBhbHNvIGRlZmluZXMgYHNjeF9jb21wYXRfbWFya2VyX2Nncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcGAgYW5kIGBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwYC5cblxuR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsIGludGVybmFscyBhbmQgQlBGIHZlcmlmaWVyIGxvZ2ljLCB0aGVyZSdzIHplcm8gY2hhbmNlIG9mIGludHJvZHVjaW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkgd2l0aCB0aGlzIGNoYW5nZS4gSXQncyBhIHZlcnkgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uIHRvIGEgQlBGIHZlcmlmaWNhdGlvbiBjaGVjay4gU28sIEkgd2lsbCBtYXJrIHRoaXMgYXMgYE5lZWRzS01TQU49ZmFsc2VgIGJlY2F1c2UgdGhlIGNoYW5nZSBpcyB2ZXJ5IHNpbXBsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1MSwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjo1OS44NTAzNDk1MzFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc2NoZWRfZXh0IChzY3gpIHN1YnN5c3RlbSB0byBhbGxvdyBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBjYWxsYmFja3MgdG8gYmUgc2xlZXBhYmxlLiBJdCBkb2VzIHRoaXMgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGFsbG93ZWQgbGlzdCBpbiBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGFuZCBkZWZpbmluZyBjb21wYXRpYmlsaXR5IG1hcmtlcnMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBCUEYgdmVyaWZpZXIgY2hlY2tzIGZvciBzbGVlcGFibGUgY2FsbGJhY2tzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzY2hlZF9leHQgKHNjeCkgc3Vic3lzdGVtIHRvIGFsbG93IGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxiYWNrcyB0byBiZSBzbGVlcGFibGUuIEl0IGRvZXMgdGhpcyBieSBhZGRpbmcgdGhlbSB0byB0aGUgYWxsb3dlZCBsaXN0IGluIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgYW5kIGRlZmluaW5nIGNvbXBhdGliaWxpdHkgbWFya2Vycy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIEJQRiB2ZXJpZmllciBjaGVja3MgZm9yIHNsZWVwYWJsZSBjYWxsYmFja3MuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowscxfh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 05:34:37 +0000 UTC FinishedAt: 2026-08-25 06:13:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9e8581a090c02ffa35e8439b90b024956a735de9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CLASS_EXT", "CGROUP_SCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9e8581a090c02ffa35e8439b90b024956a735de9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CLASS_EXT", "CGROUP_SCHED" ], "series_id": "04ecb5b3-1610-40b1-8f47-dcc7de16534a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "scx_group_set_weight", "scx_group_set_idle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3hfZ3JvdXBfc2V0X3dlaWdodCYjMzQ7LAogICAgJiMzNDtzY3hfZ3JvdXBfc2V0X2lkbGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNjaGVkX2V4dCAoc2N4KSBzdWJzeXN0ZW0gdG8gYWxsb3cgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzIHRvIGJlIHNsZWVwYWJsZS4gSXQgZG9lcyB0aGlzIGJ5IGFkZGluZyB0aGVtIHRvIHRoZSBhbGxvd2VkIGxpc3QgaW4gYGJwZl9zY3hfY2hlY2tfbWVtYmVyYCBhbmQgZGVmaW5pbmcgY29tcGF0aWJpbGl0eSBtYXJrZXJzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gQlBGIHZlcmlmaWVyIGNoZWNrcyBmb3Igc2xlZXBhYmxlIGNhbGxiYWNrcy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGNvbnN0cmFpbnRzIGZvciB0aGUgc2NoZWRfZXh0IHN1YnN5c3RlbSwgYWxsb3dpbmcgdGhlIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxiYWNrcyB0byBiZSBpbXBsZW1lbnRlZCBhcyBzbGVlcGFibGUgQlBGIHByb2dyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IGFuZCBjb25zdHJhaW50cyBvZiB0aGVzZSBjYWxsYmFja3MsIHdoaWNoIGFyZSB0cmlnZ2VyZWQgdmlhIGNncm91cCBhdHRyaWJ1dGUgd3JpdGVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgZW50cnkgcG9pbnRzIHRoYXQgaW52b2tlIHRoZXNlIGNhbGxiYWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY0MTFjZTI4ZTMzYWQ5MDE2NWIwNzJhNjYwNTcwN2VjODc4YjVjOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwNjoxMToyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuaW5kZXggYjY0NjcxMWE0NWZlZS4uNTNiODg4ZjVhNmM1MSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbkBAIC04MDc5LDcgJiM0Mzs4MDc5LDkgQEAgc3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfaW5pdCk6XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfZXhpdCk6XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfcHJlcF9tb3ZlKTpcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X3dlaWdodCk6XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCk6XG4mIzQzO1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKTpcbiAjZW5kaWZcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vbmxpbmUpOlxuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY3B1X29mZmxpbmUpOlxuQEAgLTExMDU1LDMgJiM0MzsxMTA1NywxOSBAQCBfX2luaXRjYWxsKHNjeF9pbml0KTtcbiAjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxuIERFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X2JhbmR3aWR0aF9tYXlfc2xlZXApO1xuICNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXRcbiYjNDM7ICogb3BzLmNncm91cF9zZXRfd2VpZ2h0KCkgbWF5IGJlIGltcGxlbWVudGVkIGFzIGEgc2xlZXBhYmxlIGNhbGxiYWNrLlxuJiM0MzsgKi9cbiYjNDM7I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbiYjNDM7REVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcCk7XG4mIzQzOyNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcDogYWR2ZXJ0aXNlcyB0aGF0XG4mIzQzOyAqIG9wcy5jZ3JvdXBfc2V0X2lkbGUoKSBtYXkgYmUgaW1wbGVtZW50ZWQgYXMgYSBzbGVlcGFibGUgY2FsbGJhY2suXG4mIzQzOyAqL1xuJiM0MzsjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxuJiM0MztERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcCk7XG4mIzQzOyNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaCBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuaW5kZXggNTNlMTM2YTQ3OTI0ZC4uZjgxZDAzZGUyZDNjNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oXG5AQCAtNzM2LDcgJiM0Mzs3MzYsNyBAQCBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XG4gXHQgKiBAY2dycDogY2dyb3VwIHdob3NlIHdlaWdodCBpcyBiZWluZyB1cGRhdGVkXG4gXHQgKiBAd2VpZ2h0OiBuZXcgd2VpZ2h0IFsxLi4xMDAwMF1cbiBcdCAqXG4tXHQgKiBVcGRhdGUgQGNncnAmIzM5O3Mgd2VpZ2h0IHRvIEB3ZWlnaHQuXG4mIzQzO1x0ICogVXBkYXRlIEBjZ3JwJiMzOTtzIHdlaWdodCB0byBAd2VpZ2h0LiBUaGlzIG9wZXJhdGlvbiBtYXkgYmxvY2suXG4gXHQgKlxuIFx0ICogS25vYnMgb2YgYSBjZ3JvdXAgYmVsb25nIHRvIHRoZSBwYXJlbnQsIHNvIHRoZSBzZXRfKiBvcHMgYXJlXG4gXHQgKiBkZWxpdmVyZWQgdG8gQGNncnAmIzM5O3MgcGFyZW50JiMzOTtzIHNjaGVkLiBUaGF0IHNjaGVkIG1heSBuZXZlciBoYXZlIHNlZW5cbkBAIC03NzMsOSAmIzQzOzc3MywxMCBAQCBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XG4gXHQgKiBAY2dycDogY2dyb3VwIHdob3NlIGlkbGUgc3RhdGUgaXMgYmVpbmcgdXBkYXRlZFxuIFx0ICogQGlkbGU6IHdoZXRoZXIgdGhlIGNncm91cCBpcyBlbnRlcmluZyBvciBleGl0aW5nIGlkbGUgc3RhdGVcbiBcdCAqXG4tXHQgKiBVcGRhdGUgQGNncnAmIzM5O3MgaWRsZSBzdGF0ZSB0byBAaWRsZS4gVGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW5cbi1cdCAqIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmQgbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGVcbi1cdCAqIEJQRiBzY2hlZHVsZXIgdG8gYWRqdXN0IGl0cyBiZWhhdmlvciBhY2NvcmRpbmdseS5cbiYjNDM7XHQgKiBVcGRhdGUgQGNncnAmIzM5O3MgaWRsZSBzdGF0ZSB0byBAaWRsZS4gVGhpcyBvcGVyYXRpb24gbWF5IGJsb2NrLiBUaGlzXG4mIzQzO1x0ICogY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmRcbiYjNDM7XHQgKiBub24taWRsZSBzdGF0ZXMsIGFsbG93aW5nIHRoZSBCUEYgc2NoZWR1bGVyIHRvIGFkanVzdCBpdHMgYmVoYXZpb3JcbiYjNDM7XHQgKiBhY2NvcmRpbmdseS5cbiBcdCAqXG4gXHQgKiBEZWxpdmVyeSBmb2xsb3dzIHRoZSBzYW1lIHJ1bGUgYXMgY2dyb3VwX3NldF93ZWlnaHQoKS5cbiBcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X2dyb3VwX3NldF93ZWlnaHQmIzM0OywKICAgICYjMzQ7c2N4X2dyb3VwX3NldF9pZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgY29uc3RyYWludHMgZm9yIHRoZSBzY2hlZF9leHQgc3Vic3lzdGVtLCBhbGxvd2luZyB0aGUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzIHRvIGJlIGltcGxlbWVudGVkIGFzIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgYW5kIGNvbnN0cmFpbnRzIG9mIHRoZXNlIGNhbGxiYWNrcywgd2hpY2ggYXJlIHRyaWdnZXJlZCB2aWEgY2dyb3VwIGF0dHJpYnV0ZSB3cml0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBpbnZva2UgdGhlc2UgY2FsbGJhY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjQxMWNlMjhlMzNhZDkwMTY1YjA3MmE2NjA1NzA3ZWM4NzhiNWM5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDA2OjExOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMKaW5kZXggYjY0NjcxMWE0NWZlZS4uNTNiODg4ZjVhNmM1MSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2V4dC9leHQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jCkBAIC04MDc5LDcgJiM0Mzs4MDc5LDkgQEAgc3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsCiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2luaXQpOgogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9leGl0KToKIAljYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfcHJlcF9tb3ZlKToKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF93ZWlnaHQpOgogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfYmFuZHdpZHRoKToKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKToKICNlbmRpZgogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vbmxpbmUpOgogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vZmZsaW5lKToKQEAgLTExMDU1LDMgJiM0MzsxMTA1NywxOSBAQCBfX2luaXRjYWxsKHNjeF9pbml0KTsKICNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVECiBERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9iYW5kd2lkdGhfbWF5X3NsZWVwKTsKICNlbmRpZgkvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXA6IGFkdmVydGlzZXMgdGhhdAomIzQzOyAqIG9wcy5jZ3JvdXBfc2V0X3dlaWdodCgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay4KJiM0MzsgKi8KJiM0MzsjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRAomIzQzO0RFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXApOwomIzQzOyNlbmRpZgkvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXQKJiM0MzsgKiBvcHMuY2dyb3VwX3NldF9pZGxlKCkgbWF5IGJlIGltcGxlbWVudGVkIGFzIGEgc2xlZXBhYmxlIGNhbGxiYWNrLgomIzQzOyAqLwomIzQzOyNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVECiYjNDM7REVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfaWRsZV9tYXlfc2xlZXApOwomIzQzOyNlbmRpZgkvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmggYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgKaW5kZXggNTNlMTM2YTQ3OTI0ZC4uZjgxZDAzZGUyZDNjNyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaApAQCAtNzM2LDcgJiM0Mzs3MzYsNyBAQCBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7CiAJICogQGNncnA6IGNncm91cCB3aG9zZSB3ZWlnaHQgaXMgYmVpbmcgdXBkYXRlZAogCSAqIEB3ZWlnaHQ6IG5ldyB3ZWlnaHQgWzEuLjEwMDAwXQogCSAqCi0JICogVXBkYXRlIEBjZ3JwJiMzOTtzIHdlaWdodCB0byBAd2VpZ2h0LgomIzQzOwkgKiBVcGRhdGUgQGNncnAmIzM5O3Mgd2VpZ2h0IHRvIEB3ZWlnaHQuIFRoaXMgb3BlcmF0aW9uIG1heSBibG9jay4KIAkgKgogCSAqIEtub2JzIG9mIGEgY2dyb3VwIGJlbG9uZyB0byB0aGUgcGFyZW50LCBzbyB0aGUgc2V0Xyogb3BzIGFyZQogCSAqIGRlbGl2ZXJlZCB0byBAY2dycCYjMzk7cyBwYXJlbnQmIzM5O3Mgc2NoZWQuIFRoYXQgc2NoZWQgbWF5IG5ldmVyIGhhdmUgc2VlbgpAQCAtNzczLDkgJiM0Mzs3NzMsMTAgQEAgc3RydWN0IHNjaGVkX2V4dF9vcHMgewogCSAqIEBjZ3JwOiBjZ3JvdXAgd2hvc2UgaWRsZSBzdGF0ZSBpcyBiZWluZyB1cGRhdGVkCiAJICogQGlkbGU6IHdoZXRoZXIgdGhlIGNncm91cCBpcyBlbnRlcmluZyBvciBleGl0aW5nIGlkbGUgc3RhdGUKIAkgKgotCSAqIFVwZGF0ZSBAY2dycCYjMzk7cyBpZGxlIHN0YXRlIHRvIEBpZGxlLiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgd2hlbgotCSAqIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmQgbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGUKLQkgKiBCUEYgc2NoZWR1bGVyIHRvIGFkanVzdCBpdHMgYmVoYXZpb3IgYWNjb3JkaW5nbHkuCiYjNDM7CSAqIFVwZGF0ZSBAY2dycCYjMzk7cyBpZGxlIHN0YXRlIHRvIEBpZGxlLiBUaGlzIG9wZXJhdGlvbiBtYXkgYmxvY2suIFRoaXMKJiM0MzsJICogY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmQKJiM0MzsJICogbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGUgQlBGIHNjaGVkdWxlciB0byBhZGp1c3QgaXRzIGJlaGF2aW9yCiYjNDM7CSAqIGFjY29yZGluZ2x5LgogCSAqCiAJICogRGVsaXZlcnkgZm9sbG93cyB0aGUgc2FtZSBydWxlIGFzIGNncm91cF9zZXRfd2VpZ2h0KCkuCiAJICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2NoZWRfZXh0IEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIGFuZCBga2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0JiMzOTtzIGludHJvZHVjaW5nIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIHRvIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgd2l0aGluIGBleHQuY2AuIFRoZW4gdGhlcmUgYXJlIHRoZXNlIGBERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVJgIG1hY3JvcyBmb3IgYGNncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwYC4gIEhtbSwganVzdCBhZGRpbmcgQlBGIHN0cnVjdCBvcHMgbWVtYmVycyBhbmQgY29tcGF0aWJpbGl0eSBtYXJrZXJzLCBub3RoaW5nIGVhcnRoLXNoYXR0ZXJpbmcgeWV0LiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZz8KClRoaXMgY2hhbmdlIGVzc2VudGlhbGx5IGVuYWJsZXMgQlBGLWJhc2VkIHNjaGVkX2V4dCBzY2hlZHVsZXJzIHRvIGltcGxlbWVudCBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBhcyBjYWxsYmFja3MgdGhhdCAqY2FuKiBzbGVlcC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQgb3BlbnMgdXAgcG9zc2liaWxpdGllcy4gTm93LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGF0IGBicGZfc2N4X2NoZWNrX21lbWJlcmAgaXMgcmVhbGx5IGRvaW5nLiAgSSB0aGluayBpdCYjMzk7cyB1c2VkIHRvIGRldGVybWluZSBpZiBhIG1lbWJlciBvZiBgc3RydWN0IHNjaGVkX2V4dF9vcHNgIGlzIHBlcm1pdHRlZCB0byBzbGVlcCwgb3IgYXQgbGVhc3QgYSBjaGVjayBmb3IgdGhhdC4gSSBiZXR0ZXIgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgaGVyZS4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2N4X2NoZWNrX21lbWJlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTc5OTg9c3RhdGljIGludCBicGZfc2N4X2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNjktXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwNzA6c3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNzEtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODMwMj1zdGF0aWMgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIGJwZl9zY2hlZF9leHRfb3BzID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODMwNS1cdC51bnJlZyA9IGJwZl9zY3hfdW5yZWcsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzMDY6XHQuY2hlY2tfbWVtYmVyID0gYnBmX3NjeF9jaGVja19tZW1iZXIsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzMDctXHQuaW5pdF9tZW1iZXIgPSBicGZfc2N4X2luaXRfbWVtYmVyLFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODM3ND1zdGF0aWMgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIGJwZl9zY2hlZF9leHRfb3BzX2NpZCA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNzctXHQudW5yZWcgPSBicGZfc2N4X3VucmVnLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4Mzc4Olx0LmNoZWNrX21lbWJlciA9IGJwZl9zY3hfY2hlY2tfbWVtYmVyLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04Mzc5LVx0LmluaXRfbWVtYmVyID0gYnBmX3NjeF9pbml0X21lbWJlcixcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODkzPXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDg5OC1cdCAqIHNjaGVkX2V4dF9vcHNfY2lkIG1pcnJvcnMgc2NoZWRfZXh0X29wcyB1cCB0byBhbmQgaW5jbHVkaW5nIEBwcml2Llxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDg5OTpcdCAqIEJvdGggYnBmX3NjeF9pbml0X21lbWJlcigpIGFuZCBicGZfc2N4X2NoZWNrX21lbWJlcigpIHVzZSBvZmZzZXRzXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTAwLVx0ICogZnJvbSBzdHJ1Y3Qgc2NoZWRfZXh0X29wczsgc2NoZWRfZXh0X29wc19jaWQgcmVsaWVzIG9uIHRob3NlIG9mZnNldHNcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzE5PXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTAyMy0gKiBzaGFyZWQgZmllbGQgb2Zmc2V0cyB3b3JrIGZvciBib3RoIHN0cnVjdCB0eXBlcyBpbiBicGZfc2N4X2luaXRfbWVtYmVyKClcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMDI0OiAqIGFuZCBicGZfc2N4X2NoZWNrX21lbWJlcigpLiBUaGUgZGVwcmVjYXRlZCBjcHVfYWNxdWlyZS9jcHVfcmVsZWFzZVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwMjUtICogY2FsbGJhY2tzIGF0IHRoZSB0YWlsIG9mIHNjaGVkX2V4dF9vcHMgYXJlIG9taXR0ZWQgaGVyZSBlbnRpcmVseS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBicGZfc2N4X2NoZWNrX21lbWJlcmAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgYnBmX3NjeF9jaGVja19tZW1iZXJgIHdpdGhpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBlQlBGIGNoZWNrcyByZWxhdGVkIHRvIHNjaGVkdWxpbmcgY29udGV4dCBleHRlbnNpb25zLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHByb2JhYmx5IHZhbGlkYXRpbmcgc29tZSB1c2VyLXByb3ZpZGVkIHN0cnVjdHVyZSBtZW1iZXJzIGFnYWluc3QgYWxsb3dlZCB2YWx1ZXMgb3IgYWdhaW5zdCBzb21lIGludGVybmFsIHN0YXRlLCBtYXliZSBjaGVja2luZyBhbGlnbm1lbnQgb3Igc2l6ZSBjb25zdHJhaW50cyBiZWZvcmUgdGhlIHNjaGVkdWxlciBkb2VzIHNvbWV0aGluZyB3aXRoIHRoZW0uIEdpdmVuIHRoZSBuYW1lLCBpdCYjMzk7cyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBpbiBtYWludGFpbmluZyBzZWN1cml0eSBhbmQgc3RhYmlsaXR5IHdoZW4gZGVhbGluZyB3aXRoIEJQRiBwcm9ncmFtcyB0aGF0IGludGVyYWN0IHdpdGggdGhlIHNjaGVkdWxlciBleHRlbnNpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgYXRvbWljaXR5IGNvbmNlcm5zLCBlc3BlY2lhbGx5IGlmIHRoZSBjaGVja3MgaW52b2x2ZSBzaGFyZWQgZGF0YSBvciBpZiB0aGV5IGFyZSBwZXJmb3JtaW5nIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhcyB0aG9zZSBhcmUgYWx3YXlzIGhvdHNwb3RzIGZvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgZWRnZSBjYXNlcywgYW5kIHdoYXQgZXJyb3ItaGFuZGxpbmcgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZXh0L2V4dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs4MDY1Olx0XHR9XG44MDY2Olx0XG44MDY3Olx0XHRyZXR1cm4gMDtcbjgwNjg6XHR9XG44MDY5Olx0XG44MDcwOlx0c3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG44MDcxOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLFxuODA3MjpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuODA3MzpcdHtcbjgwNzQ6XHRcdHUzMiBtb2ZmID0gX19idGZfbWVtYmVyX2JpdF9vZmZzZXQodCwgbWVtYmVyKSAvIDg7XG44MDc1Olx0XG44MDc2Olx0XHRzd2l0Y2ggKG1vZmYpIHtcbjgwNzc6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXRfdGFzayk6XG44MDc4Olx0I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbjgwNzk6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KTpcbjgwODA6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9leGl0KTpcbjgwODE6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9wcmVwX21vdmUpOlxuODA4MjpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF93ZWlnaHQpOlxuODA4MzpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9iYW5kd2lkdGgpOlxuODA4NDpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKTpcbjgwODU6XHQjZW5kaWZcbjgwODY6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vbmxpbmUpOlxuODA4NzpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY3B1X29mZmxpbmUpOlxuODA4ODpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgaW5pdF9jaWRzKTpcbjgwODk6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXQpOlxuODA5MDpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgZXhpdCk6XG44MDkxOlx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBzdWJfYXR0YWNoKTpcbjgwOTI6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIHN1Yl9kZXRhY2gpOlxuODA5MzpcdFx0XHRicmVhaztcbjgwOTQ6XHRcdGRlZmF1bHQ6XG44MDk1Olx0XHRcdGlmIChwcm9nLVx1MDAzZXNsZWVwYWJsZSlcbjgwOTY6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjgwOTc6XHRcdH1cbjgwOTg6XHRcbjgwOTk6XHQjaWZkZWYgQ09ORklHX0VYVF9TVUJfU0NIRURcbjgxMDA6XHRcdC8qXG44MTAxOlx0XHQgKiBFbmFibGUgcHJpdmF0ZSBzdGFjayBmb3Igb3BlcmF0aW9ucyB0aGF0IGNhbiBuZXN0IGFsb25nIHRoZVxuODEwMjpcdFx0ICogaGllcmFyY2h5LlxuODEwMzpcdFx0ICpcbjgxMDQ6XHRcdCAqIFhYWCAtIElkZWFsbHksIHdlIHNob3VsZCBvbmx5IGRvIHRoaXMgZm9yIHNjaGVkcyB0aGF0IGFsbG93XG44MTA1Olx0XHQgKiBzdWItc2NoZWRzIGFuZCBzdWItc2NoZWRzIHRoZW1zZWx2ZXMgYnV0IEkgZG9uJiMzOTt0IGtub3cgaG93IHRvIGFjY2Vzc1xuODEwNjpcdFx0ICogc3RydWN0X29wcyBmcm9tIGhlcmUuXG44MTA3Olx0XHQgKi9cbjgxMDg6XHRcdHN3aXRjaCAobW9mZikge1xuODEwOTpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgZGlzcGF0Y2gpOlxuODExMDpcdFx0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2Vwcml2X3N0YWNrX3JlcXVlc3RlZCA9IHRydWU7XG44MTExOlx0XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZXJlY3Vyc2lvbl9kZXRlY3RlZCA9IHNjeF9wc3RhY2tfcmVjdXJzaW9uX29uX2Rpc3BhdGNoO1xuODExMjpcdFx0XHRicmVhaztcbjgxMTM6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIHN1Yl9jYXBzX3VwZGF0ZWQpOlxuODExNDpcdFx0XHRwcm9nLVx1MDAzZWF1eC1cdTAwM2Vwcml2X3N0YWNrX3JlcXVlc3RlZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE3NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1ha2luZyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBob3cgQlBGIGludGVyYWN0cyB3aXRoIGNlcnRhaW4gY2dyb3VwIGNhbGxiYWNrcy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBsZXZlcmFnaW5nIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgdG8gZW5hYmxlIHNsZWVwYWJsZSBiZWhhdmlvciBpbiB0aGUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgc2hpZnQgYmVjYXVzZSBpdCBhbGxvd3MgQlBGIHByb2dyYW1zIHRvIHV0aWxpemUgdGhlc2UgZm9ybWVybHkgbm9uLXNsZWVwYWJsZSBmdW5jdGlvbnMuCgpUaGUgcGF0Y2ggaW5jbHVkZXMgdGhlIG5lY2Vzc2FyeSBgREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSYCBtYWNyb3M6IGBjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXBgIGFuZCBgY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcGAsIHdoaWNoIGFyZSBpbXBvcnRhbnQgZm9yIGNvbXBhdGliaWxpdHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZnV6emFibGU/JiMzNDsgVGhlIGFuc3dlciBpcyBkZWZpbml0ZWx5IHllcywgYmVjYXVzZSBpdCBhbHRlcnMgdGhlIEJQRiB2ZXJpZmllciBhbmQgcG90ZW50aWFsbHkgdGhlIHN0cnVjdF9vcHMgY29uc3RyYWludHMgcmVsYXRlZCB0byBgc2NoZWRfZXh0YC4gVGhhdCBvcGVucyB0aGUgZG9vciB0byBuZXcgYXR0YWNrIHN1cmZhY2VzLgoKSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gYGJwZl9zY3hfY2hlY2tfbWVtYmVyYCBpcyBhIGtleSBmdW5jdGlvbiB0byBleGFtaW5lLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMuIEkgbmVlZCB0byBzZWUgaWYgaXQmIzM5O3MgdGhlIG9ubHkgcmVsZXZhbnQgb25lLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGUgZnVuY3Rpb24gY2FsbHMgYW5kIHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9mIHRoZXNlIGNhbGxiYWNrczsgdGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIGNyaXRpY2FsIHBvaW50cy4gV2hlcmUgYXJlIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIGFjdHVhbGx5IGludm9rZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgd2lsbCBiZSBjcnVjaWFsIGZvciBlZmZlY3RpdmUgZnV6emluZyBzdHJhdGVneSBkZXZlbG9wbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZ3JvdXBfc2V0X3dlaWdodCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3Q9MTE0MT13aWxsIGJlIHJlZmVycmVkIHRvLiBBbGwgdGltZSBkdXJhdGlvbnMgYXJlIGluIG1pY3Jvc2Vjb25kcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTE3My1cdFRoaXMgZmlsZSBhZmZlY3RzIG9ubHkgcHJvY2Vzc2VzIHVuZGVyIHRoZSBmYWlyLWNsYXNzIHNjaGVkdWxlciBhbmQgYSBCUEZcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdDoxMTc0Olx0c2NoZWR1bGVyIHdpdGggdGhlIGBgY2dyb3VwX3NldF93ZWlnaHRgYCBjYWxsYmFjayBkZXBlbmRpbmcgb24gd2hhdCB0aGVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xMTc1LVx0Y2FsbGJhY2sgYWN0dWFsbHkgZG9lcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTE4OS1cdFRoaXMgZmlsZSBhZmZlY3RzIG9ubHkgcHJvY2Vzc2VzIHVuZGVyIHRoZSBmYWlyLWNsYXNzIHNjaGVkdWxlciBhbmQgYSBCUEZcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdDoxMTkwOlx0c2NoZWR1bGVyIHdpdGggdGhlIGBgY2dyb3VwX3NldF93ZWlnaHRgYCBjYWxsYmFjayBkZXBlbmRpbmcgb24gd2hhdCB0aGVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xMTkxLVx0Y2FsbGJhY2sgYWN0dWFsbHkgZG9lcy5cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5MTA9dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgd2VpZ2h0KVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkxNi1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDkxNzpcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHNjaCBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfd2VpZ2h0KSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkxOC1cdCAgICB0Zy1cdTAwM2VzY3gud2VpZ2h0ICE9IHdlaWdodClcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDkxOTpcdFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X3dlaWdodCwgTlVMTCwgdGdfY2dycCh0ZyksIHdlaWdodCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MjAtXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDcwPXN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA4MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9wcmVwX21vdmUpOlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDgyOlx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF93ZWlnaHQpOlxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9iYW5kd2lkdGgpOlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI0Mz1zdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19jZ3JvdXBfY2FuY2VsX21vdmUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgY2dyb3VwICpmcm9tLCBzdHJ1Y3QgY2dyb3VwICp0bykge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI0NDpzdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCB1MzIgd2VpZ2h0KSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjQ1LXN0YXRpYyB2b2lkIHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKSB7fVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI1OT1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHMgX19icGZfb3BzX3NjaGVkX2V4dF9vcHMgPSB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04Mjg1LVx0LmNncm91cF9jYW5jZWxfbW92ZVx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfY2FuY2VsX21vdmUsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyODY6XHQuY2dyb3VwX3NldF93ZWlnaHRcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF93ZWlnaHQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODctXHQuY2dyb3VwX3NldF9iYW5kd2lkdGhcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9iYW5kd2lkdGgsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MzI2PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wc19jaWQgX19icGZfb3BzX3NjaGVkX2V4dF9vcHNfY2lkID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM1MC1cdC5jcHVjdGxfY2FuY2VsX21vdmVcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2NhbmNlbF9tb3ZlLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MzUxOlx0LmNwdWN0bF9zZXRfd2VpZ2h0XHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfd2VpZ2h0LFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzUyLVx0LmNwdWN0bF9zZXRfYmFuZHdpZHRoXHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfYmFuZHdpZHRoLFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA3Nzg9c3RhdGljIGNvbnN0IHUzMiBzY3hfa2ZfYWxsb3dfZmxhZ3NbXSA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzg5LVx0W1NDWF9PUF9JRFgoY2dyb3VwX2NhbmNlbF9tb3ZlKV0gPSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwNzkwOlx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF93ZWlnaHQpXVx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzkxLVx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF9iYW5kd2lkdGgpXSA9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODkzPXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1NC1cdENJRF9PRkZTRVRfTUFUQ0goY2dyb3VwX2NhbmNlbF9tb3ZlLCBjcHVjdGxfY2FuY2VsX21vdmUpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk1NTpcdENJRF9PRkZTRVRfTUFUQ0goY2dyb3VwX3NldF93ZWlnaHQsIGNwdWN0bF9zZXRfd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTYtXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9zZXRfYmFuZHdpZHRoLCBjcHVjdGxfc2V0X2JhbmR3aWR0aCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMTA1OD1ERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9iYW5kd2lkdGhfbWF5X3NsZWVwKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDYxLS8qXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDYyOiAqIHNjeF9jb21wYXRfbWFya2VyX2Nncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcDogYWR2ZXJ0aXNlcyB0aGF0XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDYzOiAqIG9wcy5jZ3JvdXBfc2V0X3dlaWdodCgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay5cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNjQtICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDY1LSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDY2OkRFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXApO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA2Ny0jZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzE5PXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzM0LVx0LyoqXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzM1Olx0ICogQGNncm91cF9zZXRfd2VpZ2h0OiBBIGNncm91cCYjMzk7cyB3ZWlnaHQgaXMgYmVpbmcgY2hhbmdlZFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTczNi1cdCAqIEBjZ3JwOiBjZ3JvdXAgd2hvc2Ugd2VpZ2h0IGlzIGJlaW5nIHVwZGF0ZWRcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzQ1LVx0ICovXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzQ2Olx0dm9pZCAoKmNncm91cF9zZXRfd2VpZ2h0KShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCB1MzIgd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03NDctXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc2NS1cdCAqXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzY2Olx0ICogRGVsaXZlcnkgZm9sbG93cyB0aGUgc2FtZSBydWxlIGFzIGNncm91cF9zZXRfd2VpZ2h0KCkuXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzY3LVx0ICovXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc4MC1cdCAqXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzgxOlx0ICogRGVsaXZlcnkgZm9sbG93cyB0aGUgc2FtZSBydWxlIGFzIGNncm91cF9zZXRfd2VpZ2h0KCkuXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzgyLVx0ICovXG4tLVxudG9vbHMvc2NoZWRfZXh0L3NjeF9mbGF0Y2cuYnBmLmM9NTgwPXZvaWQgQlBGX1NUUlVDVF9PUFMoZmNnX3F1aWVzY2VudCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1NjQgZGVxX2ZsYWdzKVxuLS1cbnRvb2xzL3NjaGVkX2V4dC9zY3hfZmxhdGNnLmJwZi5jLTU4OC1cbnRvb2xzL3NjaGVkX2V4dC9zY3hfZmxhdGNnLmJwZi5jOjU4OTp2b2lkIEJQRl9TVFJVQ1RfT1BTKGZjZ19jZ3JvdXBfc2V0X3dlaWdodCwgc3RydWN0IGNncm91cCAqY2dycCwgdTMyIHdlaWdodClcbnRvb2xzL3NjaGVkX2V4dC9zY3hfZmxhdGNnLmJwZi5jLTU5MC17XG4tLVxudG9vbHMvc2NoZWRfZXh0L3NjeF9mbGF0Y2cuYnBmLmM9OTYyPVNDWF9PUFNfREVGSU5FKGZsYXRjZ19vcHMsXG4tLVxudG9vbHMvc2NoZWRfZXh0L3NjeF9mbGF0Y2cuYnBmLmMtOTcwLVx0ICAgICAgIC5pbml0X3Rhc2tcdFx0PSAodm9pZCAqKWZjZ19pbml0X3Rhc2ssXG50b29scy9zY2hlZF9leHQvc2N4X2ZsYXRjZy5icGYuYzo5NzE6XHQgICAgICAgLmNncm91cF9zZXRfd2VpZ2h0XHQ9ICh2b2lkICopZmNnX2Nncm91cF9zZXRfd2VpZ2h0LFxudG9vbHMvc2NoZWRfZXh0L3NjeF9mbGF0Y2cuYnBmLmMtOTcyLVx0ICAgICAgIC5jZ3JvdXBfaW5pdFx0XHQ9ICh2b2lkICopZmNnX2Nncm91cF9pbml0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXhpbWFsLmJwZi5jPTExOD12b2lkIEJQRl9TVFJVQ1RfT1BTKG1heGltYWxfY2dyb3VwX2NhbmNlbF9tb3ZlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heGltYWwuYnBmLmMtMTIxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heGltYWwuYnBmLmM6MTIyOnZvaWQgQlBGX1NUUlVDVF9PUFMobWF4aW1hbF9jZ3JvdXBfc2V0X3dlaWdodCwgc3RydWN0IGNncm91cCAqY2dycCwgdTMyIHdlaWdodClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXhpbWFsLmJwZi5jLTEyMy17fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXhpbWFsLmJwZi5jPTEzOD1zdHJ1Y3Qgc2NoZWRfZXh0X29wcyBtYXhpbWFsX29wcyA9IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF4aW1hbC5icGYuYy0xNjItXHQuY2dyb3VwX2NhbmNlbF9tb3ZlXHQ9ICh2b2lkICopIG1heGltYWxfY2dyb3VwX2NhbmNlbF9tb3ZlLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heGltYWwuYnBmLmM6MTYzOlx0LmNncm91cF9zZXRfd2VpZ2h0XHQ9ICh2b2lkICopIG1heGltYWxfY2dyb3VwX3NldF93ZWlnaHQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF4aW1hbC5icGYuYy0xNjQtXHQuY2dyb3VwX3NldF9iYW5kd2lkdGhcdD0gKHZvaWQgKikgbWF4aW1hbF9jZ3JvdXBfc2V0X2JhbmR3aWR0aCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzA3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkludmVzdGlnYXRpbmcgV2VpZ2h0IGFuZCBJZGxlIFNldHRpbmdzIGluIHRoZSBDZ3JvdXAgQ29udGV4dCoqCgpIbW0sIHNvIGBzY3hfZ3JvdXBfc2V0X3dlaWdodGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY2FsbHMgYGNncm91cF9zZXRfd2VpZ2h0YC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgSSB3YW50IHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaGVyZSwgYW5kIHNlZSBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBzZXR0aW5ncyBwcm9wYWdhdGUsIGFuZCB0aGUgY2hhaW4gb2Ygb3BlcmF0aW9ucy4gTm93LCBsZXQmIzM5O3Mgc2VlLCB0aGUgb3RoZXIgcGFydCBvZiBteSBtZW50YWwgcHV6emxlIGlzIHdoZXJlIGlzIGBjZ3JvdXBfc2V0X2lkbGVgIGJlaW5nIGNhbGxlZD8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyBvZiB0aGF0IHdpbGwgZ2l2ZSBhIGdvb2QgaW5zaWdodCBpbnRvIHRoZSBvdGhlciByZWxhdGVkIG9wZXJhdGlvbnMgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2dyb3VwX3NldF9pZGxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdD0xMTQxPXdpbGwgYmUgcmVmZXJyZWQgdG8uIEFsbCB0aW1lIGR1cmF0aW9ucyBhcmUgaW4gbWljcm9zZWNvbmRzLlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xMjY5LVx0VGhpcyBmaWxlIGFmZmVjdHMgb25seSBwcm9jZXNzZXMgdW5kZXIgdGhlIGZhaXItY2xhc3Mgc2NoZWR1bGVyIGFuZCBhIEJQRlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0OjEyNzA6XHRzY2hlZHVsZXIgd2l0aCB0aGUgYGBjZ3JvdXBfc2V0X2lkbGVgYCBjYWxsYmFjayBkZXBlbmRpbmcgb24gd2hhdCB0aGVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdC0xMjcxLVx0Y2FsbGJhY2sgYWN0dWFsbHkgZG9lcy5cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5MjY9dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTMyLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTMzOlx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgc2NoIFx1MDAyNlx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlKSlcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDkzNDpcdFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkzNS1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgwNzA9c3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9iYW5kd2lkdGgpOlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDg0Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKTpcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA4NS0jZW5kaWZcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNDU9c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IGNncm91cCAqY2dycCwgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyNDY6c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9pZGxlKHN0cnVjdCBjZ3JvdXAgKmNncnAsIGJvb2wgaWRsZSkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI0Ny0jZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNTk9c3RhdGljIHN0cnVjdCBzY2hlZF9leHRfb3BzIF9fYnBmX29wc19zY2hlZF9leHRfb3BzID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI4Ny1cdC5jZ3JvdXBfc2V0X2JhbmR3aWR0aFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X2JhbmR3aWR0aCxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI4ODpcdC5jZ3JvdXBfc2V0X2lkbGVcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9pZGxlLFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04Mjg5LSNlbmRpZlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODMyNj1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIF9fYnBmX29wc19zY2hlZF9leHRfb3BzX2NpZCA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNTItXHQuY3B1Y3RsX3NldF9iYW5kd2lkdGhcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9iYW5kd2lkdGgsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzNTM6XHQuY3B1Y3RsX3NldF9pZGxlXHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfaWRsZSxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM1NC0jZW5kaWZcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwNzc4PXN0YXRpYyBjb25zdCB1MzIgc2N4X2tmX2FsbG93X2ZsYWdzW10gPSB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5MS1cdFtTQ1hfT1BfSURYKGNncm91cF9zZXRfYmFuZHdpZHRoKV0gPSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwNzkyOlx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF9pZGxlKV1cdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5My0jZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODkzPXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1Ni1cdENJRF9PRkZTRVRfTUFUQ0goY2dyb3VwX3NldF9iYW5kd2lkdGgsIGNwdWN0bF9zZXRfYmFuZHdpZHRoKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5NTc6XHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9zZXRfaWRsZSwgY3B1Y3RsX3NldF9pZGxlKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTgtI2VuZGlmXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMTA2Nj1ERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDY5LS8qXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDcwOiAqIHNjeF9jb21wYXRfbWFya2VyX2Nncm91cF9zZXRfaWRsZV9tYXlfc2xlZXA6IGFkdmVydGlzZXMgdGhhdFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMTA3MTogKiBvcHMuY2dyb3VwX3NldF9pZGxlKCkgbWF5IGJlIGltcGxlbWVudGVkIGFzIGEgc2xlZXBhYmxlIGNhbGxiYWNrLlxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA3Mi0gKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNzMtI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTEwNzQ6REVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfaWRsZV9tYXlfc2xlZXApO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA3NS0jZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzE5PXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzcxLVx0LyoqXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzcyOlx0ICogQGNncm91cF9zZXRfaWRsZTogQSBjZ3JvdXAmIzM5O3MgaWRsZSBzdGF0ZSBpcyBiZWluZyBjaGFuZ2VkXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzczLVx0ICogQGNncnA6IGNncm91cCB3aG9zZSBpZGxlIHN0YXRlIGlzIGJlaW5nIHVwZGF0ZWRcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzgyLVx0ICovXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzgzOlx0dm9pZCAoKmNncm91cF9zZXRfaWRsZSkoc3RydWN0IGNncm91cCAqY2dycCwgYm9vbCBpZGxlKTtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODQtXG4tLVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbXBhdC5oPTIyMz1zdGF0aWMgaW5saW5lIGxvbmcgc2N4X2hvdHBsdWdfc2VxKHZvaWQpXG4tLVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbXBhdC5oLTI3Mi0gKiAtIHY2LjE3OiBvcHMuY2dyb3VwX3NldF9iYW5kd2lkdGgoKVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbXBhdC5oOjI3MzogKiAtIHY2LjE5OiBvcHMuY2dyb3VwX3NldF9pZGxlKClcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaC0yNzQtICogLSB2Ny4xOiAgb3BzLnN1Yl9hdHRhY2goKSwgb3BzLnN1Yl9kZXRhY2goKSwgb3BzLnN1Yl9jZ3JvdXBfaWRcbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0LmgtMjk4LVx0fVx0XHRcdFx0XHRcdFx0XHRcdFxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0Lmg6Mjk5Olx0aWYgKF9fc2tlbC1cdTAwM2VzdHJ1Y3Rfb3BzLl9fb3BzX25hbWUtXHUwMDNlY2dyb3VwX3NldF9pZGxlIFx1MDAyNlx1MDAyNlx0XHRcdFxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0Lmg6MzAwOlx0ICAgICFfX0NPTVBBVF9zdHJ1Y3RfaGFzX2ZpZWxkKFwmIzM0O3NjaGVkX2V4dF9vcHNcJiMzNDssIFwmIzM0O2Nncm91cF9zZXRfaWRsZVwmIzM0OykpIHsgXFxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaDozMDE6XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtXQVJOSU5HOiBrZXJuZWwgZG9lc24mIzM5O3Qgc3VwcG9ydCBvcHMuY2dyb3VwX3NldF9pZGxlKClcXG5cJiMzNDspOyBcXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbXBhdC5oOjMwMjpcdFx0X19za2VsLVx1MDAzZXN0cnVjdF9vcHMuX19vcHNfbmFtZS1cdTAwM2VjZ3JvdXBfc2V0X2lkbGUgPSBOVUxMO1x0XFxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaC0zMDMtXHR9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipSZWFjaGluZyB0aGUgQ2FsbGJhY2tzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlc2UgY2FsbGJhY2tzIGFyZSBpbnZva2VkLCBzcGVjaWZpY2FsbHkgdGhvc2Ugc2V0IGJ5IGBzY3hfZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgY2FsbCBwYXRoLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgdG8gdW5kZXJzdGFuZCB3aGVuIGFuZCB3aHkgdGhlc2UgY2FsbGJhY2tzIGFyZSB0cmlnZ2VyZWQuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBzY3hfZ3JvdXBfc2V0X3dlaWdodGAgcHJvYmFibHkgaGFzIGEgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBpbiB0aGUgc2NoZWR1bGVyIGNvcmUgdG8gc2V0IENQVSB3ZWlnaHRzLCBwcm9iYWJseSBzb21ldGhpbmcgaW4gYGtlcm5lbC9zY2hlZC9jb3JlLmNgLiBJJiMzOTtsbCB3YW50IHRvIGNvbmZpcm0gaWYgYGNwdV93ZWlnaHRfd3JpdGVfczY0YCBvciBzb21ldGhpbmcgc2ltaWxhciwgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24uIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc3RhY2tzIGFuZCBzZWUgd2hlcmUgdGhleSBlbmQgdXAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjeF9ncm91cF9zZXRfd2VpZ2h0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmM9OTgyMD1zdGF0aWMgaW50IGNwdV9zaGFyZXNfd3JpdGVfdTY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy05ODI4LVx0aWYgKCFyZXQpXG5rZXJuZWwvc2NoZWQvY29yZS5jOjk4Mjk6XHRcdHNjeF9ncm91cF9zZXRfd2VpZ2h0KGNzc190Zyhjc3MpLFxua2VybmVsL3NjaGVkL2NvcmUuYy05ODMwLVx0XHRcdFx0ICAgICBzY2hlZF93ZWlnaHRfdG9fY2dyb3VwKHNoYXJldmFsKSk7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz0xMDQyNT1zdGF0aWMgaW50IGNwdV93ZWlnaHRfd3JpdGVfdTY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDQzNy1cdGlmICghcmV0KVxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDQzODpcdFx0c2N4X2dyb3VwX3NldF93ZWlnaHQoY3NzX3RnKGNzcyksIGNncnBfd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTA0MzktXHRyZXR1cm4gcmV0O1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTA0NjA9c3RhdGljIGludCBjcHVfd2VpZ2h0X25pY2Vfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDQ3NC1cdGlmICghcmV0KVxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDQ3NTpcdFx0c2N4X2dyb3VwX3NldF93ZWlnaHQoY3NzX3RnKGNzcyksXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwNDc2LVx0XHRcdFx0ICAgICBzY2hlZF93ZWlnaHRfdG9fY2dyb3VwKHdlaWdodCkpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDg5MT12b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTA5LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTEwOnZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIHdlaWdodClcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkxMS17XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaD04MD12b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaDo4MTp2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTgyLXZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTkwPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo5MTpzdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05Mi1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKSB7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQzNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBCcmFpbiYjMzk7cyBRdWljayBDaGVjayoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNvZGUsIGFuZCBJIHNlZSB0aGUgZnVuY3Rpb24gYHNjeF9ncm91cF9zZXRfaWRsZWAuLi4gYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCByZWxhdGVkIGNvbmNlcHRzLiBJJiMzOTttIHdvbmRlcmluZyBpZiBpdCYjMzk7cyBnb3QgYW4gaW1wYWN0IG9uIGFueSBvZiB0aGUgY29yZSBhbGdvcml0aG1zLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBpbXBsaWNhdGlvbnMgb24gd2hhdGV2ZXIgcHJvY2VzcyBpcyBiZWluZyBtYW5hZ2VkLCBzbyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gaW5mbHVlbmNlcyBjb25jdXJyZW5jeSBvciByZXNvdXJjZSBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgc3lzdGVtLCBsaWtlIHRocmVhZCBwb29saW5nLCBtZW1vcnkgdXNhZ2UsIGFuZCBpZGxlIHRpbWUgbWFuYWdlbWVudCB0byBlbnN1cmUgdGhpbmdzIHN0YXkgZWZmaWNpZW50IGFuZCBzdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jPTEwMjU1PXN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2MS1cdGlmICghcmV0KVxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDI2MjpcdFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTAyNjMtXHRyZXR1cm4gcmV0O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDkxMD12b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyB3ZWlnaHQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI1LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTI2OnZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI3LXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTgxPXZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC04My12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTI6c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOTMtc3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTA4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IEJQRiBDYWxsYmFjayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgdGhlIGFiaWxpdHkgZm9yIHRoZXNlIEJQRiBjYWxsYmFja3MgdG8gc2xlZXAsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBzaGlmdC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgaW50byBgc2N4X2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgc2N4X2dyb3VwX3NldF9pZGxlYCBkaXJlY3RseSwgZXhwZWN0aW5nIG1vZGlmaWNhdGlvbnMgdGhlcmUuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgYWN0dWFsbHkgdG91Y2ggdGhvc2UgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIEl0JiMzOTtzIG1vZGlmeWluZyBgYnBmX3NjeF9jaGVja19tZW1iZXJgLCBlbmFibGluZyBCUEYgcHJvZ3JhbXMgdG8gdXRpbGl6ZSBzbGVlcGFibGUgZnVuY3Rpb25zIHdpdGhpbiBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYC4gRXNzZW50aWFsbHksIHRoZSBCUEYgdmVyaWZpZXIgaXMgYmVpbmcgcmVsYXhlZCB0byBwZXJtaXQgc2xlZXBhYmxlIHByb2dyYW1zIGZvciB0aGVzZSBzcGVjaWZpYyBjYWxsYmFja3MuIE5vdyBJIHVuZGVyc3RhbmQuIFRoaXMgaXMgY2xldmVyLgoKVGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYENPTkZJR19TQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRGAuIFRpbWUgdG8gY2hlY2sgS2NvbmZpZyBhbmQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgb2YgYENPTkZJR19FWFRfR1JPVVBfU0NIRURgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFRfR1JPVVBfU0NIRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTExODc9Y29uZmlnIFJUX0dST1VQX1NDSEVEX0RFRkFVTFRfRElTQUJMRURcbi0tXG5pbml0L0tjb25maWctMTE5Ny1cbmluaXQvS2NvbmZpZzoxMTk4OmNvbmZpZyBFWFRfR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMTk5LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYxMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gRVhUX0dST1VQX1NDSEVEIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYEVYVF9HUk9VUF9TQ0hFRGAgbW9kdWxlIGluc2lkZSBhbmQgb3V0LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyBieSBtYXBwaW5nIGl0cyBkZXBlbmRlbmNpZXMuIFdoZXJlIGRvZXMgdGhpcyB0aGluZyBsaXZlPyBXaGF0IGRvZXMgaXQgcmVseSBvbiB0byBmdW5jdGlvbj8gV2hhdCBwaWVjZXMgb2YgdGhlIHN5c3RlbSBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciBpdCB0byBldmVuICpiZSo/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSwgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZSBvdGhlciBtb2R1bGVzIGluIHRoaXMsIGZyYW5rbHksIGNvbXBsZXggc3lzdGVtLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBlY29zeXN0ZW0uIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTk1Olx0XG4xMTk2Olx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjExOTc6XHRcbjExOTg6XHRjb25maWcgRVhUX0dST1VQX1NDSEVEXG4xMTk5Olx0XHRib29sXG4xMjAwOlx0XHRkZXBlbmRzIG9uIFNDSEVEX0NMQVNTX0VYVCBcdTAwMjZcdTAwMjYgQ0dST1VQX1NDSEVEXG4xMjAxOlx0XHRzZWxlY3QgR1JPVVBfU0NIRURfV0VJR0hUXG4xMjAyOlx0XHRzZWxlY3QgR1JPVVBfU0NIRURfQkFORFdJRFRIXG4xMjAzOlx0XHRkZWZhdWx0IHlcbjEyMDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NDIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIGludG8gU2NoZWR1bGVyIEV4dGVuc2lvbnMgYW5kIGNncm91cHMqKgoKUmlnaHQsIHNvIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYFNDSEVEX0NMQVNTX0VYVGAgYW5kIGBDR1JPVVBfU0NIRURgLiBNYWtlcyBzZW5zZSwgdGhleSYjMzk7cmUgb2Z0ZW4gaW50ZXJ0d2luZWQgd2hlbiB5b3UmIzM5O3JlIGxvb2tpbmcgYXQgZXh0ZW5kaW5nIHNjaGVkdWxlciBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIGBTQ0hFRF9DTEFTU19FWFRgLiBJdCYjMzk7cyBsaWtlbHkgdGhlIGNvcmUgZWxlbWVudCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgZmlyc3QuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBncmFzcCBpdHMgaW1wbGljYXRpb25zIGJlZm9yZSBJIG1vdmUgb24gdG8gaG93IGl0IGludGVncmF0ZXMgd2l0aCwgb3IgaXMgbGV2ZXJhZ2VkIGJ5LCB0aGUgY2dyb3VwIHNjaGVkdWxpbmcgZnJhbWV3b3JrLiBXaGF0IGV4YWN0bHkgZG9lcyB0aGlzIGV4dGVuc2lvbiBwcm92aWRlLCBhbmQgaG93IGRvZXMgaXQgbW9kaWZ5IG9yIGF1Z21lbnQgdGhlIHN0YW5kYXJkIHNjaGVkdWxlciBjbGFzc2VzPyBMZXQmIzM5O3MgZ2V0IGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBhbmQgaG93IGl0IGlzIGVtcGxveWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0NIRURfQ0xBU1NfRVhUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLnByZWVtcHQ9MTUxPWNvbmZpZyBTQ0hFRF9DT1JFXG4tLVxua2VybmVsL0tjb25maWcucHJlZW1wdC0xNjgtXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjE2OTpjb25maWcgU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTE3MC1cdGJvb2wgXCYjMzQ7RXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgUHJlZW1wdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgU0NIRURfQ0xBU1NfRVhUYCBpcyBiZWluZyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIGBrZXJuZWwvS2NvbmZpZy5wcmVlbXB0YC4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIHByZWVtcHRpb24tcmVsYXRlZCBvcHRpb25zIGFyZSBkZWZpbmVkLiBJdCYjMzk7cyBhIGtleSBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgdGhlcmUgYW5kIHNlZSBpZiBgU0NIRURfQ0xBU1NfRVhUYCBpcyBkZWZpbmVkIG9yIHJlZmVyZW5jZWQgd2l0aGluIHRoYXQgY29udGV4dC4gRnJvbSB0aGF0LCBJIGNhbiBkZXRlcm1pbmUgaG93IHRoZSBzZXR0aW5nIGlzIGNvbnRyb2xsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL0tjb25maWcucHJlZW1wdCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTY1Olx0XHQgIFNDSEVEX0NPUkUgaXMgZGVmYXVsdCBkaXNhYmxlZC4gV2hlbiBpdCBpcyBlbmFibGVkIGFuZCB1bnVzZWQsXG4gMTY2Olx0XHQgIHdoaWNoIGlzIHRoZSBsaWtlbHkgdXNhZ2UgYnkgTGludXggZGlzdHJpYnV0aW9ucywgdGhlcmUgc2hvdWxkXG4gMTY3Olx0XHQgIGJlIG5vIG1lYXN1cmFibGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLlxuIDE2ODpcdFxuIDE2OTpcdGNvbmZpZyBTQ0hFRF9DTEFTU19FWFRcbiAxNzA6XHRcdGJvb2wgXCYjMzQ7RXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXCYjMzQ7XG4gMTcxOlx0XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBCUEZfSklUIFx1MDAyNlx1MDAyNiBERUJVR19JTkZPX0JURlxuIDE3MjpcdFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG4gMTczOlx0XHRzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlRcbiAxNzQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MDcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTY2hlZHVsaW5nIEV4dGVuc2lvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGFuZCBpbW1lZGlhdGVseSwgdGhlIGZsYWdzIGp1bXAgb3V0IOKAkyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBTQ0hFRF9DTEFTU19FWFRgLCBgQ0dST1VQX1NDSEVEYCwgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC4gVGhlc2UgYXJlIHRoZSBmb3VuZGF0aW9uYWwgcGllY2VzIG9mIHRoaXMgYXJjaGl0ZWN0dXJlLiBNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHNjaGVkdWxpbmcgYW5kIGdyb3VwaW5nLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBzY3hfZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBjb250cm9sIHBvaW50cy4gSSBhbHNvIG5vdGVkIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgYnV0IHRoYXQmIzM5O3Mgc3RhdGljIHNvIHdoaWxlIEkgY2FuJiMzOTt0IGxvb2sgZGlyZWN0bHkgYXQgaXQsIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgd29ydGgga2VlcGluZyBpbiBtaW5kLiBXYWl0IGEgbWludXRlLCBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBmdW5jdGlvbiBhcmVuJiMzOTt0IHN0YXRpYy4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgc2N4X2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgc2N4X2dyb3VwX3NldF9pZGxlYCBhcmVuJiMzOTt0IHN0YXRpYyBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AuIEp1c3Qgd2FudCB0byBjb25maXJtIGJlZm9yZSBjb250aW51aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDg5MT12b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTA5LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTEwOnZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIHdlaWdodClcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkxMS17XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaD04MD12b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaDo4MTp2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTgyLXZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTkwPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo5MTpzdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05Mi1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKSB7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM5NAoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgVmVyaWZpZXIgRW5oYW5jZW1lbnQgZm9yIFNjaGVkX0V4dCBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyB0aGUgQlBGIHZlcmlmaWVyIGZvciBgc2NoZWRfZXh0YCBoYXMgYmVlbiB1cGRhdGVkIOKAkyB0aGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIHBpY2tpbmcgdXAgb24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzbGVlcGFibGUgcHJvZ3JhbXMgc3BlY2lmaWNhbGx5IGZvciBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZywgJiMzNDtJbnRlcmVzdGluZywgdGhpcyBvcGVucyB1cCBzb21lIG5ldyBhdHRhY2sgdmVjdG9ycy4mIzM0OyBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3ZlIG1hZGUgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciwgcGFydGljdWxhcmx5IGVuYWJsaW5nIHNsZWVwYWJsZSBwcm9ncmFtcywgZGVmaW5pdGVseSB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaW50cm9kdWNlcyBtb3JlIGZsZXhpYmlsaXR5IHRvIHdoYXQgY2FuIGJlIGRvbmUgaW4ga2VybmVsIHNwYWNlLCBhbmQgdGhlcmVmb3JlIG1vcmUgcG90ZW50aWFsIGZvciBleHBsb2l0LgoKTXkgaW1tZWRpYXRlIGZvY3VzIGNvbmZpZ3VyYXRpb24td2lzZSBpcyBnb2luZyB0byBiZSBgU0NIRURfQ0xBU1NfRVhUYCBhbmQgYENHUk9VUF9TQ0hFRGAsIGJlY2F1c2UgdGhhdOKAmXMgdGhlIHNjb3BlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZW4sIEnigJlsbCBiZSBob25pbmcgaW4gb24gYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAg4oCTIHRob3NlIGZ1bmN0aW9ucyB3aWxsIGJlIHRoZSBwcmltYXJ5IHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGVzdCB0aGUgbmV3bHkgYXZhaWxhYmxlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X2dyb3VwX3NldF93ZWlnaHQmIzM0OywKICAgICYjMzQ7c2N4X2dyb3VwX3NldF9pZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgY29uc3RyYWludHMgZm9yIHRoZSBzY2hlZF9leHQgc3Vic3lzdGVtLCBhbGxvd2luZyB0aGUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzIHRvIGJlIGltcGxlbWVudGVkIGFzIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgYW5kIGNvbnN0cmFpbnRzIG9mIHRoZXNlIGNhbGxiYWNrcywgd2hpY2ggYXJlIHRyaWdnZXJlZCB2aWEgY2dyb3VwIGF0dHJpYnV0ZSB3cml0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBpbnZva2UgdGhlc2UgY2FsbGJhY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X2dyb3VwX3NldF93ZWlnaHQmIzM0OywKICAgICYjMzQ7c2N4X2dyb3VwX3NldF9pZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgY29uc3RyYWludHMgZm9yIHRoZSBzY2hlZF9leHQgc3Vic3lzdGVtLCBhbGxvd2luZyB0aGUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzIHRvIGJlIGltcGxlbWVudGVkIGFzIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgYW5kIGNvbnN0cmFpbnRzIG9mIHRoZXNlIGNhbGxiYWNrcywgd2hpY2ggYXJlIHRyaWdnZXJlZCB2aWEgY2dyb3VwIGF0dHJpYnV0ZSB3cml0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBpbnZva2UgdGhlc2UgY2FsbGJhY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc2NoZWRfZXh0IChzY3gpIHN1YnN5c3RlbSB0byBhbGxvdyBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBjYWxsYmFja3MgdG8gYmUgc2xlZXBhYmxlLiBJdCBkb2VzIHRoaXMgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGFsbG93ZWQgbGlzdCBpbiBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGFuZCBkZWZpbmluZyBjb21wYXRpYmlsaXR5IG1hcmtlcnMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBCUEYgdmVyaWZpZXIgY2hlY2tzIGZvciBzbGVlcGFibGUgY2FsbGJhY2tzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY0MTFjZTI4ZTMzYWQ5MDE2NWIwNzJhNjYwNTcwN2VjODc4YjVjOWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAwNjoxMToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jCmluZGV4IGI2NDY3MTFhNDVmZWUuLjUzYjg4OGY1YTZjNTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9leHQuYwpAQCAtODA3OSw3ICYjNDM7ODA3OSw5IEBAIHN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAogCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KToKIAljYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfZXhpdCk6CiAJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3ByZXBfbW92ZSk6CiYjNDM7CWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfd2VpZ2h0KToKIAljYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCk6CiYjNDM7CWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfaWRsZSk6CiAjZW5kaWYKIAljYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb25saW5lKToKIAljYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb2ZmbGluZSk6CkBAIC0xMTA1NSwzICYjNDM7MTEwNTcsMTkgQEAgX19pbml0Y2FsbChzY3hfaW5pdCk7CiAjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRAogREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfYmFuZHdpZHRoX21heV9zbGVlcCk7CiAjZW5kaWYJLyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXQKJiM0MzsgKiBvcHMuY2dyb3VwX3NldF93ZWlnaHQoKSBtYXkgYmUgaW1wbGVtZW50ZWQgYXMgYSBzbGVlcGFibGUgY2FsbGJhY2suCiYjNDM7ICovCiYjNDM7I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRUQKJiM0MztERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwKTsKJiM0MzsjZW5kaWYJLyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqLwomIzQzOwomIzQzOy8qCiYjNDM7ICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcDogYWR2ZXJ0aXNlcyB0aGF0CiYjNDM7ICogb3BzLmNncm91cF9zZXRfaWRsZSgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay4KJiM0MzsgKi8KJiM0MzsjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRAomIzQzO0RFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwKTsKJiM0MzsjZW5kaWYJLyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oIGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oCmluZGV4IDUzZTEzNmE0NzkyNGQuLmY4MWQwM2RlMmQzYzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgKQEAgLTczNiw3ICYjNDM7NzM2LDcgQEAgc3RydWN0IHNjaGVkX2V4dF9vcHMgewogCSAqIEBjZ3JwOiBjZ3JvdXAgd2hvc2Ugd2VpZ2h0IGlzIGJlaW5nIHVwZGF0ZWQKIAkgKiBAd2VpZ2h0OiBuZXcgd2VpZ2h0IFsxLi4xMDAwMF0KIAkgKgotCSAqIFVwZGF0ZSBAY2dycCYjMzk7cyB3ZWlnaHQgdG8gQHdlaWdodC4KJiM0MzsJICogVXBkYXRlIEBjZ3JwJiMzOTtzIHdlaWdodCB0byBAd2VpZ2h0LiBUaGlzIG9wZXJhdGlvbiBtYXkgYmxvY2suCiAJICoKIAkgKiBLbm9icyBvZiBhIGNncm91cCBiZWxvbmcgdG8gdGhlIHBhcmVudCwgc28gdGhlIHNldF8qIG9wcyBhcmUKIAkgKiBkZWxpdmVyZWQgdG8gQGNncnAmIzM5O3MgcGFyZW50JiMzOTtzIHNjaGVkLiBUaGF0IHNjaGVkIG1heSBuZXZlciBoYXZlIHNlZW4KQEAgLTc3Myw5ICYjNDM7NzczLDEwIEBAIHN0cnVjdCBzY2hlZF9leHRfb3BzIHsKIAkgKiBAY2dycDogY2dyb3VwIHdob3NlIGlkbGUgc3RhdGUgaXMgYmVpbmcgdXBkYXRlZAogCSAqIEBpZGxlOiB3aGV0aGVyIHRoZSBjZ3JvdXAgaXMgZW50ZXJpbmcgb3IgZXhpdGluZyBpZGxlIHN0YXRlCiAJICoKLQkgKiBVcGRhdGUgQGNncnAmIzM5O3MgaWRsZSBzdGF0ZSB0byBAaWRsZS4gVGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4KLQkgKiBhIGNncm91cCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGlkbGUgYW5kIG5vbi1pZGxlIHN0YXRlcywgYWxsb3dpbmcgdGhlCi0JICogQlBGIHNjaGVkdWxlciB0byBhZGp1c3QgaXRzIGJlaGF2aW9yIGFjY29yZGluZ2x5LgomIzQzOwkgKiBVcGRhdGUgQGNncnAmIzM5O3MgaWRsZSBzdGF0ZSB0byBAaWRsZS4gVGhpcyBvcGVyYXRpb24gbWF5IGJsb2NrLiBUaGlzCiYjNDM7CSAqIGNhbGxiYWNrIGlzIGludm9rZWQgd2hlbiBhIGNncm91cCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGlkbGUgYW5kCiYjNDM7CSAqIG5vbi1pZGxlIHN0YXRlcywgYWxsb3dpbmcgdGhlIEJQRiBzY2hlZHVsZXIgdG8gYWRqdXN0IGl0cyBiZWhhdmlvcgomIzQzOwkgKiBhY2NvcmRpbmdseS4KIAkgKgogCSAqIERlbGl2ZXJ5IGZvbGxvd3MgdGhlIHNhbWUgcnVsZSBhcyBjZ3JvdXBfc2V0X3dlaWdodCgpLgogCSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgU2NoZWRfRXh0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgc2NoZWRfZXh0YC4gSXQmIzM5O3MgdG91Y2hpbmcgYGV4dC5jYCBhbmQgYGludGVybmFsLmhgLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIHRvIHRoZSBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGZ1bmN0aW9uIHdpdGhpbiBgZXh0LmNgLiBUaGUgYGludGVybmFsLmhgIGNoYW5nZXMganVzdCBzZWVtIHRvIGJlIHVwZGF0aW5nIHRoZSBjb21tZW50cyBhcm91bmQgdGhvc2UgdHdvIGZ1bmN0aW9ucywgZXhwbGljaXRseSBtZW50aW9uaW5nIHRoYXQgdGhleSAmIzM0O21heSBibG9jay4mIzM0OyBUaGF0JiMzOTtzIHRoZSBrZXkgdGhpbmcgaGVyZSDigJMgd2UmIzM5O3JlIGFsbG93aW5nIHRoZXNlIGNncm91cCBvcGVyYXRpb25zIHRvIHBvdGVudGlhbGx5IHNsZWVwLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGFib3V0IGVuYWJsaW5nIHNsZWVwYWJsZSBjYWxsYmFja3MgZm9yIHRob3NlIHNwZWNpZmljIGNncm91cCBmdW5jdGlvbnMgd2l0aGluIHRoZSBCUEYgc2NoZWRfZXh0IGNvbnRleHQuIE5vIG5ldyB1c2VyLXNwYWNlIGRhdGEgc3RydWN0dXJlcywgbm8gbWVtb3J5IHNhZmV0eSBpc3N1ZXMg4oCTIGl0JiMzOTtzIGFsbCB2ZXJpZmllciBjaGVja3MgYW5kIGNvbXBhdCBtYXJrZXJzLiBUaGF0JiMzOTtzIGdvb2Q7IGtlZXBpbmcgaXQgY29udGFpbmVkIGFuZCBmb2N1c2VkIG9uIHRoZSBCUEYgc2lkZSBtZWFucyBsZXNzIGNoYW5jZSBvZiB1bmZvcmVzZWVuIGNvbnNlcXVlbmNlcy4KCk5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHdoYXQgdGhlIHBhdGNoIGlzIGNoYW5naW5nIGV4YWN0bHkgaW4gYGJwZl9zY3hfY2hlY2tfbWVtYmVyYC4gQWhhLCBoZXJlJiMzOTtzIHRoZSByZWxldmFudCBjb2RlOgoKYGBgYwoJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2luaXQpOgoJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2V4aXQpOgoJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3ByZXBfbW92ZSk6CiYjNDM7CWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfd2VpZ2h0KToKCWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfYmFuZHdpZHRoKToKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKToKYGBgCgpZZXAsIGl0JiMzOTtzIGV4YWN0bHkgYXMgSSBleHBlY3RlZC4gVGhlc2UgbmV3IGNhc2VzIGFyZSBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aGluIGBicGZfc2N4X2NoZWNrX21lbWJlcmAsIGFuZCBpdCBwcm9iYWJseSBqdXN0IHJldHVybnMgc29tZSBzb3J0IG9mIGJvb2xlYW4gb3IgZW51bSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1lbWJlciBpcyBhbGxvd2VkIHRvIGJlIHNsZWVwYWJsZS4gVGhlIGNvbXBhdCBtYXJrZXJzIGFyZSBwcm9iYWJseSBuZWVkZWQgZm9yIG9sZGVyIEJQRiBwcm9ncmFtcywgYnV0IHRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2Ugd2l0aCB0aGlzIGtpbmQgb2YgY2hhbmdlLiBTZWVtcyBsaWtlIGEgc2FmZSBhbmQgd2VsbC1jb250YWluZWQgbW9kaWZpY2F0aW9uIHRvIHN1cHBvcnQgcG90ZW50aWFsbHkgYmxvY2tpbmcgY2dyb3VwIG9wZXJhdGlvbnMgaW4gdGhlIHNjaGVkX2V4dCBlbnZpcm9ubWVudCwgd2hpY2ggaXMgYmVjb21pbmcgaW5jcmVhc2luZ2x5IGNvbW1vbi4gSSYjMzk7ZCB3YW50IHRvIGNoZWNrIGhvdyB0aGUgYnBmIHZlcmlmaWVyIGJlaGF2ZXMgYWZ0ZXIgdGhpcyBjaGFuZ2UsIHRob3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NjeF9jaGVja19tZW1iZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZXh0L2V4dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9leHQvZXh0LmM9Nzk5OD1zdGF0aWMgaW50IGJwZl9zY3hfaW5pdF9tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA2OS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODA3MDpzdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA3MS1cdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MzAyPXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX3NjaGVkX2V4dF9vcHMgPSB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzA1LVx0LnVucmVnID0gYnBmX3NjeF91bnJlZyxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODMwNjpcdC5jaGVja19tZW1iZXIgPSBicGZfc2N4X2NoZWNrX21lbWJlcixcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODMwNy1cdC5pbml0X21lbWJlciA9IGJwZl9zY3hfaW5pdF9tZW1iZXIsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04Mzc0PXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX3NjaGVkX2V4dF9vcHNfY2lkID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM3Ny1cdC51bnJlZyA9IGJwZl9zY3hfdW5yZWcsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzNzg6XHQuY2hlY2tfbWVtYmVyID0gYnBmX3NjeF9jaGVja19tZW1iZXIsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNzktXHQuaW5pdF9tZW1iZXIgPSBicGZfc2N4X2luaXRfbWVtYmVyLFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA4OTM9c3RhdGljIGludCBfX2luaXQgc2N4X2luaXQodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwODk4LVx0ICogc2NoZWRfZXh0X29wc19jaWQgbWlycm9ycyBzY2hlZF9leHRfb3BzIHVwIHRvIGFuZCBpbmNsdWRpbmcgQHByaXYuXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwODk5Olx0ICogQm90aCBicGZfc2N4X2luaXRfbWVtYmVyKCkgYW5kIGJwZl9zY3hfY2hlY2tfbWVtYmVyKCkgdXNlIG9mZnNldHNcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5MDAtXHQgKiBmcm9tIHN0cnVjdCBzY2hlZF9leHRfb3BzOyBzY2hlZF9leHRfb3BzX2NpZCByZWxpZXMgb24gdGhvc2Ugb2Zmc2V0c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjkzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYnBmX3NjeF9jaGVja19tZW1iZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IGBicGZfc2N4X2NoZWNrX21lbWJlcmAuIFRoZSBuYW1lIGlzIHByZXR0eSBkZXNjcmlwdGl2ZSwgc28gSSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IHNlcnZlcyBhcyBhIGdhdGVrZWVwZXIgb2Ygc29ydHMsIHByb2JhYmx5IHJlbGF0ZWQgdG8gY2hlY2tpbmcgYWNjZXNzIHRvIHN0cnVjdHVyZSBtZW1iZXJzIHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIEkmIzM5O20gZ3Vlc3NpbmcgaXTigJlzIGludGVuZGVkIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3Igb3RoZXIgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCB1c2VyLXByb3ZpZGVkIGRhdGEgd2l0aGluIEJQRiBwcm9ncmFtcy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjb2RlIHRvIHNlZSB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjaGVja3MgaXQgcGVyZm9ybXMg4oCTIHBhcnRpY3VsYXJseSBhcm91bmQgcG90ZW50aWFsIG9mZnNldHMsIHNpemVzLCBhbmQgYW55IGFzc29jaWF0ZWQgcG9pbnRlciBkZXJlZmVyZW5jaW5nLiBJ4oCZbSBhbHNvIGN1cmlvdXMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIEJQRiBoZWxwZXJzIGFuZCB3aGF0IGtpbmQgb2YgZXJyb3IgY29kZXMgaXQgcmV0dXJucyB0byB0aGUgQlBGIHByb2dyYW0gaWYgYSBjaGVjayBmYWlscy4gVW5kZXJzdGFuZGluZyB0aGUgZmluZXIgZGV0YWlscyBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY3J1Y2lhbCBmb3Igc2VjdXJlIGFuZCByZWxpYWJsZSBCUEYgcHJvZ3JhbSBkZXZlbG9wbWVudCwgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9leHQvZXh0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzgwNzA6XHRzdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbjgwNzE6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG44MDcyOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG44MDczOlx0e1xuODA3NDpcdFx0dTMyIG1vZmYgPSBfX2J0Zl9tZW1iZXJfYml0X29mZnNldCh0LCBtZW1iZXIpIC8gODtcbjgwNzU6XHRcbjgwNzY6XHRcdHN3aXRjaCAobW9mZikge1xuODA3NzpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgaW5pdF90YXNrKTpcbjgwNzg6XHQjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxuODA3OTpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2luaXQpOlxuODA4MDpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2V4aXQpOlxuODA4MTpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3ByZXBfbW92ZSk6XG44MDgyOlx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X3dlaWdodCk6XG44MDgzOlx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCk6XG44MDg0Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2lkbGUpOlxuODA4NTpcdCNlbmRpZlxuODA4NjpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY3B1X29ubGluZSk6XG44MDg3Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb2ZmbGluZSk6XG44MDg4Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBpbml0X2NpZHMpOlxuODA4OTpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgaW5pdCk6XG44MDkwOlx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBleGl0KTpcbjgwOTE6XHRcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIHN1Yl9hdHRhY2gpOlxuODA5MjpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgc3ViX2RldGFjaCk6XG44MDkzOlx0XHRcdGJyZWFrO1xuODA5NDpcdFx0ZGVmYXVsdDpcbjgwOTU6XHRcdFx0aWYgKHByb2ctXHUwMDNlc2xlZXBhYmxlKVxuODA5NjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuODA5NzpcdFx0fVxuODA5ODpcdFxuODA5OTpcdCNpZmRlZiBDT05GSUdfRVhUX1NVQl9TQ0hFRFxuODEwMDpcdFx0LypcbjgxMDE6XHRcdCAqIEVuYWJsZSBwcml2YXRlIHN0YWNrIGZvciBvcGVyYXRpb25zIHRoYXQgY2FuIG5lc3QgYWxvbmcgdGhlXG44MTAyOlx0XHQgKiBoaWVyYXJjaHkuXG44MTAzOlx0XHQgKlxuODEwNDpcdFx0ICogWFhYIC0gSWRlYWxseSwgd2Ugc2hvdWxkIG9ubHkgZG8gdGhpcyBmb3Igc2NoZWRzIHRoYXQgYWxsb3dcbjgxMDU6XHRcdCAqIHN1Yi1zY2hlZHMgYW5kIHN1Yi1zY2hlZHMgdGhlbXNlbHZlcyBidXQgSSBkb24mIzM5O3Qga25vdyBob3cgdG8gYWNjZXNzXG44MTA2Olx0XHQgKiBzdHJ1Y3Rfb3BzIGZyb20gaGVyZS5cbjgxMDc6XHRcdCAqL1xuODEwODpcdFx0c3dpdGNoIChtb2ZmKSB7XG44MTA5Olx0XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBkaXNwYXRjaCk6XG44MTEwOlx0XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZXByaXZfc3RhY2tfcmVxdWVzdGVkID0gdHJ1ZTtcbjgxMTE6XHRcdFx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlcmVjdXJzaW9uX2RldGVjdGVkID0gc2N4X3BzdGFja19yZWN1cnNpb25fb25fZGlzcGF0Y2g7XG44MTEyOlx0XHRcdGJyZWFrO1xuODExMzpcdFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgc3ViX2NhcHNfdXBkYXRlZCk6XG44MTE0Olx0XHRcdHByb2ctXHUwMDNlYXV4LVx1MDAzZXByaXZfc3RhY2tfcmVxdWVzdGVkID0gdHJ1ZTtcbjgxMTU6XHRcdFx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlcmVjdXJzaW9uX2RldGVjdGVkID0gc2N4X3BzdGFja19yZWN1cnNpb25fb25fY2Fwc191cGRhdGVkO1xuODExNjpcdFx0XHRicmVhaztcbjgxMTc6XHRcdH1cbjgxMTg6XHQjZW5kaWZcdC8qIENPTkZJR19FWFRfU1VCX1NDSEVEICovXG44MTE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NTEKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGV4dGVuZGluZyB0aGUgcmFuZ2Ugb2Ygb3BlcmF0aW9ucyBjb25zaWRlcmVkICYjMzQ7c2xlZXBhYmxlJiMzNDsgd2l0aGluIHRoZSBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFkZGluZyBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCB0byB0aGF0IGFsbG93ZWQgbGlzdC4gUmVhbGx5LCBpdCYjMzk7cyBxdWl0ZSBtaW5pbWFsIGFuZCBsb2NhbGl6ZWQuIEFuZCBmb3IgY29tcGF0aWJpbGl0eSYjMzk7cyBzYWtlLCBpdCBhbHNvIGRlZmluZXMgYHNjeF9jb21wYXRfbWFya2VyX2Nncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcGAgYW5kIGBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwYC4KCkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCBpbnRlcm5hbHMgYW5kIEJQRiB2ZXJpZmllciBsb2dpYywgdGhlcmUmIzM5O3MgemVybyBjaGFuY2Ugb2YgaW50cm9kdWNpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eSB3aXRoIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBhIHZlcnkgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uIHRvIGEgQlBGIHZlcmlmaWNhdGlvbiBjaGVjay4gU28sIEkgd2lsbCBtYXJrIHRoaXMgYXMgYE5lZWRzS01TQU49ZmFsc2VgIGJlY2F1c2UgdGhlIGNoYW5nZSBpcyB2ZXJ5IHNpbXBsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzY2hlZF9leHQgKHNjeCkgc3Vic3lzdGVtIHRvIGFsbG93IGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxiYWNrcyB0byBiZSBzbGVlcGFibGUuIEl0IGRvZXMgdGhpcyBieSBhZGRpbmcgdGhlbSB0byB0aGUgYWxsb3dlZCBsaXN0IGluIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgYW5kIGRlZmluaW5nIGNvbXBhdGliaWxpdHkgbWFya2Vycy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIEJQRiB2ZXJpZmllciBjaGVja3MgZm9yIHNsZWVwYWJsZSBjYWxsYmFja3MuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc2NoZWRfZXh0IChzY3gpIHN1YnN5c3RlbSB0byBhbGxvdyBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBjYWxsYmFja3MgdG8gYmUgc2xlZXBhYmxlLiBJdCBkb2VzIHRoaXMgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGFsbG93ZWQgbGlzdCBpbiBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGFuZCBkZWZpbmluZyBjb21wYXRpYmlsaXR5IG1hcmtlcnMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBCUEYgdmVyaWZpZXIgY2hlY2tzIGZvciBzbGVlcGFibGUgY2FsbGJhY2tzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjExOjI5Ljk1NDQ0MTkxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5ODk1OTM4NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNDSEVEX0NMQVNTX0VYVFwiLFxuICAgIFwiQ0dST1VQX1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N4X2dyb3VwX3NldF93ZWlnaHRcIixcbiAgICBcInNjeF9ncm91cF9zZXRfaWRsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzY2hlZF9leHQgKHNjeCkgc3Vic3lzdGVtIHRvIGFsbG93IGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxiYWNrcyB0byBiZSBzbGVlcGFibGUuIEl0IGRvZXMgdGhpcyBieSBhZGRpbmcgdGhlbSB0byB0aGUgYWxsb3dlZCBsaXN0IGluIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgYW5kIGRlZmluaW5nIGNvbXBhdGliaWxpdHkgbWFya2Vycy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIEJQRiB2ZXJpZmllciBjaGVja3MgZm9yIHNsZWVwYWJsZSBjYWxsYmFja3MuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGNvbnN0cmFpbnRzIGZvciB0aGUgc2NoZWRfZXh0IHN1YnN5c3RlbSwgYWxsb3dpbmcgdGhlIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxiYWNrcyB0byBiZSBpbXBsZW1lbnRlZCBhcyBzbGVlcGFibGUgQlBGIHByb2dyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IGFuZCBjb25zdHJhaW50cyBvZiB0aGVzZSBjYWxsYmFja3MsIHdoaWNoIGFyZSB0cmlnZ2VyZWQgdmlhIGNncm91cCBhdHRyaWJ1dGUgd3JpdGVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgZW50cnkgcG9pbnRzIHRoYXQgaW52b2tlIHRoZXNlIGNhbGxiYWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTE6MjkuOTU0NDQ3NzQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxOTk2ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjQxMWNlMjhlMzNhZDkwMTY1YjA3MmE2NjA1NzA3ZWM4NzhiNWM5ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwNjoxMToyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xcbmluZGV4IGI2NDY3MTFhNDVmZWUuLjUzYjg4OGY1YTZjNTEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC9leHQuY1xcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcXG5AQCAtODA3OSw3ICs4MDc5LDkgQEAgc3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuIFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KTpcXG4gXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2V4aXQpOlxcbiBcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfcHJlcF9tb3ZlKTpcXG4rXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF93ZWlnaHQpOlxcbiBcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCk6XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfaWRsZSk6XFxuICNlbmRpZlxcbiBcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb25saW5lKTpcXG4gXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY3B1X29mZmxpbmUpOlxcbkBAIC0xMTA1NSwzICsxMTA1NywxOSBAQCBfX2luaXRjYWxsKHNjeF9pbml0KTtcXG4gI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG4gREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfYmFuZHdpZHRoX21heV9zbGVlcCk7XFxuICNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG4rXFxuKy8qXFxuKyAqIHNjeF9jb21wYXRfbWFya2VyX2Nncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcDogYWR2ZXJ0aXNlcyB0aGF0XFxuKyAqIG9wcy5jZ3JvdXBfc2V0X3dlaWdodCgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay5cXG4rICovXFxuKyNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxuK0RFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXApO1xcbisjZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxuK1xcbisvKlxcbisgKiBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXRcXG4rICogb3BzLmNncm91cF9zZXRfaWRsZSgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay5cXG4rICovXFxuKyNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxuK0RFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwKTtcXG4rI2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmggYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcXG5pbmRleCA1M2UxMzZhNDc5MjRkLi5mODFkMDNkZTJkM2M3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxcbkBAIC03MzYsNyArNzM2LDcgQEAgc3RydWN0IHNjaGVkX2V4dF9vcHMge1xcbiBcXHQgKiBAY2dycDogY2dyb3VwIHdob3NlIHdlaWdodCBpcyBiZWluZyB1cGRhdGVkXFxuIFxcdCAqIEB3ZWlnaHQ6IG5ldyB3ZWlnaHQgWzEuLjEwMDAwXVxcbiBcXHQgKlxcbi1cXHQgKiBVcGRhdGUgQGNncnAncyB3ZWlnaHQgdG8gQHdlaWdodC5cXG4rXFx0ICogVXBkYXRlIEBjZ3JwJ3Mgd2VpZ2h0IHRvIEB3ZWlnaHQuIFRoaXMgb3BlcmF0aW9uIG1heSBibG9jay5cXG4gXFx0ICpcXG4gXFx0ICogS25vYnMgb2YgYSBjZ3JvdXAgYmVsb25nIHRvIHRoZSBwYXJlbnQsIHNvIHRoZSBzZXRfKiBvcHMgYXJlXFxuIFxcdCAqIGRlbGl2ZXJlZCB0byBAY2dycCdzIHBhcmVudCdzIHNjaGVkLiBUaGF0IHNjaGVkIG1heSBuZXZlciBoYXZlIHNlZW5cXG5AQCAtNzczLDkgKzc3MywxMCBAQCBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XFxuIFxcdCAqIEBjZ3JwOiBjZ3JvdXAgd2hvc2UgaWRsZSBzdGF0ZSBpcyBiZWluZyB1cGRhdGVkXFxuIFxcdCAqIEBpZGxlOiB3aGV0aGVyIHRoZSBjZ3JvdXAgaXMgZW50ZXJpbmcgb3IgZXhpdGluZyBpZGxlIHN0YXRlXFxuIFxcdCAqXFxuLVxcdCAqIFVwZGF0ZSBAY2dycCdzIGlkbGUgc3RhdGUgdG8gQGlkbGUuIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuXFxuLVxcdCAqIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmQgbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGVcXG4tXFx0ICogQlBGIHNjaGVkdWxlciB0byBhZGp1c3QgaXRzIGJlaGF2aW9yIGFjY29yZGluZ2x5LlxcbitcXHQgKiBVcGRhdGUgQGNncnAncyBpZGxlIHN0YXRlIHRvIEBpZGxlLiBUaGlzIG9wZXJhdGlvbiBtYXkgYmxvY2suIFRoaXNcXG4rXFx0ICogY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmRcXG4rXFx0ICogbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGUgQlBGIHNjaGVkdWxlciB0byBhZGp1c3QgaXRzIGJlaGF2aW9yXFxuK1xcdCAqIGFjY29yZGluZ2x5LlxcbiBcXHQgKlxcbiBcXHQgKiBEZWxpdmVyeSBmb2xsb3dzIHRoZSBzYW1lIHJ1bGUgYXMgY2dyb3VwX3NldF93ZWlnaHQoKS5cXG4gXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjExOjMxLjM5NzAwNDI5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcwNDI1NzUxMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNDSEVEX0NMQVNTX0VYVFwiLFxuICAgIFwiQ0dST1VQX1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N4X2dyb3VwX3NldF93ZWlnaHRcIixcbiAgICBcInNjeF9ncm91cF9zZXRfaWRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgY29uc3RyYWludHMgZm9yIHRoZSBzY2hlZF9leHQgc3Vic3lzdGVtLCBhbGxvd2luZyB0aGUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzIHRvIGJlIGltcGxlbWVudGVkIGFzIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgYW5kIGNvbnN0cmFpbnRzIG9mIHRoZXNlIGNhbGxiYWNrcywgd2hpY2ggYXJlIHRyaWdnZXJlZCB2aWEgY2dyb3VwIGF0dHJpYnV0ZSB3cml0ZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBpbnZva2UgdGhlc2UgY2FsbGJhY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NDExY2UyOGUzM2FkOTAxNjViMDcyYTY2MDU3MDdlYzg3OGI1YzlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDY6MTE6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuaW5kZXggYjY0NjcxMWE0NWZlZS4uNTNiODg4ZjVhNmM1MSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbkBAIC04MDc5LDcgKzgwNzksOSBAQCBzdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KTpcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9leGl0KTpcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9wcmVwX21vdmUpOlxuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF93ZWlnaHQpOlxuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9iYW5kd2lkdGgpOlxuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKTpcbiAjZW5kaWZcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vbmxpbmUpOlxuIFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY3B1X29mZmxpbmUpOlxuQEAgLTExMDU1LDMgKzExMDU3LDE5IEBAIF9faW5pdGNhbGwoc2N4X2luaXQpO1xuICNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG4gREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfYmFuZHdpZHRoX21heV9zbGVlcCk7XG4gI2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG4rXG4rLypcbisgKiBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXA6IGFkdmVydGlzZXMgdGhhdFxuKyAqIG9wcy5jZ3JvdXBfc2V0X3dlaWdodCgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay5cbisgKi9cbisjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxuK0RFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXApO1xuKyNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xuK1xuKy8qXG4rICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcDogYWR2ZXJ0aXNlcyB0aGF0XG4rICogb3BzLmNncm91cF9zZXRfaWRsZSgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay5cbisgKi9cbisjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxuK0RFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwKTtcbisjZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmggYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbmluZGV4IDUzZTEzNmE0NzkyNGQuLmY4MWQwM2RlMmQzYzcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuQEAgLTczNiw3ICs3MzYsNyBAQCBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XG4gXHQgKiBAY2dycDogY2dyb3VwIHdob3NlIHdlaWdodCBpcyBiZWluZyB1cGRhdGVkXG4gXHQgKiBAd2VpZ2h0OiBuZXcgd2VpZ2h0IFsxLi4xMDAwMF1cbiBcdCAqXG4tXHQgKiBVcGRhdGUgQGNncnAncyB3ZWlnaHQgdG8gQHdlaWdodC5cbitcdCAqIFVwZGF0ZSBAY2dycCdzIHdlaWdodCB0byBAd2VpZ2h0LiBUaGlzIG9wZXJhdGlvbiBtYXkgYmxvY2suXG4gXHQgKlxuIFx0ICogS25vYnMgb2YgYSBjZ3JvdXAgYmVsb25nIHRvIHRoZSBwYXJlbnQsIHNvIHRoZSBzZXRfKiBvcHMgYXJlXG4gXHQgKiBkZWxpdmVyZWQgdG8gQGNncnAncyBwYXJlbnQncyBzY2hlZC4gVGhhdCBzY2hlZCBtYXkgbmV2ZXIgaGF2ZSBzZWVuXG5AQCAtNzczLDkgKzc3MywxMCBAQCBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XG4gXHQgKiBAY2dycDogY2dyb3VwIHdob3NlIGlkbGUgc3RhdGUgaXMgYmVpbmcgdXBkYXRlZFxuIFx0ICogQGlkbGU6IHdoZXRoZXIgdGhlIGNncm91cCBpcyBlbnRlcmluZyBvciBleGl0aW5nIGlkbGUgc3RhdGVcbiBcdCAqXG4tXHQgKiBVcGRhdGUgQGNncnAncyBpZGxlIHN0YXRlIHRvIEBpZGxlLiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgd2hlblxuLVx0ICogYSBjZ3JvdXAgdHJhbnNpdGlvbnMgYmV0d2VlbiBpZGxlIGFuZCBub24taWRsZSBzdGF0ZXMsIGFsbG93aW5nIHRoZVxuLVx0ICogQlBGIHNjaGVkdWxlciB0byBhZGp1c3QgaXRzIGJlaGF2aW9yIGFjY29yZGluZ2x5LlxuK1x0ICogVXBkYXRlIEBjZ3JwJ3MgaWRsZSBzdGF0ZSB0byBAaWRsZS4gVGhpcyBvcGVyYXRpb24gbWF5IGJsb2NrLiBUaGlzXG4rXHQgKiBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4gYSBjZ3JvdXAgdHJhbnNpdGlvbnMgYmV0d2VlbiBpZGxlIGFuZFxuK1x0ICogbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGUgQlBGIHNjaGVkdWxlciB0byBhZGp1c3QgaXRzIGJlaGF2aW9yXG4rXHQgKiBhY2NvcmRpbmdseS5cbiBcdCAqXG4gXHQgKiBEZWxpdmVyeSBmb2xsb3dzIHRoZSBzYW1lIHJ1bGUgYXMgY2dyb3VwX3NldF93ZWlnaHQoKS5cbiBcdCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTE6MzEuMzk3MDA1NjU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MjM3MTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTY2hlZF9leHQgQlBGIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgYW5kIGBrZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQncyBpbnRyb2R1Y2luZyBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCB0byBgYnBmX3NjeF9jaGVja19tZW1iZXJgIHdpdGhpbiBgZXh0LmNgLiBUaGVuIHRoZXJlIGFyZSB0aGVzZSBgREVGSU5FX1NDWF9DT01QQVRfTUFSS0VSYCBtYWNyb3MgZm9yIGBjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXBgIGFuZCBgY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcGAuICBIbW0sIGp1c3QgYWRkaW5nIEJQRiBzdHJ1Y3Qgb3BzIG1lbWJlcnMgYW5kIGNvbXBhdGliaWxpdHkgbWFya2Vycywgbm90aGluZyBlYXJ0aC1zaGF0dGVyaW5nIHlldC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGZ1enppbmc/XG5cblRoaXMgY2hhbmdlIGVzc2VudGlhbGx5IGVuYWJsZXMgQlBGLWJhc2VkIHNjaGVkX2V4dCBzY2hlZHVsZXJzIHRvIGltcGxlbWVudCBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBhcyBjYWxsYmFja3MgdGhhdCAqY2FuKiBzbGVlcC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBvcGVucyB1cCBwb3NzaWJpbGl0aWVzLiBOb3csIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgYGJwZl9zY3hfY2hlY2tfbWVtYmVyYCBpcyByZWFsbHkgZG9pbmcuICBJIHRoaW5rIGl0J3MgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBtZW1iZXIgb2YgYHN0cnVjdCBzY2hlZF9leHRfb3BzYCBpcyBwZXJtaXR0ZWQgdG8gc2xlZXAsIG9yIGF0IGxlYXN0IGEgY2hlY2sgZm9yIHRoYXQuIEkgYmV0dGVyIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zIGhlcmUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMTozNi43NjkzNzk5NTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MTM1ODgzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2N4X2NoZWNrX21lbWJlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTc5OTg9c3RhdGljIGludCBicGZfc2N4X2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA2OS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwNzA6c3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDcxLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgzMDI9c3RhdGljIHN0cnVjdCBicGZfc3RydWN0X29wcyBicGZfc2NoZWRfZXh0X29wcyA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODMwNS1cXHQudW5yZWcgPSBicGZfc2N4X3VucmVnLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODMwNjpcXHQuY2hlY2tfbWVtYmVyID0gYnBmX3NjeF9jaGVja19tZW1iZXIsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzA3LVxcdC5pbml0X21lbWJlciA9IGJwZl9zY3hfaW5pdF9tZW1iZXIsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgzNzQ9c3RhdGljIHN0cnVjdCBicGZfc3RydWN0X29wcyBicGZfc2NoZWRfZXh0X29wc19jaWQgPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNzctXFx0LnVucmVnID0gYnBmX3NjeF91bnJlZyxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzNzg6XFx0LmNoZWNrX21lbWJlciA9IGJwZl9zY3hfY2hlY2tfbWVtYmVyLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM3OS1cXHQuaW5pdF9tZW1iZXIgPSBicGZfc2N4X2luaXRfbWVtYmVyLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDg5Mz1zdGF0aWMgaW50IF9faW5pdCBzY3hfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDg5OC1cXHQgKiBzY2hlZF9leHRfb3BzX2NpZCBtaXJyb3JzIHNjaGVkX2V4dF9vcHMgdXAgdG8gYW5kIGluY2x1ZGluZyBAcHJpdi5cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwODk5OlxcdCAqIEJvdGggYnBmX3NjeF9pbml0X21lbWJlcigpIGFuZCBicGZfc2N4X2NoZWNrX21lbWJlcigpIHVzZSBvZmZzZXRzXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDkwMC1cXHQgKiBmcm9tIHN0cnVjdCBzY2hlZF9leHRfb3BzOyBzY2hlZF9leHRfb3BzX2NpZCByZWxpZXMgb24gdGhvc2Ugb2Zmc2V0c1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTMxOT1zdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTAyMy0gKiBzaGFyZWQgZmllbGQgb2Zmc2V0cyB3b3JrIGZvciBib3RoIHN0cnVjdCB0eXBlcyBpbiBicGZfc2N4X2luaXRfbWVtYmVyKClcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MTAyNDogKiBhbmQgYnBmX3NjeF9jaGVja19tZW1iZXIoKS4gVGhlIGRlcHJlY2F0ZWQgY3B1X2FjcXVpcmUvY3B1X3JlbGVhc2VcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTAyNS0gKiBjYWxsYmFja3MgYXQgdGhlIHRhaWwgb2Ygc2NoZWRfZXh0X29wcyBhcmUgb21pdHRlZCBoZXJlIGVudGlyZWx5LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMTozOC4zMTA3NDI0NjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA4MDM0NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgYnBmX3NjeF9jaGVja19tZW1iZXJgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgYnBmX3NjeF9jaGVja19tZW1iZXJgIHdpdGhpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRob3NlIGVCUEYgY2hlY2tzIHJlbGF0ZWQgdG8gc2NoZWR1bGluZyBjb250ZXh0IGV4dGVuc2lvbnMuIEknbSBhc3N1bWluZyBpdCdzIHByb2JhYmx5IHZhbGlkYXRpbmcgc29tZSB1c2VyLXByb3ZpZGVkIHN0cnVjdHVyZSBtZW1iZXJzIGFnYWluc3QgYWxsb3dlZCB2YWx1ZXMgb3IgYWdhaW5zdCBzb21lIGludGVybmFsIHN0YXRlLCBtYXliZSBjaGVja2luZyBhbGlnbm1lbnQgb3Igc2l6ZSBjb25zdHJhaW50cyBiZWZvcmUgdGhlIHNjaGVkdWxlciBkb2VzIHNvbWV0aGluZyB3aXRoIHRoZW0uIEdpdmVuIHRoZSBuYW1lLCBpdCdzIGxpa2VseSBhIGNyaXRpY2FsIHBpZWNlIGluIG1haW50YWluaW5nIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkgd2hlbiBkZWFsaW5nIHdpdGggQlBGIHByb2dyYW1zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgc2NoZWR1bGVyIGV4dGVuc2lvbnMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGF0b21pY2l0eSBjb25jZXJucywgZXNwZWNpYWxseSBpZiB0aGUgY2hlY2tzIGludm9sdmUgc2hhcmVkIGRhdGEgb3IgaWYgdGhleSBhcmUgcGVyZm9ybWluZyBwb2ludGVyIGRlcmVmZXJlbmNlcywgYXMgdGhvc2UgYXJlIGFsd2F5cyBob3RzcG90cyBmb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMuIExldCdzIHNlZSBob3cgdGhleSd2ZSBoYW5kbGVkIHRoZSBlZGdlIGNhc2VzLCBhbmQgd2hhdCBlcnJvci1oYW5kbGluZyB0aGV5J3ZlIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDQ4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTE6NDEuOTE4Nzc4OTIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9zY2hlZC9leHQvZXh0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODA2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODA2NTpcXHRcXHR9XFxuODA2NjpcXHRcXG44MDY3OlxcdFxcdHJldHVybiAwO1xcbjgwNjg6XFx0fVxcbjgwNjk6XFx0XFxuODA3MDpcXHRzdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG44MDcxOlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXFxuODA3MjpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuODA3MzpcXHR7XFxuODA3NDpcXHRcXHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xcbjgwNzU6XFx0XFxuODA3NjpcXHRcXHRzd2l0Y2ggKG1vZmYpIHtcXG44MDc3OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXRfdGFzayk6XFxuODA3ODpcXHQjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbjgwNzk6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2luaXQpOlxcbjgwODA6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2V4aXQpOlxcbjgwODE6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3ByZXBfbW92ZSk6XFxuODA4MjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X3dlaWdodCk6XFxuODA4MzpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCk6XFxuODA4NDpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2lkbGUpOlxcbjgwODU6XFx0I2VuZGlmXFxuODA4NjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb25saW5lKTpcXG44MDg3OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vZmZsaW5lKTpcXG44MDg4OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXRfY2lkcyk6XFxuODA4OTpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBpbml0KTpcXG44MDkwOlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGV4aXQpOlxcbjgwOTE6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgc3ViX2F0dGFjaCk6XFxuODA5MjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBzdWJfZGV0YWNoKTpcXG44MDkzOlxcdFxcdFxcdGJyZWFrO1xcbjgwOTQ6XFx0XFx0ZGVmYXVsdDpcXG44MDk1OlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2VzbGVlcGFibGUpXFxuODA5NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDk3OlxcdFxcdH1cXG44MDk4OlxcdFxcbjgwOTk6XFx0I2lmZGVmIENPTkZJR19FWFRfU1VCX1NDSEVEXFxuODEwMDpcXHRcXHQvKlxcbjgxMDE6XFx0XFx0ICogRW5hYmxlIHByaXZhdGUgc3RhY2sgZm9yIG9wZXJhdGlvbnMgdGhhdCBjYW4gbmVzdCBhbG9uZyB0aGVcXG44MTAyOlxcdFxcdCAqIGhpZXJhcmNoeS5cXG44MTAzOlxcdFxcdCAqXFxuODEwNDpcXHRcXHQgKiBYWFggLSBJZGVhbGx5LCB3ZSBzaG91bGQgb25seSBkbyB0aGlzIGZvciBzY2hlZHMgdGhhdCBhbGxvd1xcbjgxMDU6XFx0XFx0ICogc3ViLXNjaGVkcyBhbmQgc3ViLXNjaGVkcyB0aGVtc2VsdmVzIGJ1dCBJIGRvbid0IGtub3cgaG93IHRvIGFjY2Vzc1xcbjgxMDY6XFx0XFx0ICogc3RydWN0X29wcyBmcm9tIGhlcmUuXFxuODEwNzpcXHRcXHQgKi9cXG44MTA4OlxcdFxcdHN3aXRjaCAobW9mZikge1xcbjgxMDk6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgZGlzcGF0Y2gpOlxcbjgxMTA6XFx0XFx0XFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2Vwcml2X3N0YWNrX3JlcXVlc3RlZCA9IHRydWU7XFxuODExMTpcXHRcXHRcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXJlY3Vyc2lvbl9kZXRlY3RlZCA9IHNjeF9wc3RhY2tfcmVjdXJzaW9uX29uX2Rpc3BhdGNoO1xcbjgxMTI6XFx0XFx0XFx0YnJlYWs7XFxuODExMzpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBzdWJfY2Fwc191cGRhdGVkKTpcXG44MTE0OlxcdFxcdFxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlcHJpdl9zdGFja19yZXF1ZXN0ZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMTo0MS45MTkyODUzOTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQwMjEzMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gaG93IEJQRiBpbnRlcmFjdHMgd2l0aCBjZXJ0YWluIGNncm91cCBjYWxsYmFja3MuIFNwZWNpZmljYWxseSwgaXQncyBsZXZlcmFnaW5nIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgdG8gZW5hYmxlIHNsZWVwYWJsZSBiZWhhdmlvciBpbiB0aGUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgY2FsbGJhY2tzLiBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdCBiZWNhdXNlIGl0IGFsbG93cyBCUEYgcHJvZ3JhbXMgdG8gdXRpbGl6ZSB0aGVzZSBmb3JtZXJseSBub24tc2xlZXBhYmxlIGZ1bmN0aW9ucy5cblxuVGhlIHBhdGNoIGluY2x1ZGVzIHRoZSBuZWNlc3NhcnkgYERFRklORV9TQ1hfQ09NUEFUX01BUktFUmAgbWFjcm9zOiBgY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwYCBhbmQgYGNncm91cF9zZXRfaWRsZV9tYXlfc2xlZXBgLCB3aGljaCBhcmUgaW1wb3J0YW50IGZvciBjb21wYXRpYmlsaXR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIGZ1enphYmxlP1wiIFRoZSBhbnN3ZXIgaXMgZGVmaW5pdGVseSB5ZXMsIGJlY2F1c2UgaXQgYWx0ZXJzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIHBvdGVudGlhbGx5IHRoZSBzdHJ1Y3Rfb3BzIGNvbnN0cmFpbnRzIHJlbGF0ZWQgdG8gYHNjaGVkX2V4dGAuIFRoYXQgb3BlbnMgdGhlIGRvb3IgdG8gbmV3IGF0dGFjayBzdXJmYWNlcy5cblxuSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gYGJwZl9zY3hfY2hlY2tfbWVtYmVyYCBpcyBhIGtleSBmdW5jdGlvbiB0byBleGFtaW5lLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gSSBuZWVkIHRvIHNlZSBpZiBpdCdzIHRoZSBvbmx5IHJlbGV2YW50IG9uZS4gTGV0J3MgZGVsdmUgaW50byB0aGUgZnVuY3Rpb24gY2FsbHMgYW5kIHRoZSBhY3R1YWwgZXhlY3V0aW9uIG9mIHRoZXNlIGNhbGxiYWNrczsgdGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgY3JpdGljYWwgcG9pbnRzLiBXaGVyZSBhcmUgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgYWN0dWFsbHkgaW52b2tlZD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayB3aWxsIGJlIGNydWNpYWwgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWd5IGRldmVsb3BtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTc2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTE6NDcuNjU5NTAxNTIxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzA5NDk1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2dyb3VwX3NldF93ZWlnaHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0PTExNDE9d2lsbCBiZSByZWZlcnJlZCB0by4gQWxsIHRpbWUgZHVyYXRpb25zIGFyZSBpbiBtaWNyb3NlY29uZHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTE3My1cXHRUaGlzIGZpbGUgYWZmZWN0cyBvbmx5IHByb2Nlc3NlcyB1bmRlciB0aGUgZmFpci1jbGFzcyBzY2hlZHVsZXIgYW5kIGEgQlBGXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0OjExNzQ6XFx0c2NoZWR1bGVyIHdpdGggdGhlIGBgY2dyb3VwX3NldF93ZWlnaHRgYCBjYWxsYmFjayBkZXBlbmRpbmcgb24gd2hhdCB0aGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTE3NS1cXHRjYWxsYmFjayBhY3R1YWxseSBkb2VzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTExODktXFx0VGhpcyBmaWxlIGFmZmVjdHMgb25seSBwcm9jZXNzZXMgdW5kZXIgdGhlIGZhaXItY2xhc3Mgc2NoZWR1bGVyIGFuZCBhIEJQRlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdDoxMTkwOlxcdHNjaGVkdWxlciB3aXRoIHRoZSBgYGNncm91cF9zZXRfd2VpZ2h0YGAgY2FsbGJhY2sgZGVwZW5kaW5nIG9uIHdoYXQgdGhlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTExOTEtXFx0Y2FsbGJhY2sgYWN0dWFsbHkgZG9lcy5cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDkxMD12b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyB3ZWlnaHQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MTYtXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTE3OlxcdGlmIChzY3hfY2dyb3VwX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgc2NoIFxcdTAwMjZcXHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfc2V0X3dlaWdodCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MTgtXFx0ICAgIHRnLVxcdTAwM2VzY3gud2VpZ2h0ICE9IHdlaWdodClcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5MTk6XFx0XFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X3dlaWdodCwgTlVMTCwgdGdfY2dycCh0ZyksIHdlaWdodCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTIwLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDcwPXN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgxLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9wcmVwX21vdmUpOlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODA4MjpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X3dlaWdodCk6XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfYmFuZHdpZHRoKTpcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI0Mz1zdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19jZ3JvdXBfY2FuY2VsX21vdmUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgY2dyb3VwICpmcm9tLCBzdHJ1Y3QgY2dyb3VwICp0bykge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyNDQ6c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IGNncm91cCAqY2dycCwgdTMyIHdlaWdodCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyNDUtc3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IGNncm91cCAqY2dycCwgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNTk9c3RhdGljIHN0cnVjdCBzY2hlZF9leHRfb3BzIF9fYnBmX29wc19zY2hlZF9leHRfb3BzID0ge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04Mjg1LVxcdC5jZ3JvdXBfY2FuY2VsX21vdmVcXHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9jYW5jZWxfbW92ZSxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyODY6XFx0LmNncm91cF9zZXRfd2VpZ2h0XFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X3dlaWdodCxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODctXFx0LmNncm91cF9zZXRfYmFuZHdpZHRoXFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X2JhbmR3aWR0aCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODMyNj1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIF9fYnBmX29wc19zY2hlZF9leHRfb3BzX2NpZCA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM1MC1cXHQuY3B1Y3RsX2NhbmNlbF9tb3ZlXFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfY2FuY2VsX21vdmUsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MzUxOlxcdC5jcHVjdGxfc2V0X3dlaWdodFxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF93ZWlnaHQsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzUyLVxcdC5jcHVjdGxfc2V0X2JhbmR3aWR0aFxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9iYW5kd2lkdGgsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwNzc4PXN0YXRpYyBjb25zdCB1MzIgc2N4X2tmX2FsbG93X2ZsYWdzW10gPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzg5LVxcdFtTQ1hfT1BfSURYKGNncm91cF9jYW5jZWxfbW92ZSldID0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA3OTA6XFx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF93ZWlnaHQpXVxcdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA3OTEtXFx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF9iYW5kd2lkdGgpXSA9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA4OTM9c3RhdGljIGludCBfX2luaXQgc2N4X2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTQtXFx0Q0lEX09GRlNFVF9NQVRDSChjZ3JvdXBfY2FuY2VsX21vdmUsIGNwdWN0bF9jYW5jZWxfbW92ZSk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk1NTpcXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9zZXRfd2VpZ2h0LCBjcHVjdGxfc2V0X3dlaWdodCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1Ni1cXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9zZXRfYmFuZHdpZHRoLCBjcHVjdGxfc2V0X2JhbmR3aWR0aCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTExMDU4PURFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X2JhbmR3aWR0aF9tYXlfc2xlZXApO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA2MS0vKlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTEwNjI6ICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDYzOiAqIG9wcy5jZ3JvdXBfc2V0X3dlaWdodCgpIG1heSBiZSBpbXBsZW1lbnRlZCBhcyBhIHNsZWVwYWJsZSBjYWxsYmFjay5cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDY0LSAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNjUtI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDY2OkRFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X3dlaWdodF9tYXlfc2xlZXApO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTEwNjctI2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTMxOT1zdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzM0LVxcdC8qKlxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3MzU6XFx0ICogQGNncm91cF9zZXRfd2VpZ2h0OiBBIGNncm91cCdzIHdlaWdodCBpcyBiZWluZyBjaGFuZ2VkXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTczNi1cXHQgKiBAY2dycDogY2dyb3VwIHdob3NlIHdlaWdodCBpcyBiZWluZyB1cGRhdGVkXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzQ1LVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3NDY6XFx0dm9pZCAoKmNncm91cF9zZXRfd2VpZ2h0KShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCB1MzIgd2VpZ2h0KTtcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzQ3LVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc2NS1cXHQgKlxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3NjY6XFx0ICogRGVsaXZlcnkgZm9sbG93cyB0aGUgc2FtZSBydWxlIGFzIGNncm91cF9zZXRfd2VpZ2h0KCkuXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc2Ny1cXHQgKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODAtXFx0ICpcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzgxOlxcdCAqIERlbGl2ZXJ5IGZvbGxvd3MgdGhlIHNhbWUgcnVsZSBhcyBjZ3JvdXBfc2V0X3dlaWdodCgpLlxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODItXFx0ICovXFxuLS1cXG50b29scy9zY2hlZF9leHQvc2N4X2ZsYXRjZy5icGYuYz01ODA9dm9pZCBCUEZfU1RSVUNUX09QUyhmY2dfcXVpZXNjZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHU2NCBkZXFfZmxhZ3MpXFxuLS1cXG50b29scy9zY2hlZF9leHQvc2N4X2ZsYXRjZy5icGYuYy01ODgtXFxudG9vbHMvc2NoZWRfZXh0L3NjeF9mbGF0Y2cuYnBmLmM6NTg5OnZvaWQgQlBGX1NUUlVDVF9PUFMoZmNnX2Nncm91cF9zZXRfd2VpZ2h0LCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCB1MzIgd2VpZ2h0KVxcbnRvb2xzL3NjaGVkX2V4dC9zY3hfZmxhdGNnLmJwZi5jLTU5MC17XFxuLS1cXG50b29scy9zY2hlZF9leHQvc2N4X2ZsYXRjZy5icGYuYz05NjI9U0NYX09QU19ERUZJTkUoZmxhdGNnX29wcyxcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9zY3hfZmxhdGNnLmJwZi5jLTk3MC1cXHQgICAgICAgLmluaXRfdGFza1xcdFxcdD0gKHZvaWQgKilmY2dfaW5pdF90YXNrLFxcbnRvb2xzL3NjaGVkX2V4dC9zY3hfZmxhdGNnLmJwZi5jOjk3MTpcXHQgICAgICAgLmNncm91cF9zZXRfd2VpZ2h0XFx0PSAodm9pZCAqKWZjZ19jZ3JvdXBfc2V0X3dlaWdodCxcXG50b29scy9zY2hlZF9leHQvc2N4X2ZsYXRjZy5icGYuYy05NzItXFx0ICAgICAgIC5jZ3JvdXBfaW5pdFxcdFxcdD0gKHZvaWQgKilmY2dfY2dyb3VwX2luaXQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF4aW1hbC5icGYuYz0xMTg9dm9pZCBCUEZfU1RSVUNUX09QUyhtYXhpbWFsX2Nncm91cF9jYW5jZWxfbW92ZSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heGltYWwuYnBmLmMtMTIxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9tYXhpbWFsLmJwZi5jOjEyMjp2b2lkIEJQRl9TVFJVQ1RfT1BTKG1heGltYWxfY2dyb3VwX3NldF93ZWlnaHQsIHN0cnVjdCBjZ3JvdXAgKmNncnAsIHUzMiB3ZWlnaHQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heGltYWwuYnBmLmMtMTIzLXt9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF4aW1hbC5icGYuYz0xMzg9c3RydWN0IHNjaGVkX2V4dF9vcHMgbWF4aW1hbF9vcHMgPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF4aW1hbC5icGYuYy0xNjItXFx0LmNncm91cF9jYW5jZWxfbW92ZVxcdD0gKHZvaWQgKikgbWF4aW1hbF9jZ3JvdXBfY2FuY2VsX21vdmUsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L21heGltYWwuYnBmLmM6MTYzOlxcdC5jZ3JvdXBfc2V0X3dlaWdodFxcdD0gKHZvaWQgKikgbWF4aW1hbF9jZ3JvdXBfc2V0X3dlaWdodCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvbWF4aW1hbC5icGYuYy0xNjQtXFx0LmNncm91cF9zZXRfYmFuZHdpZHRoXFx0PSAodm9pZCAqKSBtYXhpbWFsX2Nncm91cF9zZXRfYmFuZHdpZHRoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMTo0OS4xOTA0NTQ3NTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgyNTg1OTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkludmVzdGlnYXRpbmcgV2VpZ2h0IGFuZCBJZGxlIFNldHRpbmdzIGluIHRoZSBDZ3JvdXAgQ29udGV4dCoqXG5cbkhtbSwgc28gYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBjYWxscyBgY2dyb3VwX3NldF93ZWlnaHRgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTm93LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcywgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBoZXJlLCBhbmQgc2VlIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc2V0dGluZ3MgcHJvcGFnYXRlLCBhbmQgdGhlIGNoYWluIG9mIG9wZXJhdGlvbnMuIE5vdywgbGV0J3Mgc2VlLCB0aGUgb3RoZXIgcGFydCBvZiBteSBtZW50YWwgcHV6emxlIGlzIHdoZXJlIGlzIGBjZ3JvdXBfc2V0X2lkbGVgIGJlaW5nIGNhbGxlZD8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyBvZiB0aGF0IHdpbGwgZ2l2ZSBhIGdvb2QgaW5zaWdodCBpbnRvIHRoZSBvdGhlciByZWxhdGVkIG9wZXJhdGlvbnMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMwNywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjExOjUyLjU3MzA0Mjk3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NzkzNzcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfc2V0X2lkbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0PTExNDE9d2lsbCBiZSByZWZlcnJlZCB0by4gQWxsIHRpbWUgZHVyYXRpb25zIGFyZSBpbiBtaWNyb3NlY29uZHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QtMTI2OS1cXHRUaGlzIGZpbGUgYWZmZWN0cyBvbmx5IHByb2Nlc3NlcyB1bmRlciB0aGUgZmFpci1jbGFzcyBzY2hlZHVsZXIgYW5kIGEgQlBGXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0OjEyNzA6XFx0c2NoZWR1bGVyIHdpdGggdGhlIGBgY2dyb3VwX3NldF9pZGxlYGAgY2FsbGJhY2sgZGVwZW5kaW5nIG9uIHdoYXQgdGhlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0LTEyNzEtXFx0Y2FsbGJhY2sgYWN0dWFsbHkgZG9lcy5cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDkyNj12b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkzMi1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5MzM6XFx0aWYgKHNjeF9jZ3JvdXBfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBzY2ggXFx1MDAyNlxcdTAwMjYgU0NYX0hBU19PUChzY2gsIGNncm91cF9zZXRfaWRsZSkpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTM0OlxcdFxcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTM1LVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDcwPXN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfYmFuZHdpZHRoKTpcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwODQ6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3NldF9pZGxlKTpcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwODUtI2VuZGlmXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNDU9c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IGNncm91cCAqY2dycCwgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MjQ2OnN0YXRpYyB2b2lkIHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfaWRsZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBib29sIGlkbGUpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjQ3LSNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI1OT1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHMgX19icGZfb3BzX3NjaGVkX2V4dF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODctXFx0LmNncm91cF9zZXRfYmFuZHdpZHRoXFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X2JhbmR3aWR0aCxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyODg6XFx0LmNncm91cF9zZXRfaWRsZVxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9pZGxlLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI4OS0jZW5kaWZcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODMyNj1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIF9fYnBmX29wc19zY2hlZF9leHRfb3BzX2NpZCA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM1Mi1cXHQuY3B1Y3RsX3NldF9iYW5kd2lkdGhcXHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9zZXRfYmFuZHdpZHRoLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODM1MzpcXHQuY3B1Y3RsX3NldF9pZGxlXFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X2lkbGUsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzU0LSNlbmRpZlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDc3OD1zdGF0aWMgY29uc3QgdTMyIHNjeF9rZl9hbGxvd19mbGFnc1tdID0ge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5MS1cXHRbU0NYX09QX0lEWChjZ3JvdXBfc2V0X2JhbmR3aWR0aCldID0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA3OTI6XFx0W1NDWF9PUF9JRFgoY2dyb3VwX3NldF9pZGxlKV1cXHQ9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzkzLSNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA4OTM9c3RhdGljIGludCBfX2luaXQgc2N4X2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTYtXFx0Q0lEX09GRlNFVF9NQVRDSChjZ3JvdXBfc2V0X2JhbmR3aWR0aCwgY3B1Y3RsX3NldF9iYW5kd2lkdGgpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5NTc6XFx0Q0lEX09GRlNFVF9NQVRDSChjZ3JvdXBfc2V0X2lkbGUsIGNwdWN0bF9zZXRfaWRsZSk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1OC0jZW5kaWZcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTEwNjY9REVGSU5FX1NDWF9DT01QQVRfTUFSS0VSKGNncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDY5LS8qXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMTA3MDogKiBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDcxOiAqIG9wcy5jZ3JvdXBfc2V0X2lkbGUoKSBtYXkgYmUgaW1wbGVtZW50ZWQgYXMgYSBzbGVlcGFibGUgY2FsbGJhY2suXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA3Mi0gKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDczLSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMTA3NDpERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA3NS0jZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzE5PXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03NzEtXFx0LyoqXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjc3MjpcXHQgKiBAY2dyb3VwX3NldF9pZGxlOiBBIGNncm91cCdzIGlkbGUgc3RhdGUgaXMgYmVpbmcgY2hhbmdlZFxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03NzMtXFx0ICogQGNncnA6IGNncm91cCB3aG9zZSBpZGxlIHN0YXRlIGlzIGJlaW5nIHVwZGF0ZWRcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODItXFx0ICovXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjc4MzpcXHR2b2lkICgqY2dyb3VwX3NldF9pZGxlKShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBib29sIGlkbGUpO1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODQtXFxuLS1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0Lmg9MjIzPXN0YXRpYyBpbmxpbmUgbG9uZyBzY3hfaG90cGx1Z19zZXEodm9pZClcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaC0yNzItICogLSB2Ni4xNzogb3BzLmNncm91cF9zZXRfYmFuZHdpZHRoKClcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0Lmg6MjczOiAqIC0gdjYuMTk6IG9wcy5jZ3JvdXBfc2V0X2lkbGUoKVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaC0yNzQtICogLSB2Ny4xOiAgb3BzLnN1Yl9hdHRhY2goKSwgb3BzLnN1Yl9kZXRhY2goKSwgb3BzLnN1Yl9jZ3JvdXBfaWRcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaC0yOTgtXFx0fVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0Lmg6Mjk5OlxcdGlmIChfX3NrZWwtXFx1MDAzZXN0cnVjdF9vcHMuX19vcHNfbmFtZS1cXHUwMDNlY2dyb3VwX3NldF9pZGxlIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFxcXFxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21wYXQuaDozMDA6XFx0ICAgICFfX0NPTVBBVF9zdHJ1Y3RfaGFzX2ZpZWxkKFxcXCJzY2hlZF9leHRfb3BzXFxcIiwgXFxcImNncm91cF9zZXRfaWRsZVxcXCIpKSB7IFxcXFxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tcGF0Lmg6MzAxOlxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiV0FSTklORzoga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBvcHMuY2dyb3VwX3NldF9pZGxlKClcXFxcblxcXCIpOyBcXFxcXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbXBhdC5oOjMwMjpcXHRcXHRfX3NrZWwtXFx1MDAzZXN0cnVjdF9vcHMuX19vcHNfbmFtZS1cXHUwMDNlY2dyb3VwX3NldF9pZGxlID0gTlVMTDtcXHRcXFxcXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbXBhdC5oLTMwMy1cXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMTo1NC42NDA5ODU3MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1NDQ0ODU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqUmVhY2hpbmcgdGhlIENhbGxiYWNrcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGVzZSBjYWxsYmFja3MgYXJlIGludm9rZWQsIHNwZWNpZmljYWxseSB0aG9zZSBzZXQgYnkgYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsIHBhdGguIEkgbmVlZCB0byB0cmFjZSB3aGVyZSB0aG9zZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSB0aGVzZSBjYWxsYmFja3MgYXJlIHRyaWdnZXJlZC4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBwcm9iYWJseSBoYXMgYSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGluIHRoZSBzY2hlZHVsZXIgY29yZSB0byBzZXQgQ1BVIHdlaWdodHMsIHByb2JhYmx5IHNvbWV0aGluZyBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AuIEknbGwgd2FudCB0byBjb25maXJtIGlmIGBjcHVfd2VpZ2h0X3dyaXRlX3M2NGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGlzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgc3RhY2tzIGFuZCBzZWUgd2hlcmUgdGhleSBlbmQgdXAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDUzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTE6NTguNjk1NDM3MzI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgyMTEwMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjeF9ncm91cF9zZXRfd2VpZ2h0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9jb3JlLmM9OTgyMD1zdGF0aWMgaW50IGNwdV9zaGFyZXNfd3JpdGVfdTY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk4MjgtXFx0aWYgKCFyZXQpXFxua2VybmVsL3NjaGVkL2NvcmUuYzo5ODI5OlxcdFxcdHNjeF9ncm91cF9zZXRfd2VpZ2h0KGNzc190Zyhjc3MpLFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTgzMC1cXHRcXHRcXHRcXHQgICAgIHNjaGVkX3dlaWdodF90b19jZ3JvdXAoc2hhcmV2YWwpKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTA0MjU9c3RhdGljIGludCBjcHVfd2VpZ2h0X3dyaXRlX3U2NChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDQzNy1cXHRpZiAoIXJldClcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjEwNDM4OlxcdFxcdHNjeF9ncm91cF9zZXRfd2VpZ2h0KGNzc190Zyhjc3MpLCBjZ3JwX3dlaWdodCk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDQzOS1cXHRyZXR1cm4gcmV0O1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz0xMDQ2MD1zdGF0aWMgaW50IGNwdV93ZWlnaHRfbmljZV93cml0ZV9zNjQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTA0NzQtXFx0aWYgKCFyZXQpXFxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDQ3NTpcXHRcXHRzY3hfZ3JvdXBfc2V0X3dlaWdodChjc3NfdGcoY3NzKSxcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwNDc2LVxcdFxcdFxcdFxcdCAgICAgc2NoZWRfd2VpZ2h0X3RvX2Nncm91cCh3ZWlnaHQpKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDg5MT12b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MDktXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTEwOnZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIHdlaWdodClcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5MTEte1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD04MD12b2lkIHNjeF9jZ3JvdXBfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODE6dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgY2dycF93ZWlnaHQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODItdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD05MD1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2Nncm91cF9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjkxOnN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgY2dycF93ZWlnaHQpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05Mi1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKSB7fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjowMC4wNzc1NTE5MDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMjczNDA0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IEJyYWluJ3MgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZSwgYW5kIEkgc2VlIHRoZSBmdW5jdGlvbiBgc2N4X2dyb3VwX3NldF9pZGxlYC4uLiBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHJlbGF0ZWQgY29uY2VwdHMuIEknbSB3b25kZXJpbmcgaWYgaXQncyBnb3QgYW4gaW1wYWN0IG9uIGFueSBvZiB0aGUgY29yZSBhbGdvcml0aG1zLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGltcGxpY2F0aW9ucyBvbiB3aGF0ZXZlciBwcm9jZXNzIGlzIGJlaW5nIG1hbmFnZWQsIHNvIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGluZmx1ZW5jZXMgY29uY3VycmVuY3kgb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIHN5c3RlbSwgbGlrZSB0aHJlYWQgcG9vbGluZywgbWVtb3J5IHVzYWdlLCBhbmQgaWRsZSB0aW1lIG1hbmFnZW1lbnQgdG8gZW5zdXJlIHRoaW5ncyBzdGF5IGVmZmljaWVudCBhbmQgc3RhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjEyOjAzLjM5MDI4ODc5NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MzQyNjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3hfZ3JvdXBfc2V0X2lkbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2NvcmUuYz0xMDI1NT1zdGF0aWMgaW50IGNwdV9pZGxlX3dyaXRlX3M2NChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2MS1cXHRpZiAoIXJldClcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjEwMjYyOlxcdFxcdHNjeF9ncm91cF9zZXRfaWRsZShjc3NfdGcoY3NzKSwgaWRsZSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2My1cXHRyZXR1cm4gcmV0O1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00OTEwPXZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIHdlaWdodClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkyNS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5MjY6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI3LXtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9ODE9dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgY2dycF93ZWlnaHQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODMtdm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjkyOnN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05My1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF9iYW5kd2lkdGgoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1NjQgcGVyaW9kX3VzLCB1NjQgcXVvdGFfdXMsIHU2NCBidXJzdF91cykge31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTI6MDQuNzQzNzIxMDkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMzIyMzE2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXcgQlBGIENhbGxiYWNrIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBhYmlsaXR5IGZvciB0aGVzZSBCUEYgY2FsbGJhY2tzIHRvIHNsZWVwLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgc2hpZnQuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGlnIGludG8gYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAgZGlyZWN0bHksIGV4cGVjdGluZyBtb2RpZmljYXRpb25zIHRoZXJlLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gdGhlIHBhdGNoIGRvZXNuJ3QgYWN0dWFsbHkgdG91Y2ggdGhvc2UgZnVuY3Rpb25zIHRoZW1zZWx2ZXMuIEl0J3MgbW9kaWZ5aW5nIGBicGZfc2N4X2NoZWNrX21lbWJlcmAsIGVuYWJsaW5nIEJQRiBwcm9ncmFtcyB0byB1dGlsaXplIHNsZWVwYWJsZSBmdW5jdGlvbnMgd2l0aGluIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgLiBFc3NlbnRpYWxseSwgdGhlIEJQRiB2ZXJpZmllciBpcyBiZWluZyByZWxheGVkIHRvIHBlcm1pdCBzbGVlcGFibGUgcHJvZ3JhbXMgZm9yIHRoZXNlIHNwZWNpZmljIGNhbGxiYWNrcy4gTm93IEkgdW5kZXJzdGFuZC4gVGhpcyBpcyBjbGV2ZXIuXG5cblRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8ga2VlcCBhbiBleWUgb24gYXJlIGBDT05GSUdfU0NIRURfQ0xBU1NfRVhUYCBhbmQgYENPTkZJR19FWFRfR1JPVVBfU0NIRURgLiBUaW1lIHRvIGNoZWNrIEtjb25maWcgYW5kIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIGBDT05GSUdfRVhUX0dST1VQX1NDSEVEYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgd2hhdCBJIHJlYWxseSBuZWVkIHRvIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjoxMC45NzU5NTQ0NjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTg5NzA2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVF9HUk9VUF9TQ0hFRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTE4Nz1jb25maWcgUlRfR1JPVVBfU0NIRURfREVGQVVMVF9ESVNBQkxFRFxcbi0tXFxuaW5pdC9LY29uZmlnLTExOTctXFxuaW5pdC9LY29uZmlnOjExOTg6Y29uZmlnIEVYVF9HUk9VUF9TQ0hFRFxcbmluaXQvS2NvbmZpZy0xMTk5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTI6MTIuODc0OTI5MzE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjMxMjI1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBFWFRfR1JPVVBfU0NIRUQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYEVYVF9HUk9VUF9TQ0hFRGAgbW9kdWxlIGluc2lkZSBhbmQgb3V0LiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyBieSBtYXBwaW5nIGl0cyBkZXBlbmRlbmNpZXMuIFdoZXJlIGRvZXMgdGhpcyB0aGluZyBsaXZlPyBXaGF0IGRvZXMgaXQgcmVseSBvbiB0byBmdW5jdGlvbj8gV2hhdCBwaWVjZXMgb2YgdGhlIHN5c3RlbSBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciBpdCB0byBldmVuICpiZSo/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSwgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZSBvdGhlciBtb2R1bGVzIGluIHRoaXMsIGZyYW5rbHksIGNvbXBsZXggc3lzdGVtLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBlY29zeXN0ZW0uIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjExLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTI6MTYuMTk4MDUzNzg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTE5NSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE5NTpcXHRcXG4xMTk2OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjExOTc6XFx0XFxuMTE5ODpcXHRjb25maWcgRVhUX0dST1VQX1NDSEVEXFxuMTE5OTpcXHRcXHRib29sXFxuMTIwMDpcXHRcXHRkZXBlbmRzIG9uIFNDSEVEX0NMQVNTX0VYVCBcXHUwMDI2XFx1MDAyNiBDR1JPVVBfU0NIRURcXG4xMjAxOlxcdFxcdHNlbGVjdCBHUk9VUF9TQ0hFRF9XRUlHSFRcXG4xMjAyOlxcdFxcdHNlbGVjdCBHUk9VUF9TQ0hFRF9CQU5EV0lEVEhcXG4xMjAzOlxcdFxcdGRlZmF1bHQgeVxcbjEyMDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjEyOjE2LjE5ODE3NTk4NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTU0MDQ2NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gU2NoZWR1bGVyIEV4dGVuc2lvbnMgYW5kIGNncm91cHMqKlxuXG5SaWdodCwgc28gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYC4gTWFrZXMgc2Vuc2UsIHRoZXkncmUgb2Z0ZW4gaW50ZXJ0d2luZWQgd2hlbiB5b3UncmUgbG9va2luZyBhdCBleHRlbmRpbmcgc2NoZWR1bGVyIGNhcGFiaWxpdGllcyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCBgU0NIRURfQ0xBU1NfRVhUYC4gSXQncyBsaWtlbHkgdGhlIGNvcmUgZWxlbWVudCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgZmlyc3QuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBncmFzcCBpdHMgaW1wbGljYXRpb25zIGJlZm9yZSBJIG1vdmUgb24gdG8gaG93IGl0IGludGVncmF0ZXMgd2l0aCwgb3IgaXMgbGV2ZXJhZ2VkIGJ5LCB0aGUgY2dyb3VwIHNjaGVkdWxpbmcgZnJhbWV3b3JrLiBXaGF0IGV4YWN0bHkgZG9lcyB0aGlzIGV4dGVuc2lvbiBwcm92aWRlLCBhbmQgaG93IGRvZXMgaXQgbW9kaWZ5IG9yIGF1Z21lbnQgdGhlIHN0YW5kYXJkIHNjaGVkdWxlciBjbGFzc2VzPyBMZXQncyBnZXQgYSBsb29rIGF0IHRoZSBkZWZpbml0aW9uIGFuZCBob3cgaXQgaXMgZW1wbG95ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTQyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjoxOS43NTIyMjQ0NDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTgxMTYzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNDSEVEX0NMQVNTX0VYVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTE1MT1jb25maWcgU0NIRURfQ09SRVxcbi0tXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xNjgtXFxua2VybmVsL0tjb25maWcucHJlZW1wdDoxNjk6Y29uZmlnIFNDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTcwLVxcdGJvb2wgXFxcIkV4dGVuc2libGUgU2NoZWR1bGluZyBDbGFzc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTI6MjEuMTUwMzQ3Mjc3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MDk3ODM1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIFByZWVtcHRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgU0NIRURfQ0xBU1NfRVhUYCBpcyBiZWluZyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIGBrZXJuZWwvS2NvbmZpZy5wcmVlbXB0YC4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIHByZWVtcHRpb24tcmVsYXRlZCBvcHRpb25zIGFyZSBkZWZpbmVkLiBJdCdzIGEga2V5IGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBzdGFydCB0aGVyZSBhbmQgc2VlIGlmIGBTQ0hFRF9DTEFTU19FWFRgIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBGcm9tIHRoYXQsIEkgY2FuIGRldGVybWluZSBob3cgdGhlIHNldHRpbmcgaXMgY29udHJvbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjoyOC41NjAxMzI4NTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL0tjb25maWcucHJlZW1wdFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNjUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjU6XFx0XFx0ICBTQ0hFRF9DT1JFIGlzIGRlZmF1bHQgZGlzYWJsZWQuIFdoZW4gaXQgaXMgZW5hYmxlZCBhbmQgdW51c2VkLFxcbiAxNjY6XFx0XFx0ICB3aGljaCBpcyB0aGUgbGlrZWx5IHVzYWdlIGJ5IExpbnV4IGRpc3RyaWJ1dGlvbnMsIHRoZXJlIHNob3VsZFxcbiAxNjc6XFx0XFx0ICBiZSBubyBtZWFzdXJhYmxlIGltcGFjdCBvbiBwZXJmb3JtYW5jZS5cXG4gMTY4OlxcdFxcbiAxNjk6XFx0Y29uZmlnIFNDSEVEX0NMQVNTX0VYVFxcbiAxNzA6XFx0XFx0Ym9vbCBcXFwiRXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXFxcIlxcbiAxNzE6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuIDE3MjpcXHRcXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG4gMTczOlxcdFxcdHNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbiAxNzQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjoyOC41NjAxOTc2NjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYyNTE3NDc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNjaGVkdWxpbmcgRXh0ZW5zaW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGFuZCBpbW1lZGlhdGVseSwgdGhlIGZsYWdzIGp1bXAgb3V0IOKAkyB3ZSdyZSBkZWFsaW5nIHdpdGggYFNDSEVEX0NMQVNTX0VYVGAsIGBDR1JPVVBfU0NIRURgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLiBUaGVzZSBhcmUgdGhlIGZvdW5kYXRpb25hbCBwaWVjZXMgb2YgdGhpcyBhcmNoaXRlY3R1cmUuIE15IHByaW1hcnkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGludGVyYWN0IHdpdGggc2NoZWR1bGluZyBhbmQgZ3JvdXBpbmcuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAg4oCTIHRob3NlIGFyZSB0aGUga2V5IGNvbnRyb2wgcG9pbnRzLiBJIGFsc28gbm90ZWQgYGJwZl9zY3hfY2hlY2tfbWVtYmVyYCBidXQgdGhhdCdzIHN0YXRpYyBzbyB3aGlsZSBJIGNhbid0IGxvb2sgZGlyZWN0bHkgYXQgaXQsIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgd29ydGgga2VlcGluZyBpbiBtaW5kLiBXYWl0IGEgbWludXRlLCBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBmdW5jdGlvbiBhcmVuJ3Qgc3RhdGljLiBMZXQncyBjb25maXJtIHRoYXQgYHNjeF9ncm91cF9zZXRfd2VpZ2h0YCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAgYXJlbid0IHN0YXRpYyBpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AuIEp1c3Qgd2FudCB0byBjb25maXJtIGJlZm9yZSBjb250aW51aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYwNywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjEyOjM1LjE4NTM3NDk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQyODcyMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2V4dC9leHQuYz00ODkxPXZvaWQgc2N4X2Nncm91cF9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkwOS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5MTA6dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgd2VpZ2h0KVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDkxMS17XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTgwPXZvaWQgc2N4X2Nncm91cF9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo4MTp2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC04Mi12b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTkwPXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTE6c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTkyLXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpIHt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjEyOjM2LjYyODI1MjI1N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTI1MjI2NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBFbmhhbmNlbWVudCBmb3IgU2NoZWRfRXh0IGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gdGhlIEJQRiB2ZXJpZmllciBmb3IgYHNjaGVkX2V4dGAgaGFzIGJlZW4gdXBkYXRlZCDigJMgdGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJJ20gcGlja2luZyB1cCBvbi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNsZWVwYWJsZSBwcm9ncmFtcyBzcGVjaWZpY2FsbHkgZm9yIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIHdpdGhpbiB0aGF0IGNvbnRleHQuIEltbWVkaWF0ZWx5LCBJJ20gdGhpbmtpbmcsIFwiSW50ZXJlc3RpbmcsIHRoaXMgb3BlbnMgdXAgc29tZSBuZXcgYXR0YWNrIHZlY3RvcnMuXCIgVGhlIGZhY3QgdGhhdCB0aGV5J3ZlIG1hZGUgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSB2ZXJpZmllciwgcGFydGljdWxhcmx5IGVuYWJsaW5nIHNsZWVwYWJsZSBwcm9ncmFtcywgZGVmaW5pdGVseSB3YXJyYW50cyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaW50cm9kdWNlcyBtb3JlIGZsZXhpYmlsaXR5IHRvIHdoYXQgY2FuIGJlIGRvbmUgaW4ga2VybmVsIHNwYWNlLCBhbmQgdGhlcmVmb3JlIG1vcmUgcG90ZW50aWFsIGZvciBleHBsb2l0LlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgY29uZmlndXJhdGlvbi13aXNlIGlzIGdvaW5nIHRvIGJlIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYCwgYmVjYXVzZSB0aGF04oCZcyB0aGUgc2NvcGUgd2UncmUgZGVhbGluZyB3aXRoLiBUaGVuLCBJ4oCZbGwgYmUgaG9uaW5nIGluIG9uIGBzY3hfZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIOKAkyB0aG9zZSBmdW5jdGlvbnMgd2lsbCBiZSB0aGUgcHJpbWFyeSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHRlc3QgdGhlIG5ld2x5IGF2YWlsYWJsZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM5NCwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjo0MS43NTM0ODA0OTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTI3MzAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gICAgXCJDR1JPVVBfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3hfZ3JvdXBfc2V0X3dlaWdodFwiLFxuICAgIFwic2N4X2dyb3VwX3NldF9pZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBjb25zdHJhaW50cyBmb3IgdGhlIHNjaGVkX2V4dCBzdWJzeXN0ZW0sIGFsbG93aW5nIHRoZSBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBjYWxsYmFja3MgdG8gYmUgaW1wbGVtZW50ZWQgYXMgc2xlZXBhYmxlIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gY29udGV4dCBhbmQgY29uc3RyYWludHMgb2YgdGhlc2UgY2FsbGJhY2tzLCB3aGljaCBhcmUgdHJpZ2dlcmVkIHZpYSBjZ3JvdXAgYXR0cmlidXRlIHdyaXRlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGVudHJ5IHBvaW50cyB0aGF0IGludm9rZSB0aGVzZSBjYWxsYmFja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gICAgXCJDR1JPVVBfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3hfZ3JvdXBfc2V0X3dlaWdodFwiLFxuICAgIFwic2N4X2dyb3VwX3NldF9pZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBjb25zdHJhaW50cyBmb3IgdGhlIHNjaGVkX2V4dCBzdWJzeXN0ZW0sIGFsbG93aW5nIHRoZSBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBjYWxsYmFja3MgdG8gYmUgaW1wbGVtZW50ZWQgYXMgc2xlZXBhYmxlIEJQRiBwcm9ncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gY29udGV4dCBhbmQgY29uc3RyYWludHMgb2YgdGhlc2UgY2FsbGJhY2tzLCB3aGljaCBhcmUgdHJpZ2dlcmVkIHZpYSBjZ3JvdXAgYXR0cmlidXRlIHdyaXRlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIGVudHJ5IHBvaW50cyB0aGF0IGludm9rZSB0aGVzZSBjYWxsYmFja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjEyOjQxLjgyMjc1ODk5MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMjc2MTI5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjo0MS44MjMxODExMDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTgwMjcxODYyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc2NoZWRfZXh0IChzY3gpIHN1YnN5c3RlbSB0byBhbGxvdyBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBjYWxsYmFja3MgdG8gYmUgc2xlZXBhYmxlLiBJdCBkb2VzIHRoaXMgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGFsbG93ZWQgbGlzdCBpbiBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGFuZCBkZWZpbmluZyBjb21wYXRpYmlsaXR5IG1hcmtlcnMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBCUEYgdmVyaWZpZXIgY2hlY2tzIGZvciBzbGVlcGFibGUgY2FsbGJhY2tzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjQxMWNlMjhlMzNhZDkwMTY1YjA3MmE2NjA1NzA3ZWM4NzhiNWM5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA2OjExOjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbmluZGV4IGI2NDY3MTFhNDVmZWUuLjUzYjg4OGY1YTZjNTEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG5AQCAtODA3OSw3ICs4MDc5LDkgQEAgc3RhdGljIGludCBicGZfc2N4X2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfaW5pdCk6XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfZXhpdCk6XG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfcHJlcF9tb3ZlKTpcbitcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfd2VpZ2h0KTpcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfYmFuZHdpZHRoKTpcbitcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfaWRsZSk6XG4gI2VuZGlmXG4gXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb25saW5lKTpcbiBcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vZmZsaW5lKTpcbkBAIC0xMTA1NSwzICsxMTA1NywxOSBAQCBfX2luaXRjYWxsKHNjeF9pbml0KTtcbiAjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxuIERFRklORV9TQ1hfQ09NUEFUX01BUktFUihjZ3JvdXBfc2V0X2JhbmR3aWR0aF9tYXlfc2xlZXApO1xuICNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xuK1xuKy8qXG4rICogc2N4X2NvbXBhdF9tYXJrZXJfY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwOiBhZHZlcnRpc2VzIHRoYXRcbisgKiBvcHMuY2dyb3VwX3NldF93ZWlnaHQoKSBtYXkgYmUgaW1wbGVtZW50ZWQgYXMgYSBzbGVlcGFibGUgY2FsbGJhY2suXG4rICovXG4rI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbitERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF93ZWlnaHRfbWF5X3NsZWVwKTtcbisjZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbitcbisvKlxuKyAqIHNjeF9jb21wYXRfbWFya2VyX2Nncm91cF9zZXRfaWRsZV9tYXlfc2xlZXA6IGFkdmVydGlzZXMgdGhhdFxuKyAqIG9wcy5jZ3JvdXBfc2V0X2lkbGUoKSBtYXkgYmUgaW1wbGVtZW50ZWQgYXMgYSBzbGVlcGFibGUgY2FsbGJhY2suXG4rICovXG4rI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbitERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9pZGxlX21heV9zbGVlcCk7XG4rI2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oIGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oXG5pbmRleCA1M2UxMzZhNDc5MjRkLi5mODFkMDNkZTJkM2M3IDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbkBAIC03MzYsNyArNzM2LDcgQEAgc3RydWN0IHNjaGVkX2V4dF9vcHMge1xuIFx0ICogQGNncnA6IGNncm91cCB3aG9zZSB3ZWlnaHQgaXMgYmVpbmcgdXBkYXRlZFxuIFx0ICogQHdlaWdodDogbmV3IHdlaWdodCBbMS4uMTAwMDBdXG4gXHQgKlxuLVx0ICogVXBkYXRlIEBjZ3JwJ3Mgd2VpZ2h0IHRvIEB3ZWlnaHQuXG4rXHQgKiBVcGRhdGUgQGNncnAncyB3ZWlnaHQgdG8gQHdlaWdodC4gVGhpcyBvcGVyYXRpb24gbWF5IGJsb2NrLlxuIFx0ICpcbiBcdCAqIEtub2JzIG9mIGEgY2dyb3VwIGJlbG9uZyB0byB0aGUgcGFyZW50LCBzbyB0aGUgc2V0Xyogb3BzIGFyZVxuIFx0ICogZGVsaXZlcmVkIHRvIEBjZ3JwJ3MgcGFyZW50J3Mgc2NoZWQuIFRoYXQgc2NoZWQgbWF5IG5ldmVyIGhhdmUgc2VlblxuQEAgLTc3Myw5ICs3NzMsMTAgQEAgc3RydWN0IHNjaGVkX2V4dF9vcHMge1xuIFx0ICogQGNncnA6IGNncm91cCB3aG9zZSBpZGxlIHN0YXRlIGlzIGJlaW5nIHVwZGF0ZWRcbiBcdCAqIEBpZGxlOiB3aGV0aGVyIHRoZSBjZ3JvdXAgaXMgZW50ZXJpbmcgb3IgZXhpdGluZyBpZGxlIHN0YXRlXG4gXHQgKlxuLVx0ICogVXBkYXRlIEBjZ3JwJ3MgaWRsZSBzdGF0ZSB0byBAaWRsZS4gVGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW5cbi1cdCAqIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmQgbm9uLWlkbGUgc3RhdGVzLCBhbGxvd2luZyB0aGVcbi1cdCAqIEJQRiBzY2hlZHVsZXIgdG8gYWRqdXN0IGl0cyBiZWhhdmlvciBhY2NvcmRpbmdseS5cbitcdCAqIFVwZGF0ZSBAY2dycCdzIGlkbGUgc3RhdGUgdG8gQGlkbGUuIFRoaXMgb3BlcmF0aW9uIG1heSBibG9jay4gVGhpc1xuK1x0ICogY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIGEgY2dyb3VwIHRyYW5zaXRpb25zIGJldHdlZW4gaWRsZSBhbmRcbitcdCAqIG5vbi1pZGxlIHN0YXRlcywgYWxsb3dpbmcgdGhlIEJQRiBzY2hlZHVsZXIgdG8gYWRqdXN0IGl0cyBiZWhhdmlvclxuK1x0ICogYWNjb3JkaW5nbHkuXG4gXHQgKlxuIFx0ICogRGVsaXZlcnkgZm9sbG93cyB0aGUgc2FtZSBydWxlIGFzIGNncm91cF9zZXRfd2VpZ2h0KCkuXG4gXHQgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjEyOjQxLjgyMzE4MzYyMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDE5OTI4MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBTY2hlZF9FeHQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgc2NoZWRfZXh0YC4gSXQncyB0b3VjaGluZyBgZXh0LmNgIGFuZCBgaW50ZXJuYWwuaGAsIHNwZWNpZmljYWxseSBhZGRpbmcgYGNncm91cF9zZXRfd2VpZ2h0YCBhbmQgYGNncm91cF9zZXRfaWRsZWAgdG8gdGhlIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgZnVuY3Rpb24gd2l0aGluIGBleHQuY2AuIFRoZSBgaW50ZXJuYWwuaGAgY2hhbmdlcyBqdXN0IHNlZW0gdG8gYmUgdXBkYXRpbmcgdGhlIGNvbW1lbnRzIGFyb3VuZCB0aG9zZSB0d28gZnVuY3Rpb25zLCBleHBsaWNpdGx5IG1lbnRpb25pbmcgdGhhdCB0aGV5IFwibWF5IGJsb2NrLlwiIFRoYXQncyB0aGUga2V5IHRoaW5nIGhlcmUg4oCTIHdlJ3JlIGFsbG93aW5nIHRoZXNlIGNncm91cCBvcGVyYXRpb25zIHRvIHBvdGVudGlhbGx5IHNsZWVwLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBhYm91dCBlbmFibGluZyBzbGVlcGFibGUgY2FsbGJhY2tzIGZvciB0aG9zZSBzcGVjaWZpYyBjZ3JvdXAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgQlBGIHNjaGVkX2V4dCBjb250ZXh0LiBObyBuZXcgdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMsIG5vIG1lbW9yeSBzYWZldHkgaXNzdWVzIOKAkyBpdCdzIGFsbCB2ZXJpZmllciBjaGVja3MgYW5kIGNvbXBhdCBtYXJrZXJzLiBUaGF0J3MgZ29vZDsga2VlcGluZyBpdCBjb250YWluZWQgYW5kIGZvY3VzZWQgb24gdGhlIEJQRiBzaWRlIG1lYW5zIGxlc3MgY2hhbmNlIG9mIHVuZm9yZXNlZW4gY29uc2VxdWVuY2VzLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgd2hhdCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgZXhhY3RseSBpbiBgYnBmX3NjeF9jaGVja19tZW1iZXJgLiBBaGEsIGhlcmUncyB0aGUgcmVsZXZhbnQgY29kZTpcblxuYGBgY1xuXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfaW5pdCk6XG5cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9leGl0KTpcblx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3ByZXBfbW92ZSk6XG4rXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X3dlaWdodCk6XG5cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfYmFuZHdpZHRoKTpcbitcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9zZXRfaWRsZSk6XG5gYGBcblxuWWVwLCBpdCdzIGV4YWN0bHkgYXMgSSBleHBlY3RlZC4gVGhlc2UgbmV3IGNhc2VzIGFyZSBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQgd2l0aGluIGBicGZfc2N4X2NoZWNrX21lbWJlcmAsIGFuZCBpdCBwcm9iYWJseSBqdXN0IHJldHVybnMgc29tZSBzb3J0IG9mIGJvb2xlYW4gb3IgZW51bSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1lbWJlciBpcyBhbGxvd2VkIHRvIGJlIHNsZWVwYWJsZS4gVGhlIGNvbXBhdCBtYXJrZXJzIGFyZSBwcm9iYWJseSBuZWVkZWQgZm9yIG9sZGVyIEJQRiBwcm9ncmFtcywgYnV0IHRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSB3aXRoIHRoaXMga2luZCBvZiBjaGFuZ2UuIFNlZW1zIGxpa2UgYSBzYWZlIGFuZCB3ZWxsLWNvbnRhaW5lZCBtb2RpZmljYXRpb24gdG8gc3VwcG9ydCBwb3RlbnRpYWxseSBibG9ja2luZyBjZ3JvdXAgb3BlcmF0aW9ucyBpbiB0aGUgc2NoZWRfZXh0IGVudmlyb25tZW50LCB3aGljaCBpcyBiZWNvbWluZyBpbmNyZWFzaW5nbHkgY29tbW9uLiBJJ2Qgd2FudCB0byBjaGVjayBob3cgdGhlIGJwZiB2ZXJpZmllciBiZWhhdmVzIGFmdGVyIHRoaXMgY2hhbmdlLCB0aG91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjo1MC4yNDMxMTU0MTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDUxNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zY3hfY2hlY2tfbWVtYmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZC9leHQvZXh0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2V4dC9leHQuYz03OTk4PXN0YXRpYyBpbnQgYnBmX3NjeF9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNjktXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDcwOnN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA3MS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MzAyPXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX3NjaGVkX2V4dF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzMDUtXFx0LnVucmVnID0gYnBmX3NjeF91bnJlZyxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzMDY6XFx0LmNoZWNrX21lbWJlciA9IGJwZl9zY3hfY2hlY2tfbWVtYmVyLFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODMwNy1cXHQuaW5pdF9tZW1iZXIgPSBicGZfc2N4X2luaXRfbWVtYmVyLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04Mzc0PXN0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX3NjaGVkX2V4dF9vcHNfY2lkID0ge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04Mzc3LVxcdC51bnJlZyA9IGJwZl9zY3hfdW5yZWcsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4Mzc4OlxcdC5jaGVja19tZW1iZXIgPSBicGZfc2N4X2NoZWNrX21lbWJlcixcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNzktXFx0LmluaXRfbWVtYmVyID0gYnBmX3NjeF9pbml0X21lbWJlcixcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA4OTM9c3RhdGljIGludCBfX2luaXQgc2N4X2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA4OTgtXFx0ICogc2NoZWRfZXh0X29wc19jaWQgbWlycm9ycyBzY2hlZF9leHRfb3BzIHVwIHRvIGFuZCBpbmNsdWRpbmcgQHByaXYuXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDg5OTpcXHQgKiBCb3RoIGJwZl9zY3hfaW5pdF9tZW1iZXIoKSBhbmQgYnBmX3NjeF9jaGVja19tZW1iZXIoKSB1c2Ugb2Zmc2V0c1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5MDAtXFx0ICogZnJvbSBzdHJ1Y3Qgc2NoZWRfZXh0X29wczsgc2NoZWRfZXh0X29wc19jaWQgcmVsaWVzIG9uIHRob3NlIG9mZnNldHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTI6NTAuMzI1NTcxNTUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzY4MjI2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGJwZl9zY3hfY2hlY2tfbWVtYmVyYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGFraW5nIGEgbG9vayBhdCBgYnBmX3NjeF9jaGVja19tZW1iZXJgLiBUaGUgbmFtZSBpcyBwcmV0dHkgZGVzY3JpcHRpdmUsIHNvIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBzZXJ2ZXMgYXMgYSBnYXRla2VlcGVyIG9mIHNvcnRzLCBwcm9iYWJseSByZWxhdGVkIHRvIGNoZWNraW5nIGFjY2VzcyB0byBzdHJ1Y3R1cmUgbWVtYmVycyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LiBJJ20gZ3Vlc3NpbmcgaXTigJlzIGludGVuZGVkIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3Igb3RoZXIgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCB1c2VyLXByb3ZpZGVkIGRhdGEgd2l0aGluIEJQRiBwcm9ncmFtcy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgdG8gc2VlIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNoZWNrcyBpdCBwZXJmb3JtcyDigJMgcGFydGljdWxhcmx5IGFyb3VuZCBwb3RlbnRpYWwgb2Zmc2V0cywgc2l6ZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBwb2ludGVyIGRlcmVmZXJlbmNpbmcuIEnigJltIGFsc28gY3VyaW91cyBhYm91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgQlBGIGhlbHBlcnMgYW5kIHdoYXQga2luZCBvZiBlcnJvciBjb2RlcyBpdCByZXR1cm5zIHRvIHRoZSBCUEYgcHJvZ3JhbSBpZiBhIGNoZWNrIGZhaWxzLiBVbmRlcnN0YW5kaW5nIHRoZSBmaW5lciBkZXRhaWxzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjcnVjaWFsIGZvciBzZWN1cmUgYW5kIHJlbGlhYmxlIEJQRiBwcm9ncmFtIGRldmVsb3BtZW50LCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyOTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjo1NC4xMDIzOTYyOThaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9zY2hlZC9leHQvZXh0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODA3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODA3MDpcXHRzdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG44MDcxOlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXFxuODA3MjpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuODA3MzpcXHR7XFxuODA3NDpcXHRcXHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xcbjgwNzU6XFx0XFxuODA3NjpcXHRcXHRzd2l0Y2ggKG1vZmYpIHtcXG44MDc3OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXRfdGFzayk6XFxuODA3ODpcXHQjaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbjgwNzk6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2luaXQpOlxcbjgwODA6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2V4aXQpOlxcbjgwODE6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX3ByZXBfbW92ZSk6XFxuODA4MjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X3dlaWdodCk6XFxuODA4MzpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2JhbmR3aWR0aCk6XFxuODA4NDpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfc2V0X2lkbGUpOlxcbjgwODU6XFx0I2VuZGlmXFxuODA4NjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjcHVfb25saW5lKTpcXG44MDg3OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNwdV9vZmZsaW5lKTpcXG44MDg4OlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXRfY2lkcyk6XFxuODA4OTpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBpbml0KTpcXG44MDkwOlxcdFxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGV4aXQpOlxcbjgwOTE6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgc3ViX2F0dGFjaCk6XFxuODA5MjpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBzdWJfZGV0YWNoKTpcXG44MDkzOlxcdFxcdFxcdGJyZWFrO1xcbjgwOTQ6XFx0XFx0ZGVmYXVsdDpcXG44MDk1OlxcdFxcdFxcdGlmIChwcm9nLVxcdTAwM2VzbGVlcGFibGUpXFxuODA5NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDk3OlxcdFxcdH1cXG44MDk4OlxcdFxcbjgwOTk6XFx0I2lmZGVmIENPTkZJR19FWFRfU1VCX1NDSEVEXFxuODEwMDpcXHRcXHQvKlxcbjgxMDE6XFx0XFx0ICogRW5hYmxlIHByaXZhdGUgc3RhY2sgZm9yIG9wZXJhdGlvbnMgdGhhdCBjYW4gbmVzdCBhbG9uZyB0aGVcXG44MTAyOlxcdFxcdCAqIGhpZXJhcmNoeS5cXG44MTAzOlxcdFxcdCAqXFxuODEwNDpcXHRcXHQgKiBYWFggLSBJZGVhbGx5LCB3ZSBzaG91bGQgb25seSBkbyB0aGlzIGZvciBzY2hlZHMgdGhhdCBhbGxvd1xcbjgxMDU6XFx0XFx0ICogc3ViLXNjaGVkcyBhbmQgc3ViLXNjaGVkcyB0aGVtc2VsdmVzIGJ1dCBJIGRvbid0IGtub3cgaG93IHRvIGFjY2Vzc1xcbjgxMDY6XFx0XFx0ICogc3RydWN0X29wcyBmcm9tIGhlcmUuXFxuODEwNzpcXHRcXHQgKi9cXG44MTA4OlxcdFxcdHN3aXRjaCAobW9mZikge1xcbjgxMDk6XFx0XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgZGlzcGF0Y2gpOlxcbjgxMTA6XFx0XFx0XFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2Vwcml2X3N0YWNrX3JlcXVlc3RlZCA9IHRydWU7XFxuODExMTpcXHRcXHRcXHRwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXJlY3Vyc2lvbl9kZXRlY3RlZCA9IHNjeF9wc3RhY2tfcmVjdXJzaW9uX29uX2Rpc3BhdGNoO1xcbjgxMTI6XFx0XFx0XFx0YnJlYWs7XFxuODExMzpcXHRcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBzdWJfY2Fwc191cGRhdGVkKTpcXG44MTE0OlxcdFxcdFxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlcHJpdl9zdGFja19yZXF1ZXN0ZWQgPSB0cnVlO1xcbjgxMTU6XFx0XFx0XFx0cHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VyZWN1cnNpb25fZGV0ZWN0ZWQgPSBzY3hfcHN0YWNrX3JlY3Vyc2lvbl9vbl9jYXBzX3VwZGF0ZWQ7XFxuODExNjpcXHRcXHRcXHRicmVhaztcXG44MTE3OlxcdFxcdH1cXG44MTE4OlxcdCNlbmRpZlxcdC8qIENPTkZJR19FWFRfU1VCX1NDSEVEICovXFxuODExOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MTI6NTQuMTAyOTU1NjQ4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDczOTE2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEVzc2VudGlhbGx5LCBpdCdzIGV4dGVuZGluZyB0aGUgcmFuZ2Ugb2Ygb3BlcmF0aW9ucyBjb25zaWRlcmVkIFwic2xlZXBhYmxlXCIgd2l0aGluIHRoZSBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIHRvIHRoYXQgYWxsb3dlZCBsaXN0LiBSZWFsbHksIGl0J3MgcXVpdGUgbWluaW1hbCBhbmQgbG9jYWxpemVkLiBBbmQgZm9yIGNvbXBhdGliaWxpdHkncyBzYWtlLCBpdCBhbHNvIGRlZmluZXMgYHNjeF9jb21wYXRfbWFya2VyX2Nncm91cF9zZXRfd2VpZ2h0X21heV9zbGVlcGAgYW5kIGBzY3hfY29tcGF0X21hcmtlcl9jZ3JvdXBfc2V0X2lkbGVfbWF5X3NsZWVwYC5cblxuR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsIGludGVybmFscyBhbmQgQlBGIHZlcmlmaWVyIGxvZ2ljLCB0aGVyZSdzIHplcm8gY2hhbmNlIG9mIGludHJvZHVjaW5nIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkgd2l0aCB0aGlzIGNoYW5nZS4gSXQncyBhIHZlcnkgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uIHRvIGEgQlBGIHZlcmlmaWNhdGlvbiBjaGVjay4gU28sIEkgd2lsbCBtYXJrIHRoaXMgYXMgYE5lZWRzS01TQU49ZmFsc2VgIGJlY2F1c2UgdGhlIGNoYW5nZSBpcyB2ZXJ5IHNpbXBsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1MSwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoxMjo1OS44NTAzNDk1MzFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc2NoZWRfZXh0IChzY3gpIHN1YnN5c3RlbSB0byBhbGxvdyBgY2dyb3VwX3NldF93ZWlnaHRgIGFuZCBgY2dyb3VwX3NldF9pZGxlYCBjYWxsYmFja3MgdG8gYmUgc2xlZXBhYmxlLiBJdCBkb2VzIHRoaXMgYnkgYWRkaW5nIHRoZW0gdG8gdGhlIGFsbG93ZWQgbGlzdCBpbiBgYnBmX3NjeF9jaGVja19tZW1iZXJgIGFuZCBkZWZpbmluZyBjb21wYXRpYmlsaXR5IG1hcmtlcnMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBCUEYgdmVyaWZpZXIgY2hlY2tzIGZvciBzbGVlcGFibGUgY2FsbGJhY2tzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzY2hlZF9leHQgKHNjeCkgc3Vic3lzdGVtIHRvIGFsbG93IGBjZ3JvdXBfc2V0X3dlaWdodGAgYW5kIGBjZ3JvdXBfc2V0X2lkbGVgIGNhbGxiYWNrcyB0byBiZSBzbGVlcGFibGUuIEl0IGRvZXMgdGhpcyBieSBhZGRpbmcgdGhlbSB0byB0aGUgYWxsb3dlZCBsaXN0IGluIGBicGZfc2N4X2NoZWNrX21lbWJlcmAgYW5kIGRlZmluaW5nIGNvbXBhdGliaWxpdHkgbWFya2Vycy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIEJQRiB2ZXJpZmllciBjaGVja3MgZm9yIHNsZWVwYWJsZSBjYWxsYmFja3MuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowscxfh[1] Phase: Succeeded StartedAt: 2026-08-25 06:13:11 +0000 UTC FinishedAt: 2026-08-25 06:13:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 06:13:11 +0000 UTC FinishedAt: 2026-08-25 06:13:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2] Phase: Succeeded StartedAt: 2026-08-25 06:13:11 +0000 UTC FinishedAt: 2026-08-25 06:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 06:13:11 +0000 UTC FinishedAt: 2026-08-25 06:52:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 06:13:11 +0000 UTC FinishedAt: 2026-08-25 06:13:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 06:13:11 +0000 UTC FinishedAt: 2026-08-25 06:13:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowscxfh/series-workflowscxfh-convert-artifact-1126533809/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 06:13:21 +0000 UTC FinishedAt: 2026-08-25 06:29:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 06:13:21 +0000 UTC FinishedAt: 2026-08-25 06:29:29 +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:*1fd52efd-c606-4d59-9753-b5f24c69a2c1,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-workflowscxfh/series-workflowscxfh-convert-artifact-1126533809/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": "e772eb25-40f6-4657-9aab-887d5f2fc234", "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-workflowscxfh/series-workflowscxfh-build-action-1394223327/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 06:13:21 +0000 UTC FinishedAt: 2026-08-25 06:29:19 +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:*1fd52efd-c606-4d59-9753-b5f24c69a2c1,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-workflowscxfh/series-workflowscxfh-convert-artifact-1126533809/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": "e772eb25-40f6-4657-9aab-887d5f2fc234", "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-workflowscxfh/series-workflowscxfh-build-action-1394223327/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 06:29:29 +0000 UTC FinishedAt: 2026-08-25 06:29:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 06:29:29 +0000 UTC FinishedAt: 2026-08-25 06:29:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 06:29:29 +0000 UTC FinishedAt: 2026-08-25 06:29:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 06:29:29 +0000 UTC FinishedAt: 2026-08-25 06:29:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowscxfh/series-workflowscxfh-convert-artifact-48398084/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 06:29:40 +0000 UTC FinishedAt: 2026-08-25 06:31:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 06:29:40 +0000 UTC FinishedAt: 2026-08-25 06:31:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e772eb25-40f6-4657-9aab-887d5f2fc234,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-workflowscxfh/series-workflowscxfh-build-action-1394223327/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-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 06:31:40 +0000 UTC FinishedAt: 2026-08-25 06:31:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 06:31:40 +0000 UTC FinishedAt: 2026-08-25 06:31:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 06:31:40 +0000 UTC FinishedAt: 2026-08-25 06:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 06:31:40 +0000 UTC FinishedAt: 2026-08-25 06:47:54 +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:*1fd52efd-c606-4d59-9753-b5f24c69a2c1,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-workflowscxfh/series-workflowscxfh-convert-artifact-48398084/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": "d97216e1-2e39-4614-ad79-85c76d04a9d8", "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-workflowscxfh/series-workflowscxfh-build-action-3828906256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 06:31:40 +0000 UTC FinishedAt: 2026-08-25 06:47:44 +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:*1fd52efd-c606-4d59-9753-b5f24c69a2c1,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-workflowscxfh/series-workflowscxfh-convert-artifact-48398084/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": "d97216e1-2e39-4614-ad79-85c76d04a9d8", "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-workflowscxfh/series-workflowscxfh-build-action-3828906256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 06:47:54 +0000 UTC FinishedAt: 2026-08-25 06:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 06:47:54 +0000 UTC FinishedAt: 2026-08-25 06:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 06:47:54 +0000 UTC FinishedAt: 2026-08-25 06:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 06:47:54 +0000 UTC FinishedAt: 2026-08-25 06:49:48 +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:*d97216e1-2e39-4614-ad79-85c76d04a9d8,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-workflowscxfh/series-workflowscxfh-build-action-3828906256/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-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 06:49:57 +0000 UTC FinishedAt: 2026-08-25 06:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 06:49:57 +0000 UTC FinishedAt: 2026-08-25 06:52:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*e772eb25-40f6-4657-9aab-887d5f2fc234,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d97216e1-2e39-4614-ad79-85c76d04a9d8,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-workflowscxfh/series-workflowscxfh-build-action-1394223327/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-workflowscxfh/series-workflowscxfh-build-action-3828906256/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 06:49:57 +0000 UTC FinishedAt: 2026-08-25 06:50:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 06:49:57 +0000 UTC FinishedAt: 2026-08-25 06:50:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowscxfh/series-workflowscxfh-convert-artifact-1909135117/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 06:49:57 +0000 UTC FinishedAt: 2026-08-25 06:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 06:49:57 +0000 UTC FinishedAt: 2026-08-25 06:49:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 06:49:58 +0000 UTC FinishedAt: 2026-08-25 06:49:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 06:50:08 +0000 UTC FinishedAt: 2026-08-25 06:52:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscxfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_group_set_weight","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e8581a090c02ffa35e8439b90b024956a735de9","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"04ecb5b3-1610-40b1-8f47-dcc7de16534a","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 06:50:08 +0000 UTC FinishedAt: 2026-08-25 06:52:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e772eb25-40f6-4657-9aab-887d5f2fc234,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d97216e1-2e39-4614-ad79-85c76d04a9d8,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-workflowscxfh/series-workflowscxfh-build-action-1394223327/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-workflowscxfh/series-workflowscxfh-build-action-3828906256/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-workflowscxfh/series-workflowscxfh-convert-artifact-1909135117/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,}