Name: series-workflowhd9kn Phase: Succeeded StartedAt: 2026-09-06 20:14:58 +0000 UTC FinishedAt: 2026-09-07 00:57:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[0] Phase: Succeeded StartedAt: 2026-09-06 20:14:58 +0000 UTC FinishedAt: 2026-09-06 21:16:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 20:14:58 +0000 UTC FinishedAt: 2026-09-06 21:16:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PARTITION_ADVANCED", "LDM_PARTITION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PARTITION_ADVANCED", "LDM_PARTITION" ], "series_id": "e1574937-79df-4fe8-ba94-e21248fb3c6b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ldm_get_vstr", "ldm_parse_vblk", "ldm_parse_cmp3", "ldm_parse_dgr3", "ldm_parse_dgr4", "ldm_parse_dsk3", "ldm_parse_vol5", "ldm_partition" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBUlRJVElPTl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtMRE1fUEFSVElUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGRtX2dldF92c3RyJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV92YmxrJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9jbXAzJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9kZ3IzJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9kZ3I0JiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9kc2szJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV92b2w1JiMzNDssCiAgICAmIzM0O2xkbV9wYXJ0aXRpb24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIGJ5IGFkZGluZyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IGJ1ZmZlciBsZW5ndGggKGBibG9ja2xlbmApIHdpdGhpbiBgbGRtX2dldF92c3RyKClgLiBQcmV2aW91c2x5LCBgbGRtX2dldF92c3RyKClgIG9ubHkgY2hlY2tlZCBvdXRwdXQgYnVmZmVyIGJvdW5kcyAoYGJ1ZmxlbmApLCBhbGxvd2luZyBhIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgbGVuZ3RoIGJ5dGUgaW4gYSBwYXJ0aXRpb24gc3RydWN0dXJlIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gXG5cbk91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSBmdWxseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIChLTVNBTiBkb21haW4pLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2luZG93cyBMb2dpY2FsIERpc2sgTWFuYWdlciAoTERNKSBwYXJ0aXRpb24gcGFyc2VyIGluIGJsb2NrL3BhcnRpdGlvbnMvbGRtLmMgdG8gYWRkIGJvdW5kcyBjaGVja2luZyB3aGVuIHJlYWRpbmcgbGVuZ3RoLXByZWZpeGVkIHN0cmluZ3MsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgYmxvY2sgZGV2aWNlIHBhcnRpdGlvbiBzY2FubmluZyAoZS5nLiwgbG9vcCBkZXZpY2VzKSBhbmQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIHRydW5jYXRpb25zLCBvciB1bmV4cGVjdGVkIHBhcnNlciBiZWhhdmlvcnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZjBkZDQzZmQ3MjNkOWYyNDliZGY3YTkwMzAzMDQxMmYwYWQ2NWJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMToxNTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2xkbS5jIGIvYmxvY2svcGFydGl0aW9ucy9sZG0uY1xuaW5kZXggYzBiZGNhZTU4YTNlZS4uNTQ2OGUwMzhhMDlmNCAxMDA2NDRcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcbkBAIC02NzMsNiAmIzQzOzY3Myw3IEBAIHN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spXG4gLyoqXG4gICogbGRtX2dldF92c3RyIC0gUmVhZCBhIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmcgaW50byBhIGJ1ZmZlclxuICAqIEBibG9jazogICBQb2ludGVyIHRvIHRoZSBsZW5ndGggbWFya2VyXG4mIzQzOyAqIEBibG9ja2xlbjogTnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBAYmxvY2tcbiAgKiBAYnVmZmVyOiAgTG9jYXRpb24gdG8gY29weSBzdHJpbmcgdG9cbiAgKiBAYnVmbGVuOiAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlclxuICAqXG5AQCAtNjgwLDIwICYjNDM7NjgxLDI3IEBAIHN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spXG4gICogdGhleSBhcmUgcHJlZml4ZWQgYnkgYSBvbmUgYnl0ZSBsZW5ndGggbWFya2VyLiAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgb25lIG9mXG4gICogdGhlc2Ugc3RyaW5ncyBpbnRvIGEgYnVmZmVyLlxuICAqXG4tICogTi5CLiAgVGhpcyBmdW5jdGlvbiBET0VTIE5PVCBwZXJmb3JtIGFueSByYW5nZSBjaGVja2luZyBvbiB0aGUgaW5wdXQuXG4tICogICAgICAgSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwsIHRoZSBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQuXG4mIzQzOyAqIE4uQi4gIFRoZSBzdHJpbmcgaXMgY2xhbXBlZCB0byBib3RoIEBibG9ja2xlbiBhbmQgQGJ1ZmxlbjsgaWYgZWl0aGVyXG4mIzQzOyAqICAgICAgIGlzIHRvbyBzbWFsbCB0aGUgb3V0cHV0IHdpbGwgYmUgdHJ1bmNhdGVkLlxuICAqXG4gICogUmV0dXJuOiAgMCwgRXJyb3IgYW5kIEBidWZmZXIgY29udGVudHMgYXJlIHVuZGVmaW5lZFxuICAqICAgICAgICAgIG4sIFN0cmluZyBsZW5ndGggaW4gY2hhcmFjdGVycyAoZXhjbHVkaW5nIE5VTEwpXG4gICogICAgICAgICAgYnVmbGVuLTEsIFN0cmluZyB3YXMgdHJ1bmNhdGVkLlxuICAqL1xuLXN0YXRpYyBpbnQgbGRtX2dldF92c3RyIChjb25zdCB1OCAqYmxvY2ssIHU4ICpidWZmZXIsIGludCBidWZsZW4pXG4mIzQzO3N0YXRpYyBpbnQgbGRtX2dldF92c3RyKGNvbnN0IHU4ICpibG9jaywgaW50IGJsb2NrbGVuLCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuIHtcbiBcdGludCBsZW5ndGg7XG4gXG4gXHRCVUdfT04gKCFibG9jayB8fCAhYnVmZmVyKTtcbiBcbiYjNDM7XHRpZiAoYmxvY2tsZW4gXHUwMDNjIDEpIHtcbiYjNDM7XHRcdGJ1ZmZlclswXSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0bGVuZ3RoID0gYmxvY2tbMF07XG4mIzQzO1x0aWYgKGxlbmd0aCBcdTAwM2UgYmxvY2tsZW4gLSAxKVxuJiM0MztcdFx0bGVuZ3RoID0gYmxvY2tsZW4gLSAxO1xuIFx0aWYgKGxlbmd0aCBcdTAwM2U9IGJ1Zmxlbikge1xuIFx0XHRsZG1fZXJyb3IgKFwmIzM0O1RydW5jYXRpbmcgc3RyaW5nICVkIC1cdTAwM2UgJWQuXCYjMzQ7LCBsZW5ndGgsIGJ1Zmxlbik7XG4gXHRcdGxlbmd0aCA9IGJ1ZmxlbiAtIDE7XG5AQCAtNzQ0LDggJiM0Mzs3NTIsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfY21wMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRjb21wID0gXHUwMDI2dmItXHUwMDNldmJsay5jb21wO1xuLVx0bGRtX2dldF92c3RyIChidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGNvbXAtXHUwMDNlc3RhdGUsXG4tXHRcdHNpemVvZiAoY29tcC1cdTAwM2VzdGF0ZSkpO1xuJiM0MztcdGxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfbmFtZSksXG4mIzQzO1x0XHRjb21wLVx1MDAzZXN0YXRlLCBzaXplb2YoY29tcC1cdTAwM2VzdGF0ZSkpO1xuIFx0Y29tcC1cdTAwM2V0eXBlICAgICAgPSBidWZmZXJbMHgxOCAmIzQzOyByX3ZzdGF0ZV07XG4gXHRjb21wLVx1MDAzZWNoaWxkcmVuICA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICYjNDM7IDB4MUQgJiM0Mzsgcl92c3RhdGUpO1xuIFx0Y29tcC1cdTAwM2VwYXJlbnRfaWQgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciAmIzQzOyAweDJEICYjNDM7IHJfY2hpbGQpO1xuQEAgLTc5MCw4ICYjNDM7Nzk4LDggQEAgc3RhdGljIGludCBsZG1fcGFyc2VfZGdyMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRkZ3JwID0gXHUwMDI2dmItXHUwMDNldmJsay5kZ3JwO1xuLVx0bGRtX2dldF92c3RyIChidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGRncnAtXHUwMDNlZGlza19pZCxcbi1cdFx0c2l6ZW9mIChkZ3JwLVx1MDAzZWRpc2tfaWQpKTtcbiYjNDM7XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9uYW1lLCBidWZsZW4gLSAoMHgxOCAmIzQzOyByX25hbWUpLFxuJiM0MztcdFx0ZGdycC1cdTAwM2VkaXNrX2lkLCBzaXplb2YoZGdycC1cdTAwM2VkaXNrX2lkKSk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtODI5LDcgJiM0Mzs4MzcsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZGdyNCAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0aWYgKGxlbiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICYjNDM7IDB4MTQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfb2JqaWQsIGJ1Ziwgc2l6ZW9mIChidWYpKTtcbiYjNDM7XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9vYmppZCwgYnVmbGVuIC0gKDB4MTggJiM0Mzsgcl9vYmppZCksXG4mIzQzO1x0XHRidWYsIHNpemVvZihidWYpKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC04NjQsOCAmIzQzOzg3Myw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9kc2szIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGRpc2sgPSBcdTAwMjZ2Yi1cdTAwM2V2YmxrLmRpc2s7XG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfZGlza2lkLCBkaXNrLVx1MDAzZWFsdF9uYW1lLFxuLVx0XHRzaXplb2YgKGRpc2stXHUwMDNlYWx0X25hbWUpKTtcbiYjNDM7XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9kaXNraWQsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfZGlza2lkKSxcbiYjNDM7XHRcdGRpc2stXHUwMDNlYWx0X25hbWUsIHNpemVvZihkaXNrLVx1MDAzZWFsdF9uYW1lKSk7XG4gXHRpZiAodXVpZF9wYXJzZShidWZmZXIgJiM0MzsgMHgxOSAmIzQzOyByX25hbWUsIFx1MDAyNmRpc2stXHUwMDNlZGlza19pZCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC0xMDcyLDE2ICYjNDM7MTA4MSwxNiBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2Vfdm9sNShjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcdHZvbHUgPSBcdTAwMjZ2Yi1cdTAwM2V2YmxrLnZvbHU7XG4tXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9uYW1lLCB2b2x1LVx1MDAzZXZvbHVtZV90eXBlLFxuLVx0XHRcdHNpemVvZih2b2x1LVx1MDAzZXZvbHVtZV90eXBlKSk7XG4mIzQzO1x0bGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggJiM0Mzsgcl9uYW1lKSxcbiYjNDM7XHRcdFx0dm9sdS1cdTAwM2V2b2x1bWVfdHlwZSwgc2l6ZW9mKHZvbHUtXHUwMDNldm9sdW1lX3R5cGUpKTtcbiBcdG1lbWNweSh2b2x1LVx1MDAzZXZvbHVtZV9zdGF0ZSwgYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9kaXNhYmxlX2RyaXZlX2xldHRlcixcbiBcdFx0XHRzaXplb2Yodm9sdS1cdTAwM2V2b2x1bWVfc3RhdGUpKTtcbiBcdHZvbHUtXHUwMDNlc2l6ZSA9IGxkbV9nZXRfdm51bShidWZmZXIgJiM0MzsgMHgzRCAmIzQzOyByX2NoaWxkKTtcbiBcdHZvbHUtXHUwMDNlcGFydGl0aW9uX3R5cGUgPSBidWZmZXJbMHg0MSAmIzQzOyByX3NpemVdO1xuIFx0bWVtY3B5KHZvbHUtXHUwMDNlZ3VpZCwgYnVmZmVyICYjNDM7IDB4NDIgJiM0Mzsgcl9zaXplLCBzaXplb2Yodm9sdS1cdTAwM2VndWlkKSk7XG4gXHRpZiAoYnVmZmVyWzB4MTJdIFx1MDAyNiBWQkxLX0ZMQUdfVk9MVV9EUklWRSkge1xuLVx0XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4NTIgJiM0Mzsgcl9zaXplLCB2b2x1LVx1MDAzZWRyaXZlX2hpbnQsXG4tXHRcdFx0XHRzaXplb2Yodm9sdS1cdTAwM2Vkcml2ZV9oaW50KSk7XG4mIzQzO1x0XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4NTIgJiM0Mzsgcl9zaXplLCBidWZsZW4gLSAoMHg1MiAmIzQzOyByX3NpemUpLFxuJiM0MztcdFx0XHRcdHZvbHUtXHUwMDNlZHJpdmVfaGludCwgc2l6ZW9mKHZvbHUtXHUwMDNlZHJpdmVfaGludCkpO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTExMTUsNyAmIzQzOzExMjQsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdmJsayAoY29uc3QgdTggKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0dmItXHUwMDNlZmxhZ3MgID0gYnVmWzB4MTJdO1xuIFx0dmItXHUwMDNldHlwZSAgID0gYnVmWzB4MTNdO1xuIFx0dmItXHUwMDNlb2JqX2lkID0gbGRtX2dldF92bnVtIChidWYgJiM0MzsgMHgxOCk7XG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZiYjNDM7MHgxOCYjNDM7cl9vYmppZCwgdmItXHUwMDNlbmFtZSwgc2l6ZW9mICh2Yi1cdTAwM2VuYW1lKSk7XG4mIzQzO1x0bGRtX2dldF92c3RyKGJ1ZiAmIzQzOyAweDE4ICYjNDM7IHJfb2JqaWQsIGxlbiAtICgweDE4ICYjNDM7IHJfb2JqaWQpLFxuJiM0MztcdFx0dmItXHUwMDNlbmFtZSwgc2l6ZW9mKHZiLVx1MDAzZW5hbWUpKTtcbiBcbiBcdHN3aXRjaCAodmItXHUwMDNldHlwZSkge1xuIFx0XHRjYXNlIFZCTEtfQ01QMzogIHJlc3VsdCA9IGxkbV9wYXJzZV9jbXAzIChidWYsIGxlbiwgdmIpOyBicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQVJUSVRJT05fQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TERNX1BBUlRJVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xkbV9nZXRfdnN0ciYjMzQ7LAogICAgJiMzNDtsZG1fcGFyc2VfdmJsayYjMzQ7LAogICAgJiMzNDtsZG1fcGFyc2VfY21wMyYjMzQ7LAogICAgJiMzNDtsZG1fcGFyc2VfZGdyMyYjMzQ7LAogICAgJiMzNDtsZG1fcGFyc2VfZGdyNCYjMzQ7LAogICAgJiMzNDtsZG1fcGFyc2VfZHNrMyYjMzQ7LAogICAgJiMzNDtsZG1fcGFyc2Vfdm9sNSYjMzQ7LAogICAgJiMzNDtsZG1fcGFydGl0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaW5kb3dzIExvZ2ljYWwgRGlzayBNYW5hZ2VyIChMRE0pIHBhcnRpdGlvbiBwYXJzZXIgaW4gYmxvY2svcGFydGl0aW9ucy9sZG0uYyB0byBhZGQgYm91bmRzIGNoZWNraW5nIHdoZW4gcmVhZGluZyBsZW5ndGgtcHJlZml4ZWQgc3RyaW5ncywgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBibG9jayBkZXZpY2UgcGFydGl0aW9uIHNjYW5uaW5nIChlLmcuLCBsb29wIGRldmljZXMpIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgdHJ1bmNhdGlvbnMsIG9yIHVuZXhwZWN0ZWQgcGFyc2VyIGJlaGF2aW9ycyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmMGRkNDNmZDcyM2Q5ZjI0OWJkZjdhOTAzMDMwNDEyZjBhZDY1YmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDIxOjE1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9sZG0uYyBiL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmMKaW5kZXggYzBiZGNhZTU4YTNlZS4uNTQ2OGUwMzhhMDlmNCAxMDA2NDQKLS0tIGEvYmxvY2svcGFydGl0aW9ucy9sZG0uYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL2xkbS5jCkBAIC02NzMsNiAmIzQzOzY3Myw3IEBAIHN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spCiAvKioKICAqIGxkbV9nZXRfdnN0ciAtIFJlYWQgYSBsZW5ndGgtcHJlZml4ZWQgc3RyaW5nIGludG8gYSBidWZmZXIKICAqIEBibG9jazogICBQb2ludGVyIHRvIHRoZSBsZW5ndGggbWFya2VyCiYjNDM7ICogQGJsb2NrbGVuOiBOdW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IEBibG9jawogICogQGJ1ZmZlcjogIExvY2F0aW9uIHRvIGNvcHkgc3RyaW5nIHRvCiAgKiBAYnVmbGVuOiAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgogICoKQEAgLTY4MCwyMCAmIzQzOzY4MSwyNyBAQCBzdGF0aWMgdTY0IGxkbV9nZXRfdm51bSAoY29uc3QgdTggKmJsb2NrKQogICogdGhleSBhcmUgcHJlZml4ZWQgYnkgYSBvbmUgYnl0ZSBsZW5ndGggbWFya2VyLiAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgb25lIG9mCiAgKiB0aGVzZSBzdHJpbmdzIGludG8gYSBidWZmZXIuCiAgKgotICogTi5CLiAgVGhpcyBmdW5jdGlvbiBET0VTIE5PVCBwZXJmb3JtIGFueSByYW5nZSBjaGVja2luZyBvbiB0aGUgaW5wdXQuCi0gKiAgICAgICBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgdGhlIG91dHB1dCB3aWxsIGJlIHRydW5jYXRlZC4KJiM0MzsgKiBOLkIuICBUaGUgc3RyaW5nIGlzIGNsYW1wZWQgdG8gYm90aCBAYmxvY2tsZW4gYW5kIEBidWZsZW47IGlmIGVpdGhlcgomIzQzOyAqICAgICAgIGlzIHRvbyBzbWFsbCB0aGUgb3V0cHV0IHdpbGwgYmUgdHJ1bmNhdGVkLgogICoKICAqIFJldHVybjogIDAsIEVycm9yIGFuZCBAYnVmZmVyIGNvbnRlbnRzIGFyZSB1bmRlZmluZWQKICAqICAgICAgICAgIG4sIFN0cmluZyBsZW5ndGggaW4gY2hhcmFjdGVycyAoZXhjbHVkaW5nIE5VTEwpCiAgKiAgICAgICAgICBidWZsZW4tMSwgU3RyaW5nIHdhcyB0cnVuY2F0ZWQuCiAgKi8KLXN0YXRpYyBpbnQgbGRtX2dldF92c3RyIChjb25zdCB1OCAqYmxvY2ssIHU4ICpidWZmZXIsIGludCBidWZsZW4pCiYjNDM7c3RhdGljIGludCBsZG1fZ2V0X3ZzdHIoY29uc3QgdTggKmJsb2NrLCBpbnQgYmxvY2tsZW4sIHU4ICpidWZmZXIsIGludCBidWZsZW4pCiB7CiAJaW50IGxlbmd0aDsKIAogCUJVR19PTiAoIWJsb2NrIHx8ICFidWZmZXIpOwogCiYjNDM7CWlmIChibG9ja2xlbiAmbHQ7IDEpIHsKJiM0MzsJCWJ1ZmZlclswXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiAJbGVuZ3RoID0gYmxvY2tbMF07CiYjNDM7CWlmIChsZW5ndGggJmd0OyBibG9ja2xlbiAtIDEpCiYjNDM7CQlsZW5ndGggPSBibG9ja2xlbiAtIDE7CiAJaWYgKGxlbmd0aCAmZ3Q7PSBidWZsZW4pIHsKIAkJbGRtX2Vycm9yICgmIzM0O1RydW5jYXRpbmcgc3RyaW5nICVkIC0mZ3Q7ICVkLiYjMzQ7LCBsZW5ndGgsIGJ1Zmxlbik7CiAJCWxlbmd0aCA9IGJ1ZmxlbiAtIDE7CkBAIC03NDQsOCAmIzQzOzc1Miw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCiAJCXJldHVybiBmYWxzZTsKIAogCWNvbXAgPSAmYW1wO3ZiLSZndDt2YmxrLmNvbXA7Ci0JbGRtX2dldF92c3RyIChidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGNvbXAtJmd0O3N0YXRlLAotCQlzaXplb2YgKGNvbXAtJmd0O3N0YXRlKSk7CiYjNDM7CWxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfbmFtZSksCiYjNDM7CQljb21wLSZndDtzdGF0ZSwgc2l6ZW9mKGNvbXAtJmd0O3N0YXRlKSk7CiAJY29tcC0mZ3Q7dHlwZSAgICAgID0gYnVmZmVyWzB4MTggJiM0Mzsgcl92c3RhdGVdOwogCWNvbXAtJmd0O2NoaWxkcmVuICA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICYjNDM7IDB4MUQgJiM0Mzsgcl92c3RhdGUpOwogCWNvbXAtJmd0O3BhcmVudF9pZCA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICYjNDM7IDB4MkQgJiM0Mzsgcl9jaGlsZCk7CkBAIC03OTAsOCAmIzQzOzc5OCw4IEBAIHN0YXRpYyBpbnQgbGRtX3BhcnNlX2RncjMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKIAkJcmV0dXJuIGZhbHNlOwogCiAJZGdycCA9ICZhbXA7dmItJmd0O3ZibGsuZGdycDsKLQlsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgZGdycC0mZ3Q7ZGlza19pZCwKLQkJc2l6ZW9mIChkZ3JwLSZndDtkaXNrX2lkKSk7CiYjNDM7CWxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfbmFtZSksCiYjNDM7CQlkZ3JwLSZndDtkaXNrX2lkLCBzaXplb2YoZGdycC0mZ3Q7ZGlza19pZCkpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC04MjksNyAmIzQzOzgzNyw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9kZ3I0IChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCiAJaWYgKGxlbiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICYjNDM7IDB4MTQpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfb2JqaWQsIGJ1Ziwgc2l6ZW9mIChidWYpKTsKJiM0MzsJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfb2JqaWQsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfb2JqaWQpLAomIzQzOwkJYnVmLCBzaXplb2YoYnVmKSk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTg2NCw4ICYjNDM7ODczLDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX2RzazMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKIAkJcmV0dXJuIGZhbHNlOwogCiAJZGlzayA9ICZhbXA7dmItJmd0O3ZibGsuZGlzazsKLQlsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfZGlza2lkLCBkaXNrLSZndDthbHRfbmFtZSwKLQkJc2l6ZW9mIChkaXNrLSZndDthbHRfbmFtZSkpOwomIzQzOwlsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9kaXNraWQsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfZGlza2lkKSwKJiM0MzsJCWRpc2stJmd0O2FsdF9uYW1lLCBzaXplb2YoZGlzay0mZ3Q7YWx0X25hbWUpKTsKIAlpZiAodXVpZF9wYXJzZShidWZmZXIgJiM0MzsgMHgxOSAmIzQzOyByX25hbWUsICZhbXA7ZGlzay0mZ3Q7ZGlza19pZCkpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMTA3MiwxNiAmIzQzOzEwODEsMTYgQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZvbDUoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCXZvbHUgPSAmYW1wO3ZiLSZndDt2YmxrLnZvbHU7Ci0JbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgdm9sdS0mZ3Q7dm9sdW1lX3R5cGUsCi0JCQlzaXplb2Yodm9sdS0mZ3Q7dm9sdW1lX3R5cGUpKTsKJiM0MzsJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggJiM0Mzsgcl9uYW1lKSwKJiM0MzsJCQl2b2x1LSZndDt2b2x1bWVfdHlwZSwgc2l6ZW9mKHZvbHUtJmd0O3ZvbHVtZV90eXBlKSk7CiAJbWVtY3B5KHZvbHUtJmd0O3ZvbHVtZV9zdGF0ZSwgYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9kaXNhYmxlX2RyaXZlX2xldHRlciwKIAkJCXNpemVvZih2b2x1LSZndDt2b2x1bWVfc3RhdGUpKTsKIAl2b2x1LSZndDtzaXplID0gbGRtX2dldF92bnVtKGJ1ZmZlciAmIzQzOyAweDNEICYjNDM7IHJfY2hpbGQpOwogCXZvbHUtJmd0O3BhcnRpdGlvbl90eXBlID0gYnVmZmVyWzB4NDEgJiM0Mzsgcl9zaXplXTsKIAltZW1jcHkodm9sdS0mZ3Q7Z3VpZCwgYnVmZmVyICYjNDM7IDB4NDIgJiM0Mzsgcl9zaXplLCBzaXplb2Yodm9sdS0mZ3Q7Z3VpZCkpOwogCWlmIChidWZmZXJbMHgxMl0gJmFtcDsgVkJMS19GTEFHX1ZPTFVfRFJJVkUpIHsKLQkJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDUyICYjNDM7IHJfc2l6ZSwgdm9sdS0mZ3Q7ZHJpdmVfaGludCwKLQkJCQlzaXplb2Yodm9sdS0mZ3Q7ZHJpdmVfaGludCkpOwomIzQzOwkJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDUyICYjNDM7IHJfc2l6ZSwgYnVmbGVuIC0gKDB4NTIgJiM0Mzsgcl9zaXplKSwKJiM0MzsJCQkJdm9sdS0mZ3Q7ZHJpdmVfaGludCwgc2l6ZW9mKHZvbHUtJmd0O2RyaXZlX2hpbnQpKTsKIAl9CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMTE1LDcgJiM0MzsxMTI0LDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZibGsgKGNvbnN0IHU4ICpidWYsIGludCBsZW4sIHN0cnVjdCB2YmxrICp2YikKIAl2Yi0mZ3Q7ZmxhZ3MgID0gYnVmWzB4MTJdOwogCXZiLSZndDt0eXBlICAgPSBidWZbMHgxM107CiAJdmItJmd0O29ial9pZCA9IGxkbV9nZXRfdm51bSAoYnVmICYjNDM7IDB4MTgpOwotCWxkbV9nZXRfdnN0ciAoYnVmJiM0MzsweDE4JiM0MztyX29iamlkLCB2Yi0mZ3Q7bmFtZSwgc2l6ZW9mICh2Yi0mZ3Q7bmFtZSkpOwomIzQzOwlsZG1fZ2V0X3ZzdHIoYnVmICYjNDM7IDB4MTggJiM0Mzsgcl9vYmppZCwgbGVuIC0gKDB4MTggJiM0Mzsgcl9vYmppZCksCiYjNDM7CQl2Yi0mZ3Q7bmFtZSwgc2l6ZW9mKHZiLSZndDtuYW1lKSk7CiAKIAlzd2l0Y2ggKHZiLSZndDt0eXBlKSB7CiAJCWNhc2UgVkJMS19DTVAzOiAgcmVzdWx0ID0gbGRtX3BhcnNlX2NtcDMgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjQ2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBMRE0gVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBmdXp6aW5nIG1ha2VzIHNlbnNlIGhlcmUsIGFuZCBob3cgd2UmIzM5O2QgZ28gYWJvdXQgaXQuIFRoZSBjaGFuZ2UgaXMgaW4gYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyBwYXJ0aXRpb24gdGFibGUgcGFyc2luZywgc28gd2UmIzM5O3JlIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBmaWxlIHN5c3RlbSBkcml2ZXIgb3IgZGlzayB1dGlsaXR5LiBUaGF0JiMzOTtzIGFsd2F5cyBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4KClRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiB0aGUgYGxkbV9nZXRfdnN0cmAgZnVuY3Rpb24sIGFkZGluZyBhIGBibG9ja2xlbmAgYXJndW1lbnQgYW5kIGJvdW5kIGNoZWNrcy4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIGl0IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaGFuZGxpbmcgTERNIChMb2dpY2FsIERpc2sgTWFuYWdlciwgV2luZG93cyBEeW5hbWljIERpc2tzKSBwYXJ0aXRpb24gdGFibGVzIGFuZCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBvbiBlbmhhbmNpbmcgbWVtb3J5IHNhZmV0eSBkdXJpbmcgcGFydGl0aW9uIHRhYmxlIHBhcnNpbmcuIEFsbCB0aGUgb3RoZXIgZnVuY3Rpb25zLCBgbGRtX3BhcnNlX2NtcDNgLCBgbGRtX3BhcnNlX2RncjNgLCBgbGRtX3BhcnNlX2RncjRgLCBgbGRtX3BhcnNlX2RzazNgLCBgbGRtX3BhcnNlX3ZvbDVgLCBhbmQgYGxkbV9wYXJzZV92YmxrYCwgYXJlIHVwZGF0ZWQgdG8gY2FsbCB0aGlzIG1vZGlmaWVkIGBsZG1fZ2V0X3ZzdHJgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgbGRtX2dldF92c3RyYCBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUsIGFuZCBpZiB3ZSYjMzk7cmUgc3VjY2Vzc2Z1bCwgaXQgd2lsbCBiZS4KCk5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgIHRvIHNlZSBob3cgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS4gSSYjMzk7bGwgZWl0aGVyIHVzZSBgZ3JlcHBlcmAgb3IganVzdCByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCBhbmQgZmluZCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIHBhcnRpdGlvbiBwYXJzaW5nIGlzIGludm9rZWQgdG8gcHJvcGVybHkgc2NvcGUgdGhlIGZ1enppbmcuIE9uY2UgSSB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9ucywgSSYjMzk7bGwgYmUgYWJsZSB0byBmb2N1cyBvbiB3aGF0IHRvIGZ1enogYW5kIGhvdyBiZXN0IHRvIGRvIGl0LiBUaGUgdGFyZ2V0IGlzIGNsZWFyOiB0aGlzIGBsZG1fZ2V0X3ZzdHJgIGZ1bmN0aW9uIGlzIHRoZSBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMRE1fUEFSVElUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL0tjb25maWc9MTU4PWNvbmZpZyBVTklYV0FSRV9ESVNLTEFCRUxcbi0tXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMTc3LVxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnOjE3ODpjb25maWcgTERNX1BBUlRJVElPTlxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTE3OS1cdGJvb2wgXCYjMzQ7V2luZG93cyBMb2dpY2FsIERpc2sgTWFuYWdlciAoRHluYW1pYyBEaXNrKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnPTIwMz1jb25maWcgTERNX0RFQlVHXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMjA0LVx0Ym9vbCBcJiMzNDtXaW5kb3dzIExETSBleHRyYSBsb2dnaW5nXCYjMzQ7XG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWc6MjA1Olx0ZGVwZW5kcyBvbiBMRE1fUEFSVElUSU9OXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMjA2LVx0aGVscFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGU9MTI9b2JqLSQoQ09ORklHX01BQ19QQVJUSVRJT04pICYjNDM7PSBtYWMub1xuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTERNX1BBUlRJVElPTikgJiM0Mzs9IGxkbS5vXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlLTE0LW9iai0kKENPTkZJR19NU0RPU19QQVJUSVRJT04pICYjNDM7PSBtc2Rvcy5vXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MTc9c3RhdGljIGludCAoKmNvbnN0IGNoZWNrX3BhcnRbXSkoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICopID0ge1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTU2LSNlbmRpZlxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6NTc6I2lmZGVmIENPTkZJR19MRE1fUEFSVElUSU9OXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy01OC1cdGxkbV9wYXJ0aXRpb24sXHRcdC8qIHRoaXMgbXVzdCBjb21lIGJlZm9yZSBtc2RvcyAqL1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9NDkwPXN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV9wYXJ0aXRpb25fdGFibGUoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUxMC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIDQ7IGkmIzQzOyYjNDM7LCBwJiM0MzsmIzQzOylcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTExOlx0XHRpZiAocC1cdTAwM2VzeXNfaW5kID09IExETV9QQVJUSVRJT04pIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTEyLVx0XHRcdHJlc3VsdCA9IHRydWU7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uaD0yMT1zdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnM7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uaC04MC1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmg6ODE6I2RlZmluZSBMRE1fUEFSVElUSU9OXHRcdDB4NDJcdFx0LyogRm9ybWVybHkgU0ZTIChMYW5kaXMpLiAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uaC04Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODgyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBDT05GSUdfTERNX1BBUlRJVElPTioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBDT05GSUdfTERNX1BBUlRJVElPTmAgZGVwZW5kcyBvbi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoZXkmIzM5O3JlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgZGVzY3JpYmluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBibG9jay9wYXJ0aXRpb25zL0tjb25maWdgIGFuZCB6b29tIGluIGFyb3VuZCBsaW5lIDE3OC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBzcG90IHRvIGZpbmQgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhbmQgdGhlaXIgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgbGlzdCBvZiAmIzM0O2RlcGVuZHMgb24mIzM0OyBzdGF0ZW1lbnRzIG9yIG90aGVyIHJlbGV2YW50IGxvZ2ljIHRoYXQgZGljdGF0ZXMgd2hlbiB0aGlzIG9wdGlvbiBpcyBhdmFpbGFibGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZSwgYW5kIHRoZW4gSSYjMzk7bGwgZm9ybXVsYXRlIGEgY29uY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XHQgIExpbnV4IGJveCB2aWEgYSByZW1vdmFibGUgbWVkaXVtIGxpa2UgbWFnbmV0by1vcHRpY2FsLCBaSVAgb3JcbiAxNzE6XHRcdCAgcmVtb3ZhYmxlIElERSBkcml2ZXMuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgYSBnb29kIHBvcnRhYmxlIHdheSB0b1xuIDE3MjpcdFx0ICB0cmFuc3BvcnQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGJldHdlZW4gdW5peGVzIChhbmQgZXZlbiBvdGhlclxuIDE3MzpcdFx0ICBvcGVyYXRpbmcgc3lzdGVtcykgaXMgZ2l2ZW4gYnkgdGhlIHRhciBwcm9ncmFtIChcJiMzNDttYW4gdGFyXCYjMzQ7IG9yXG4gMTc0Olx0XHQgIHByZWZlcmFibHkgXCYjMzQ7aW5mbyB0YXJcJiMzNDspLlxuIDE3NTpcdFxuIDE3NjpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCBhbGwgdGhpcyBpcyBhYm91dCwgc2F5IE4uXG4gMTc3Olx0XG4gMTc4Olx0Y29uZmlnIExETV9QQVJUSVRJT05cbiAxNzk6XHRcdGJvb2wgXCYjMzQ7V2luZG93cyBMb2dpY2FsIERpc2sgTWFuYWdlciAoRHluYW1pYyBEaXNrKSBzdXBwb3J0XCYjMzQ7XG4gMTgwOlx0XHRkZXBlbmRzIG9uIFBBUlRJVElPTl9BRFZBTkNFRFxuIDE4MTpcdFx0aGVscFxuIDE4MjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBoYXJkIGRpc2tzIHVuZGVyIExpbnV4IHdoaWNoXG4gMTgzOlx0XHQgIHdlcmUgcGFydGl0aW9uZWQgdXNpbmcgV2luZG93cyAyMDAwJiMzOTtzL1hQJiMzOTtzIG9yIFZpc3RhJiMzOTtzIExvZ2ljYWwgRGlza1xuIDE4NDpcdFx0ICBNYW5hZ2VyLiAgVGhleSBhcmUgYWxzbyBrbm93biBhcyBcJiMzNDtEeW5hbWljIERpc2tzXCYjMzQ7LlxuIDE4NTpcdFxuIDE4NjpcdFx0ICBOb3RlIHRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgRHluYW1pYyBEaXNrcyB3aXRoIGEgcHJvdGVjdGl2ZSBNQlJcbiAxODc6XHRcdCAgbGFiZWwsIGkuZS4gRE9TIHBhcnRpdGlvbiB0YWJsZS4gIEl0IGRvZXMgbm90IHN1cHBvcnQgR1BUIGxhYmVsbGVkXG4gMTg4Olx0XHQgIER5bmFtaWMgRGlza3MgeWV0IGFzIGNhbiBiZSBjcmVhdGVkIHdpdGggVmlzdGEuXG4gMTg5Olx0XG4gMTkwOlx0XHQgIFdpbmRvd3MgMjAwMCBpbnRyb2R1Y2VkIHRoZSBjb25jZXB0IG9mIER5bmFtaWMgRGlza3MgdG8gZ2V0IGFyb3VuZFxuIDE5MTpcdFx0ICB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIFBDJiMzOTtzIHBhcnRpdGlvbmluZyBzY2hlbWUuICBUaGUgTG9naWNhbCBEaXNrXG4gMTkyOlx0XHQgIE1hbmFnZXIgYWxsb3dzIHRoZSB1c2VyIHRvIHJlcGFydGl0aW9uIGEgZGlzayBhbmQgY3JlYXRlIHNwYW5uZWQsXG4gMTkzOlx0XHQgIG1pcnJvcmVkLCBzdHJpcGVkIG9yIFJBSUQgdm9sdW1lcywgYWxsIHdpdGhvdXQgdGhlIG5lZWQgZm9yXG4gMTk0Olx0XHQgIHJlYm9vdGluZy5cbiAxOTU6XHRcbiAxOTY6XHRcdCAgTm9ybWFsIHBhcnRpdGlvbnMgYXJlIG5vdyBjYWxsZWQgQmFzaWMgRGlza3MgdW5kZXIgV2luZG93cyAyMDAwLCBYUCxcbiAxOTc6XHRcdCAgYW5kIFZpc3RhLlxuIDE5ODpcdFxuIDE5OTpcdFx0ICBGb3IgYSBmdWxsZXIgZGVzY3JpcHRpb24gcmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbGRtLnJzdFx1MDAzZS5cbiAyMDA6XHRcbiAyMDE6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyMDI6XHRcbiAyMDM6XHRjb25maWcgTERNX0RFQlVHXG4gMjA0Olx0XHRib29sIFwmIzM0O1dpbmRvd3MgTERNIGV4dHJhIGxvZ2dpbmdcJiMzNDtcbiAyMDU6XHRcdGRlcGVuZHMgb24gTERNX1BBUlRJVElPTlxuIDIwNjpcdFx0aGVscFxuIDIwNzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIExETSB0byBsb2cgdmVyYm9zZWx5LiAgVGhpcyBjb3VsZCBiZVxuIDIwODpcdFx0ICBoZWxwZnVsIGlmIHRoZSBkcml2ZXIgZG9lc24mIzM5O3Qgd29yayBhcyBleHBlY3RlZCBhbmQgeW91JiMzOTtkIGxpa2UgdG9cbiAyMDk6XHRcdCAgcmVwb3J0IGEgYnVnLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3OTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhcnRpdGlvbiBQYXJzaW5nIGluIExpbnV4KioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGBQQVJUSVRJT05fQURWQU5DRURgIGZlYXR1cmUgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIHBhcnRpdGlvbiBwYXJzaW5nIG1lY2hhbmlzbXMgaW4gTGludXguIEkmIzM5O2xsIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBob3cgdGhlIHBhcnNpbmcgaXMgYWN0dWFsbHkgKnRyaWdnZXJlZCouIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgc3lzdGVtIGtpY2tzIGl0IG9mZiB3aGVuIGEgYmxvY2sgZGV2aWNlLCBsaWtlIGEgbG9vcCBkZXZpY2Ugb3IgYSB2aXJ0aW9fYmxrIGRldmljZSwgaXMgcHJvYmVkIG9yIHJlc2Nhbm5lZC4gVGhlIGBCTEtSUlBBUlRgIGlvY3RsIG9yIG9wZW5pbmcgc29tZXRoaW5nIGxpa2UgYC9kZXYvbG9vcFhgIGFmdGVyIHRoZSBiYWNraW5nIGZpbGUgaXMgc2V0IGlzIHdoYXQgc2VlbXMgdG8gZG8gdGhlIHRyaWNrLgoKVGhlIG5pY2UgdGhpbmcgaXMgdGhhdCBTeXprYWxsZXIsIGEgdG9vbCBJJiMzOTttIHZlcnkgZmFtaWxpYXIgd2l0aCBhbmQgcmVseSBvbiBpbiBteSBvd24gd29yaywgYWxyZWFkeSBoYXMgcm91dGluZXMgdG8gdGVzdCBibG9jayBkZXZpY2VzLCBsb29wIGRldmljZXMsIGFuZCBvZiBjb3Vyc2UsIHRoZSBwYXJ0aXRpb24gcGFyc2luZyBpdHNlbGYuIFNvLCBJIHNob3VsZCBiZSBhYmxlIHRvIHJlbHkgb24gaXRzIHJlc3VsdHMuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYCBmaWxlLiBBY2NvcmRpbmcgdG8gdGhlIGRhdGEgSSBoYXZlLCB0aGUgcGFydGl0aW9uIHBhcnNpbmcgbG9naWMgd2l0aGluIHRoaXMgZmlsZSBpcyBhbHJlYWR5IGZ1bGx5IHJlYWNoYWJsZSBpbiBvdXIgc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgdGVzdGluZyBzZXR1cC4gSSYjMzk7bGwgZm9jdXMgbXkgaW52ZXN0aWdhdGlvbiB0aGVyZS4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGNoZWNrIHRoZSBjYWxsZXJzIGFuZCBzeW1ib2xzIGluIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCByZWxhdGlvbnNoaXBzIG9mIHRoZSBwYXJ0aXRpb25pbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsZG1fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9sZG0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzQ1IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIyLS8qXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjIzOiAqIGxkbV9kZWJ1Zy9pbmZvL2Vycm9yL2NyaXQgLSBPdXRwdXQgYW4gZXJyb3IgbWVzc2FnZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNC0gKiBAZjogICAgQSBwcmludGYgZm9ybWF0IHN0cmluZyBjb250YWluaW5nIHRoZSBtZXNzYWdlXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNi0gKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyNzogKiBsZG1fZGVidWcoKSB3cml0ZXMgYSBERUJVRyBsZXZlbCBtZXNzYWdlIHRvIHRoZSBzeXNsb2cgYnV0IG9ubHkgaWYgdGhlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI4LSAqIGRyaXZlciB3YXMgY29tcGlsZWQgd2l0aCBkZWJ1ZyBlbmFibGVkLiBPdGhlcndpc2UsIHRoZSBjYWxsIHR1cm5zIGludG8gYSBOT1AuXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zMC0jaWZuZGVmIENPTkZJR19MRE1fREVCVUdcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzE6I2RlZmluZSBsZG1fZGVidWcoLi4uKVx0ZG8ge30gd2hpbGUgKDApXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMyLSNlbHNlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjMzOiNkZWZpbmUgbGRtX2RlYnVnKGYsIGEuLi4pIF9sZG1fcHJpbnRrIChLRVJOX0RFQlVHLCBfX2Z1bmNfXywgZiwgIyNhKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNC0jZW5kaWZcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzUtXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM2OiNkZWZpbmUgbGRtX2NyaXQoZiwgYS4uLikgIF9sZG1fcHJpbnRrIChLRVJOX0NSSVQsICBfX2Z1bmNfXywgZiwgIyNhKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNzojZGVmaW5lIGxkbV9lcnJvcihmLCBhLi4uKSBfbGRtX3ByaW50ayAoS0VSTl9FUlIsICAgX19mdW5jX18sIGYsICMjYSlcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzg6I2RlZmluZSBsZG1faW5mbyhmLCBhLi4uKSAgX2xkbV9wcmludGsgKEtFUk5fSU5GTywgIF9fZnVuY19fLCBmLCAjI2EpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM5LVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz00MD1zdGF0aWMgX19wcmludGYoMywgNClcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDE6dm9pZCBfbGRtX3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00Mi17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01Ni0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTc6ICogbGRtX3BhcnNlX3ByaXZoZWFkIC0gUmVhZCB0aGUgTERNIERhdGFiYXNlIFBSSVZIRUFEIHN0cnVjdHVyZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01OC0gKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBQUklWSEVBRCBzdHJ1Y3R1cmUgbG9hZGVkIGZyb20gdGhlIGRldmljZVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjYtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjY3OnN0YXRpYyBib29sIGxkbV9wYXJzZV9wcml2aGVhZChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHByaXZoZWFkICpwaClcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjgte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzItXHRpZiAoTUFHSUNfUFJJVkhFQUQgIT0gZ2V0X3VuYWxpZ25lZF9iZTY0KGRhdGEpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjczOlx0XHRsZG1fZXJyb3IoXCYjMzQ7Q2Fubm90IGZpbmQgUFJJVkhFQUQgc3RydWN0dXJlLiBMRE0gZGF0YWJhc2UgaXNcJiMzNDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzQtXHRcdFx0XCYjMzQ7IGNvcnJ1cHQuIEFib3J0aW5nLlwmIzM0Oyk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04Ni1cdGlmICghaXNfdmlzdGEgXHUwMDI2XHUwMDI2IChwaC1cdTAwM2V2ZXJfbWFqb3IgIT0gMiB8fCBwaC1cdTAwM2V2ZXJfbWlub3IgIT0gMTEpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg3Olx0XHRsZG1fZXJyb3IoXCYjMzQ7RXhwZWN0ZWQgUFJJVkhFQUQgdmVyc2lvbiAyLjExIG9yIDIuMTIsIGdvdCAlZC4lZC5cJiMzNDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODgtXHRcdFx0XCYjMzQ7IEFib3J0aW5nLlwmIzM0OywgcGgtXHUwMDNldmVyX21ham9yLCBwaC1cdTAwM2V2ZXJfbWlub3IpO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTAtXHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjkxOlx0bGRtX2RlYnVnKFwmIzM0O1BSSVZIRUFEIHZlcnNpb24gJWQuJWQgKFdpbmRvd3MgJXMpLlwmIzM0OywgcGgtXHUwMDNldmVyX21ham9yLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05Mi1cdFx0XHRwaC1cdTAwM2V2ZXJfbWlub3IsIGlzX3Zpc3RhID8gXCYjMzQ7VmlzdGFcJiMzNDsgOiBcJiMzNDsyMDAwL1hQXCYjMzQ7KTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk0LVx0XHQvKiBXYXJuIHRoZSB1c2VyIGFuZCBjb250aW51ZSwgY2FyZWZ1bGx5LiAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NTpcdFx0bGRtX2luZm8oXCYjMzQ7RGF0YWJhc2UgaXMgbm9ybWFsbHkgJXUgYnl0ZXMsIGl0IGNsYWltcyB0byBcJiMzNDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTYtXHRcdFx0XCYjMzQ7YmUgJWxsdSBieXRlcy5cJiMzNDssIExETV9EQl9TSVpFLFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAwLVx0XHRcdHBoLVx1MDAzZWxvZ2ljYWxfZGlza19zaXplIFx1MDAzZSBwaC1cdTAwM2Vjb25maWdfc3RhcnQpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMTpcdFx0bGRtX2Vycm9yKFwmIzM0O1BSSVZIRUFEIGRpc2sgc2l6ZSBkb2VzbiYjMzk7dCBtYXRjaCByZWFsIGRpc2sgc2l6ZVwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTA0LVx0aWYgKHV1aWRfcGFyc2UoZGF0YSAmIzQzOyAweDAwMzAsIFx1MDAyNnBoLVx1MDAzZWRpc2tfaWQpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwNTpcdFx0bGRtX2Vycm9yKFwmIzM0O1BSSVZIRUFEIGNvbnRhaW5zIGFuIGludmFsaWQgR1VJRC5cJiMzNDspO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDYtXHRcdHJldHVybiBmYWxzZTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTA3LVx0fVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDg6XHRsZG1fZGVidWcoXCYjMzQ7UGFyc2VkIFBSSVZIRUFEIHN1Y2Nlc3NmdWxseS5cJiMzNDspO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDktXHRyZXR1cm4gdHJ1ZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMi0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzOiAqIGxkbV9wYXJzZV90b2NibG9jayAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE0LSAqIEBkYXRhOiAgUmF3IGRhdGFiYXNlIFRPQ0JMT0NLIHN0cnVjdHVyZSBsb2FkZWQgZnJvbSB0aGUgZGV2aWNlXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMjUtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEyNjpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdG9jYmxvY2sgKGNvbnN0IHU4ICpkYXRhLCBzdHJ1Y3QgdG9jYmxvY2sgKnRvYylcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTI3LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEzMC1cdGlmIChNQUdJQ19UT0NCTE9DSyAhPSBnZXRfdW5hbGlnbmVkX2JlNjQoZGF0YSkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTMxOlx0XHRsZG1fY3JpdCAoXCYjMzQ7Q2Fubm90IGZpbmQgVE9DQkxPQ0ssIGRhdGFiYXNlIG1heSBiZSBjb3JydXB0LlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEzMi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTM5LVx0XHRcdHNpemVvZiAodG9jLVx1MDAzZWJpdG1hcDFfbmFtZSkpICE9IDApIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTQwOlx0XHRsZG1fY3JpdCAoXCYjMzQ7VE9DQkxPQ0smIzM5O3MgZmlyc3QgYml0bWFwIGlzICYjMzk7JXMmIzM5Oywgc2hvdWxkIGJlICYjMzk7JXMmIzM5Oy5cJiMzNDssXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE0MS1cdFx0XHRcdFRPQ19CSVRNQVAxLCB0b2MtXHUwMDNlYml0bWFwMV9uYW1lKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE0OC1cdFx0XHRzaXplb2YgKHRvYy1cdTAwM2ViaXRtYXAyX25hbWUpKSAhPSAwKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE0OTpcdFx0bGRtX2NyaXQgKFwmIzM0O1RPQ0JMT0NLJiMzOTtzIHNlY29uZCBiaXRtYXAgaXMgJiMzOTslcyYjMzk7LCBzaG91bGQgYmUgJiMzOTslcyYjMzk7LlwmIzM0OyxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTUwLVx0XHRcdFx0VE9DX0JJVE1BUDIsIHRvYy1cdTAwM2ViaXRtYXAyX25hbWUpO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTUyLVx0fVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNTM6XHRsZG1fZGVidWcgKFwmIzM0O1BhcnNlZCBUT0NCTE9DSyBzdWNjZXNzZnVsbHkuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTU0LVx0cmV0dXJuIHRydWU7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNTctLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE1ODogKiBsZG1fcGFyc2Vfdm1kYiAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBWTURCIHN0cnVjdHVyZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNTktICogQGRhdGE6ICBSYXcgZGF0YWJhc2UgVk1EQiBzdHJ1Y3R1cmUgbG9hZGVkIGZyb20gdGhlIGRldmljZVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTY5LSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNzA6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZtZGIgKGNvbnN0IHU4ICpkYXRhLCBzdHJ1Y3Qgdm1kYiAqdm0pXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE3MS17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNzQtXHRpZiAoTUFHSUNfVk1EQiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoZGF0YSkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTc1Olx0XHRsZG1fY3JpdCAoXCYjMzQ7Q2Fubm90IGZpbmQgdGhlIFZNREIsIGRhdGFiYXNlIG1heSBiZSBjb3JydXB0LlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE3Ni1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTgxLVx0aWYgKCh2bS1cdTAwM2V2ZXJfbWFqb3IgIT0gNCkgfHwgKHZtLVx1MDAzZXZlcl9taW5vciAhPSAxMCkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTgyOlx0XHRsZG1fZXJyb3IgKFwmIzM0O0V4cGVjdGVkIFZNREIgdmVyc2lvbiAlZC4lZCwgZ290ICVkLiVkLiBcJiMzNDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTgzLVx0XHRcdFwmIzM0O0Fib3J0aW5nLlwmIzM0OywgNCwgMTAsIHZtLVx1MDAzZXZlcl9tYWpvciwgdm0tXHUwMDNldmVyX21pbm9yKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE4OC1cdGlmICh2bS1cdTAwM2V2YmxrX3NpemUgPT0gMCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxODk6XHRcdGxkbV9lcnJvciAoXCYjMzQ7SWxsZWdhbCBWQkxLIHNpemVcJiMzNDspO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xOTAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE5NS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTk2Olx0bGRtX2RlYnVnIChcJiMzNDtQYXJzZWQgVk1EQiBzdWNjZXNzZnVsbHkuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTk3LVx0cmV0dXJuIHRydWU7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMDAtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjIwMTogKiBsZG1fY29tcGFyZV9wcml2aGVhZHMgLSBDb21wYXJlIHR3byBwcml2aGVhZCBvYmplY3RzXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIwMi0gKiBAcGgxOiAgRmlyc3QgcHJpdmhlYWRcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIwOS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MjEwOnN0YXRpYyBib29sIGxkbV9jb21wYXJlX3ByaXZoZWFkcyAoY29uc3Qgc3RydWN0IHByaXZoZWFkICpwaDEsXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIxMS1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBwcml2aGVhZCAqcGgyKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjI0LS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyMjU6ICogbGRtX2NvbXBhcmVfdG9jYmxvY2tzIC0gQ29tcGFyZSB0d28gdG9jYmxvY2sgb2JqZWN0c1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMjYtICogQHRvYzE6ICBGaXJzdCB0b2Ncbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIzMy0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MjM0OnN0YXRpYyBib29sIGxkbV9jb21wYXJlX3RvY2Jsb2NrcyAoY29uc3Qgc3RydWN0IHRvY2Jsb2NrICp0b2MxLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMzUtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdG9jYmxvY2sgKnRvYzIpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNDktLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjI1MDogKiBsZG1fdmFsaWRhdGVfcHJpdmhlYWRzIC0gQ29tcGFyZSB0aGUgcHJpbWFyeSBwcml2aGVhZCB3aXRoIGl0cyBiYWNrdXBzXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI1MS0gKiBAc3RhdGU6IFBhcnRpdGlvbiBjaGVjayBzdGF0ZSBpbmNsdWRpbmcgZGV2aWNlIGhvbGRpbmcgdGhlIExETSBEYXRhYmFzZVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjYyLSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyNjM6c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3ByaXZoZWFkcyhzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNjQtXHRcdFx0XHQgICBzdHJ1Y3QgcHJpdmhlYWQgKnBoMSlcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI3OC1cdGlmICghcGhbMV0gfHwgIXBoWzJdKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjI3OTpcdFx0bGRtX2NyaXQgKFwmIzM0O091dCBvZiBtZW1vcnkuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjgwLVx0XHRnb3RvIG91dDtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI5MC1cdFx0aWYgKCFkYXRhKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjI5MTpcdFx0XHRsZG1fY3JpdCAoXCYjMzQ7RGlzayByZWFkIGZhaWxlZC5cJiMzNDspO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yOTItXHRcdFx0Z290byBvdXQ7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI5My1cdFx0fVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyOTQ6XHRcdHJlc3VsdCA9IGxkbV9wYXJzZV9wcml2aGVhZCAoZGF0YSwgcGhbaV0pO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yOTUtXHRcdHB1dF9kZXZfc2VjdG9yIChzZWN0KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjk2LVx0XHRpZiAoIXJlc3VsdCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyOTc6XHRcdFx0bGRtX2Vycm9yIChcJiMzNDtDYW5ub3QgZmluZCBQUklWSEVBRCAlZC5cJiMzNDssIGkmIzQzOzEpOyAvKiBMb2cgYWdhaW4gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjk4LVx0XHRcdGlmIChpIFx1MDAzYyAyKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzA4LVx0ICAgKChwaFswXS1cdTAwM2Vjb25maWdfc3RhcnQgJiM0MzsgcGhbMF0tXHUwMDNlY29uZmlnX3NpemUpIFx1MDAzZSBudW1fc2VjdHMpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjMwOTpcdFx0bGRtX2NyaXQgKFwmIzM0O0RhdGFiYXNlIGV4dGVuZHMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGRpc2suXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzEwLVx0XHRnb3RvIG91dDtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMxNS1cdFx0ICAgIFx1MDAzZSBwaFswXS1cdTAwM2Vjb25maWdfc3RhcnQpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjMxNjpcdFx0bGRtX2NyaXQgKFwmIzM0O0Rpc2sgYW5kIGRhdGFiYXNlIG92ZXJsYXAuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzE3LVx0XHRnb3RvIG91dDtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMxOS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzIwOlx0aWYgKCFsZG1fY29tcGFyZV9wcml2aGVhZHMgKHBoWzBdLCBwaFsxXSkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzIxOlx0XHRsZG1fY3JpdCAoXCYjMzQ7UHJpbWFyeSBhbmQgYmFja3VwIFBSSVZIRUFEcyBkb24mIzM5O3QgbWF0Y2guXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzIyLVx0XHRnb3RvIG91dDtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMyNC1cdC8qIEZJWE1FIGlnbm9yZSB0aGlzIGZvciBub3dcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzI1Olx0aWYgKCFsZG1fY29tcGFyZV9wcml2aGVhZHMgKHBoWzBdLCBwaFsyXSkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzI2Olx0XHRsZG1fY3JpdCAoXCYjMzQ7UHJpbWFyeSBhbmQgYmFja3VwIFBSSVZIRUFEcyBkb24mIzM5O3QgbWF0Y2guXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzI3LVx0XHRnb3RvIG91dDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzI4LVx0fSovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjMyOTpcdGxkbV9kZWJ1ZyAoXCYjMzQ7VmFsaWRhdGVkIFBSSVZIRUFEcyBzdWNjZXNzZnVsbHkuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzMwLVx0cmVzdWx0ID0gdHJ1ZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMzNy0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzM4OiAqIGxkbV92YWxpZGF0ZV90b2NibG9ja3MgLSBWYWxpZGF0ZSB0aGUgdGFibGUgb2YgY29udGVudHMgYW5kIGl0cyBiYWNrdXBzXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMzOS0gKiBAc3RhdGU6IFBhcnRpdGlvbiBjaGVjayBzdGF0ZSBpbmNsdWRpbmcgZGV2aWNlIGhvbGRpbmcgdGhlIExETSBEYXRhYmFzZVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzUwLSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNTE6c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3RvY2Jsb2NrcyhzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNTItXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCBsZG1kYiAqbGRiKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzY2LVx0aWYgKCF0YlsxXSkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNjc6XHRcdGxkbV9jcml0KFwmIzM0O091dCBvZiBtZW1vcnkuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzY4LVx0XHRnb3RvIGVycjtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4MC1cdFx0aWYgKCFkYXRhKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM4MTpcdFx0XHRsZG1fZXJyb3IoXCYjMzQ7RGlzayByZWFkIGZhaWxlZCBmb3IgVE9DQkxPQ0sgJWQuXCYjMzQ7LCBpKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzgyLVx0XHRcdGNvbnRpbnVlO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODMtXHRcdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzg0Olx0XHRpZiAobGRtX3BhcnNlX3RvY2Jsb2NrKGRhdGEsIHRiW25yX3Ric10pKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODUtXHRcdFx0bnJfdGJzJiM0MzsmIzQzOztcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4OC1cdGlmICghbnJfdGJzKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM4OTpcdFx0bGRtX2NyaXQoXCYjMzQ7RmFpbGVkIHRvIGZpbmQgYSB2YWxpZCBUT0NCTE9DSy5cJiMzNDspO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zOTAtXHRcdGdvdG8gZXJyO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzk1LVx0XHRcdHBoLVx1MDAzZWNvbmZpZ19zaXplKSkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozOTY6XHRcdGxkbV9jcml0KFwmIzM0O1RoZSBiaXRtYXBzIGFyZSBvdXQgb2YgcmFuZ2UuICBHaXZpbmcgdXAuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzk3LVx0XHRnb3RvIGVycjtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwMC1cdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yX3RiczsgaSYjNDM7JiM0MzspIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDAxOlx0XHRpZiAoIWxkbV9jb21wYXJlX3RvY2Jsb2Nrcyh0YlswXSwgdGJbaV0pKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQwMjpcdFx0XHRsZG1fY3JpdChcJiMzNDtUT0NCTE9DS3MgMCBhbmQgJWQgZG8gbm90IG1hdGNoLlwmIzM0OywgaSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwMy1cdFx0XHRnb3RvIGVycjtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwNS1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDA2Olx0bGRtX2RlYnVnKFwmIzM0O1ZhbGlkYXRlZCAlZCBUT0NCTE9DS3Mgc3VjY2Vzc2Z1bGx5LlwmIzM0OywgbnJfdGJzKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDA3LVx0cmVzdWx0ID0gdHJ1ZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQxMy0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDE0OiAqIGxkbV92YWxpZGF0ZV92bWRiIC0gUmVhZCB0aGUgVk1EQiBhbmQgdmFsaWRhdGUgaXRcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDE1LSAqIEBzdGF0ZTogUGFydGl0aW9uIGNoZWNrIHN0YXRlIGluY2x1ZGluZyBkZXZpY2UgaG9sZGluZyB0aGUgTERNIERhdGFiYXNlXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00MjQtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQyNTpzdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdm1kYihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00MjYtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBiYXNlLCBzdHJ1Y3QgbGRtZGIgKmxkYilcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0MC1cdGlmICghZGF0YSkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0NDE6XHRcdGxkbV9jcml0IChcJiMzNDtEaXNrIHJlYWQgZmFpbGVkLlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDQ0LVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0NDU6XHRpZiAoIWxkbV9wYXJzZV92bWRiIChkYXRhLCB2bSkpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0Ni1cdFx0Z290byBvdXQ7XHRcdFx0XHQvKiBBbHJlYWR5IGxvZ2dlZCAqL1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDQ5LVx0aWYgKGdldF91bmFsaWduZWRfYmUxNihkYXRhICYjNDM7IDB4MTApICE9IDB4MDEpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDUwOlx0XHRsZG1fY3JpdCAoXCYjMzQ7RGF0YWJhc2UgaXMgbm90IGluIGEgY29uc2lzdGVudCBzdGF0ZS4gIEFib3J0aW5nLlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ1MS1cdFx0Z290byBvdXQ7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NTQtXHRpZiAodm0tXHUwMDNldmJsa19vZmZzZXQgIT0gNTEyKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0NTU6XHRcdGxkbV9pbmZvIChcJiMzNDtWQkxLcyBzdGFydCBhdCBvZmZzZXQgMHglMDR4LlwmIzM0Oywgdm0tXHUwMDNldmJsa19vZmZzZXQpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NTYtXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NjEtXHRpZiAoKHZtLVx1MDAzZXZibGtfc2l6ZSAqIHZtLVx1MDAzZWxhc3RfdmJsa19zZXEpIFx1MDAzZSAodG9jLVx1MDAzZWJpdG1hcDFfc2l6ZSBcdTAwM2NcdTAwM2MgOSkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDYyOlx0XHRsZG1fY3JpdCAoXCYjMzQ7Vk1EQiBleGNlZWRzIGFsbG93ZWQgc2l6ZSBzcGVjaWZpZWQgYnkgVE9DQkxPQ0suICBcJiMzNDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDYzLVx0XHRcdFx0XCYjMzQ7RGF0YWJhc2UgaXMgY29ycnVwdC4gIEFib3J0aW5nLlwmIzM0Oyk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NzQtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQ3NTogKiBsZG1fdmFsaWRhdGVfcGFydGl0aW9uX3RhYmxlIC0gRGV0ZXJtaW5lIHdoZXRoZXIgYmRldiBtaWdodCBiZSBhIGR5bmFtaWMgZGlza1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NzYtICogQHN0YXRlOiBQYXJ0aXRpb24gY2hlY2sgc3RhdGUgaW5jbHVkaW5nIGRldmljZSBob2xkaW5nIHRoZSBMRE0gRGF0YWJhc2Vcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ4OS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDkwOnN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV9wYXJ0aXRpb25fdGFibGUoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDkxLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUwMS1cdGlmICghZGF0YSkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo1MDI6XHRcdGxkbV9pbmZvIChcJiMzNDtEaXNrIHJlYWQgZmFpbGVkLlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUwMy1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTE2LVx0aWYgKHJlc3VsdClcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTE3Olx0XHRsZG1fZGVidWcgKFwmIzM0O0ZvdW5kIFcySyBkeW5hbWljIGRpc2sgcGFydGl0aW9uIHR5cGUuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTE4LVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTI0LS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo1MjU6ICogbGRtX2dldF9kaXNrX29iamlkIC0gU2VhcmNoIGEgbGlua2VkIGxpc3Qgb2YgdmJsayYjMzk7cyBmb3IgYSBnaXZlbiBEaXNrIElkXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUyNi0gKiBAbGRiOiAgQ2FjaGUgb2YgdGhlIGRhdGFiYXNlIHN0cnVjdHVyZXNcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUzNS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTM2OnN0YXRpYyBzdHJ1Y3QgdmJsayAqIGxkbV9nZXRfZGlza19vYmppZCAoY29uc3Qgc3RydWN0IGxkbWRiICpsZGIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUzNy17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01NTEtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjU1MjogKiBsZG1fY3JlYXRlX2RhdGFfcGFydGl0aW9ucyAtIENyZWF0ZSBkYXRhIHBhcnRpdGlvbnMgZm9yIHRoaXMgZGV2aWNlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTU1My0gKiBAcHA6ICAgTGlzdCBvZiB0aGUgcGFydGl0aW9ucyBwYXJzZWQgc28gZmFyXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01NjctICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjU2ODpzdGF0aWMgYm9vbCBsZG1fY3JlYXRlX2RhdGFfcGFydGl0aW9ucyAoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpwcCxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTY5LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbGRtZGIgKmxkYilcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTU3OC1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTc5Olx0ZGlzayA9IGxkbV9nZXRfZGlza19vYmppZCAobGRiKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTgwLVx0aWYgKCFkaXNrKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjU4MTpcdFx0bGRtX2NyaXQgKFwmIzM0O0NhbiYjMzk7dCBmaW5kIHRoZSBJRCBvZiB0aGlzIGRpc2sgaW4gdGhlIGRhdGFiYXNlLlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTU4Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjA1LS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2MDY6ICogbGRtX3JlbGF0aXZlIC0gQ2FsY3VsYXRlIHRoZSBuZXh0IHJlbGF0aXZlIG9mZnNldFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MDctICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MTgtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjYxOTpzdGF0aWMgaW50IGxkbV9yZWxhdGl2ZShjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBpbnQgYmFzZSwgaW50IG9mZnNldClcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjIwLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTYyNC1cdFx0aWYgKCFidWZmZXIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjYyNTpcdFx0XHRsZG1fZXJyb3IoXCYjMzQ7IWJ1ZmZlclwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTYyNi1cdFx0aWYgKG9mZnNldCBcdTAwM2MgMClcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjI3Olx0XHRcdGxkbV9lcnJvcihcJiMzNDtvZmZzZXQgKCVkKSBcdTAwM2MgMFwmIzM0Oywgb2Zmc2V0KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjI4LVx0XHRpZiAoYmFzZSBcdTAwM2UgYnVmbGVuKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2Mjk6XHRcdFx0bGRtX2Vycm9yKFwmIzM0O2Jhc2UgKCVkKSBcdTAwM2UgYnVmbGVuICglZClcJiMzNDssIGJhc2UsIGJ1Zmxlbik7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTYzMC1cdFx0cmV0dXJuIC0xO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjMyLVx0aWYgKGJhc2UgJiM0MzsgYnVmZmVyW2Jhc2VdIFx1MDAzZT0gYnVmbGVuKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjYzMzpcdFx0bGRtX2Vycm9yKFwmIzM0O2Jhc2UgKCVkKSAmIzQzOyBidWZmZXJbYmFzZV0gKCVkKSBcdTAwM2U9IGJ1ZmxlbiAoJWQpXCYjMzQ7LCBiYXNlLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MzQtXHRcdFx0XHRidWZmZXJbYmFzZV0sIGJ1Zmxlbik7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NDAtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjY0MTogKiBsZG1fZ2V0X3ZudW0gLSBDb252ZXJ0IGEgdmFyaWFibGUtd2lkdGgsIGJpZyBlbmRpYW4gbnVtYmVyLCBpbnRvIGNwdSBvcmRlclxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NDItICogQGJsb2NrOiAgUG9pbnRlciB0byB0aGUgdmFyaWFibGUtd2lkdGggbnVtYmVyIHRvIGNvbnZlcnRcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY1NC0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjU1OnN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY1Ni17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NjctXHRlbHNlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjY2ODpcdFx0bGRtX2Vycm9yIChcJiMzNDtJbGxlZ2FsIGxlbmd0aCAlZC5cJiMzNDssIGxlbmd0aCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY2OS1cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY3My0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Njc0OiAqIGxkbV9nZXRfdnN0ciAtIFJlYWQgYSBsZW5ndGgtcHJlZml4ZWQgc3RyaW5nIGludG8gYSBidWZmZXJcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjc1LSAqIEBibG9jazogICBQb2ludGVyIHRvIHRoZSBsZW5ndGggbWFya2VyXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02OTAtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjY5MTpzdGF0aWMgaW50IGxkbV9nZXRfdnN0cihjb25zdCB1OCAqYmxvY2ssIGludCBibG9ja2xlbiwgdTggKmJ1ZmZlciwgaW50IGJ1ZmxlbilcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjkyLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcwNS1cdGlmIChsZW5ndGggXHUwMDNlPSBidWZsZW4pIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzA2Olx0XHRsZG1fZXJyb3IgKFwmIzM0O1RydW5jYXRpbmcgc3RyaW5nICVkIC1cdTAwM2UgJWQuXCYjMzQ7LCBsZW5ndGgsIGJ1Zmxlbik7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcwNy1cdFx0bGVuZ3RoID0gYnVmbGVuIC0gMTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcxNS0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzE2OiAqIGxkbV9wYXJzZV9jbXAzIC0gUmVhZCBhIHJhdyBWQkxLIENvbXBvbmVudCBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcxNy0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcyNS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzI2OnN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcyNy17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03MzItXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjczMzpcdHJfb2JqaWQgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjczNDpcdHJfbmFtZSAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjczNTpcdHJfdnN0YXRlID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9uYW1lKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzM2Olx0cl9jaGlsZCAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDFELCByX3ZzdGF0ZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjczNzpcdHJfcGFyZW50ID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgyRCwgcl9jaGlsZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTczOC1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzM5LVx0aWYgKGJ1ZmZlclsweDEyXSBcdTAwMjYgVkJMS19GTEFHX0NPTVBfU1RSSVBFKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc0MDpcdFx0cl9zdHJpcGUgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDJFLCByX3BhcmVudCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc0MTpcdFx0cl9jb2xzICAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDJFLCByX3N0cmlwZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc0Mi1cdFx0bGVuID0gcl9jb2xzO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzU0LVx0Y29tcCA9IFx1MDAyNnZiLVx1MDAzZXZibGsuY29tcDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzU1Olx0bGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggJiM0Mzsgcl9uYW1lKSxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzU2LVx0XHRjb21wLVx1MDAzZXN0YXRlLCBzaXplb2YoY29tcC1cdTAwM2VzdGF0ZSkpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NTctXHRjb21wLVx1MDAzZXR5cGUgICAgICA9IGJ1ZmZlclsweDE4ICYjNDM7IHJfdnN0YXRlXTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzU4Olx0Y29tcC1cdTAwM2VjaGlsZHJlbiAgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciAmIzQzOyAweDFEICYjNDM7IHJfdnN0YXRlKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzU5Olx0Y29tcC1cdTAwM2VwYXJlbnRfaWQgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciAmIzQzOyAweDJEICYjNDM7IHJfY2hpbGQpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3NjA6XHRjb21wLVx1MDAzZWNodW5rc2l6ZSA9IHJfc3RyaXBlID8gbGRtX2dldF92bnVtIChidWZmZXImIzQzO3JfcGFyZW50JiM0MzsweDJFKSA6IDA7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc2MS1cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc2NS0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzY2OiAqIGxkbV9wYXJzZV9kZ3IzIC0gUmVhZCBhIHJhdyBWQkxLIERpc2sgR3JvdXAgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NjctICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NzUtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc3NjpzdGF0aWMgaW50IGxkbV9wYXJzZV9kZ3IzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc3Ny17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03ODItXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc4MzpcdHJfb2JqaWQgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc4NDpcdHJfbmFtZSAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc4NTpcdHJfZGlza2lkID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9uYW1lKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzg2LVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03ODctXHRpZiAoYnVmZmVyWzB4MTJdIFx1MDAyNiBWQkxLX0ZMQUdfREdSM19JRFMpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Nzg4Olx0XHRyX2lkMSA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MjQsIHJfZGlza2lkKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Nzg5Olx0XHRyX2lkMiA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MjQsIHJfaWQxKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzkwLVx0XHRsZW4gPSByX2lkMjtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgwMC1cdGRncnAgPSBcdTAwMjZ2Yi1cdTAwM2V2YmxrLmRncnA7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgwMTpcdGxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfbmFtZSksXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgwMi1cdFx0ZGdycC1cdTAwM2VkaXNrX2lkLCBzaXplb2YoZGdycC1cdTAwM2VkaXNrX2lkKSk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MDYtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgwNzogKiBsZG1fcGFyc2VfZGdyNCAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIEdyb3VwIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODA4LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODE2LSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4MTc6c3RhdGljIGJvb2wgbGRtX3BhcnNlX2RncjQgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODE4LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgyMy1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODI0Olx0cl9vYmppZCAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCAwKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODI1Olx0cl9uYW1lICAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX29iamlkKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODI2LVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MjctXHRpZiAoYnVmZmVyWzB4MTJdIFx1MDAyNiBWQkxLX0ZMQUdfREdSNF9JRFMpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODI4Olx0XHRyX2lkMSA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4NDQsIHJfbmFtZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgyOTpcdFx0cl9pZDIgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDQ0LCByX2lkMSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgzMC1cdFx0bGVuID0gcl9pZDI7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MzktXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg0MDpcdGxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX29iamlkLCBidWZsZW4gLSAoMHgxOCAmIzQzOyByX29iamlkKSxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODQxLVx0XHRidWYsIHNpemVvZihidWYpKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg0NS0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODQ2OiAqIGxkbV9wYXJzZV9kc2szIC0gUmVhZCBhIHJhdyBWQkxLIERpc2sgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NDctICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NTUtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg1NjpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZHNrMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NTcte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODYyLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4NjM6XHRyX29iamlkICAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCAwKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODY0Olx0cl9uYW1lICAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg2NTpcdHJfZGlza2lkICA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfbmFtZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg2NjpcdHJfYWx0bmFtZSA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfZGlza2lkKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODY3LVx0bGVuID0gcl9hbHRuYW1lO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODc1LVx0ZGlzayA9IFx1MDAyNnZiLVx1MDAzZXZibGsuZGlzaztcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODc2Olx0bGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfZGlza2lkLCBidWZsZW4gLSAoMHgxOCAmIzQzOyByX2Rpc2tpZCksXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg3Ny1cdFx0ZGlzay1cdTAwM2VhbHRfbmFtZSwgc2l6ZW9mKGRpc2stXHUwMDNlYWx0X25hbWUpKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg4NC0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODg1OiAqIGxkbV9wYXJzZV9kc2s0IC0gUmVhZCBhIHJhdyBWQkxLIERpc2sgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04ODYtICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04OTQtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg5NTpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZHNrNCAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04OTYte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTAxLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MDI6XHRyX29iamlkID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjkwMzpcdHJfbmFtZSAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX29iamlkKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTA0LVx0bGVuICAgICA9IHJfbmFtZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkxNy0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTE4OiAqIGxkbV9wYXJzZV9wcnQzIC0gUmVhZCBhIHJhdyBWQkxLIFBhcnRpdGlvbiBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkxOS0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkyNy0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTI4OnN0YXRpYyBib29sIGxkbV9wYXJzZV9wcnQzKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTI5LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkzMy1cdEJVR19PTighYnVmZmVyIHx8ICF2Yik7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjkzNDpcdHJfb2JqaWQgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MTgsIDApO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05MzUtXHRpZiAocl9vYmppZCBcdTAwM2MgMCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MzY6XHRcdGxkbV9lcnJvcihcJiMzNDtyX29iamlkICVkIFx1MDAzYyAwXCYjMzQ7LCByX29iamlkKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTM3LVx0XHRyZXR1cm4gZmFsc2U7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkzOC1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTM5Olx0cl9uYW1lID0gbGRtX3JlbGF0aXZlKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX29iamlkKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTQwLVx0aWYgKHJfbmFtZSBcdTAwM2MgMCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NDE6XHRcdGxkbV9lcnJvcihcJiMzNDtyX25hbWUgJWQgXHUwMDNjIDBcJiMzNDssIHJfbmFtZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk0Mi1cdFx0cmV0dXJuIGZhbHNlO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NDMtXHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk0NDpcdHJfc2l6ZSA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgzNCwgcl9uYW1lKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTQ1LVx0aWYgKHJfc2l6ZSBcdTAwM2MgMCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NDY6XHRcdGxkbV9lcnJvcihcJiMzNDtyX3NpemUgJWQgXHUwMDNjIDBcJiMzNDssIHJfc2l6ZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk0Ny1cdFx0cmV0dXJuIGZhbHNlO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NDgtXHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk0OTpcdHJfcGFyZW50ID0gbGRtX3JlbGF0aXZlKGJ1ZmZlciwgYnVmbGVuLCAweDM0LCByX3NpemUpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NTAtXHRpZiAocl9wYXJlbnQgXHUwMDNjIDApIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTUxOlx0XHRsZG1fZXJyb3IoXCYjMzQ7cl9wYXJlbnQgJWQgXHUwMDNjIDBcJiMzNDssIHJfcGFyZW50KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTUyLVx0XHRyZXR1cm4gZmFsc2U7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk1My1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTU0Olx0cl9kaXNraWQgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MzQsIHJfcGFyZW50KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTU1LVx0aWYgKHJfZGlza2lkIFx1MDAzYyAwKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk1NjpcdFx0bGRtX2Vycm9yKFwmIzM0O3JfZGlza2lkICVkIFx1MDAzYyAwXCYjMzQ7LCByX2Rpc2tpZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk1Ny1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTU5LVx0aWYgKGJ1ZmZlclsweDEyXSBcdTAwMjYgVkJMS19GTEFHX1BBUlRfSU5ERVgpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTYwOlx0XHRyX2luZGV4ID0gbGRtX3JlbGF0aXZlKGJ1ZmZlciwgYnVmbGVuLCAweDM0LCByX2Rpc2tpZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk2MS1cdFx0aWYgKHJfaW5kZXggXHUwMDNjIDApIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTYyOlx0XHRcdGxkbV9lcnJvcihcJiMzNDtyX2luZGV4ICVkIFx1MDAzYyAwXCYjMzQ7LCByX2luZGV4KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTYzLVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk2OC1cdGlmIChsZW4gXHUwMDNjIDApIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTY5Olx0XHRsZG1fZXJyb3IoXCYjMzQ7bGVuICVkIFx1MDAzYyAwXCYjMzQ7LCBsZW4pO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NzAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk3My1cdGlmIChsZW4gXHUwMDNlIGdldF91bmFsaWduZWRfYmUzMihidWZmZXIgJiM0MzsgMHgxNCkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTc0Olx0XHRsZG1fZXJyb3IoXCYjMzQ7bGVuICVkIFx1MDAzZSBCRTMyKGJ1ZmZlciAmIzQzOyAweDE0KSAlZFwmIzM0OywgbGVuLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NzUtXHRcdFx0XHRnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICYjNDM7IDB4MTQpKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk4MC1cdHBhcnQtXHUwMDNldm9sdW1lX29mZnNldCA9IGdldF91bmFsaWduZWRfYmU2NChidWZmZXIgJiM0MzsgMHgyQyAmIzQzOyByX25hbWUpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5ODE6XHRwYXJ0LVx1MDAzZXNpemUgPSBsZG1fZ2V0X3ZudW0oYnVmZmVyICYjNDM7IDB4MzQgJiM0Mzsgcl9uYW1lKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTgyOlx0cGFydC1cdTAwM2VwYXJlbnRfaWQgPSBsZG1fZ2V0X3ZudW0oYnVmZmVyICYjNDM7IDB4MzQgJiM0Mzsgcl9zaXplKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTgzOlx0cGFydC1cdTAwM2VkaXNrX2lkID0gbGRtX2dldF92bnVtKGJ1ZmZlciAmIzQzOyAweDM0ICYjNDM7IHJfcGFyZW50KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTg0LVx0aWYgKHZiLVx1MDAzZWZsYWdzIFx1MDAyNiBWQkxLX0ZMQUdfUEFSVF9JTkRFWClcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk5MS0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTkyOiAqIGxkbV9wYXJzZV92b2w1IC0gUmVhZCBhIHJhdyBWQkxLIFZvbHVtZSBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk5My0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMDEtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMDI6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZvbDUoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDAzLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMDgtXHRCVUdfT04oIWJ1ZmZlciB8fCAhdmIpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDA5Olx0cl9vYmppZCA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMTAtXHRpZiAocl9vYmppZCBcdTAwM2MgMCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDExOlx0XHRsZG1fZXJyb3IoXCYjMzQ7cl9vYmppZCAlZCBcdTAwM2MgMFwmIzM0Oywgcl9vYmppZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMTItXHRcdHJldHVybiBmYWxzZTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAxMy1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAxNDpcdHJfbmFtZSA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMTUtXHRpZiAocl9uYW1lIFx1MDAzYyAwKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMTY6XHRcdGxkbV9lcnJvcihcJiMzNDtyX25hbWUgJWQgXHUwMDNjIDBcJiMzNDssIHJfbmFtZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMTctXHRcdHJldHVybiBmYWxzZTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAxOC1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAxOTpcdHJfdnR5cGUgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfbmFtZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMjAtXHRpZiAocl92dHlwZSBcdTAwM2MgMCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDIxOlx0XHRsZG1fZXJyb3IoXCYjMzQ7cl92dHlwZSAlZCBcdTAwM2MgMFwmIzM0Oywgcl92dHlwZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMjItXHRcdHJldHVybiBmYWxzZTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAyMy1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAyNDpcdHJfZGlzYWJsZV9kcml2ZV9sZXR0ZXIgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfdnR5cGUpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDI1LVx0aWYgKHJfZGlzYWJsZV9kcml2ZV9sZXR0ZXIgXHUwMDNjIDApIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAyNjpcdFx0bGRtX2Vycm9yKFwmIzM0O3JfZGlzYWJsZV9kcml2ZV9sZXR0ZXIgJWQgXHUwMDNjIDBcJiMzNDssXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMjctXHRcdFx0XHRyX2Rpc2FibGVfZHJpdmVfbGV0dGVyKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMjktXHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMzA6XHRyX2NoaWxkID0gbGRtX3JlbGF0aXZlKGJ1ZmZlciwgYnVmbGVuLCAweDJELCByX2Rpc2FibGVfZHJpdmVfbGV0dGVyKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAzMS1cdGlmIChyX2NoaWxkIFx1MDAzYyAwKSB7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE2NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgYGxkbV9wYXJ0aXRpb25gIEVudHJ5cG9pbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGxkbV9wYXJ0aXRpb25gIGVudHJ5cG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyB0byBgbGRtX3BhcnRpdGlvbmAsIG1hcHBpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzLCBhbmQgZ2V0dGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGNhbGwgZmxvdy4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCYjMzk7cyAqY2FsbGVkIGZyb20qIGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgaXRzIGludGVuZGVkIHB1cnBvc2UgYW5kIHRoZSBjb250ZXh0IGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBrbm93bGVkZ2UgaXMsIHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMganVzdCBjb2RlLCBpdCBpcyB0aGUgaW50ZWdyYXRpb24gdGhhdCBpcyBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGRtX3BhcnRpdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9jaGVjay5oPTU5PWludCBrYXJtYV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSk7XG5ibG9jay9wYXJ0aXRpb25zL2NoZWNrLmg6NjA6aW50IGxkbV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSk7XG5ibG9jay9wYXJ0aXRpb25zL2NoZWNrLmgtNjEtaW50IG1hY19wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MTc9c3RhdGljIGludCAoKmNvbnN0IGNoZWNrX3BhcnRbXSkoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICopID0ge1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTU3LSNpZmRlZiBDT05GSUdfTERNX1BBUlRJVElPTlxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6NTg6XHRsZG1fcGFydGl0aW9uLFx0XHQvKiB0aGlzIG11c3QgY29tZSBiZWZvcmUgbXNkb3MgKi9cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTU5LSNlbmRpZlxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9MTQxMT1zdGF0aWMgdm9pZCBsZG1fZnJlZV92YmxrcyAoc3RydWN0IGxpc3RfaGVhZCAqbGgpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNDIyLS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNDIzOiAqIGxkbV9wYXJ0aXRpb24gLSBGaW5kIG91dCB3aGV0aGVyIGEgZGV2aWNlIGlzIGEgZHluYW1pYyBkaXNrIGFuZCBoYW5kbGUgaXRcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQyNC0gKiBAc3RhdGU6IFBhcnRpdGlvbiBjaGVjayBzdGF0ZSBpbmNsdWRpbmcgZGV2aWNlIGhvbGRpbmcgdGhlIExETSBEYXRhYmFzZVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQzOC0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTQzOTppbnQgbGRtX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNDQwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MjQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIExETSBQYXJ0aXRpb25pbmcgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZXhhbWluZSB0aGUgc3RhdGljIHZlcnN1cyBub24tc3RhdGljIHN5bWJvbCBzaXR1YXRpb24gZm9yIGBsZG1fZ2V0X3ZzdHJgIGFuZCBgbGRtX3BhcnNlX3ZibGtgLiBTcGVjaWZpY2FsbHksIEkgd2FzIGxvb2tpbmcgYXQgYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgLiBJIG5vdGVkIHRoYXQgYGxkbV9wYXJ0aXRpb25gIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIG91ciBlbnRyeSBwb2ludC4gSG93ZXZlciwgdGhlIG90aGVycywgYGxkbV9nZXRfdnN0cmAsIGBsZG1fcGFyc2VfY21wM2AsIGBsZG1fcGFyc2VfZGdyM2AsIGBsZG1fcGFyc2VfZGdyNGAsIGBsZG1fcGFyc2VfZHNrM2AsIGBsZG1fcGFyc2Vfdm9sNWAsIGFuZCBgbGRtX3BhcnNlX3ZibGtgLCBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBzYW1lIGZpbGUuCgpUaGVuIEkgaGFkIGEgKm1vbWVudCouIEluIG1vZGVybiBrZXJuZWwgYnVpbGRzIHdpdGggc3ltYm9sIHRhYmxlcyBhbmQgdG9vbHMgbGlrZSBrYWxsc3ltcywga2NvdiwgYW5kIHN5emthbGxlciwgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYSBgLmNgIGZpbGUgKmFyZSogZXhwb3NlZCBhcyBzeW1ib2xzIGluIGB2bWxpbnV4YCwgYXMgbG9uZyBhcyB0aGUgY29tcGlsZXIgaGFzbiYjMzk7dCBpbmxpbmVkIHRoZW0gYW5kIHRoZXkgYXJlbiYjMzk7dCBpbiBoZWFkZXIgZmlsZXMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyIGluIHRoZSBjb250ZXh0IG9mIGZ1enppbmcsIGFuZCBJIHJlbWVtYmVyZWQgdGhlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgZ3VpZGVsaW5lLCB3aGljaCBpcyBpbmNyZWRpYmx5IHVzZWZ1bCBmb3IgZGlyZWN0aW5nIGZ1enppbmcgZWZmb3J0cy4gSXQgc3RyZXNzZXMgdGhlIGltcG9ydGFuY2Ugb2YgbGlzdGluZyBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBjb3JlIGxvZ2ljIG9yIEFQSSBlbnRyeSBwb2ludHMuIEl0IGFsc28gbm90ZXMgdGhhdCBpbmxpbmUgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGFyZSBtb3JlIGRpZmZpY3VsdCwgYW5kIHN1Z2dlc3RzIGZvY3VzaW5nIG9uIG5vbi1zdGF0aWMgY2FsbGVyIGZ1bmN0aW9ucyBpbiBgLmNgIGZpbGVzIGluc3RlYWQuCgpOb3csIGNvbnNpZGVyaW5nIGFsbCBmdW5jdGlvbnMgKGBsZG1fZ2V0X3ZzdHJgLCBgbGRtX3BhcnNlX3ZibGtgLCBgbGRtX3BhcnRpdGlvbmAsIGBsZG1fcGFyc2VfY21wM2AsIGBsZG1fcGFyc2VfZGdyM2AsIGBsZG1fcGFyc2VfZGdyNGAsIGBsZG1fcGFyc2VfZHNrM2AsIGFuZCBgbGRtX3BhcnNlX3ZvbDVgKSBhcmUgaW4gYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgLCB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbGVycyBvZiBgbGRtX2dldF92c3RyYCBvciBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgYXJlYSBoYXZlIGJlZW4gbW9kaWZpZWQuCgpTbywgdGFraW5nIHN0b2NrIG9mIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLCBpdCYjMzk7czogYGxkbV9nZXRfdnN0cmAsIGBsZG1fcGFyc2VfY21wM2AsIGBsZG1fcGFyc2VfZGdyM2AsIGBsZG1fcGFyc2VfZGdyNGAsIGBsZG1fcGFyc2VfZHNrM2AsIGBsZG1fcGFyc2Vfdm9sNWAsIGFuZCBgbGRtX3BhcnNlX3ZibGtgLiBQbHVzLCB0aGUgZW50cnlwb2ludCBpcyBgbGRtX3BhcnRpdGlvbmAuCgpOb3cgdG8gdGhlIGtleSBxdWVzdGlvbjogSXMgdGhpcyBXb3J0aEZ1enppbmc/IFRoZSBhbnN3ZXIgaXMgbG9va2luZyBsaWtlIGEgc29saWQgeWVzLiBJdCB0b3VjaGVzIGJsb2NrIHBhcnRpdGlvbiBwYXJzaW5nIGxvZ2ljIHdpdGhpbiBgYmxvY2svcGFydGl0aW9ucy9sZG0uY2AsIHdoaWNoIGlzIGV4ZWN1dGVkIHdoZW4gYmxvY2sgZGV2aWNlcyBnZXQgcGFydGl0aW9uZWQgb3Igc2Nhbm5lZDsgdGhpbmdzIGxpa2UgbG9vcCwgbmJkLCB2aXJ0aW8sIGFuZCByYW1kaXNrIGFyZSBhbGwgYWZmZWN0ZWQuIEl0IGFsc28gbG9va3MgcmVhY2hhYmxlIGluIFFFTVUgYW5kIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gUGx1cywgaXQgbW9kaWZpZXMgc3RyaW5nIGxlbmd0aCBib3VuZHMgYW5kIGNoZWNraW5nIGxvZ2ljLiBQZXJmZWN0LgoKTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSW4gYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AsIGl0JiMzOTtzIGNsZWFyOiBgY29uZmlnIExETV9QQVJUSVRJT05gIGRlcGVuZHMgb24gYFBBUlRJVElPTl9BRFZBTkNFRGAuIFNvLCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGZvciBgUEFSVElUSU9OX0FEVkFOQ0VEYCBmb3IgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVmb3JlIGdvaW5nIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQVJUSVRJT05fQURWQU5DRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZz01PW1lbnUgXCYjMzQ7UGFydGl0aW9uIFR5cGVzXCYjMzQ7XG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctNi1cbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZzo3OmNvbmZpZyBQQVJUSVRJT05fQURWQU5DRURcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy04LVx0Ym9vbCBcJiMzNDtBZHZhbmNlZCBwYXJ0aXRpb24gc2VsZWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjQwCgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDQxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYFBBUlRJVElPTl9BRFZBTkNFRGAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgUEFSVElUSU9OX0FEVkFOQ0VEYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgKm90aGVyKiB0aGFuIGl0c2VsZiwgd2hpY2ggSSYjMzk7bGwga2VlcCBpbiBtaW5kIGFzIEkgY29udGludWUgdG8gcmV2aWV3LiBUaGUgaW1tZWRpYXRlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCB0aGVyZWZvcmUsIHNlZW0gdG8gYmUgYExETV9QQVJUSVRJT05gIGFuZCwgb2J2aW91c2x5LCBgUEFSVElUSU9OX0FEVkFOQ0VEYC4KCk5vdywgbGV0JiMzOTtzIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgbGlzdCBvZiBGb2N1c1N5bWJvbHMgcHJvdmlkZWQuIEkgc2VlIGEgZmFtaWxpYXIgc2V0IG9mIGZ1bmN0aW9uIGNhbGxzIHRoYXQgYXBwZWFyIHRvIGJlIG91ciBjb3JlIHBhcnNpbmcgcm91dGluZXMgd2l0aGluIHRoZSBMRE0gbW9kdWxlLiBHb29kLCBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvbiB0aGVtOiBgbGRtX2dldF92c3RyYCwgYGxkbV9wYXJzZV9jbXAzYCwgYGxkbV9wYXJzZV9kZ3IzYCwgYGxkbV9wYXJzZV9kZ3I0YCwgYGxkbV9wYXJzZV9kc2szYCwgYGxkbV9wYXJzZV92b2w1YCwgYGxkbV9wYXJzZV92YmxrYCwgYW5kIG9mIGNvdXJzZSwgYGxkbV9wYXJ0aXRpb25gLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRpZmYgZGlyZWN0bHkgaW1wYWN0cyB0aGVzZSBmdW5jdGlvbnMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNpZGUtZWZmZWN0cywgSSB3YW50IHRvIGNhdGNoIHRoZW0gaW1tZWRpYXRlbHkuIE9rYXksIGxvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IGNvbmZpcm1zIHRoYXQgYWxsIDcgb2YgdGhvc2UgcGFyc2luZyBmdW5jdGlvbnMgYXJlIGluZGVlZCBtb2RpZmllZC4gTGluZXMgNjgwLTcxMCwgNzUyLTc1NiwgNzkwLTgwMiwgODI5LTg0MSwgODY0LTg3NywgMTA3Mi0xMDkyLCBhbmQgMTExNS0xMTI4LCByZXNwZWN0aXZlbHkuIEl0IHNlZW1zIHRoYXQgYGxkbV9wYXJ0aXRpb25gIGlzIHRoZSBlbnRyeSBwb2ludCwgd2hpY2ggbWFrZXMgc2Vuc2UuCgpOb3cgbGV0JiMzOTtzIHZlcmlmeSBzY29wZS4gT2theSwgSSBvbmx5IHNlZSBtb2RpZmljYXRpb25zIHRvIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYC4gR29vZC4KCkFuZCBmaW5hbGx5LCB0byByZWl0ZXJhdGUsIGl0JiMzOTtzIGNsZWFyIHRoYXQgYENPTkZJR19MRE1fUEFSVElUSU9OYCByZXF1aXJlcyBgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRGAsIHdoaWNoIGNvbmZpcm1zIGV2ZXJ5dGhpbmcuCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFSVElUSU9OX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O0xETV9QQVJUSVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsZG1fZ2V0X3ZzdHImIzM0OywKICAgICYjMzQ7bGRtX3BhcnNlX3ZibGsmIzM0OywKICAgICYjMzQ7bGRtX3BhcnNlX2NtcDMmIzM0OywKICAgICYjMzQ7bGRtX3BhcnNlX2RncjMmIzM0OywKICAgICYjMzQ7bGRtX3BhcnNlX2RncjQmIzM0OywKICAgICYjMzQ7bGRtX3BhcnNlX2RzazMmIzM0OywKICAgICYjMzQ7bGRtX3BhcnNlX3ZvbDUmIzM0OywKICAgICYjMzQ7bGRtX3BhcnRpdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2luZG93cyBMb2dpY2FsIERpc2sgTWFuYWdlciAoTERNKSBwYXJ0aXRpb24gcGFyc2VyIGluIGJsb2NrL3BhcnRpdGlvbnMvbGRtLmMgdG8gYWRkIGJvdW5kcyBjaGVja2luZyB3aGVuIHJlYWRpbmcgbGVuZ3RoLXByZWZpeGVkIHN0cmluZ3MsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgYmxvY2sgZGV2aWNlIHBhcnRpdGlvbiBzY2FubmluZyAoZS5nLiwgbG9vcCBkZXZpY2VzKSBhbmQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIHRydW5jYXRpb25zLCBvciB1bmV4cGVjdGVkIHBhcnNlciBiZWhhdmlvcnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBUlRJVElPTl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtMRE1fUEFSVElUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGRtX2dldF92c3RyJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV92YmxrJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9jbXAzJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9kZ3IzJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9kZ3I0JiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9kc2szJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV92b2w1JiMzNDssCiAgICAmIzM0O2xkbV9wYXJ0aXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpbmRvd3MgTG9naWNhbCBEaXNrIE1hbmFnZXIgKExETSkgcGFydGl0aW9uIHBhcnNlciBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgd2hlbiByZWFkaW5nIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmdzLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGJsb2NrIGRldmljZSBwYXJ0aXRpb24gc2Nhbm5pbmcgKGUuZy4sIGxvb3AgZGV2aWNlcykgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB0cnVuY2F0aW9ucywgb3IgdW5leHBlY3RlZCBwYXJzZXIgYmVoYXZpb3JzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgaW4gYmxvY2svcGFydGl0aW9ucy9sZG0uYyBieSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIG9uIHRoZSBpbnB1dCBidWZmZXIgbGVuZ3RoIChgYmxvY2tsZW5gKSB3aXRoaW4gYGxkbV9nZXRfdnN0cigpYC4gUHJldmlvdXNseSwgYGxkbV9nZXRfdnN0cigpYCBvbmx5IGNoZWNrZWQgb3V0cHV0IGJ1ZmZlciBib3VuZHMgKGBidWZsZW5gKSwgYWxsb3dpbmcgYSBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzIGxlbmd0aCBieXRlIGluIGEgcGFydGl0aW9uIHN0cnVjdHVyZSB0byByZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIuIFxuXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgZnVsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyAoS01TQU4gZG9tYWluKS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmMGRkNDNmZDcyM2Q5ZjI0OWJkZjdhOTAzMDMwNDEyZjBhZDY1YmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDIxOjE1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9sZG0uYyBiL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmMKaW5kZXggYzBiZGNhZTU4YTNlZS4uNTQ2OGUwMzhhMDlmNCAxMDA2NDQKLS0tIGEvYmxvY2svcGFydGl0aW9ucy9sZG0uYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL2xkbS5jCkBAIC02NzMsNiAmIzQzOzY3Myw3IEBAIHN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spCiAvKioKICAqIGxkbV9nZXRfdnN0ciAtIFJlYWQgYSBsZW5ndGgtcHJlZml4ZWQgc3RyaW5nIGludG8gYSBidWZmZXIKICAqIEBibG9jazogICBQb2ludGVyIHRvIHRoZSBsZW5ndGggbWFya2VyCiYjNDM7ICogQGJsb2NrbGVuOiBOdW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IEBibG9jawogICogQGJ1ZmZlcjogIExvY2F0aW9uIHRvIGNvcHkgc3RyaW5nIHRvCiAgKiBAYnVmbGVuOiAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgogICoKQEAgLTY4MCwyMCAmIzQzOzY4MSwyNyBAQCBzdGF0aWMgdTY0IGxkbV9nZXRfdm51bSAoY29uc3QgdTggKmJsb2NrKQogICogdGhleSBhcmUgcHJlZml4ZWQgYnkgYSBvbmUgYnl0ZSBsZW5ndGggbWFya2VyLiAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgb25lIG9mCiAgKiB0aGVzZSBzdHJpbmdzIGludG8gYSBidWZmZXIuCiAgKgotICogTi5CLiAgVGhpcyBmdW5jdGlvbiBET0VTIE5PVCBwZXJmb3JtIGFueSByYW5nZSBjaGVja2luZyBvbiB0aGUgaW5wdXQuCi0gKiAgICAgICBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgdGhlIG91dHB1dCB3aWxsIGJlIHRydW5jYXRlZC4KJiM0MzsgKiBOLkIuICBUaGUgc3RyaW5nIGlzIGNsYW1wZWQgdG8gYm90aCBAYmxvY2tsZW4gYW5kIEBidWZsZW47IGlmIGVpdGhlcgomIzQzOyAqICAgICAgIGlzIHRvbyBzbWFsbCB0aGUgb3V0cHV0IHdpbGwgYmUgdHJ1bmNhdGVkLgogICoKICAqIFJldHVybjogIDAsIEVycm9yIGFuZCBAYnVmZmVyIGNvbnRlbnRzIGFyZSB1bmRlZmluZWQKICAqICAgICAgICAgIG4sIFN0cmluZyBsZW5ndGggaW4gY2hhcmFjdGVycyAoZXhjbHVkaW5nIE5VTEwpCiAgKiAgICAgICAgICBidWZsZW4tMSwgU3RyaW5nIHdhcyB0cnVuY2F0ZWQuCiAgKi8KLXN0YXRpYyBpbnQgbGRtX2dldF92c3RyIChjb25zdCB1OCAqYmxvY2ssIHU4ICpidWZmZXIsIGludCBidWZsZW4pCiYjNDM7c3RhdGljIGludCBsZG1fZ2V0X3ZzdHIoY29uc3QgdTggKmJsb2NrLCBpbnQgYmxvY2tsZW4sIHU4ICpidWZmZXIsIGludCBidWZsZW4pCiB7CiAJaW50IGxlbmd0aDsKIAogCUJVR19PTiAoIWJsb2NrIHx8ICFidWZmZXIpOwogCiYjNDM7CWlmIChibG9ja2xlbiAmbHQ7IDEpIHsKJiM0MzsJCWJ1ZmZlclswXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiAJbGVuZ3RoID0gYmxvY2tbMF07CiYjNDM7CWlmIChsZW5ndGggJmd0OyBibG9ja2xlbiAtIDEpCiYjNDM7CQlsZW5ndGggPSBibG9ja2xlbiAtIDE7CiAJaWYgKGxlbmd0aCAmZ3Q7PSBidWZsZW4pIHsKIAkJbGRtX2Vycm9yICgmIzM0O1RydW5jYXRpbmcgc3RyaW5nICVkIC0mZ3Q7ICVkLiYjMzQ7LCBsZW5ndGgsIGJ1Zmxlbik7CiAJCWxlbmd0aCA9IGJ1ZmxlbiAtIDE7CkBAIC03NDQsOCAmIzQzOzc1Miw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCiAJCXJldHVybiBmYWxzZTsKIAogCWNvbXAgPSAmYW1wO3ZiLSZndDt2YmxrLmNvbXA7Ci0JbGRtX2dldF92c3RyIChidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGNvbXAtJmd0O3N0YXRlLAotCQlzaXplb2YgKGNvbXAtJmd0O3N0YXRlKSk7CiYjNDM7CWxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfbmFtZSksCiYjNDM7CQljb21wLSZndDtzdGF0ZSwgc2l6ZW9mKGNvbXAtJmd0O3N0YXRlKSk7CiAJY29tcC0mZ3Q7dHlwZSAgICAgID0gYnVmZmVyWzB4MTggJiM0Mzsgcl92c3RhdGVdOwogCWNvbXAtJmd0O2NoaWxkcmVuICA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICYjNDM7IDB4MUQgJiM0Mzsgcl92c3RhdGUpOwogCWNvbXAtJmd0O3BhcmVudF9pZCA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICYjNDM7IDB4MkQgJiM0Mzsgcl9jaGlsZCk7CkBAIC03OTAsOCAmIzQzOzc5OCw4IEBAIHN0YXRpYyBpbnQgbGRtX3BhcnNlX2RncjMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKIAkJcmV0dXJuIGZhbHNlOwogCiAJZGdycCA9ICZhbXA7dmItJmd0O3ZibGsuZGdycDsKLQlsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgZGdycC0mZ3Q7ZGlza19pZCwKLQkJc2l6ZW9mIChkZ3JwLSZndDtkaXNrX2lkKSk7CiYjNDM7CWxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfbmFtZSksCiYjNDM7CQlkZ3JwLSZndDtkaXNrX2lkLCBzaXplb2YoZGdycC0mZ3Q7ZGlza19pZCkpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC04MjksNyAmIzQzOzgzNyw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9kZ3I0IChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCiAJaWYgKGxlbiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICYjNDM7IDB4MTQpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfb2JqaWQsIGJ1Ziwgc2l6ZW9mIChidWYpKTsKJiM0MzsJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfb2JqaWQsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfb2JqaWQpLAomIzQzOwkJYnVmLCBzaXplb2YoYnVmKSk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTg2NCw4ICYjNDM7ODczLDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX2RzazMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKIAkJcmV0dXJuIGZhbHNlOwogCiAJZGlzayA9ICZhbXA7dmItJmd0O3ZibGsuZGlzazsKLQlsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfZGlza2lkLCBkaXNrLSZndDthbHRfbmFtZSwKLQkJc2l6ZW9mIChkaXNrLSZndDthbHRfbmFtZSkpOwomIzQzOwlsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9kaXNraWQsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfZGlza2lkKSwKJiM0MzsJCWRpc2stJmd0O2FsdF9uYW1lLCBzaXplb2YoZGlzay0mZ3Q7YWx0X25hbWUpKTsKIAlpZiAodXVpZF9wYXJzZShidWZmZXIgJiM0MzsgMHgxOSAmIzQzOyByX25hbWUsICZhbXA7ZGlzay0mZ3Q7ZGlza19pZCkpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMTA3MiwxNiAmIzQzOzEwODEsMTYgQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZvbDUoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCXZvbHUgPSAmYW1wO3ZiLSZndDt2YmxrLnZvbHU7Ci0JbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgdm9sdS0mZ3Q7dm9sdW1lX3R5cGUsCi0JCQlzaXplb2Yodm9sdS0mZ3Q7dm9sdW1lX3R5cGUpKTsKJiM0MzsJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggJiM0Mzsgcl9uYW1lKSwKJiM0MzsJCQl2b2x1LSZndDt2b2x1bWVfdHlwZSwgc2l6ZW9mKHZvbHUtJmd0O3ZvbHVtZV90eXBlKSk7CiAJbWVtY3B5KHZvbHUtJmd0O3ZvbHVtZV9zdGF0ZSwgYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9kaXNhYmxlX2RyaXZlX2xldHRlciwKIAkJCXNpemVvZih2b2x1LSZndDt2b2x1bWVfc3RhdGUpKTsKIAl2b2x1LSZndDtzaXplID0gbGRtX2dldF92bnVtKGJ1ZmZlciAmIzQzOyAweDNEICYjNDM7IHJfY2hpbGQpOwogCXZvbHUtJmd0O3BhcnRpdGlvbl90eXBlID0gYnVmZmVyWzB4NDEgJiM0Mzsgcl9zaXplXTsKIAltZW1jcHkodm9sdS0mZ3Q7Z3VpZCwgYnVmZmVyICYjNDM7IDB4NDIgJiM0Mzsgcl9zaXplLCBzaXplb2Yodm9sdS0mZ3Q7Z3VpZCkpOwogCWlmIChidWZmZXJbMHgxMl0gJmFtcDsgVkJMS19GTEFHX1ZPTFVfRFJJVkUpIHsKLQkJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDUyICYjNDM7IHJfc2l6ZSwgdm9sdS0mZ3Q7ZHJpdmVfaGludCwKLQkJCQlzaXplb2Yodm9sdS0mZ3Q7ZHJpdmVfaGludCkpOwomIzQzOwkJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDUyICYjNDM7IHJfc2l6ZSwgYnVmbGVuIC0gKDB4NTIgJiM0Mzsgcl9zaXplKSwKJiM0MzsJCQkJdm9sdS0mZ3Q7ZHJpdmVfaGludCwgc2l6ZW9mKHZvbHUtJmd0O2RyaXZlX2hpbnQpKTsKIAl9CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMTE1LDcgJiM0MzsxMTI0LDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZibGsgKGNvbnN0IHU4ICpidWYsIGludCBsZW4sIHN0cnVjdCB2YmxrICp2YikKIAl2Yi0mZ3Q7ZmxhZ3MgID0gYnVmWzB4MTJdOwogCXZiLSZndDt0eXBlICAgPSBidWZbMHgxM107CiAJdmItJmd0O29ial9pZCA9IGxkbV9nZXRfdm51bSAoYnVmICYjNDM7IDB4MTgpOwotCWxkbV9nZXRfdnN0ciAoYnVmJiM0MzsweDE4JiM0MztyX29iamlkLCB2Yi0mZ3Q7bmFtZSwgc2l6ZW9mICh2Yi0mZ3Q7bmFtZSkpOwomIzQzOwlsZG1fZ2V0X3ZzdHIoYnVmICYjNDM7IDB4MTggJiM0Mzsgcl9vYmppZCwgbGVuIC0gKDB4MTggJiM0Mzsgcl9vYmppZCksCiYjNDM7CQl2Yi0mZ3Q7bmFtZSwgc2l6ZW9mKHZiLSZndDtuYW1lKSk7CiAKIAlzd2l0Y2ggKHZiLSZndDt0eXBlKSB7CiAJCWNhc2UgVkJMS19DTVAzOiAgcmVzdWx0ID0gbGRtX3BhcnNlX2NtcDMgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoZSB1c2VyJiMzOTtzIHBvbmRlcmluZyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGl0cyBvd24gS01TQU4gZnV6emluZyBydW4uIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHF1ZXN0aW9uOyB3ZSBuZWVkIHRvIGFzc2VzcyB0aGUgcmlzay4gTGV0JiMzOTtzIGRpZyBpbi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYC4gUmlnaHQsIHNvIGxvZ2ljYWwgZGlzayBtYW5hZ2VtZW50LCBpbnRlcmVzdGluZy4uLiBwb3RlbnRpYWxseSBjb21wbGV4LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhhdCBmaWxlIHRvIGdhdWdlIHRoZSBpbXBhY3QuCgpMZXQmIzM5O3MgcXVpY2tseSBnZXQgdGhlIGNvZGUgdXAuIEkgY2FuIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcHVsbCB1cCBgYmxvY2svcGFydGl0aW9ucy9sZG0uY2AgYW5kIGdldCBhIGZlZWwgZm9yIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIHRoZSBtb2RpZmllZCBzZWN0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uJiMzNDsgb3IgdGhhdCBvcGVyYXRlcyBvbiBkYXRhIHN0cnVjdHVyZXMgaW4gYSB3YXkgdGhhdCBtaWdodCBleHBvc2UgS01TQU4gaXNzdWVzLiBPbmNlIEkgaGF2ZSBhIGdvb2QgY29udGV4dCwgSSBjYW4gbWFrZSBhIG1vcmUgaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgd2hldGhlciBhIGRlZGljYXRlZCBmdXp6aW5nIHNlc3Npb24gaXMgdGhlIHJpZ2h0IG1vdmUuIEkgbmVlZCB0byBiYWxhbmNlIHRoZSBjb3N0IG9mIHNldHRpbmcgdXAgYSBuZXcgc2Vzc2lvbiB3aXRoIHRoZSBwb3RlbnRpYWwgYmVuZWZpdCBvZiBjYXRjaGluZyBzdWJ0bGUgS01TQU4gYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2xkbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHRcdHJldHVybiB0bXA7XG4gNjcxOlx0fVxuIDY3MjpcdFxuIDY3MzpcdC8qKlxuIDY3NDpcdCAqIGxkbV9nZXRfdnN0ciAtIFJlYWQgYSBsZW5ndGgtcHJlZml4ZWQgc3RyaW5nIGludG8gYSBidWZmZXJcbiA2NzU6XHQgKiBAYmxvY2s6ICAgUG9pbnRlciB0byB0aGUgbGVuZ3RoIG1hcmtlclxuIDY3NjpcdCAqIEBibG9ja2xlbjogTnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBAYmxvY2tcbiA2Nzc6XHQgKiBAYnVmZmVyOiAgTG9jYXRpb24gdG8gY29weSBzdHJpbmcgdG9cbiA2Nzg6XHQgKiBAYnVmbGVuOiAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlclxuIDY3OTpcdCAqXG4gNjgwOlx0ICogTWFueSBvZiB0aGUgc3RyaW5ncyBpbiB0aGUgTERNIERhdGFiYXNlIGFyZSBub3QgTlVMTCB0ZXJtaW5hdGVkLiAgSW5zdGVhZFxuIDY4MTpcdCAqIHRoZXkgYXJlIHByZWZpeGVkIGJ5IGEgb25lIGJ5dGUgbGVuZ3RoIG1hcmtlci4gIFRoaXMgZnVuY3Rpb24gY29waWVzIG9uZSBvZlxuIDY4MjpcdCAqIHRoZXNlIHN0cmluZ3MgaW50byBhIGJ1ZmZlci5cbiA2ODM6XHQgKlxuIDY4NDpcdCAqIE4uQi4gIFRoZSBzdHJpbmcgaXMgY2xhbXBlZCB0byBib3RoIEBibG9ja2xlbiBhbmQgQGJ1ZmxlbjsgaWYgZWl0aGVyXG4gNjg1Olx0ICogICAgICAgaXMgdG9vIHNtYWxsIHRoZSBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQuXG4gNjg2Olx0ICpcbiA2ODc6XHQgKiBSZXR1cm46ICAwLCBFcnJvciBhbmQgQGJ1ZmZlciBjb250ZW50cyBhcmUgdW5kZWZpbmVkXG4gNjg4Olx0ICogICAgICAgICAgbiwgU3RyaW5nIGxlbmd0aCBpbiBjaGFyYWN0ZXJzIChleGNsdWRpbmcgTlVMTClcbiA2ODk6XHQgKiAgICAgICAgICBidWZsZW4tMSwgU3RyaW5nIHdhcyB0cnVuY2F0ZWQuXG4gNjkwOlx0ICovXG4gNjkxOlx0c3RhdGljIGludCBsZG1fZ2V0X3ZzdHIoY29uc3QgdTggKmJsb2NrLCBpbnQgYmxvY2tsZW4sIHU4ICpidWZmZXIsIGludCBidWZsZW4pXG4gNjkyOlx0e1xuIDY5MzpcdFx0aW50IGxlbmd0aDtcbiA2OTQ6XHRcbiA2OTU6XHRcdEJVR19PTiAoIWJsb2NrIHx8ICFidWZmZXIpO1xuIDY5NjpcdFxuIDY5NzpcdFx0aWYgKGJsb2NrbGVuIFx1MDAzYyAxKSB7XG4gNjk4Olx0XHRcdGJ1ZmZlclswXSA9ICYjMzk7XFwwJiMzOTs7XG4gNjk5Olx0XHRcdHJldHVybiAwO1xuIDcwMDpcdFx0fVxuIDcwMTpcdFxuIDcwMjpcdFx0bGVuZ3RoID0gYmxvY2tbMF07XG4gNzAzOlx0XHRpZiAobGVuZ3RoIFx1MDAzZSBibG9ja2xlbiAtIDEpXG4gNzA0Olx0XHRcdGxlbmd0aCA9IGJsb2NrbGVuIC0gMTtcbiA3MDU6XHRcdGlmIChsZW5ndGggXHUwMDNlPSBidWZsZW4pIHtcbiA3MDY6XHRcdFx0bGRtX2Vycm9yIChcJiMzNDtUcnVuY2F0aW5nIHN0cmluZyAlZCAtXHUwMDNlICVkLlwmIzM0OywgbGVuZ3RoLCBidWZsZW4pO1xuIDcwNzpcdFx0XHRsZW5ndGggPSBidWZsZW4gLSAxO1xuIDcwODpcdFx0fVxuIDcwOTpcdFx0bWVtY3B5IChidWZmZXIsIGJsb2NrICYjNDM7IDEsIGxlbmd0aCk7XG4gNzEwOlx0XHRidWZmZXJbbGVuZ3RoXSA9IDA7XG4gNzExOlx0XHRyZXR1cm4gbGVuZ3RoO1xuIDcxMjpcdH1cbiA3MTM6XHRcbiA3MTQ6XHRcbiA3MTU6XHQvKipcbiA3MTY6XHQgKiBsZG1fcGFyc2VfY21wMyAtIFJlYWQgYSByYXcgVkJMSyBDb21wb25lbnQgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxuIDcxNzpcdCAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxuIDcxODpcdCAqIEBidWZsZW46ICBTaXplIG9mIHRoZSBibG9jayBvZiBkYXRhXG4gNzE5Olx0ICogQHZiOiAgICAgIEluLW1lbW9yeSB2YmxrIGluIHdoaWNoIHRvIHJldHVybiBpbmZvcm1hdGlvblxuIDcyMDpcdCAqXG4gNzIxOlx0ICogUmVhZCBhIHJhdyBWQkxLIENvbXBvbmVudCBvYmplY3QgKHZlcnNpb24gMykgaW50byBhIHZibGsgc3RydWN0dXJlLlxuIDcyMjpcdCAqXG4gNzIzOlx0ICogUmV0dXJuOiAgJiMzOTt0cnVlJiMzOTsgICBAdmIgY29udGFpbnMgYSBDb21wb25lbnQgVkJMS1xuIDcyNDpcdCAqICAgICAgICAgICYjMzk7ZmFsc2UmIzM5OyAgQHZiIGNvbnRlbnRzIGFyZSBub3QgZGVmaW5lZFxuIDcyNTpcdCAqL1xuIDcyNjpcdHN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gNzI3Olx0e1xuIDcyODpcdFx0aW50IHJfb2JqaWQsIHJfbmFtZSwgcl92c3RhdGUsIHJfY2hpbGQsIHJfcGFyZW50LCByX3N0cmlwZSwgcl9jb2xzLCBsZW47XG4gNzI5Olx0XHRzdHJ1Y3QgdmJsa19jb21wICpjb21wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEFkZHJlc3NpbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBSZWFkIGluIGBsZG1fZ2V0X3ZzdHJgKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBpbiB0aGUgTG9naWNhbCBEaXNrIE1hbmFnZXIgKExETSkgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgYGxkbV9nZXRfdnN0cigpYCBmdW5jdGlvbiwgd2l0aGluIGBsZG0uY2AsIGhhcyBiZWVuIG1vZGlmaWVkLgoKUHJldmlvdXNseSwgYGxkbV9nZXRfdnN0cmAgd2FzIHZ1bG5lcmFibGUuIEl0IHJlYWQgYSBsZW5ndGggYnl0ZSAoYGJsb2NrWzBdYCkgYW5kIGNvcGllZCBgbGVuZ3RoYCBieXRlcyBmcm9tIGBibG9jayAmIzQzOyAxYCBpbnRvIHRoZSBwcm92aWRlZCBgYnVmZmVyYC4gVGhlIG9yaWdpbmFsIGNvZGUgb25seSBjaGVja2VkIGFnYWluc3QgdGhlIGJ1ZmZlciBsZW5ndGggKGBidWZsZW5gKSBwYXNzZWQgaW4gZm9yIHRoZSAqZGVzdGluYXRpb24qIGJ1ZmZlciwgYnV0IG5vdCBhZ2FpbnN0IHRoZSAqc291cmNlKiBidWZmZXIgbGVuZ3RoLiBJZiB0aGUgdmFsdWUgaW4gYGJsb2NrWzBdYCBzcGVjaWZpZWQgYSBsZW5ndGggbGFyZ2VyIHRoYW4gdGhlIGF2YWlsYWJsZSBkYXRhIGluIHRoZSBpbnB1dCBidWZmZXIgKGBibG9ja2xlbmApLCBpdCB3b3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBmcm9tIHRoZSBkaXNrL3BhcnRpdGlvbiB0YWJsZSBidWZmZXIuIEEgY2xhc3NpYyBtaXN0YWtlIQoKVGhlIGZpeCBpcyBlbGVnYW50OiBpdCBpbnRyb2R1Y2VzIGEgbmV3IGBibG9ja2xlbmAgcGFyYW1ldGVyIHRvIGBsZG1fZ2V0X3ZzdHIoKWAsIHdoaWNoIHJlcHJlc2VudHMgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVGhlIGBsZW5ndGhgIGlzIHRoZW4gY2xhbXBlZCB0byBgYmxvY2tsZW4gLSAxYCwgZW5zdXJpbmcgdGhhdCB3ZSBuZXZlciBhdHRlbXB0IHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gSXQgYWxzbyBoYW5kbGVzIHRoZSBlZGdlIGNhc2Ugd2hlcmUgYGJsb2NrbGVuYCBpcyBsZXNzIHRoYW4gMS4KCk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHRvIGVuc3VyZSB0aGUgZml4IGRvZXNuJiMzOTt0IGludHJvZHVjZSAqbmV3KiB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIHNlZToKCjEuICAqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQvTGVhazoqKiBUaGUgbmV3IGNvZGUgY2FyZWZ1bGx5IGhhbmRsZXMgdGhpcy4gV2hlbiBgYmxvY2tsZW4gJmx0OyAxYCwgdGhlIGNvZGUgc2V0cyBgYnVmZmVyWzBdID0gJiMzOTtcMCYjMzk7YCBhbmQgcmV0dXJucyAwLCBudWxsLXRlcm1pbmF0aW5nIHRoZSBidWZmZXIuIElmIGBsZW5ndGhgIGlzIGdyZWF0ZXIgdGhhbiBgYmxvY2tsZW4gLSAxYCwgdGhlIGNvZGUgbm93IGNsYW1wcyB0aGUgbGVuZ3RoLiBUaGUgYG1lbWNweSgpYCBvcGVyYXRpb24gZW5zdXJlcyB0aGF0IHRoZSBjb3BpZWQgZGF0YSBpcyBjb3JyZWN0bHkgbnVsbC10ZXJtaW5hdGVkLiBDcml0aWNhbGx5LCB0aGUgaW5wdXQgYnVmZmVyIGl0c2VsZiBvcmlnaW5hdGVzIGZyb20gcGFydGl0aW9uIGRhdGEgcmVhZCBmcm9tIGEgZGlzayBvciBibG9jayBkZXZpY2UuIFRoaXMgbWVhbnMgdGhlIGJ1ZmZlciBjb250YWlucyBkYXRhLCBzbyB0aGUgaXNzdWUgd2FzIGFuIG91dC1vZi1ib3VuZHMgKnJlYWQqIChwb3RlbnRpYWxseSBleHBvc2luZyBnYXJiYWdlIG9yIGV2ZW4gdHJpZ2dlcmluZyBhIGtlcm5lbCBwYW5pYyB2aWEgS0FTQU4pLgoKMi4gICoqVW5pbnRlbmRlZCBEYXRhIEV4cG9zdXJlOioqIEkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIHdoZXRoZXIgYGJ1ZmZlcmAgaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLCBlc3BlY2lhbGx5IGlmIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGdldHMgdXNlZCBpbiBvdGhlciBsb2NhdGlvbnMsIG9yIGlmIGFueSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBkYXRhIGFyZSBiZWluZyBwYXNzZWQgdG8gdXNlcnNwYWNlLiBJIHNob3VsZCBhbHNvIGNoZWNrIHdoZXJlIHRoZSBgbGRtX3BhcnNlXypgIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdy4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgaW4gYSB0aG9yb3VnaCBhdWRpdC4KClNvIGZhciwgaXQgbG9va3Mgc29saWQuIEJ1dCBhcyBhbHdheXMsIEkgbXVzdCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGFueSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzLiBUaGlzIGZpeCBpcyBhIGdvb2Qgc3RlcCwgYW5kIG5vdyBpdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xkbV9wYXJzZV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2xkbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmM9NDE9dm9pZCBfbGRtX3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTYtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjU3OiAqIGxkbV9wYXJzZV9wcml2aGVhZCAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBQUklWSEVBRCBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTgtICogQGRhdGE6ICBSYXcgZGF0YWJhc2UgUFJJVkhFQUQgc3RydWN0dXJlIGxvYWRlZCBmcm9tIHRoZSBkZXZpY2Vcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY2LSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2NzpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfcHJpdmhlYWQoY29uc3QgdTggKmRhdGEsIHN0cnVjdCBwcml2aGVhZCAqcGgpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY4LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMi0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzOiAqIGxkbV9wYXJzZV90b2NibG9jayAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE0LSAqIEBkYXRhOiAgUmF3IGRhdGFiYXNlIFRPQ0JMT0NLIHN0cnVjdHVyZSBsb2FkZWQgZnJvbSB0aGUgZGV2aWNlXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMjUtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEyNjpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdG9jYmxvY2sgKGNvbnN0IHU4ICpkYXRhLCBzdHJ1Y3QgdG9jYmxvY2sgKnRvYylcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTI3LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE1Ny0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTU4OiAqIGxkbV9wYXJzZV92bWRiIC0gUmVhZCB0aGUgTERNIERhdGFiYXNlIFZNREIgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE1OS0gKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBWTURCIHN0cnVjdHVyZSBsb2FkZWQgZnJvbSB0aGUgZGV2aWNlXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNjktICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE3MDpzdGF0aWMgYm9vbCBsZG1fcGFyc2Vfdm1kYiAoY29uc3QgdTggKmRhdGEsIHN0cnVjdCB2bWRiICp2bSlcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTcxLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTI2Mz1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfcHJpdmhlYWRzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yOTMtXHRcdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mjk0Olx0XHRyZXN1bHQgPSBsZG1fcGFyc2VfcHJpdmhlYWQgKGRhdGEsIHBoW2ldKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjk1LVx0XHRwdXRfZGV2X3NlY3RvciAoc2VjdCk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0zNTE9c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3RvY2Jsb2NrcyhzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzgzLVx0XHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM4NDpcdFx0aWYgKGxkbV9wYXJzZV90b2NibG9jayhkYXRhLCB0Yltucl90YnNdKSlcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzg1LVx0XHRcdG5yX3RicyYjNDM7JiM0Mzs7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz00MjU9c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3ZtZGIoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSxcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0NC1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDQ1Olx0aWYgKCFsZG1fcGFyc2Vfdm1kYiAoZGF0YSwgdm0pKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NDYtXHRcdGdvdG8gb3V0O1x0XHRcdFx0LyogQWxyZWFkeSBsb2dnZWQgKi9cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTY5MT1zdGF0aWMgaW50IGxkbV9nZXRfdnN0cihjb25zdCB1OCAqYmxvY2ssIGludCBibG9ja2xlbiwgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbilcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcxNS0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzE2OiAqIGxkbV9wYXJzZV9jbXAzIC0gUmVhZCBhIHJhdyBWQkxLIENvbXBvbmVudCBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcxNy0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcyNS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzI2OnN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcyNy17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NjUtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc2NjogKiBsZG1fcGFyc2VfZGdyMyAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIEdyb3VwIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzY3LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzc1LSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3NzY6c3RhdGljIGludCBsZG1fcGFyc2VfZGdyMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03Nzcte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODA2LS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4MDc6ICogbGRtX3BhcnNlX2RncjQgLSBSZWFkIGEgcmF3IFZCTEsgRGlzayBHcm91cCBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgwOC0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgxNi0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODE3OnN0YXRpYyBib29sIGxkbV9wYXJzZV9kZ3I0IChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgxOC17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NDUtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg0NjogKiBsZG1fcGFyc2VfZHNrMyAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODQ3LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODU1LSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4NTY6c3RhdGljIGJvb2wgbGRtX3BhcnNlX2RzazMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODU3LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg4NC0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODg1OiAqIGxkbV9wYXJzZV9kc2s0IC0gUmVhZCBhIHJhdyBWQkxLIERpc2sgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04ODYtICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04OTQtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg5NTpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZHNrNCAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04OTYte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTE3LS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MTg6ICogbGRtX3BhcnNlX3BydDMgLSBSZWFkIGEgcmF3IFZCTEsgUGFydGl0aW9uIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTE5LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTI3LSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5Mjg6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3BydDMoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05Mjkte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTkxLS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5OTI6ICogbGRtX3BhcnNlX3ZvbDUgLSBSZWFkIGEgcmF3IFZCTEsgVm9sdW1lIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTkzLSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAwMS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAwMjpzdGF0aWMgYm9vbCBsZG1fcGFyc2Vfdm9sNShjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMDMte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTA5OC0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTA5OTogKiBsZG1fcGFyc2VfdmJsayAtIFJlYWQgYSByYXcgVkJMSyBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMDAtICogQGJ1ZjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTA1LSAqIGluZm9ybWF0aW9uIGNvbW1vbiB0byBhbGwgVkJMSyB0eXBlcywgdGhlbiBkZWxlZ2F0ZXMgdGhlIHJlc3Qgb2YgdGhlIHdvcmsgdG9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEwNjogKiBoZWxwZXIgZnVuY3Rpb25zOiBsZG1fcGFyc2VfKi5cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTEwNy0gKlxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTExMC0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTExMTpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdmJsayAoY29uc3QgdTggKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTEyLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMzAtXHRzd2l0Y2ggKHZiLVx1MDAzZXR5cGUpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzMTpcdFx0Y2FzZSBWQkxLX0NNUDM6ICByZXN1bHQgPSBsZG1fcGFyc2VfY21wMyAoYnVmLCBsZW4sIHZiKTsgYnJlYWs7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExMzI6XHRcdGNhc2UgVkJMS19EU0szOiAgcmVzdWx0ID0gbGRtX3BhcnNlX2RzazMgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTMzOlx0XHRjYXNlIFZCTEtfRFNLNDogIHJlc3VsdCA9IGxkbV9wYXJzZV9kc2s0IChidWYsIGxlbiwgdmIpOyBicmVhaztcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzNDpcdFx0Y2FzZSBWQkxLX0RHUjM6ICByZXN1bHQgPSBsZG1fcGFyc2VfZGdyMyAoYnVmLCBsZW4sIHZiKTsgYnJlYWs7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExMzU6XHRcdGNhc2UgVkJMS19ER1I0OiAgcmVzdWx0ID0gbGRtX3BhcnNlX2RncjQgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTM2Olx0XHRjYXNlIFZCTEtfUFJUMzogIHJlc3VsdCA9IGxkbV9wYXJzZV9wcnQzIChidWYsIGxlbiwgdmIpOyBicmVhaztcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzNzpcdFx0Y2FzZSBWQkxLX1ZPTDU6ICByZXN1bHQgPSBsZG1fcGFyc2Vfdm9sNSAoYnVmLCBsZW4sIHZiKTsgYnJlYWs7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMzgtXHR9XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0xMTY0PXN0YXRpYyBib29sIGxkbV9sZG1kYl9hZGQgKHU4ICpkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbGRtZGIgKmxkYilcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExNzYtXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExNzc6XHRpZiAoIWxkbV9wYXJzZV92YmxrIChkYXRhLCBsZW4sIHZiKSkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTc4LVx0XHRrZnJlZSh2Yik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBvZiB0aGUgTERNIERhdGFiYXNlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRhdGFiYXNlIGlzIGJlaW5nIGJ1aWx0LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3Vlcy4gSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIGBsZG0uY2AuIE15IGh1bmNoIGlzIHRoYXQgdGhlIHByb2JsZW0gd2lsbCBiZSBhcm91bmQgdGhlIGBsZG1fbGRtZGJfYWRkYCBmdW5jdGlvbiwgb3Igc29tZXdoZXJlIGluIHRoZSB2aWNpbml0eSBvZiB3aGVyZSB0aGUgYHZiYCAod2hhdGV2ZXIgdGhhdCB2YXJpYWJsZSByZXByZXNlbnRzKSBpcyBhbGxvY2F0ZWQuIFRoYXQgYXJlYSBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZSBmb3IgYSBtZW1vcnkgbGVhaywgY29ycnVwdGlvbiwgb3IgYW4gaXNzdWUgd2l0aCBob3cgdGhlIGRhdGFiYXNlIGdyb3dzLiBMZXQmIzM5O3Mgc2VlIGhvdyBgdmJgIGlzIGhhbmRsZWQgdGhlcmUuLi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgbGlmZWN5Y2xlIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBmcmVlZCwgb3IgaWYgaXQmIzM5O3MgYmVpbmcgZnJlZWQgYXQgYWxsLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdmFsdWFibGUgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9sZG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE2MDpcdCAqXG4xMTYxOlx0ICogUmV0dXJuOiAgJiMzOTt0cnVlJiMzOTsgICBUaGUgVkJMSyB3YXMgYWRkZWRcbjExNjI6XHQgKiAgICAgICAgICAmIzM5O2ZhbHNlJiMzOTsgIEFuIGVycm9yIG9jY3VycmVkXG4xMTYzOlx0ICovXG4xMTY0Olx0c3RhdGljIGJvb2wgbGRtX2xkbWRiX2FkZCAodTggKmRhdGEsIGludCBsZW4sIHN0cnVjdCBsZG1kYiAqbGRiKVxuMTE2NTpcdHtcbjExNjY6XHRcdHN0cnVjdCB2YmxrICp2YjtcbjExNjc6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZW07XG4xMTY4Olx0XG4xMTY5Olx0XHRCVUdfT04gKCFkYXRhIHx8ICFsZGIpO1xuMTE3MDpcdFxuMTE3MTpcdFx0dmIgPSBrbWFsbG9jX29iaigqdmIpO1xuMTE3MjpcdFx0aWYgKCF2Yikge1xuMTE3MzpcdFx0XHRsZG1fY3JpdCAoXCYjMzQ7T3V0IG9mIG1lbW9yeS5cJiMzNDspO1xuMTE3NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMTc1Olx0XHR9XG4xMTc2Olx0XG4xMTc3Olx0XHRpZiAoIWxkbV9wYXJzZV92YmxrIChkYXRhLCBsZW4sIHZiKSkge1xuMTE3ODpcdFx0XHRrZnJlZSh2Yik7XG4xMTc5Olx0XHRcdHJldHVybiBmYWxzZTtcdFx0XHQvKiBBbHJlYWR5IGxvZ2dlZCAqL1xuMTE4MDpcdFx0fVxuMTE4MTpcdFxuMTE4MjpcdFx0LyogUHV0IHZibGsgaW50byB0aGUgY29ycmVjdCBsaXN0LiAqL1xuMTE4MzpcdFx0c3dpdGNoICh2Yi1cdTAwM2V0eXBlKSB7XG4xMTg0Olx0XHRjYXNlIFZCTEtfREdSMzpcbjExODU6XHRcdGNhc2UgVkJMS19ER1I0OlxuMTE4NjpcdFx0XHRsaXN0X2FkZCAoXHUwMDI2dmItXHUwMDNlbGlzdCwgXHUwMDI2bGRiLVx1MDAzZXZfZGdycCk7XG4xMTg3Olx0XHRcdGJyZWFrO1xuMTE4ODpcdFx0Y2FzZSBWQkxLX0RTSzM6XG4xMTg5Olx0XHRjYXNlIFZCTEtfRFNLNDpcbjExOTA6XHRcdFx0bGlzdF9hZGQgKFx1MDAyNnZiLVx1MDAzZWxpc3QsIFx1MDAyNmxkYi1cdTAwM2V2X2Rpc2spO1xuMTE5MTpcdFx0XHRicmVhaztcbjExOTI6XHRcdGNhc2UgVkJMS19WT0w1OlxuMTE5MzpcdFx0XHRsaXN0X2FkZCAoXHUwMDI2dmItXHUwMDNlbGlzdCwgXHUwMDI2bGRiLVx1MDAzZXZfdm9sdSk7XG4xMTk0Olx0XHRcdGJyZWFrO1xuMTE5NTpcdFx0Y2FzZSBWQkxLX0NNUDM6XG4xMTk2Olx0XHRcdGxpc3RfYWRkIChcdTAwMjZ2Yi1cdTAwM2VsaXN0LCBcdTAwMjZsZGItXHUwMDNldl9jb21wKTtcbjExOTc6XHRcdFx0YnJlYWs7XG4xMTk4Olx0XHRjYXNlIFZCTEtfUFJUMzpcbjExOTk6XHRcdFx0LyogU29ydCBieSB0aGUgcGFydGl0aW9uJiMzOTtzIHN0YXJ0IHNlY3Rvci4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY5OAoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTWVtb3J5IFNhZmV0eSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIHRoZSBMRE0gcGFydGl0aW9uIHBhcnNlci4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBsZG1fZ2V0X3ZzdHJgIGlzIHVzZWQgd2l0aGluIHRoZSBwYXJzaW5nIGZ1bmN0aW9ucyBsaWtlIGBsZG1fcGFyc2VfZHNrM2AgYW5kIGBsZG1fcGFyc2VfY21wM2AuIEkgbmVlZCB0byBzZWUgdGhlIGNhbGwgc2l0ZXMsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgpMb29raW5nIGF0IGBsZG1fZ2V0X3ZzdHJgIGl0c2VsZiwgdGhlIGNvcmUgaXNzdWUgaXMgY2xlYXIuIEl0IHdhcyB2dWxuZXJhYmxlIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIGZ1bmN0aW9uIG5haXZlbHkgY29waWVkIGEgc3RyaW5nIG9mIGBsZW5ndGhgIGJ5dGVzIGZyb20gYW4gaW5wdXQgYGJsb2NrYCwgc3RhcnRpbmcgYXQgYGJsb2NrICYjNDM7IDFgLCBpbnRvIGEgcHJvdmlkZWQgYGJ1ZmZlcmAgd2l0aG91dCBjaGVja2luZyBpZiB0aGF0IGBsZW5ndGhgIHdvdWxkIGV4Y2VlZCB0aGUgYm91bmRzIG9mIHRoZSBpbnB1dCBgYmxvY2tgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcmZsb3csIGFuZCBxdWl0ZSBmcmFua2x5LCBhIHByZXR0eSBiYXNpYyBvdmVyc2lnaHQuIFRoZSBwYXRjaCBjbGV2ZXJseSBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIGFnYWluc3QgYGJsb2NrbGVuYCwgdGhlIGFjdHVhbCBhdmFpbGFibGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIuICBJdCBsb29rcyBzb2xpZCBvbiBmaXJzdCBnbGFuY2UuIFRoZSBvdGhlciBuaWNlIHBvaW50IGlzIHRoYXQgZXZlbiBpZiBgYmxvY2tsZW4gJmx0OyAxYCB0aGVuIGBidWZmZXJbMF0gPSAmIzM5O1wwJiMzOTs7YCwgc28gdGhlIGJ1ZmZlciBpcyBhbHdheXMgbnVsbC10ZXJtaW5hdGVkLiBTbyBubyBpbml0aWFsaXphdGlvbiByaXNrcyBoZXJlLgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBcmUgd2UgcGFzc2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhbHVlcywgb3IgdXNpbmcgdGhlbSBpbiBjb25kaXRpb25hbHM/ICBOby4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSAqcHJldmVudHMqIG91dC1vZi1ib3VuZHMgcmVhZHMuICBJbXBvcnRhbnRseSwgdGhlIGJ1ZyAqZml4ZWQqIGhlcmUgaXMgZnVuZGFtZW50YWxseSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gYW4gZXhpc3RpbmcgYnVmZmVyLiBUaGlzIHR5cGUgb2YgdnVsbmVyYWJpbGl0eSBpcyAqZXhhY3RseSogd2hhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGZpeCBpcyBhIGJvdW5kcyBjaGVjaywgdGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgS01TQU4sIGFzIEtBU0FOIGhhbmRsZXMgdGhlIHJpc2suIEkgYW0gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOID0gZmFsc2VgLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgbXlzZWxmLiBUaGUgcnVsZSBpcywgYW5kIHRoaXMgbWFrZXMgc2Vuc2UsIHdoeSB1c2UgS01TQU4gaWYgS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgdG9vbHMgYWxyZWFkeSBjb3ZlciB0aGUgYnVnPyBNeSBhbmFseXNpcyBjb25maXJtcyB0aGlzOiB0aGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgaW4gTERNIHBhcnRpdGlvbiBwYXJzaW5nIGJ5IGNsYW1waW5nIHRoZSBzdHJpbmcgbGVuZ3RoIHRvIHRoZSBpbnB1dCBidWZmZXIgbGVuZ3RoLiBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCBoZXJlLiBUaGlzIGlzIG5vdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrczsgdGhvc2UgYXJlIHRoZSBkb21haW5zIG9mIEtNU0FOLCBhbmQgdGhhdCYjMzk7cyBub3Qgd2hhdCB3ZSYjMzk7cmUgYWRkcmVzc2luZyBoZXJlLgoKT2theSwgSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIGJ5IGFkZGluZyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IGJ1ZmZlciBsZW5ndGggKGBibG9ja2xlbmApIHdpdGhpbiBgbGRtX2dldF92c3RyKClgLiBQcmV2aW91c2x5LCBgbGRtX2dldF92c3RyKClgIG9ubHkgY2hlY2tlZCBvdXRwdXQgYnVmZmVyIGJvdW5kcyAoYGJ1ZmxlbmApLCBhbGxvd2luZyBhIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgbGVuZ3RoIGJ5dGUgaW4gYSBwYXJ0aXRpb24gc3RydWN0dXJlIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gXG5cbk91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSBmdWxseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIChLTVNBTiBkb21haW4pLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgaW4gYmxvY2svcGFydGl0aW9ucy9sZG0uYyBieSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIG9uIHRoZSBpbnB1dCBidWZmZXIgbGVuZ3RoIChgYmxvY2tsZW5gKSB3aXRoaW4gYGxkbV9nZXRfdnN0cigpYC4gUHJldmlvdXNseSwgYGxkbV9nZXRfdnN0cigpYCBvbmx5IGNoZWNrZWQgb3V0cHV0IGJ1ZmZlciBib3VuZHMgKGBidWZsZW5gKSwgYWxsb3dpbmcgYSBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzIGxlbmd0aCBieXRlIGluIGEgcGFydGl0aW9uIHN0cnVjdHVyZSB0byByZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIuIFxuXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgZnVsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyAoS01TQU4gZG9tYWluKS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MTU6MDguNDA3OTM2MzQxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NDUzMDQ3NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFSVElUSU9OX0FEVkFOQ0VEXCIsXG4gICAgXCJMRE1fUEFSVElUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGRtX2dldF92c3RyXCIsXG4gICAgXCJsZG1fcGFyc2VfdmJsa1wiLFxuICAgIFwibGRtX3BhcnNlX2NtcDNcIixcbiAgICBcImxkbV9wYXJzZV9kZ3IzXCIsXG4gICAgXCJsZG1fcGFyc2VfZGdyNFwiLFxuICAgIFwibGRtX3BhcnNlX2RzazNcIixcbiAgICBcImxkbV9wYXJzZV92b2w1XCIsXG4gICAgXCJsZG1fcGFydGl0aW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIGJ5IGFkZGluZyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IGJ1ZmZlciBsZW5ndGggKGBibG9ja2xlbmApIHdpdGhpbiBgbGRtX2dldF92c3RyKClgLiBQcmV2aW91c2x5LCBgbGRtX2dldF92c3RyKClgIG9ubHkgY2hlY2tlZCBvdXRwdXQgYnVmZmVyIGJvdW5kcyAoYGJ1ZmxlbmApLCBhbGxvd2luZyBhIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgbGVuZ3RoIGJ5dGUgaW4gYSBwYXJ0aXRpb24gc3RydWN0dXJlIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gXFxuXFxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIGZ1bGx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgKEtNU0FOIGRvbWFpbikuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpbmRvd3MgTG9naWNhbCBEaXNrIE1hbmFnZXIgKExETSkgcGFydGl0aW9uIHBhcnNlciBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgd2hlbiByZWFkaW5nIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmdzLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGJsb2NrIGRldmljZSBwYXJ0aXRpb24gc2Nhbm5pbmcgKGUuZy4sIGxvb3AgZGV2aWNlcykgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB0cnVuY2F0aW9ucywgb3IgdW5leHBlY3RlZCBwYXJzZXIgYmVoYXZpb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNTowOC40MDc5NDA4ODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTE0NDczMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZjBkZDQzZmQ3MjNkOWYyNDliZGY3YTkwMzAzMDQxMmYwYWQ2NWJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMjE6MTU6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9sZG0uYyBiL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcXG5pbmRleCBjMGJkY2FlNThhM2VlLi41NDY4ZTAzOGEwOWY0IDEwMDY0NFxcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL2xkbS5jXFxuQEAgLTY3Myw2ICs2NzMsNyBAQCBzdGF0aWMgdTY0IGxkbV9nZXRfdm51bSAoY29uc3QgdTggKmJsb2NrKVxcbiAvKipcXG4gICogbGRtX2dldF92c3RyIC0gUmVhZCBhIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmcgaW50byBhIGJ1ZmZlclxcbiAgKiBAYmxvY2s6ICAgUG9pbnRlciB0byB0aGUgbGVuZ3RoIG1hcmtlclxcbisgKiBAYmxvY2tsZW46IE51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgQGJsb2NrXFxuICAqIEBidWZmZXI6ICBMb2NhdGlvbiB0byBjb3B5IHN0cmluZyB0b1xcbiAgKiBAYnVmbGVuOiAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlclxcbiAgKlxcbkBAIC02ODAsMjAgKzY4MSwyNyBAQCBzdGF0aWMgdTY0IGxkbV9nZXRfdm51bSAoY29uc3QgdTggKmJsb2NrKVxcbiAgKiB0aGV5IGFyZSBwcmVmaXhlZCBieSBhIG9uZSBieXRlIGxlbmd0aCBtYXJrZXIuICBUaGlzIGZ1bmN0aW9uIGNvcGllcyBvbmUgb2ZcXG4gICogdGhlc2Ugc3RyaW5ncyBpbnRvIGEgYnVmZmVyLlxcbiAgKlxcbi0gKiBOLkIuICBUaGlzIGZ1bmN0aW9uIERPRVMgTk9UIHBlcmZvcm0gYW55IHJhbmdlIGNoZWNraW5nIG9uIHRoZSBpbnB1dC5cXG4tICogICAgICAgSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwsIHRoZSBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQuXFxuKyAqIE4uQi4gIFRoZSBzdHJpbmcgaXMgY2xhbXBlZCB0byBib3RoIEBibG9ja2xlbiBhbmQgQGJ1ZmxlbjsgaWYgZWl0aGVyXFxuKyAqICAgICAgIGlzIHRvbyBzbWFsbCB0aGUgb3V0cHV0IHdpbGwgYmUgdHJ1bmNhdGVkLlxcbiAgKlxcbiAgKiBSZXR1cm46ICAwLCBFcnJvciBhbmQgQGJ1ZmZlciBjb250ZW50cyBhcmUgdW5kZWZpbmVkXFxuICAqICAgICAgICAgIG4sIFN0cmluZyBsZW5ndGggaW4gY2hhcmFjdGVycyAoZXhjbHVkaW5nIE5VTEwpXFxuICAqICAgICAgICAgIGJ1Zmxlbi0xLCBTdHJpbmcgd2FzIHRydW5jYXRlZC5cXG4gICovXFxuLXN0YXRpYyBpbnQgbGRtX2dldF92c3RyIChjb25zdCB1OCAqYmxvY2ssIHU4ICpidWZmZXIsIGludCBidWZsZW4pXFxuK3N0YXRpYyBpbnQgbGRtX2dldF92c3RyKGNvbnN0IHU4ICpibG9jaywgaW50IGJsb2NrbGVuLCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuKVxcbiB7XFxuIFxcdGludCBsZW5ndGg7XFxuIFxcbiBcXHRCVUdfT04gKCFibG9jayB8fCAhYnVmZmVyKTtcXG4gXFxuK1xcdGlmIChibG9ja2xlbiBcXHUwMDNjIDEpIHtcXG4rXFx0XFx0YnVmZmVyWzBdID0gJ1xcXFwwJztcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdGxlbmd0aCA9IGJsb2NrWzBdO1xcbitcXHRpZiAobGVuZ3RoIFxcdTAwM2UgYmxvY2tsZW4gLSAxKVxcbitcXHRcXHRsZW5ndGggPSBibG9ja2xlbiAtIDE7XFxuIFxcdGlmIChsZW5ndGggXFx1MDAzZT0gYnVmbGVuKSB7XFxuIFxcdFxcdGxkbV9lcnJvciAoXFxcIlRydW5jYXRpbmcgc3RyaW5nICVkIC1cXHUwMDNlICVkLlxcXCIsIGxlbmd0aCwgYnVmbGVuKTtcXG4gXFx0XFx0bGVuZ3RoID0gYnVmbGVuIC0gMTtcXG5AQCAtNzQ0LDggKzc1Miw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGNvbXAgPSBcXHUwMDI2dmItXFx1MDAzZXZibGsuY29tcDtcXG4tXFx0bGRtX2dldF92c3RyIChidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBjb21wLVxcdTAwM2VzdGF0ZSxcXG4tXFx0XFx0c2l6ZW9mIChjb21wLVxcdTAwM2VzdGF0ZSkpO1xcbitcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxcbitcXHRcXHRjb21wLVxcdTAwM2VzdGF0ZSwgc2l6ZW9mKGNvbXAtXFx1MDAzZXN0YXRlKSk7XFxuIFxcdGNvbXAtXFx1MDAzZXR5cGUgICAgICA9IGJ1ZmZlclsweDE4ICsgcl92c3RhdGVdO1xcbiBcXHRjb21wLVxcdTAwM2VjaGlsZHJlbiAgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciArIDB4MUQgKyByX3ZzdGF0ZSk7XFxuIFxcdGNvbXAtXFx1MDAzZXBhcmVudF9pZCA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICsgMHgyRCArIHJfY2hpbGQpO1xcbkBAIC03OTAsOCArNzk4LDggQEAgc3RhdGljIGludCBsZG1fcGFyc2VfZGdyMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRkZ3JwID0gXFx1MDAyNnZiLVxcdTAwM2V2YmxrLmRncnA7XFxuLVxcdGxkbV9nZXRfdnN0ciAoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgZGdycC1cXHUwMDNlZGlza19pZCxcXG4tXFx0XFx0c2l6ZW9mIChkZ3JwLVxcdTAwM2VkaXNrX2lkKSk7XFxuK1xcdGxkbV9nZXRfdnN0cihidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBidWZsZW4gLSAoMHgxOCArIHJfbmFtZSksXFxuK1xcdFxcdGRncnAtXFx1MDAzZWRpc2tfaWQsIHNpemVvZihkZ3JwLVxcdTAwM2VkaXNrX2lkKSk7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbkBAIC04MjksNyArODM3LDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX2RncjQgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG4gXFx0aWYgKGxlbiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICsgMHgxNCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGxkbV9nZXRfdnN0ciAoYnVmZmVyICsgMHgxOCArIHJfb2JqaWQsIGJ1Ziwgc2l6ZW9mIChidWYpKTtcXG4rXFx0bGRtX2dldF92c3RyKGJ1ZmZlciArIDB4MTggKyByX29iamlkLCBidWZsZW4gLSAoMHgxOCArIHJfb2JqaWQpLFxcbitcXHRcXHRidWYsIHNpemVvZihidWYpKTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTg2NCw4ICs4NzMsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZHNrMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRkaXNrID0gXFx1MDAyNnZiLVxcdTAwM2V2YmxrLmRpc2s7XFxuLVxcdGxkbV9nZXRfdnN0ciAoYnVmZmVyICsgMHgxOCArIHJfZGlza2lkLCBkaXNrLVxcdTAwM2VhbHRfbmFtZSxcXG4tXFx0XFx0c2l6ZW9mIChkaXNrLVxcdTAwM2VhbHRfbmFtZSkpO1xcbitcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfZGlza2lkLCBidWZsZW4gLSAoMHgxOCArIHJfZGlza2lkKSxcXG4rXFx0XFx0ZGlzay1cXHUwMDNlYWx0X25hbWUsIHNpemVvZihkaXNrLVxcdTAwM2VhbHRfbmFtZSkpO1xcbiBcXHRpZiAodXVpZF9wYXJzZShidWZmZXIgKyAweDE5ICsgcl9uYW1lLCBcXHUwMDI2ZGlzay1cXHUwMDNlZGlza19pZCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuQEAgLTEwNzIsMTYgKzEwODEsMTYgQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZvbDUoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFx0dm9sdSA9IFxcdTAwMjZ2Yi1cXHUwMDNldmJsay52b2x1O1xcbi1cXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgdm9sdS1cXHUwMDNldm9sdW1lX3R5cGUsXFxuLVxcdFxcdFxcdHNpemVvZih2b2x1LVxcdTAwM2V2b2x1bWVfdHlwZSkpO1xcbitcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxcbitcXHRcXHRcXHR2b2x1LVxcdTAwM2V2b2x1bWVfdHlwZSwgc2l6ZW9mKHZvbHUtXFx1MDAzZXZvbHVtZV90eXBlKSk7XFxuIFxcdG1lbWNweSh2b2x1LVxcdTAwM2V2b2x1bWVfc3RhdGUsIGJ1ZmZlciArIDB4MTggKyByX2Rpc2FibGVfZHJpdmVfbGV0dGVyLFxcbiBcXHRcXHRcXHRzaXplb2Yodm9sdS1cXHUwMDNldm9sdW1lX3N0YXRlKSk7XFxuIFxcdHZvbHUtXFx1MDAzZXNpemUgPSBsZG1fZ2V0X3ZudW0oYnVmZmVyICsgMHgzRCArIHJfY2hpbGQpO1xcbiBcXHR2b2x1LVxcdTAwM2VwYXJ0aXRpb25fdHlwZSA9IGJ1ZmZlclsweDQxICsgcl9zaXplXTtcXG4gXFx0bWVtY3B5KHZvbHUtXFx1MDAzZWd1aWQsIGJ1ZmZlciArIDB4NDIgKyByX3NpemUsIHNpemVvZih2b2x1LVxcdTAwM2VndWlkKSk7XFxuIFxcdGlmIChidWZmZXJbMHgxMl0gXFx1MDAyNiBWQkxLX0ZMQUdfVk9MVV9EUklWRSkge1xcbi1cXHRcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHg1MiArIHJfc2l6ZSwgdm9sdS1cXHUwMDNlZHJpdmVfaGludCxcXG4tXFx0XFx0XFx0XFx0c2l6ZW9mKHZvbHUtXFx1MDAzZWRyaXZlX2hpbnQpKTtcXG4rXFx0XFx0bGRtX2dldF92c3RyKGJ1ZmZlciArIDB4NTIgKyByX3NpemUsIGJ1ZmxlbiAtICgweDUyICsgcl9zaXplKSxcXG4rXFx0XFx0XFx0XFx0dm9sdS1cXHUwMDNlZHJpdmVfaGludCwgc2l6ZW9mKHZvbHUtXFx1MDAzZWRyaXZlX2hpbnQpKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbkBAIC0xMTE1LDcgKzExMjQsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdmJsayAoY29uc3QgdTggKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHZibGsgKnZiKVxcbiBcXHR2Yi1cXHUwMDNlZmxhZ3MgID0gYnVmWzB4MTJdO1xcbiBcXHR2Yi1cXHUwMDNldHlwZSAgID0gYnVmWzB4MTNdO1xcbiBcXHR2Yi1cXHUwMDNlb2JqX2lkID0gbGRtX2dldF92bnVtIChidWYgKyAweDE4KTtcXG4tXFx0bGRtX2dldF92c3RyIChidWYrMHgxOCtyX29iamlkLCB2Yi1cXHUwMDNlbmFtZSwgc2l6ZW9mICh2Yi1cXHUwMDNlbmFtZSkpO1xcbitcXHRsZG1fZ2V0X3ZzdHIoYnVmICsgMHgxOCArIHJfb2JqaWQsIGxlbiAtICgweDE4ICsgcl9vYmppZCksXFxuK1xcdFxcdHZiLVxcdTAwM2VuYW1lLCBzaXplb2YodmItXFx1MDAzZW5hbWUpKTtcXG4gXFxuIFxcdHN3aXRjaCAodmItXFx1MDAzZXR5cGUpIHtcXG4gXFx0XFx0Y2FzZSBWQkxLX0NNUDM6ICByZXN1bHQgPSBsZG1fcGFyc2VfY21wMyAoYnVmLCBsZW4sIHZiKTsgYnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjA5Ljg1OTk3MTE1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjcxNjAxMzA5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFSVElUSU9OX0FEVkFOQ0VEXCIsXG4gICAgXCJMRE1fUEFSVElUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGRtX2dldF92c3RyXCIsXG4gICAgXCJsZG1fcGFyc2VfdmJsa1wiLFxuICAgIFwibGRtX3BhcnNlX2NtcDNcIixcbiAgICBcImxkbV9wYXJzZV9kZ3IzXCIsXG4gICAgXCJsZG1fcGFyc2VfZGdyNFwiLFxuICAgIFwibGRtX3BhcnNlX2RzazNcIixcbiAgICBcImxkbV9wYXJzZV92b2w1XCIsXG4gICAgXCJsZG1fcGFydGl0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpbmRvd3MgTG9naWNhbCBEaXNrIE1hbmFnZXIgKExETSkgcGFydGl0aW9uIHBhcnNlciBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgd2hlbiByZWFkaW5nIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmdzLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGJsb2NrIGRldmljZSBwYXJ0aXRpb24gc2Nhbm5pbmcgKGUuZy4sIGxvb3AgZGV2aWNlcykgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB0cnVuY2F0aW9ucywgb3IgdW5leHBlY3RlZCBwYXJzZXIgYmVoYXZpb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNmMGRkNDNmZDcyM2Q5ZjI0OWJkZjdhOTAzMDMwNDEyZjBhZDY1YmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIxOjE1OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9sZG0uYyBiL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcbmluZGV4IGMwYmRjYWU1OGEzZWUuLjU0NjhlMDM4YTA5ZjQgMTAwNjQ0XG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2xkbS5jXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL2xkbS5jXG5AQCAtNjczLDYgKzY3Myw3IEBAIHN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spXG4gLyoqXG4gICogbGRtX2dldF92c3RyIC0gUmVhZCBhIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmcgaW50byBhIGJ1ZmZlclxuICAqIEBibG9jazogICBQb2ludGVyIHRvIHRoZSBsZW5ndGggbWFya2VyXG4rICogQGJsb2NrbGVuOiBOdW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IEBibG9ja1xuICAqIEBidWZmZXI6ICBMb2NhdGlvbiB0byBjb3B5IHN0cmluZyB0b1xuICAqIEBidWZsZW46ICBTaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyXG4gICpcbkBAIC02ODAsMjAgKzY4MSwyNyBAQCBzdGF0aWMgdTY0IGxkbV9nZXRfdm51bSAoY29uc3QgdTggKmJsb2NrKVxuICAqIHRoZXkgYXJlIHByZWZpeGVkIGJ5IGEgb25lIGJ5dGUgbGVuZ3RoIG1hcmtlci4gIFRoaXMgZnVuY3Rpb24gY29waWVzIG9uZSBvZlxuICAqIHRoZXNlIHN0cmluZ3MgaW50byBhIGJ1ZmZlci5cbiAgKlxuLSAqIE4uQi4gIFRoaXMgZnVuY3Rpb24gRE9FUyBOT1QgcGVyZm9ybSBhbnkgcmFuZ2UgY2hlY2tpbmcgb24gdGhlIGlucHV0LlxuLSAqICAgICAgIElmIHRoZSBidWZmZXIgaXMgdG9vIHNtYWxsLCB0aGUgb3V0cHV0IHdpbGwgYmUgdHJ1bmNhdGVkLlxuKyAqIE4uQi4gIFRoZSBzdHJpbmcgaXMgY2xhbXBlZCB0byBib3RoIEBibG9ja2xlbiBhbmQgQGJ1ZmxlbjsgaWYgZWl0aGVyXG4rICogICAgICAgaXMgdG9vIHNtYWxsIHRoZSBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQuXG4gICpcbiAgKiBSZXR1cm46ICAwLCBFcnJvciBhbmQgQGJ1ZmZlciBjb250ZW50cyBhcmUgdW5kZWZpbmVkXG4gICogICAgICAgICAgbiwgU3RyaW5nIGxlbmd0aCBpbiBjaGFyYWN0ZXJzIChleGNsdWRpbmcgTlVMTClcbiAgKiAgICAgICAgICBidWZsZW4tMSwgU3RyaW5nIHdhcyB0cnVuY2F0ZWQuXG4gICovXG4tc3RhdGljIGludCBsZG1fZ2V0X3ZzdHIgKGNvbnN0IHU4ICpibG9jaywgdTggKmJ1ZmZlciwgaW50IGJ1ZmxlbilcbitzdGF0aWMgaW50IGxkbV9nZXRfdnN0cihjb25zdCB1OCAqYmxvY2ssIGludCBibG9ja2xlbiwgdTggKmJ1ZmZlciwgaW50IGJ1ZmxlbilcbiB7XG4gXHRpbnQgbGVuZ3RoO1xuIFxuIFx0QlVHX09OICghYmxvY2sgfHwgIWJ1ZmZlcik7XG4gXG4rXHRpZiAoYmxvY2tsZW4gXHUwMDNjIDEpIHtcbitcdFx0YnVmZmVyWzBdID0gJ1xcMCc7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuIFx0bGVuZ3RoID0gYmxvY2tbMF07XG4rXHRpZiAobGVuZ3RoIFx1MDAzZSBibG9ja2xlbiAtIDEpXG4rXHRcdGxlbmd0aCA9IGJsb2NrbGVuIC0gMTtcbiBcdGlmIChsZW5ndGggXHUwMDNlPSBidWZsZW4pIHtcbiBcdFx0bGRtX2Vycm9yIChcIlRydW5jYXRpbmcgc3RyaW5nICVkIC1cdTAwM2UgJWQuXCIsIGxlbmd0aCwgYnVmbGVuKTtcbiBcdFx0bGVuZ3RoID0gYnVmbGVuIC0gMTtcbkBAIC03NDQsOCArNzUyLDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX2NtcDMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Y29tcCA9IFx1MDAyNnZiLVx1MDAzZXZibGsuY29tcDtcbi1cdGxkbV9nZXRfdnN0ciAoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgY29tcC1cdTAwM2VzdGF0ZSxcbi1cdFx0c2l6ZW9mIChjb21wLVx1MDAzZXN0YXRlKSk7XG4rXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxuK1x0XHRjb21wLVx1MDAzZXN0YXRlLCBzaXplb2YoY29tcC1cdTAwM2VzdGF0ZSkpO1xuIFx0Y29tcC1cdTAwM2V0eXBlICAgICAgPSBidWZmZXJbMHgxOCArIHJfdnN0YXRlXTtcbiBcdGNvbXAtXHUwMDNlY2hpbGRyZW4gID0gbGRtX2dldF92bnVtIChidWZmZXIgKyAweDFEICsgcl92c3RhdGUpO1xuIFx0Y29tcC1cdTAwM2VwYXJlbnRfaWQgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciArIDB4MkQgKyByX2NoaWxkKTtcbkBAIC03OTAsOCArNzk4LDggQEAgc3RhdGljIGludCBsZG1fcGFyc2VfZGdyMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRkZ3JwID0gXHUwMDI2dmItXHUwMDNldmJsay5kZ3JwO1xuLVx0bGRtX2dldF92c3RyIChidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBkZ3JwLVx1MDAzZWRpc2tfaWQsXG4tXHRcdHNpemVvZiAoZGdycC1cdTAwM2VkaXNrX2lkKSk7XG4rXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxuK1x0XHRkZ3JwLVx1MDAzZWRpc2tfaWQsIHNpemVvZihkZ3JwLVx1MDAzZWRpc2tfaWQpKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC04MjksNyArODM3LDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX2RncjQgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcbiBcdGlmIChsZW4gIT0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1ZmZlciArIDB4MTQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciArIDB4MTggKyByX29iamlkLCBidWYsIHNpemVvZiAoYnVmKSk7XG4rXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfb2JqaWQsIGJ1ZmxlbiAtICgweDE4ICsgcl9vYmppZCksXG4rXHRcdGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTg2NCw4ICs4NzMsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZHNrMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRkaXNrID0gXHUwMDI2dmItXHUwMDNldmJsay5kaXNrO1xuLVx0bGRtX2dldF92c3RyIChidWZmZXIgKyAweDE4ICsgcl9kaXNraWQsIGRpc2stXHUwMDNlYWx0X25hbWUsXG4tXHRcdHNpemVvZiAoZGlzay1cdTAwM2VhbHRfbmFtZSkpO1xuK1x0bGRtX2dldF92c3RyKGJ1ZmZlciArIDB4MTggKyByX2Rpc2tpZCwgYnVmbGVuIC0gKDB4MTggKyByX2Rpc2tpZCksXG4rXHRcdGRpc2stXHUwMDNlYWx0X25hbWUsIHNpemVvZihkaXNrLVx1MDAzZWFsdF9uYW1lKSk7XG4gXHRpZiAodXVpZF9wYXJzZShidWZmZXIgKyAweDE5ICsgcl9uYW1lLCBcdTAwMjZkaXNrLVx1MDAzZWRpc2tfaWQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtMTA3MiwxNiArMTA4MSwxNiBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2Vfdm9sNShjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcdHZvbHUgPSBcdTAwMjZ2Yi1cdTAwM2V2YmxrLnZvbHU7XG4tXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgdm9sdS1cdTAwM2V2b2x1bWVfdHlwZSxcbi1cdFx0XHRzaXplb2Yodm9sdS1cdTAwM2V2b2x1bWVfdHlwZSkpO1xuK1x0bGRtX2dldF92c3RyKGJ1ZmZlciArIDB4MTggKyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICsgcl9uYW1lKSxcbitcdFx0XHR2b2x1LVx1MDAzZXZvbHVtZV90eXBlLCBzaXplb2Yodm9sdS1cdTAwM2V2b2x1bWVfdHlwZSkpO1xuIFx0bWVtY3B5KHZvbHUtXHUwMDNldm9sdW1lX3N0YXRlLCBidWZmZXIgKyAweDE4ICsgcl9kaXNhYmxlX2RyaXZlX2xldHRlcixcbiBcdFx0XHRzaXplb2Yodm9sdS1cdTAwM2V2b2x1bWVfc3RhdGUpKTtcbiBcdHZvbHUtXHUwMDNlc2l6ZSA9IGxkbV9nZXRfdm51bShidWZmZXIgKyAweDNEICsgcl9jaGlsZCk7XG4gXHR2b2x1LVx1MDAzZXBhcnRpdGlvbl90eXBlID0gYnVmZmVyWzB4NDEgKyByX3NpemVdO1xuIFx0bWVtY3B5KHZvbHUtXHUwMDNlZ3VpZCwgYnVmZmVyICsgMHg0MiArIHJfc2l6ZSwgc2l6ZW9mKHZvbHUtXHUwMDNlZ3VpZCkpO1xuIFx0aWYgKGJ1ZmZlclsweDEyXSBcdTAwMjYgVkJMS19GTEFHX1ZPTFVfRFJJVkUpIHtcbi1cdFx0bGRtX2dldF92c3RyKGJ1ZmZlciArIDB4NTIgKyByX3NpemUsIHZvbHUtXHUwMDNlZHJpdmVfaGludCxcbi1cdFx0XHRcdHNpemVvZih2b2x1LVx1MDAzZWRyaXZlX2hpbnQpKTtcbitcdFx0bGRtX2dldF92c3RyKGJ1ZmZlciArIDB4NTIgKyByX3NpemUsIGJ1ZmxlbiAtICgweDUyICsgcl9zaXplKSxcbitcdFx0XHRcdHZvbHUtXHUwMDNlZHJpdmVfaGludCwgc2l6ZW9mKHZvbHUtXHUwMDNlZHJpdmVfaGludCkpO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTExMTUsNyArMTEyNCw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV92YmxrIChjb25zdCB1OCAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gXHR2Yi1cdTAwM2VmbGFncyAgPSBidWZbMHgxMl07XG4gXHR2Yi1cdTAwM2V0eXBlICAgPSBidWZbMHgxM107XG4gXHR2Yi1cdTAwM2VvYmpfaWQgPSBsZG1fZ2V0X3ZudW0gKGJ1ZiArIDB4MTgpO1xuLVx0bGRtX2dldF92c3RyIChidWYrMHgxOCtyX29iamlkLCB2Yi1cdTAwM2VuYW1lLCBzaXplb2YgKHZiLVx1MDAzZW5hbWUpKTtcbitcdGxkbV9nZXRfdnN0cihidWYgKyAweDE4ICsgcl9vYmppZCwgbGVuIC0gKDB4MTggKyByX29iamlkKSxcbitcdFx0dmItXHUwMDNlbmFtZSwgc2l6ZW9mKHZiLVx1MDAzZW5hbWUpKTtcbiBcbiBcdHN3aXRjaCAodmItXHUwMDNldHlwZSkge1xuIFx0XHRjYXNlIFZCTEtfQ01QMzogIHJlc3VsdCA9IGxkbV9wYXJzZV9jbXAzIChidWYsIGxlbiwgdmIpOyBicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjA5Ljg1OTk3MjQ0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwODgzNjAyMDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBMRE0gVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgZnV6emluZyBtYWtlcyBzZW5zZSBoZXJlLCBhbmQgaG93IHdlJ2QgZ28gYWJvdXQgaXQuIFRoZSBjaGFuZ2UgaXMgaW4gYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyBwYXJ0aXRpb24gdGFibGUgcGFyc2luZywgc28gd2UncmUgcHJvYmFibHkgbG9va2luZyBhdCBhIGZpbGUgc3lzdGVtIGRyaXZlciBvciBkaXNrIHV0aWxpdHkuIFRoYXQncyBhbHdheXMgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuXG5cblRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiB0aGUgYGxkbV9nZXRfdnN0cmAgZnVuY3Rpb24sIGFkZGluZyBhIGBibG9ja2xlbmAgYXJndW1lbnQgYW5kIGJvdW5kIGNoZWNrcy4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIGl0IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaGFuZGxpbmcgTERNIChMb2dpY2FsIERpc2sgTWFuYWdlciwgV2luZG93cyBEeW5hbWljIERpc2tzKSBwYXJ0aXRpb24gdGFibGVzIGFuZCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBvbiBlbmhhbmNpbmcgbWVtb3J5IHNhZmV0eSBkdXJpbmcgcGFydGl0aW9uIHRhYmxlIHBhcnNpbmcuIEFsbCB0aGUgb3RoZXIgZnVuY3Rpb25zLCBgbGRtX3BhcnNlX2NtcDNgLCBgbGRtX3BhcnNlX2RncjNgLCBgbGRtX3BhcnNlX2RncjRgLCBgbGRtX3BhcnNlX2RzazNgLCBgbGRtX3BhcnNlX3ZvbDVgLCBhbmQgYGxkbV9wYXJzZV92YmxrYCwgYXJlIHVwZGF0ZWQgdG8gY2FsbCB0aGlzIG1vZGlmaWVkIGBsZG1fZ2V0X3ZzdHJgLiBJdCdzIHByZXR0eSBjbGVhciB0aGF0IGBsZG1fZ2V0X3ZzdHJgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSwgYW5kIGlmIHdlJ3JlIHN1Y2Nlc3NmdWwsIGl0IHdpbGwgYmUuXG5cbk5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgYmxvY2svcGFydGl0aW9ucy9sZG0uY2AgdG8gc2VlIGhvdyB0byBlbmFibGUgdGhpcyBmZWF0dXJlLiBJJ2xsIGVpdGhlciB1c2UgYGdyZXBwZXJgIG9yIGp1c3QgcmVhZCB0aGUgZmlsZSBkaXJlY3RseSwgYW5kIGZpbmQgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBwYXJ0aXRpb24gcGFyc2luZyBpcyBpbnZva2VkIHRvIHByb3Blcmx5IHNjb3BlIHRoZSBmdXp6aW5nLiBPbmNlIEkgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbnMsIEknbGwgYmUgYWJsZSB0byBmb2N1cyBvbiB3aGF0IHRvIGZ1enogYW5kIGhvdyBiZXN0IHRvIGRvIGl0LiBUaGUgdGFyZ2V0IGlzIGNsZWFyOiB0aGlzIGBsZG1fZ2V0X3ZzdHJgIGZ1bmN0aW9uIGlzIHRoZSBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY0NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjIwLjc0MzU3NjQ1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE4OTg1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJMRE1fUEFSVElUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL3BhcnRpdGlvbnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svcGFydGl0aW9ucy9LY29uZmlnPTE1OD1jb25maWcgVU5JWFdBUkVfRElTS0xBQkVMXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMTc3LVxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZzoxNzg6Y29uZmlnIExETV9QQVJUSVRJT05cXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMTc5LVxcdGJvb2wgXFxcIldpbmRvd3MgTG9naWNhbCBEaXNrIE1hbmFnZXIgKER5bmFtaWMgRGlzaykgc3VwcG9ydFxcXCJcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZz0yMDM9Y29uZmlnIExETV9ERUJVR1xcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy0yMDQtXFx0Ym9vbCBcXFwiV2luZG93cyBMRE0gZXh0cmEgbG9nZ2luZ1xcXCJcXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWc6MjA1OlxcdGRlcGVuZHMgb24gTERNX1BBUlRJVElPTlxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy0yMDYtXFx0aGVscFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfTUFDX1BBUlRJVElPTikgKz0gbWFjLm9cXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19MRE1fUEFSVElUSU9OKSArPSBsZG0ub1xcbmJsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX01TRE9TX1BBUlRJVElPTikgKz0gbXNkb3Mub1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MTc9c3RhdGljIGludCAoKmNvbnN0IGNoZWNrX3BhcnRbXSkoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICopID0ge1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNTYtI2VuZGlmXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6NTc6I2lmZGVmIENPTkZJR19MRE1fUEFSVElUSU9OXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNTgtXFx0bGRtX3BhcnRpdGlvbixcXHRcXHQvKiB0aGlzIG11c3QgY29tZSBiZWZvcmUgbXNkb3MgKi9cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9NDkwPXN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV9wYXJ0aXRpb25fdGFibGUoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTEwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA0OyBpKyssIHArKylcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjUxMTpcXHRcXHRpZiAocC1cXHUwMDNlc3lzX2luZCA9PSBMRE1fUEFSVElUSU9OKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01MTItXFx0XFx0XFx0cmVzdWx0ID0gdHJ1ZTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmg9MjE9c3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uaC04MC1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5oOjgxOiNkZWZpbmUgTERNX1BBUlRJVElPTlxcdFxcdDB4NDJcXHRcXHQvKiBGb3JtZXJseSBTRlMgKExhbmRpcykuICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uaC04Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MTU6MjAuNzg2NzY4Njk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzNjEyMjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIENPTkZJR19MRE1fUEFSVElUSU9OKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgQ09ORklHX0xETV9QQVJUSVRJT05gIGRlcGVuZHMgb24uIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyB0aGV5J3JlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgZGVzY3JpYmluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGludG8gYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AgYW5kIHpvb20gaW4gYXJvdW5kIGxpbmUgMTc4LiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3BvdCB0byBmaW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYW5kIHRoZWlyIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgbGlzdCBvZiBcImRlcGVuZHMgb25cIiBzdGF0ZW1lbnRzIG9yIG90aGVyIHJlbGV2YW50IGxvZ2ljIHRoYXQgZGljdGF0ZXMgd2hlbiB0aGlzIG9wdGlvbiBpcyBhdmFpbGFibGUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhlcmUsIGFuZCB0aGVuIEknbGwgZm9ybXVsYXRlIGEgY29uY2x1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjIyLjYyMjg5MzMzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0XFx0ICBMaW51eCBib3ggdmlhIGEgcmVtb3ZhYmxlIG1lZGl1bSBsaWtlIG1hZ25ldG8tb3B0aWNhbCwgWklQIG9yXFxuIDE3MTpcXHRcXHQgIHJlbW92YWJsZSBJREUgZHJpdmVzLiBOb3RlLCBob3dldmVyLCB0aGF0IGEgZ29vZCBwb3J0YWJsZSB3YXkgdG9cXG4gMTcyOlxcdFxcdCAgdHJhbnNwb3J0IGZpbGVzIGFuZCBkaXJlY3RvcmllcyBiZXR3ZWVuIHVuaXhlcyAoYW5kIGV2ZW4gb3RoZXJcXG4gMTczOlxcdFxcdCAgb3BlcmF0aW5nIHN5c3RlbXMpIGlzIGdpdmVuIGJ5IHRoZSB0YXIgcHJvZ3JhbSAoXFxcIm1hbiB0YXJcXFwiIG9yXFxuIDE3NDpcXHRcXHQgIHByZWZlcmFibHkgXFxcImluZm8gdGFyXFxcIikuXFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBhbGwgdGhpcyBpcyBhYm91dCwgc2F5IE4uXFxuIDE3NzpcXHRcXG4gMTc4OlxcdGNvbmZpZyBMRE1fUEFSVElUSU9OXFxuIDE3OTpcXHRcXHRib29sIFxcXCJXaW5kb3dzIExvZ2ljYWwgRGlzayBNYW5hZ2VyIChEeW5hbWljIERpc2spIHN1cHBvcnRcXFwiXFxuIDE4MDpcXHRcXHRkZXBlbmRzIG9uIFBBUlRJVElPTl9BRFZBTkNFRFxcbiAxODE6XFx0XFx0aGVscFxcbiAxODI6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBoYXJkIGRpc2tzIHVuZGVyIExpbnV4IHdoaWNoXFxuIDE4MzpcXHRcXHQgIHdlcmUgcGFydGl0aW9uZWQgdXNpbmcgV2luZG93cyAyMDAwJ3MvWFAncyBvciBWaXN0YSdzIExvZ2ljYWwgRGlza1xcbiAxODQ6XFx0XFx0ICBNYW5hZ2VyLiAgVGhleSBhcmUgYWxzbyBrbm93biBhcyBcXFwiRHluYW1pYyBEaXNrc1xcXCIuXFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdCAgTm90ZSB0aGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIER5bmFtaWMgRGlza3Mgd2l0aCBhIHByb3RlY3RpdmUgTUJSXFxuIDE4NzpcXHRcXHQgIGxhYmVsLCBpLmUuIERPUyBwYXJ0aXRpb24gdGFibGUuICBJdCBkb2VzIG5vdCBzdXBwb3J0IEdQVCBsYWJlbGxlZFxcbiAxODg6XFx0XFx0ICBEeW5hbWljIERpc2tzIHlldCBhcyBjYW4gYmUgY3JlYXRlZCB3aXRoIFZpc3RhLlxcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHQgIFdpbmRvd3MgMjAwMCBpbnRyb2R1Y2VkIHRoZSBjb25jZXB0IG9mIER5bmFtaWMgRGlza3MgdG8gZ2V0IGFyb3VuZFxcbiAxOTE6XFx0XFx0ICB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIFBDJ3MgcGFydGl0aW9uaW5nIHNjaGVtZS4gIFRoZSBMb2dpY2FsIERpc2tcXG4gMTkyOlxcdFxcdCAgTWFuYWdlciBhbGxvd3MgdGhlIHVzZXIgdG8gcmVwYXJ0aXRpb24gYSBkaXNrIGFuZCBjcmVhdGUgc3Bhbm5lZCxcXG4gMTkzOlxcdFxcdCAgbWlycm9yZWQsIHN0cmlwZWQgb3IgUkFJRCB2b2x1bWVzLCBhbGwgd2l0aG91dCB0aGUgbmVlZCBmb3JcXG4gMTk0OlxcdFxcdCAgcmVib290aW5nLlxcbiAxOTU6XFx0XFxuIDE5NjpcXHRcXHQgIE5vcm1hbCBwYXJ0aXRpb25zIGFyZSBub3cgY2FsbGVkIEJhc2ljIERpc2tzIHVuZGVyIFdpbmRvd3MgMjAwMCwgWFAsXFxuIDE5NzpcXHRcXHQgIGFuZCBWaXN0YS5cXG4gMTk4OlxcdFxcbiAxOTk6XFx0XFx0ICBGb3IgYSBmdWxsZXIgZGVzY3JpcHRpb24gcmVhZCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2xkbS5yc3RcXHUwMDNlLlxcbiAyMDA6XFx0XFxuIDIwMTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDIwMjpcXHRcXG4gMjAzOlxcdGNvbmZpZyBMRE1fREVCVUdcXG4gMjA0OlxcdFxcdGJvb2wgXFxcIldpbmRvd3MgTERNIGV4dHJhIGxvZ2dpbmdcXFwiXFxuIDIwNTpcXHRcXHRkZXBlbmRzIG9uIExETV9QQVJUSVRJT05cXG4gMjA2OlxcdFxcdGhlbHBcXG4gMjA3OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd291bGQgbGlrZSBMRE0gdG8gbG9nIHZlcmJvc2VseS4gIFRoaXMgY291bGQgYmVcXG4gMjA4OlxcdFxcdCAgaGVscGZ1bCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3Qgd29yayBhcyBleHBlY3RlZCBhbmQgeW91J2QgbGlrZSB0b1xcbiAyMDk6XFx0XFx0ICByZXBvcnQgYSBidWcuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjIyLjYyMjk3NTgxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NDQyMjcwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBhcnRpdGlvbiBQYXJzaW5nIGluIExpbnV4KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgYFBBUlRJVElPTl9BRFZBTkNFRGAgZmVhdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgcGFydGl0aW9uIHBhcnNpbmcgbWVjaGFuaXNtcyBpbiBMaW51eC4gSSdsbCBzdGFydCBieSBsb29raW5nIGludG8gaG93IHRoZSBwYXJzaW5nIGlzIGFjdHVhbGx5ICp0cmlnZ2VyZWQqLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIHN5c3RlbSBraWNrcyBpdCBvZmYgd2hlbiBhIGJsb2NrIGRldmljZSwgbGlrZSBhIGxvb3AgZGV2aWNlIG9yIGEgdmlydGlvX2JsayBkZXZpY2UsIGlzIHByb2JlZCBvciByZXNjYW5uZWQuIFRoZSBgQkxLUlJQQVJUYCBpb2N0bCBvciBvcGVuaW5nIHNvbWV0aGluZyBsaWtlIGAvZGV2L2xvb3BYYCBhZnRlciB0aGUgYmFja2luZyBmaWxlIGlzIHNldCBpcyB3aGF0IHNlZW1zIHRvIGRvIHRoZSB0cmljay5cblxuVGhlIG5pY2UgdGhpbmcgaXMgdGhhdCBTeXprYWxsZXIsIGEgdG9vbCBJJ20gdmVyeSBmYW1pbGlhciB3aXRoIGFuZCByZWx5IG9uIGluIG15IG93biB3b3JrLCBhbHJlYWR5IGhhcyByb3V0aW5lcyB0byB0ZXN0IGJsb2NrIGRldmljZXMsIGxvb3AgZGV2aWNlcywgYW5kIG9mIGNvdXJzZSwgdGhlIHBhcnRpdGlvbiBwYXJzaW5nIGl0c2VsZi4gU28sIEkgc2hvdWxkIGJlIGFibGUgdG8gcmVseSBvbiBpdHMgcmVzdWx0cy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYCBmaWxlLiBBY2NvcmRpbmcgdG8gdGhlIGRhdGEgSSBoYXZlLCB0aGUgcGFydGl0aW9uIHBhcnNpbmcgbG9naWMgd2l0aGluIHRoaXMgZmlsZSBpcyBhbHJlYWR5IGZ1bGx5IHJlYWNoYWJsZSBpbiBvdXIgc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgdGVzdGluZyBzZXR1cC4gSSdsbCBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uIHRoZXJlLlxuXG5OZXh0LCBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGNoZWNrIHRoZSBjYWxsZXJzIGFuZCBzeW1ib2xzIGluIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCByZWxhdGlvbnNoaXBzIG9mIHRoZSBwYXJ0aXRpb25pbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc5OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjI1LjM2NzIwNDk1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk3ODg2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsZG1fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvbGRtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3NDUgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjItLypcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjIzOiAqIGxkbV9kZWJ1Zy9pbmZvL2Vycm9yL2NyaXQgLSBPdXRwdXQgYW4gZXJyb3IgbWVzc2FnZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjQtICogQGY6ICAgIEEgcHJpbnRmIGZvcm1hdCBzdHJpbmcgY29udGFpbmluZyB0aGUgbWVzc2FnZVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNi0gKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mjc6ICogbGRtX2RlYnVnKCkgd3JpdGVzIGEgREVCVUcgbGV2ZWwgbWVzc2FnZSB0byB0aGUgc3lzbG9nIGJ1dCBvbmx5IGlmIHRoZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjgtICogZHJpdmVyIHdhcyBjb21waWxlZCB3aXRoIGRlYnVnIGVuYWJsZWQuIE90aGVyd2lzZSwgdGhlIGNhbGwgdHVybnMgaW50byBhIE5PUC5cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzAtI2lmbmRlZiBDT05GSUdfTERNX0RFQlVHXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozMTojZGVmaW5lIGxkbV9kZWJ1ZyguLi4pXFx0ZG8ge30gd2hpbGUgKDApXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zMi0jZWxzZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzM6I2RlZmluZSBsZG1fZGVidWcoZiwgYS4uLikgX2xkbV9wcmludGsgKEtFUk5fREVCVUcsIF9fZnVuY19fLCBmLCAjI2EpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNC0jZW5kaWZcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM1LVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzY6I2RlZmluZSBsZG1fY3JpdChmLCBhLi4uKSAgX2xkbV9wcmludGsgKEtFUk5fQ1JJVCwgIF9fZnVuY19fLCBmLCAjI2EpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNzojZGVmaW5lIGxkbV9lcnJvcihmLCBhLi4uKSBfbGRtX3ByaW50ayAoS0VSTl9FUlIsICAgX19mdW5jX18sIGYsICMjYSlcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM4OiNkZWZpbmUgbGRtX2luZm8oZiwgYS4uLikgIF9sZG1fcHJpbnRrIChLRVJOX0lORk8sICBfX2Z1bmNfXywgZiwgIyNhKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzktXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz00MD1zdGF0aWMgX19wcmludGYoMywgNClcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQxOnZvaWQgX2xkbV9wcmludGsoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQyLXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTYtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo1NzogKiBsZG1fcGFyc2VfcHJpdmhlYWQgLSBSZWFkIHRoZSBMRE0gRGF0YWJhc2UgUFJJVkhFQUQgc3RydWN0dXJlXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01OC0gKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBQUklWSEVBRCBzdHJ1Y3R1cmUgbG9hZGVkIGZyb20gdGhlIGRldmljZVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02Ni0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjY3OnN0YXRpYyBib29sIGxkbV9wYXJzZV9wcml2aGVhZChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHByaXZoZWFkICpwaClcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY4LXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzItXFx0aWYgKE1BR0lDX1BSSVZIRUFEICE9IGdldF91bmFsaWduZWRfYmU2NChkYXRhKSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzM6XFx0XFx0bGRtX2Vycm9yKFxcXCJDYW5ub3QgZmluZCBQUklWSEVBRCBzdHJ1Y3R1cmUuIExETSBkYXRhYmFzZSBpc1xcXCJcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc0LVxcdFxcdFxcdFxcXCIgY29ycnVwdC4gQWJvcnRpbmcuXFxcIik7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg2LVxcdGlmICghaXNfdmlzdGEgXFx1MDAyNlxcdTAwMjYgKHBoLVxcdTAwM2V2ZXJfbWFqb3IgIT0gMiB8fCBwaC1cXHUwMDNldmVyX21pbm9yICE9IDExKSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODc6XFx0XFx0bGRtX2Vycm9yKFxcXCJFeHBlY3RlZCBQUklWSEVBRCB2ZXJzaW9uIDIuMTEgb3IgMi4xMiwgZ290ICVkLiVkLlxcXCJcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg4LVxcdFxcdFxcdFxcXCIgQWJvcnRpbmcuXFxcIiwgcGgtXFx1MDAzZXZlcl9tYWpvciwgcGgtXFx1MDAzZXZlcl9taW5vcik7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkwLVxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjkxOlxcdGxkbV9kZWJ1ZyhcXFwiUFJJVkhFQUQgdmVyc2lvbiAlZC4lZCAoV2luZG93cyAlcykuXFxcIiwgcGgtXFx1MDAzZXZlcl9tYWpvcixcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkyLVxcdFxcdFxcdHBoLVxcdTAwM2V2ZXJfbWlub3IsIGlzX3Zpc3RhID8gXFxcIlZpc3RhXFxcIiA6IFxcXCIyMDAwL1hQXFxcIik7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk0LVxcdFxcdC8qIFdhcm4gdGhlIHVzZXIgYW5kIGNvbnRpbnVlLCBjYXJlZnVsbHkuICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NTpcXHRcXHRsZG1faW5mbyhcXFwiRGF0YWJhc2UgaXMgbm9ybWFsbHkgJXUgYnl0ZXMsIGl0IGNsYWltcyB0byBcXFwiXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05Ni1cXHRcXHRcXHRcXFwiYmUgJWxsdSBieXRlcy5cXFwiLCBMRE1fREJfU0laRSxcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAwLVxcdFxcdFxcdHBoLVxcdTAwM2Vsb2dpY2FsX2Rpc2tfc2l6ZSBcXHUwMDNlIHBoLVxcdTAwM2Vjb25maWdfc3RhcnQpKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDE6XFx0XFx0bGRtX2Vycm9yKFxcXCJQUklWSEVBRCBkaXNrIHNpemUgZG9lc24ndCBtYXRjaCByZWFsIGRpc2sgc2l6ZVxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTA0LVxcdGlmICh1dWlkX3BhcnNlKGRhdGEgKyAweDAwMzAsIFxcdTAwMjZwaC1cXHUwMDNlZGlza19pZCkpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwNTpcXHRcXHRsZG1fZXJyb3IoXFxcIlBSSVZIRUFEIGNvbnRhaW5zIGFuIGludmFsaWQgR1VJRC5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwNi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDctXFx0fVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTA4OlxcdGxkbV9kZWJ1ZyhcXFwiUGFyc2VkIFBSSVZIRUFEIHN1Y2Nlc3NmdWxseS5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwOS1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTEyLS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzOiAqIGxkbV9wYXJzZV90b2NibG9jayAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExNC0gKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmUgbG9hZGVkIGZyb20gdGhlIGRldmljZVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMjUtICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMjY6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3RvY2Jsb2NrIChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHRvY2Jsb2NrICp0b2MpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMjcte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMzAtXFx0aWYgKE1BR0lDX1RPQ0JMT0NLICE9IGdldF91bmFsaWduZWRfYmU2NChkYXRhKSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTMxOlxcdFxcdGxkbV9jcml0IChcXFwiQ2Fubm90IGZpbmQgVE9DQkxPQ0ssIGRhdGFiYXNlIG1heSBiZSBjb3JydXB0LlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTMyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTM5LVxcdFxcdFxcdHNpemVvZiAodG9jLVxcdTAwM2ViaXRtYXAxX25hbWUpKSAhPSAwKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNDA6XFx0XFx0bGRtX2NyaXQgKFxcXCJUT0NCTE9DSydzIGZpcnN0IGJpdG1hcCBpcyAnJXMnLCBzaG91bGQgYmUgJyVzJy5cXFwiLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQxLVxcdFxcdFxcdFxcdFRPQ19CSVRNQVAxLCB0b2MtXFx1MDAzZWJpdG1hcDFfbmFtZSk7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE0OC1cXHRcXHRcXHRzaXplb2YgKHRvYy1cXHUwMDNlYml0bWFwMl9uYW1lKSkgIT0gMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTQ5OlxcdFxcdGxkbV9jcml0IChcXFwiVE9DQkxPQ0sncyBzZWNvbmQgYml0bWFwIGlzICclcycsIHNob3VsZCBiZSAnJXMnLlxcXCIsXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNTAtXFx0XFx0XFx0XFx0VE9DX0JJVE1BUDIsIHRvYy1cXHUwMDNlYml0bWFwMl9uYW1lKTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTUyLVxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE1MzpcXHRsZG1fZGVidWcgKFxcXCJQYXJzZWQgVE9DQkxPQ0sgc3VjY2Vzc2Z1bGx5LlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTU0LVxcdHJldHVybiB0cnVlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNTctLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNTg6ICogbGRtX3BhcnNlX3ZtZGIgLSBSZWFkIHRoZSBMRE0gRGF0YWJhc2UgVk1EQiBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE1OS0gKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBWTURCIHN0cnVjdHVyZSBsb2FkZWQgZnJvbSB0aGUgZGV2aWNlXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE2OS0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE3MDpzdGF0aWMgYm9vbCBsZG1fcGFyc2Vfdm1kYiAoY29uc3QgdTggKmRhdGEsIHN0cnVjdCB2bWRiICp2bSlcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE3MS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE3NC1cXHRpZiAoTUFHSUNfVk1EQiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoZGF0YSkpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE3NTpcXHRcXHRsZG1fY3JpdCAoXFxcIkNhbm5vdCBmaW5kIHRoZSBWTURCLCBkYXRhYmFzZSBtYXkgYmUgY29ycnVwdC5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE3Ni1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE4MS1cXHRpZiAoKHZtLVxcdTAwM2V2ZXJfbWFqb3IgIT0gNCkgfHwgKHZtLVxcdTAwM2V2ZXJfbWlub3IgIT0gMTApKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxODI6XFx0XFx0bGRtX2Vycm9yIChcXFwiRXhwZWN0ZWQgVk1EQiB2ZXJzaW9uICVkLiVkLCBnb3QgJWQuJWQuIFxcXCJcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE4My1cXHRcXHRcXHRcXFwiQWJvcnRpbmcuXFxcIiwgNCwgMTAsIHZtLVxcdTAwM2V2ZXJfbWFqb3IsIHZtLVxcdTAwM2V2ZXJfbWlub3IpO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xODgtXFx0aWYgKHZtLVxcdTAwM2V2YmxrX3NpemUgPT0gMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTg5OlxcdFxcdGxkbV9lcnJvciAoXFxcIklsbGVnYWwgVkJMSyBzaXplXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xOTAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xOTUtXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxOTY6XFx0bGRtX2RlYnVnIChcXFwiUGFyc2VkIFZNREIgc3VjY2Vzc2Z1bGx5LlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTk3LVxcdHJldHVybiB0cnVlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMDAtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyMDE6ICogbGRtX2NvbXBhcmVfcHJpdmhlYWRzIC0gQ29tcGFyZSB0d28gcHJpdmhlYWQgb2JqZWN0c1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjAyLSAqIEBwaDE6ICBGaXJzdCBwcml2aGVhZFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMDktICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyMTA6c3RhdGljIGJvb2wgbGRtX2NvbXBhcmVfcHJpdmhlYWRzIChjb25zdCBzdHJ1Y3QgcHJpdmhlYWQgKnBoMSxcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIxMS1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcHJpdmhlYWQgKnBoMilcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjI0LS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MjI1OiAqIGxkbV9jb21wYXJlX3RvY2Jsb2NrcyAtIENvbXBhcmUgdHdvIHRvY2Jsb2NrIG9iamVjdHNcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIyNi0gKiBAdG9jMTogIEZpcnN0IHRvY1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMzMtICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyMzQ6c3RhdGljIGJvb2wgbGRtX2NvbXBhcmVfdG9jYmxvY2tzIChjb25zdCBzdHJ1Y3QgdG9jYmxvY2sgKnRvYzEsXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMzUtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHRvY2Jsb2NrICp0b2MyKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNDktLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyNTA6ICogbGRtX3ZhbGlkYXRlX3ByaXZoZWFkcyAtIENvbXBhcmUgdGhlIHByaW1hcnkgcHJpdmhlYWQgd2l0aCBpdHMgYmFja3Vwc1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjUxLSAqIEBzdGF0ZTogUGFydGl0aW9uIGNoZWNrIHN0YXRlIGluY2x1ZGluZyBkZXZpY2UgaG9sZGluZyB0aGUgTERNIERhdGFiYXNlXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI2Mi0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjI2MzpzdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfcHJpdmhlYWRzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNjQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHByaXZoZWFkICpwaDEpXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI3OC1cXHRpZiAoIXBoWzFdIHx8ICFwaFsyXSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mjc5OlxcdFxcdGxkbV9jcml0IChcXFwiT3V0IG9mIG1lbW9yeS5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI4MC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjkwLVxcdFxcdGlmICghZGF0YSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MjkxOlxcdFxcdFxcdGxkbV9jcml0IChcXFwiRGlzayByZWFkIGZhaWxlZC5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI5Mi1cXHRcXHRcXHRnb3RvIG91dDtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI5My1cXHRcXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyOTQ6XFx0XFx0cmVzdWx0ID0gbGRtX3BhcnNlX3ByaXZoZWFkIChkYXRhLCBwaFtpXSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yOTUtXFx0XFx0cHV0X2Rldl9zZWN0b3IgKHNlY3QpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjk2LVxcdFxcdGlmICghcmVzdWx0KSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyOTc6XFx0XFx0XFx0bGRtX2Vycm9yIChcXFwiQ2Fubm90IGZpbmQgUFJJVkhFQUQgJWQuXFxcIiwgaSsxKTsgLyogTG9nIGFnYWluICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yOTgtXFx0XFx0XFx0aWYgKGkgXFx1MDAzYyAyKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zMDgtXFx0ICAgKChwaFswXS1cXHUwMDNlY29uZmlnX3N0YXJ0ICsgcGhbMF0tXFx1MDAzZWNvbmZpZ19zaXplKSBcXHUwMDNlIG51bV9zZWN0cykpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjMwOTpcXHRcXHRsZG1fY3JpdCAoXFxcIkRhdGFiYXNlIGV4dGVuZHMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGRpc2suXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zMTAtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMxNS1cXHRcXHQgICAgXFx1MDAzZSBwaFswXS1cXHUwMDNlY29uZmlnX3N0YXJ0KSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzE2OlxcdFxcdGxkbV9jcml0IChcXFwiRGlzayBhbmQgZGF0YWJhc2Ugb3ZlcmxhcC5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMxNy1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzE5LVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzIwOlxcdGlmICghbGRtX2NvbXBhcmVfcHJpdmhlYWRzIChwaFswXSwgcGhbMV0pKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozMjE6XFx0XFx0bGRtX2NyaXQgKFxcXCJQcmltYXJ5IGFuZCBiYWNrdXAgUFJJVkhFQURzIGRvbid0IG1hdGNoLlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzIyLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zMjQtXFx0LyogRklYTUUgaWdub3JlIHRoaXMgZm9yIG5vd1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzI1OlxcdGlmICghbGRtX2NvbXBhcmVfcHJpdmhlYWRzIChwaFswXSwgcGhbMl0pKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozMjY6XFx0XFx0bGRtX2NyaXQgKFxcXCJQcmltYXJ5IGFuZCBiYWNrdXAgUFJJVkhFQURzIGRvbid0IG1hdGNoLlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzI3LVxcdFxcdGdvdG8gb3V0O1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzI4LVxcdH0qL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzI5OlxcdGxkbV9kZWJ1ZyAoXFxcIlZhbGlkYXRlZCBQUklWSEVBRHMgc3VjY2Vzc2Z1bGx5LlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzMwLVxcdHJlc3VsdCA9IHRydWU7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMzNy0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjMzODogKiBsZG1fdmFsaWRhdGVfdG9jYmxvY2tzIC0gVmFsaWRhdGUgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIGFuZCBpdHMgYmFja3Vwc1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzM5LSAqIEBzdGF0ZTogUGFydGl0aW9uIGNoZWNrIHN0YXRlIGluY2x1ZGluZyBkZXZpY2UgaG9sZGluZyB0aGUgTERNIERhdGFiYXNlXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM1MC0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM1MTpzdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdG9jYmxvY2tzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNTItXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBiYXNlLCBzdHJ1Y3QgbGRtZGIgKmxkYilcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzY2LVxcdGlmICghdGJbMV0pIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM2NzpcXHRcXHRsZG1fY3JpdChcXFwiT3V0IG9mIG1lbW9yeS5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM2OC1cXHRcXHRnb3RvIGVycjtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzgwLVxcdFxcdGlmICghZGF0YSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzgxOlxcdFxcdFxcdGxkbV9lcnJvcihcXFwiRGlzayByZWFkIGZhaWxlZCBmb3IgVE9DQkxPQ0sgJWQuXFxcIiwgaSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODItXFx0XFx0XFx0Y29udGludWU7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODMtXFx0XFx0fVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzg0OlxcdFxcdGlmIChsZG1fcGFyc2VfdG9jYmxvY2soZGF0YSwgdGJbbnJfdGJzXSkpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODUtXFx0XFx0XFx0bnJfdGJzKys7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4OC1cXHRpZiAoIW5yX3Ricykge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzg5OlxcdFxcdGxkbV9jcml0KFxcXCJGYWlsZWQgdG8gZmluZCBhIHZhbGlkIFRPQ0JMT0NLLlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzkwLVxcdFxcdGdvdG8gZXJyO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zOTUtXFx0XFx0XFx0cGgtXFx1MDAzZWNvbmZpZ19zaXplKSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzk2OlxcdFxcdGxkbV9jcml0KFxcXCJUaGUgYml0bWFwcyBhcmUgb3V0IG9mIHJhbmdlLiAgR2l2aW5nIHVwLlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzk3LVxcdFxcdGdvdG8gZXJyO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00MDAtXFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIG5yX3RiczsgaSsrKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0MDE6XFx0XFx0aWYgKCFsZG1fY29tcGFyZV90b2NibG9ja3ModGJbMF0sIHRiW2ldKSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDAyOlxcdFxcdFxcdGxkbV9jcml0KFxcXCJUT0NCTE9DS3MgMCBhbmQgJWQgZG8gbm90IG1hdGNoLlxcXCIsIGkpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDAzLVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00MDUtXFx0fVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDA2OlxcdGxkbV9kZWJ1ZyhcXFwiVmFsaWRhdGVkICVkIFRPQ0JMT0NLcyBzdWNjZXNzZnVsbHkuXFxcIiwgbnJfdGJzKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwNy1cXHRyZXN1bHQgPSB0cnVlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00MTMtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0MTQ6ICogbGRtX3ZhbGlkYXRlX3ZtZGIgLSBSZWFkIHRoZSBWTURCIGFuZCB2YWxpZGF0ZSBpdFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDE1LSAqIEBzdGF0ZTogUGFydGl0aW9uIGNoZWNrIHN0YXRlIGluY2x1ZGluZyBkZXZpY2UgaG9sZGluZyB0aGUgTERNIERhdGFiYXNlXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQyNC0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQyNTpzdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdm1kYihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDI2LVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgc3RydWN0IGxkbWRiICpsZGIpXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0MC1cXHRpZiAoIWRhdGEpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQ0MTpcXHRcXHRsZG1fY3JpdCAoXFxcIkRpc2sgcmVhZCBmYWlsZWQuXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NDItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NDQtXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0NDU6XFx0aWYgKCFsZG1fcGFyc2Vfdm1kYiAoZGF0YSwgdm0pKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDQ2LVxcdFxcdGdvdG8gb3V0O1xcdFxcdFxcdFxcdC8qIEFscmVhZHkgbG9nZ2VkICovXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0OS1cXHRpZiAoZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEgKyAweDEwKSAhPSAweDAxKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0NTA6XFx0XFx0bGRtX2NyaXQgKFxcXCJEYXRhYmFzZSBpcyBub3QgaW4gYSBjb25zaXN0ZW50IHN0YXRlLiAgQWJvcnRpbmcuXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NTEtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ1NC1cXHRpZiAodm0tXFx1MDAzZXZibGtfb2Zmc2V0ICE9IDUxMilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQ1NTpcXHRcXHRsZG1faW5mbyAoXFxcIlZCTEtzIHN0YXJ0IGF0IG9mZnNldCAweCUwNHguXFxcIiwgdm0tXFx1MDAzZXZibGtfb2Zmc2V0KTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ1Ni1cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDYxLVxcdGlmICgodm0tXFx1MDAzZXZibGtfc2l6ZSAqIHZtLVxcdTAwM2VsYXN0X3ZibGtfc2VxKSBcXHUwMDNlICh0b2MtXFx1MDAzZWJpdG1hcDFfc2l6ZSBcXHUwMDNjXFx1MDAzYyA5KSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDYyOlxcdFxcdGxkbV9jcml0IChcXFwiVk1EQiBleGNlZWRzIGFsbG93ZWQgc2l6ZSBzcGVjaWZpZWQgYnkgVE9DQkxPQ0suICBcXFwiXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NjMtXFx0XFx0XFx0XFx0XFxcIkRhdGFiYXNlIGlzIGNvcnJ1cHQuICBBYm9ydGluZy5cXFwiKTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDc0LS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDc1OiAqIGxkbV92YWxpZGF0ZV9wYXJ0aXRpb25fdGFibGUgLSBEZXRlcm1pbmUgd2hldGhlciBiZGV2IG1pZ2h0IGJlIGEgZHluYW1pYyBkaXNrXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NzYtICogQHN0YXRlOiBQYXJ0aXRpb24gY2hlY2sgc3RhdGUgaW5jbHVkaW5nIGRldmljZSBob2xkaW5nIHRoZSBMRE0gRGF0YWJhc2VcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDg5LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDkwOnN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV9wYXJ0aXRpb25fdGFibGUoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ5MS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUwMS1cXHRpZiAoIWRhdGEpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjUwMjpcXHRcXHRsZG1faW5mbyAoXFxcIkRpc2sgcmVhZCBmYWlsZWQuXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01MDMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01MTYtXFx0aWYgKHJlc3VsdClcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjUxNzpcXHRcXHRsZG1fZGVidWcgKFxcXCJGb3VuZCBXMksgZHluYW1pYyBkaXNrIHBhcnRpdGlvbiB0eXBlLlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTE4LVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01MjQtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo1MjU6ICogbGRtX2dldF9kaXNrX29iamlkIC0gU2VhcmNoIGEgbGlua2VkIGxpc3Qgb2YgdmJsaydzIGZvciBhIGdpdmVuIERpc2sgSWRcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUyNi0gKiBAbGRiOiAgQ2FjaGUgb2YgdGhlIGRhdGFiYXNlIHN0cnVjdHVyZXNcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTM1LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTM2OnN0YXRpYyBzdHJ1Y3QgdmJsayAqIGxkbV9nZXRfZGlza19vYmppZCAoY29uc3Qgc3RydWN0IGxkbWRiICpsZGIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01Mzcte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01NTEtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo1NTI6ICogbGRtX2NyZWF0ZV9kYXRhX3BhcnRpdGlvbnMgLSBDcmVhdGUgZGF0YSBwYXJ0aXRpb25zIGZvciB0aGlzIGRldmljZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTUzLSAqIEBwcDogICBMaXN0IG9mIHRoZSBwYXJ0aXRpb25zIHBhcnNlZCBzbyBmYXJcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTY3LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTY4OnN0YXRpYyBib29sIGxkbV9jcmVhdGVfZGF0YV9wYXJ0aXRpb25zIChzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnBwLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTY5LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBsZG1kYiAqbGRiKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01NzgtXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo1Nzk6XFx0ZGlzayA9IGxkbV9nZXRfZGlza19vYmppZCAobGRiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTU4MC1cXHRpZiAoIWRpc2spIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjU4MTpcXHRcXHRsZG1fY3JpdCAoXFxcIkNhbid0IGZpbmQgdGhlIElEIG9mIHRoaXMgZGlzayBpbiB0aGUgZGF0YWJhc2UuXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01ODItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MDUtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2MDY6ICogbGRtX3JlbGF0aXZlIC0gQ2FsY3VsYXRlIHRoZSBuZXh0IHJlbGF0aXZlIG9mZnNldFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjA3LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MTgtICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2MTk6c3RhdGljIGludCBsZG1fcmVsYXRpdmUoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1ZmxlbiwgaW50IGJhc2UsIGludCBvZmZzZXQpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MjAte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MjQtXFx0XFx0aWYgKCFidWZmZXIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2MjU6XFx0XFx0XFx0bGRtX2Vycm9yKFxcXCIhYnVmZmVyXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MjYtXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2Mjc6XFx0XFx0XFx0bGRtX2Vycm9yKFxcXCJvZmZzZXQgKCVkKSBcXHUwMDNjIDBcXFwiLCBvZmZzZXQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjI4LVxcdFxcdGlmIChiYXNlIFxcdTAwM2UgYnVmbGVuKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjI5OlxcdFxcdFxcdGxkbV9lcnJvcihcXFwiYmFzZSAoJWQpIFxcdTAwM2UgYnVmbGVuICglZClcXFwiLCBiYXNlLCBidWZsZW4pO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjMwLVxcdFxcdHJldHVybiAtMTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjMyLVxcdGlmIChiYXNlICsgYnVmZmVyW2Jhc2VdIFxcdTAwM2U9IGJ1Zmxlbikge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjMzOlxcdFxcdGxkbV9lcnJvcihcXFwiYmFzZSAoJWQpICsgYnVmZmVyW2Jhc2VdICglZCkgXFx1MDAzZT0gYnVmbGVuICglZClcXFwiLCBiYXNlLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjM0LVxcdFxcdFxcdFxcdGJ1ZmZlcltiYXNlXSwgYnVmbGVuKTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjQwLS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjQxOiAqIGxkbV9nZXRfdm51bSAtIENvbnZlcnQgYSB2YXJpYWJsZS13aWR0aCwgYmlnIGVuZGlhbiBudW1iZXIsIGludG8gY3B1IG9yZGVyXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NDItICogQGJsb2NrOiAgUG9pbnRlciB0byB0aGUgdmFyaWFibGUtd2lkdGggbnVtYmVyIHRvIGNvbnZlcnRcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjU0LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjU1OnN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NTYte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NjctXFx0ZWxzZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjY4OlxcdFxcdGxkbV9lcnJvciAoXFxcIklsbGVnYWwgbGVuZ3RoICVkLlxcXCIsIGxlbmd0aCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NjktXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY3My0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjY3NDogKiBsZG1fZ2V0X3ZzdHIgLSBSZWFkIGEgbGVuZ3RoLXByZWZpeGVkIHN0cmluZyBpbnRvIGEgYnVmZmVyXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NzUtICogQGJsb2NrOiAgIFBvaW50ZXIgdG8gdGhlIGxlbmd0aCBtYXJrZXJcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjkwLSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjkxOnN0YXRpYyBpbnQgbGRtX2dldF92c3RyKGNvbnN0IHU4ICpibG9jaywgaW50IGJsb2NrbGVuLCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjkyLXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzA1LVxcdGlmIChsZW5ndGggXFx1MDAzZT0gYnVmbGVuKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3MDY6XFx0XFx0bGRtX2Vycm9yIChcXFwiVHJ1bmNhdGluZyBzdHJpbmcgJWQgLVxcdTAwM2UgJWQuXFxcIiwgbGVuZ3RoLCBidWZsZW4pO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzA3LVxcdFxcdGxlbmd0aCA9IGJ1ZmxlbiAtIDE7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcxNS0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjcxNjogKiBsZG1fcGFyc2VfY21wMyAtIFJlYWQgYSByYXcgVkJMSyBDb21wb25lbnQgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzE3LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03MjUtICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3MjY6c3RhdGljIGJvb2wgbGRtX3BhcnNlX2NtcDMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcyNy17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTczMi1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjczMzpcXHRyX29iamlkICA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MTgsIDApO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzM0OlxcdHJfbmFtZSAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3MzU6XFx0cl92c3RhdGUgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX25hbWUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzM2OlxcdHJfY2hpbGQgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxRCwgcl92c3RhdGUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzM3OlxcdHJfcGFyZW50ID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgyRCwgcl9jaGlsZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03MzgtXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03MzktXFx0aWYgKGJ1ZmZlclsweDEyXSBcXHUwMDI2IFZCTEtfRkxBR19DT01QX1NUUklQRSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzQwOlxcdFxcdHJfc3RyaXBlID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgyRSwgcl9wYXJlbnQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzQxOlxcdFxcdHJfY29scyAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgyRSwgcl9zdHJpcGUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzQyLVxcdFxcdGxlbiA9IHJfY29scztcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzU0LVxcdGNvbXAgPSBcXHUwMDI2dmItXFx1MDAzZXZibGsuY29tcDtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc1NTpcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzU2LVxcdFxcdGNvbXAtXFx1MDAzZXN0YXRlLCBzaXplb2YoY29tcC1cXHUwMDNlc3RhdGUpKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc1Ny1cXHRjb21wLVxcdTAwM2V0eXBlICAgICAgPSBidWZmZXJbMHgxOCArIHJfdnN0YXRlXTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc1ODpcXHRjb21wLVxcdTAwM2VjaGlsZHJlbiAgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciArIDB4MUQgKyByX3ZzdGF0ZSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3NTk6XFx0Y29tcC1cXHUwMDNlcGFyZW50X2lkID0gbGRtX2dldF92bnVtIChidWZmZXIgKyAweDJEICsgcl9jaGlsZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3NjA6XFx0Y29tcC1cXHUwMDNlY2h1bmtzaXplID0gcl9zdHJpcGUgPyBsZG1fZ2V0X3ZudW0gKGJ1ZmZlcityX3BhcmVudCsweDJFKSA6IDA7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NjEtXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc2NS0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc2NjogKiBsZG1fcGFyc2VfZGdyMyAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIEdyb3VwIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc2Ny0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzc1LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Nzc2OnN0YXRpYyBpbnQgbGRtX3BhcnNlX2RncjMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc3Ny17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc4Mi1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc4MzpcXHRyX29iamlkICA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MTgsIDApO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Nzg0OlxcdHJfbmFtZSAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3ODU6XFx0cl9kaXNraWQgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX25hbWUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzg2LVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzg3LVxcdGlmIChidWZmZXJbMHgxMl0gXFx1MDAyNiBWQkxLX0ZMQUdfREdSM19JRFMpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc4ODpcXHRcXHRyX2lkMSA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MjQsIHJfZGlza2lkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc4OTpcXHRcXHRyX2lkMiA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MjQsIHJfaWQxKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc5MC1cXHRcXHRsZW4gPSByX2lkMjtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODAwLVxcdGRncnAgPSBcXHUwMDI2dmItXFx1MDAzZXZibGsuZGdycDtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgwMTpcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODAyLVxcdFxcdGRncnAtXFx1MDAzZWRpc2tfaWQsIHNpemVvZihkZ3JwLVxcdTAwM2VkaXNrX2lkKSk7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgwNi0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgwNzogKiBsZG1fcGFyc2VfZGdyNCAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIEdyb3VwIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgwOC0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODE2LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODE3OnN0YXRpYyBib29sIGxkbV9wYXJzZV9kZ3I0IChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MTgte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MjMtXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4MjQ6XFx0cl9vYmppZCAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCAwKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgyNTpcXHRyX25hbWUgICA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfb2JqaWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODI2LVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODI3LVxcdGlmIChidWZmZXJbMHgxMl0gXFx1MDAyNiBWQkxLX0ZMQUdfREdSNF9JRFMpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgyODpcXHRcXHRyX2lkMSA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4NDQsIHJfbmFtZSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4Mjk6XFx0XFx0cl9pZDIgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDQ0LCByX2lkMSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MzAtXFx0XFx0bGVuID0gcl9pZDI7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgzOS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg0MDpcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfb2JqaWQsIGJ1ZmxlbiAtICgweDE4ICsgcl9vYmppZCksXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NDEtXFx0XFx0YnVmLCBzaXplb2YoYnVmKSk7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg0NS0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg0NjogKiBsZG1fcGFyc2VfZHNrMyAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg0Ny0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODU1LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODU2OnN0YXRpYyBib29sIGxkbV9wYXJzZV9kc2szIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NTcte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NjItXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4NjM6XFx0cl9vYmppZCAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4NjQ6XFx0cl9uYW1lICAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4NjU6XFx0cl9kaXNraWQgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9uYW1lKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg2NjpcXHRyX2FsdG5hbWUgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX2Rpc2tpZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NjctXFx0bGVuID0gcl9hbHRuYW1lO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NzUtXFx0ZGlzayA9IFxcdTAwMjZ2Yi1cXHUwMDNldmJsay5kaXNrO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODc2OlxcdGxkbV9nZXRfdnN0cihidWZmZXIgKyAweDE4ICsgcl9kaXNraWQsIGJ1ZmxlbiAtICgweDE4ICsgcl9kaXNraWQpLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODc3LVxcdFxcdGRpc2stXFx1MDAzZWFsdF9uYW1lLCBzaXplb2YoZGlzay1cXHUwMDNlYWx0X25hbWUpKTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODg0LS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODg1OiAqIGxkbV9wYXJzZV9kc2s0IC0gUmVhZCBhIHJhdyBWQkxLIERpc2sgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODg2LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04OTQtICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4OTU6c3RhdGljIGJvb2wgbGRtX3BhcnNlX2RzazQgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg5Ni17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkwMS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjkwMjpcXHRyX29iamlkID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MDM6XFx0cl9uYW1lICA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfb2JqaWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTA0LVxcdGxlbiAgICAgPSByX25hbWU7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkxNy0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjkxODogKiBsZG1fcGFyc2VfcHJ0MyAtIFJlYWQgYSByYXcgVkJMSyBQYXJ0aXRpb24gb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTE5LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05MjctICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5Mjg6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3BydDMoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTI5LXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTMzLVxcdEJVR19PTighYnVmZmVyIHx8ICF2Yik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MzQ6XFx0cl9vYmppZCA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05MzUtXFx0aWYgKHJfb2JqaWQgXFx1MDAzYyAwKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MzY6XFx0XFx0bGRtX2Vycm9yKFxcXCJyX29iamlkICVkIFxcdTAwM2MgMFxcXCIsIHJfb2JqaWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTM3LVxcdFxcdHJldHVybiBmYWxzZTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkzOC1cXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5Mzk6XFx0cl9uYW1lID0gbGRtX3JlbGF0aXZlKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX29iamlkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk0MC1cXHRpZiAocl9uYW1lIFxcdTAwM2MgMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTQxOlxcdFxcdGxkbV9lcnJvcihcXFwicl9uYW1lICVkIFxcdTAwM2MgMFxcXCIsIHJfbmFtZSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NDItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTQzLVxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk0NDpcXHRyX3NpemUgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MzQsIHJfbmFtZSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NDUtXFx0aWYgKHJfc2l6ZSBcXHUwMDNjIDApIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk0NjpcXHRcXHRsZG1fZXJyb3IoXFxcInJfc2l6ZSAlZCBcXHUwMDNjIDBcXFwiLCByX3NpemUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTQ3LVxcdFxcdHJldHVybiBmYWxzZTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk0OC1cXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NDk6XFx0cl9wYXJlbnQgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MzQsIHJfc2l6ZSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NTAtXFx0aWYgKHJfcGFyZW50IFxcdTAwM2MgMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTUxOlxcdFxcdGxkbV9lcnJvcihcXFwicl9wYXJlbnQgJWQgXFx1MDAzYyAwXFxcIiwgcl9wYXJlbnQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTUyLVxcdFxcdHJldHVybiBmYWxzZTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk1My1cXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NTQ6XFx0cl9kaXNraWQgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MzQsIHJfcGFyZW50KTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk1NS1cXHRpZiAocl9kaXNraWQgXFx1MDAzYyAwKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NTY6XFx0XFx0bGRtX2Vycm9yKFxcXCJyX2Rpc2tpZCAlZCBcXHUwMDNjIDBcXFwiLCByX2Rpc2tpZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NTctXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NTktXFx0aWYgKGJ1ZmZlclsweDEyXSBcXHUwMDI2IFZCTEtfRkxBR19QQVJUX0lOREVYKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NjA6XFx0XFx0cl9pbmRleCA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgzNCwgcl9kaXNraWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTYxLVxcdFxcdGlmIChyX2luZGV4IFxcdTAwM2MgMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTYyOlxcdFxcdFxcdGxkbV9lcnJvcihcXFwicl9pbmRleCAlZCBcXHUwMDNjIDBcXFwiLCByX2luZGV4KTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk2My1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk2OC1cXHRpZiAobGVuIFxcdTAwM2MgMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTY5OlxcdFxcdGxkbV9lcnJvcihcXFwibGVuICVkIFxcdTAwM2MgMFxcXCIsIGxlbik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NzAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NzMtXFx0aWYgKGxlbiBcXHUwMDNlIGdldF91bmFsaWduZWRfYmUzMihidWZmZXIgKyAweDE0KSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTc0OlxcdFxcdGxkbV9lcnJvcihcXFwibGVuICVkIFxcdTAwM2UgQkUzMihidWZmZXIgKyAweDE0KSAlZFxcXCIsIGxlbixcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk3NS1cXHRcXHRcXHRcXHRnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICsgMHgxNCkpO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05ODAtXFx0cGFydC1cXHUwMDNldm9sdW1lX29mZnNldCA9IGdldF91bmFsaWduZWRfYmU2NChidWZmZXIgKyAweDJDICsgcl9uYW1lKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk4MTpcXHRwYXJ0LVxcdTAwM2VzaXplID0gbGRtX2dldF92bnVtKGJ1ZmZlciArIDB4MzQgKyByX25hbWUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTgyOlxcdHBhcnQtXFx1MDAzZXBhcmVudF9pZCA9IGxkbV9nZXRfdm51bShidWZmZXIgKyAweDM0ICsgcl9zaXplKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk4MzpcXHRwYXJ0LVxcdTAwM2VkaXNrX2lkID0gbGRtX2dldF92bnVtKGJ1ZmZlciArIDB4MzQgKyByX3BhcmVudCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05ODQtXFx0aWYgKHZiLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZCTEtfRkxBR19QQVJUX0lOREVYKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05OTEtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5OTI6ICogbGRtX3BhcnNlX3ZvbDUgLSBSZWFkIGEgcmF3IFZCTEsgVm9sdW1lIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk5My0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAwMS0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMDI6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZvbDUoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAwMy17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMDgtXFx0QlVHX09OKCFidWZmZXIgfHwgIXZiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMDk6XFx0cl9vYmppZCA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDEwLVxcdGlmIChyX29iamlkIFxcdTAwM2MgMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAxMTpcXHRcXHRsZG1fZXJyb3IoXFxcInJfb2JqaWQgJWQgXFx1MDAzYyAwXFxcIiwgcl9vYmppZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDEyLVxcdFxcdHJldHVybiBmYWxzZTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMTMtXFx0fVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAxNDpcXHRyX25hbWUgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfb2JqaWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAxNS1cXHRpZiAocl9uYW1lIFxcdTAwM2MgMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAxNjpcXHRcXHRsZG1fZXJyb3IoXFxcInJfbmFtZSAlZCBcXHUwMDNjIDBcXFwiLCByX25hbWUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAxNy1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDE4LVxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMTk6XFx0cl92dHlwZSA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9uYW1lKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMjAtXFx0aWYgKHJfdnR5cGUgXFx1MDAzYyAwKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDIxOlxcdFxcdGxkbV9lcnJvcihcXFwicl92dHlwZSAlZCBcXHUwMDNjIDBcXFwiLCByX3Z0eXBlKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMjItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAyMy1cXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDI0OlxcdHJfZGlzYWJsZV9kcml2ZV9sZXR0ZXIgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfdnR5cGUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAyNS1cXHRpZiAocl9kaXNhYmxlX2RyaXZlX2xldHRlciBcXHUwMDNjIDApIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMjY6XFx0XFx0bGRtX2Vycm9yKFxcXCJyX2Rpc2FibGVfZHJpdmVfbGV0dGVyICVkIFxcdTAwM2MgMFxcXCIsXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDI3LVxcdFxcdFxcdFxcdHJfZGlzYWJsZV9kcml2ZV9sZXR0ZXIpO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDI5LVxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMzA6XFx0cl9jaGlsZCA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgyRCwgcl9kaXNhYmxlX2RyaXZlX2xldHRlcik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDMxLVxcdGlmIChyX2NoaWxkIFxcdTAwM2MgMCkge1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNToyNS40MTIxODY3MDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjA1OTM2NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBsZG1fcGFydGl0aW9uYCBFbnRyeXBvaW50KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbGRtX3BhcnRpdGlvbmAgZW50cnlwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgZnVuY3Rpb24sIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQncyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBzeXN0ZW0uIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyB0byBgbGRtX3BhcnRpdGlvbmAsIG1hcHBpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzLCBhbmQgZ2V0dGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGNhbGwgZmxvdy4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCdzICpjYWxsZWQgZnJvbSogaXMgY3J1Y2lhbCB0byBncmFzcGluZyBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgdGhlIGNvbnRleHQgaXQgb3BlcmF0ZXMgd2l0aGluLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGtub3dsZWRnZSBpcywgdGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBqdXN0IGNvZGUsIGl0IGlzIHRoZSBpbnRlZ3JhdGlvbiB0aGF0IGlzIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE2NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjI3LjYxODEyNjA5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MjA0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGRtX3BhcnRpdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9wYXJ0aXRpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvY2hlY2suaD01OT1pbnQga2FybWFfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY2hlY2suaDo2MDppbnQgbGRtX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NoZWNrLmgtNjEtaW50IG1hY19wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSk7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0xNz1zdGF0aWMgaW50ICgqY29uc3QgY2hlY2tfcGFydFtdKShzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKikgPSB7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy01Ny0jaWZkZWYgQ09ORklHX0xETV9QQVJUSVRJT05cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo1ODpcXHRsZG1fcGFydGl0aW9uLFxcdFxcdC8qIHRoaXMgbXVzdCBjb21lIGJlZm9yZSBtc2RvcyAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTU5LSNlbmRpZlxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0xNDExPXN0YXRpYyB2b2lkIGxkbV9mcmVlX3ZibGtzIChzdHJ1Y3QgbGlzdF9oZWFkICpsaClcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQyMi0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE0MjM6ICogbGRtX3BhcnRpdGlvbiAtIEZpbmQgb3V0IHdoZXRoZXIgYSBkZXZpY2UgaXMgYSBkeW5hbWljIGRpc2sgYW5kIGhhbmRsZSBpdFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQyNC0gKiBAc3RhdGU6IFBhcnRpdGlvbiBjaGVjayBzdGF0ZSBpbmNsdWRpbmcgZGV2aWNlIGhvbGRpbmcgdGhlIExETSBEYXRhYmFzZVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNDM4LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTQzOTppbnQgbGRtX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQ0MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjI3LjY2NTg1MjAzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjY2MjQ5NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBMRE0gUGFydGl0aW9uaW5nIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBleGFtaW5lIHRoZSBzdGF0aWMgdmVyc3VzIG5vbi1zdGF0aWMgc3ltYm9sIHNpdHVhdGlvbiBmb3IgYGxkbV9nZXRfdnN0cmAgYW5kIGBsZG1fcGFyc2VfdmJsa2AuIFNwZWNpZmljYWxseSwgSSB3YXMgbG9va2luZyBhdCBgYmxvY2svcGFydGl0aW9ucy9sZG0uY2AuIEkgbm90ZWQgdGhhdCBgbGRtX3BhcnRpdGlvbmAgaXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgb3VyIGVudHJ5IHBvaW50LiBIb3dldmVyLCB0aGUgb3RoZXJzLCBgbGRtX2dldF92c3RyYCwgYGxkbV9wYXJzZV9jbXAzYCwgYGxkbV9wYXJzZV9kZ3IzYCwgYGxkbV9wYXJzZV9kZ3I0YCwgYGxkbV9wYXJzZV9kc2szYCwgYGxkbV9wYXJzZV92b2w1YCwgYW5kIGBsZG1fcGFyc2VfdmJsa2AsIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNhbWUgZmlsZS5cblxuVGhlbiBJIGhhZCBhICptb21lbnQqLiBJbiBtb2Rlcm4ga2VybmVsIGJ1aWxkcyB3aXRoIHN5bWJvbCB0YWJsZXMgYW5kIHRvb2xzIGxpa2Uga2FsbHN5bXMsIGtjb3YsIGFuZCBzeXprYWxsZXIsIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGEgYC5jYCBmaWxlICphcmUqIGV4cG9zZWQgYXMgc3ltYm9scyBpbiBgdm1saW51eGAsIGFzIGxvbmcgYXMgdGhlIGNvbXBpbGVyIGhhc24ndCBpbmxpbmVkIHRoZW0gYW5kIHRoZXkgYXJlbid0IGluIGhlYWRlciBmaWxlcy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgaW4gdGhlIGNvbnRleHQgb2YgZnV6emluZywgYW5kIEkgcmVtZW1iZXJlZCB0aGUgXCJGb2N1c1N5bWJvbHNcIiBndWlkZWxpbmUsIHdoaWNoIGlzIGluY3JlZGlibHkgdXNlZnVsIGZvciBkaXJlY3RpbmcgZnV6emluZyBlZmZvcnRzLiBJdCBzdHJlc3NlcyB0aGUgaW1wb3J0YW5jZSBvZiBsaXN0aW5nIGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGNvcmUgbG9naWMgb3IgQVBJIGVudHJ5IHBvaW50cy4gSXQgYWxzbyBub3RlcyB0aGF0IGlubGluZSBzdGF0aWMgZnVuY3Rpb25zIGluIGhlYWRlcnMgYXJlIG1vcmUgZGlmZmljdWx0LCBhbmQgc3VnZ2VzdHMgZm9jdXNpbmcgb24gbm9uLXN0YXRpYyBjYWxsZXIgZnVuY3Rpb25zIGluIGAuY2AgZmlsZXMgaW5zdGVhZC5cblxuTm93LCBjb25zaWRlcmluZyBhbGwgZnVuY3Rpb25zIChgbGRtX2dldF92c3RyYCwgYGxkbV9wYXJzZV92YmxrYCwgYGxkbV9wYXJ0aXRpb25gLCBgbGRtX3BhcnNlX2NtcDNgLCBgbGRtX3BhcnNlX2RncjNgLCBgbGRtX3BhcnNlX2RncjRgLCBgbGRtX3BhcnNlX2RzazNgLCBhbmQgYGxkbV9wYXJzZV92b2w1YCkgYXJlIGluIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYCwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIG9mIGBsZG1fZ2V0X3ZzdHJgIG9yIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIGhhdmUgYmVlbiBtb2RpZmllZC5cblxuU28sIHRha2luZyBzdG9jayBvZiB3aGF0J3MgYmVlbiBjaGFuZ2VkLCBpdCdzOiBgbGRtX2dldF92c3RyYCwgYGxkbV9wYXJzZV9jbXAzYCwgYGxkbV9wYXJzZV9kZ3IzYCwgYGxkbV9wYXJzZV9kZ3I0YCwgYGxkbV9wYXJzZV9kc2szYCwgYGxkbV9wYXJzZV92b2w1YCwgYW5kIGBsZG1fcGFyc2VfdmJsa2AuIFBsdXMsIHRoZSBlbnRyeXBvaW50IGlzIGBsZG1fcGFydGl0aW9uYC5cblxuTm93IHRvIHRoZSBrZXkgcXVlc3Rpb246IElzIHRoaXMgV29ydGhGdXp6aW5nPyBUaGUgYW5zd2VyIGlzIGxvb2tpbmcgbGlrZSBhIHNvbGlkIHllcy4gSXQgdG91Y2hlcyBibG9jayBwYXJ0aXRpb24gcGFyc2luZyBsb2dpYyB3aXRoaW4gYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgLCB3aGljaCBpcyBleGVjdXRlZCB3aGVuIGJsb2NrIGRldmljZXMgZ2V0IHBhcnRpdGlvbmVkIG9yIHNjYW5uZWQ7IHRoaW5ncyBsaWtlIGxvb3AsIG5iZCwgdmlydGlvLCBhbmQgcmFtZGlzayBhcmUgYWxsIGFmZmVjdGVkLiBJdCBhbHNvIGxvb2tzIHJlYWNoYWJsZSBpbiBRRU1VIGFuZCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFBsdXMsIGl0IG1vZGlmaWVzIHN0cmluZyBsZW5ndGggYm91bmRzIGFuZCBjaGVja2luZyBsb2dpYy4gUGVyZmVjdC5cblxuTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSW4gYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AsIGl0J3MgY2xlYXI6IGBjb25maWcgTERNX1BBUlRJVElPTmAgZGVwZW5kcyBvbiBgUEFSVElUSU9OX0FEVkFOQ0VEYC4gU28sIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBmb3IgYFBBUlRJVElPTl9BRFZBTkNFRGAgZm9yIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGJlZm9yZSBnb2luZyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcyNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNTozMi45MzIxMDM5NjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODg3MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQVJUSVRJT05fQURWQU5DRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svcGFydGl0aW9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9wYXJ0aXRpb25zL0tjb25maWc9NT1tZW51IFxcXCJQYXJ0aXRpb24gVHlwZXNcXFwiXFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTYtXFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnOjc6Y29uZmlnIFBBUlRJVElPTl9BRFZBTkNFRFxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy04LVxcdGJvb2wgXFxcIkFkdmFuY2VkIHBhcnRpdGlvbiBzZWxlY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjMyLjk3Nzk5NzEwOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTY1NzgxOTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgUEFSVElUSU9OX0FEVkFOQ0VEYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgUEFSVElUSU9OX0FEVkFOQ0VEYCBkb2Vzbid0IGhhdmUgYW55IGRlcGVuZGVuY2llcyAqb3RoZXIqIHRoYW4gaXRzZWxmLCB3aGljaCBJJ2xsIGtlZXAgaW4gbWluZCBhcyBJIGNvbnRpbnVlIHRvIHJldmlldy4gVGhlIGltbWVkaWF0ZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywgdGhlcmVmb3JlLCBzZWVtIHRvIGJlIGBMRE1fUEFSVElUSU9OYCBhbmQsIG9idmlvdXNseSwgYFBBUlRJVElPTl9BRFZBTkNFRGAuXG5cbk5vdywgbGV0J3MgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBsaXN0IG9mIEZvY3VzU3ltYm9scyBwcm92aWRlZC4gSSBzZWUgYSBmYW1pbGlhciBzZXQgb2YgZnVuY3Rpb24gY2FsbHMgdGhhdCBhcHBlYXIgdG8gYmUgb3VyIGNvcmUgcGFyc2luZyByb3V0aW5lcyB3aXRoaW4gdGhlIExETSBtb2R1bGUuIEdvb2QsIEknbGwga2VlcCBhbiBleWUgb24gdGhlbTogYGxkbV9nZXRfdnN0cmAsIGBsZG1fcGFyc2VfY21wM2AsIGBsZG1fcGFyc2VfZGdyM2AsIGBsZG1fcGFyc2VfZGdyNGAsIGBsZG1fcGFyc2VfZHNrM2AsIGBsZG1fcGFyc2Vfdm9sNWAsIGBsZG1fcGFyc2VfdmJsa2AsIGFuZCBvZiBjb3Vyc2UsIGBsZG1fcGFydGl0aW9uYC5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRpZmYgZGlyZWN0bHkgaW1wYWN0cyB0aGVzZSBmdW5jdGlvbnMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNpZGUtZWZmZWN0cywgSSB3YW50IHRvIGNhdGNoIHRoZW0gaW1tZWRpYXRlbHkuIE9rYXksIGxvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IGNvbmZpcm1zIHRoYXQgYWxsIDcgb2YgdGhvc2UgcGFyc2luZyBmdW5jdGlvbnMgYXJlIGluZGVlZCBtb2RpZmllZC4gTGluZXMgNjgwLTcxMCwgNzUyLTc1NiwgNzkwLTgwMiwgODI5LTg0MSwgODY0LTg3NywgMTA3Mi0xMDkyLCBhbmQgMTExNS0xMTI4LCByZXNwZWN0aXZlbHkuIEl0IHNlZW1zIHRoYXQgYGxkbV9wYXJ0aXRpb25gIGlzIHRoZSBlbnRyeSBwb2ludCwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbk5vdyBsZXQncyB2ZXJpZnkgc2NvcGUuIE9rYXksIEkgb25seSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgYmxvY2svcGFydGl0aW9ucy9sZG0uY2AuIEdvb2QuXG5cbkFuZCBmaW5hbGx5LCB0byByZWl0ZXJhdGUsIGl0J3MgY2xlYXIgdGhhdCBgQ09ORklHX0xETV9QQVJUSVRJT05gIHJlcXVpcmVzIGBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEYCwgd2hpY2ggY29uZmlybXMgZXZlcnl0aGluZy5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gc2F0aXNmaWVkLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQwLCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNTozNi45NDM3ODE0ODlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjMxODEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFSVElUSU9OX0FEVkFOQ0VEXCIsXG4gICAgXCJMRE1fUEFSVElUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGRtX2dldF92c3RyXCIsXG4gICAgXCJsZG1fcGFyc2VfdmJsa1wiLFxuICAgIFwibGRtX3BhcnNlX2NtcDNcIixcbiAgICBcImxkbV9wYXJzZV9kZ3IzXCIsXG4gICAgXCJsZG1fcGFyc2VfZGdyNFwiLFxuICAgIFwibGRtX3BhcnNlX2RzazNcIixcbiAgICBcImxkbV9wYXJzZV92b2w1XCIsXG4gICAgXCJsZG1fcGFydGl0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpbmRvd3MgTG9naWNhbCBEaXNrIE1hbmFnZXIgKExETSkgcGFydGl0aW9uIHBhcnNlciBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgd2hlbiByZWFkaW5nIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmdzLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGJsb2NrIGRldmljZSBwYXJ0aXRpb24gc2Nhbm5pbmcgKGUuZy4sIGxvb3AgZGV2aWNlcykgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB0cnVuY2F0aW9ucywgb3IgdW5leHBlY3RlZCBwYXJzZXIgYmVoYXZpb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBUlRJVElPTl9BRFZBTkNFRFwiLFxuICAgIFwiTERNX1BBUlRJVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxkbV9nZXRfdnN0clwiLFxuICAgIFwibGRtX3BhcnNlX3ZibGtcIixcbiAgICBcImxkbV9wYXJzZV9jbXAzXCIsXG4gICAgXCJsZG1fcGFyc2VfZGdyM1wiLFxuICAgIFwibGRtX3BhcnNlX2RncjRcIixcbiAgICBcImxkbV9wYXJzZV9kc2szXCIsXG4gICAgXCJsZG1fcGFyc2Vfdm9sNVwiLFxuICAgIFwibGRtX3BhcnRpdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaW5kb3dzIExvZ2ljYWwgRGlzayBNYW5hZ2VyIChMRE0pIHBhcnRpdGlvbiBwYXJzZXIgaW4gYmxvY2svcGFydGl0aW9ucy9sZG0uYyB0byBhZGQgYm91bmRzIGNoZWNraW5nIHdoZW4gcmVhZGluZyBsZW5ndGgtcHJlZml4ZWQgc3RyaW5ncywgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBibG9jayBkZXZpY2UgcGFydGl0aW9uIHNjYW5uaW5nIChlLmcuLCBsb29wIGRldmljZXMpIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgdHJ1bmNhdGlvbnMsIG9yIHVuZXhwZWN0ZWQgcGFyc2VyIGJlaGF2aW9ycyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MTU6MzcuMDIwMTIxNzc3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkzMzExMDg1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjM3LjAyMDYwNjM1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5OTMyNjIyODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIGJ5IGFkZGluZyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IGJ1ZmZlciBsZW5ndGggKGBibG9ja2xlbmApIHdpdGhpbiBgbGRtX2dldF92c3RyKClgLiBQcmV2aW91c2x5LCBgbGRtX2dldF92c3RyKClgIG9ubHkgY2hlY2tlZCBvdXRwdXQgYnVmZmVyIGJvdW5kcyAoYGJ1ZmxlbmApLCBhbGxvd2luZyBhIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgbGVuZ3RoIGJ5dGUgaW4gYSBwYXJ0aXRpb24gc3RydWN0dXJlIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gXFxuXFxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIGZ1bGx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgKEtNU0FOIGRvbWFpbikuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2YwZGQ0M2ZkNzIzZDlmMjQ5YmRmN2E5MDMwMzA0MTJmMGFkNjViZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMjE6MTU6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2xkbS5jIGIvYmxvY2svcGFydGl0aW9ucy9sZG0uY1xuaW5kZXggYzBiZGNhZTU4YTNlZS4uNTQ2OGUwMzhhMDlmNCAxMDA2NDRcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcbisrKyBiL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcbkBAIC02NzMsNiArNjczLDcgQEAgc3RhdGljIHU2NCBsZG1fZ2V0X3ZudW0gKGNvbnN0IHU4ICpibG9jaylcbiAvKipcbiAgKiBsZG1fZ2V0X3ZzdHIgLSBSZWFkIGEgbGVuZ3RoLXByZWZpeGVkIHN0cmluZyBpbnRvIGEgYnVmZmVyXG4gICogQGJsb2NrOiAgIFBvaW50ZXIgdG8gdGhlIGxlbmd0aCBtYXJrZXJcbisgKiBAYmxvY2tsZW46IE51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgQGJsb2NrXG4gICogQGJ1ZmZlcjogIExvY2F0aW9uIHRvIGNvcHkgc3RyaW5nIHRvXG4gICogQGJ1ZmxlbjogIFNpemUgb2YgdGhlIG91dHB1dCBidWZmZXJcbiAgKlxuQEAgLTY4MCwyMCArNjgxLDI3IEBAIHN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spXG4gICogdGhleSBhcmUgcHJlZml4ZWQgYnkgYSBvbmUgYnl0ZSBsZW5ndGggbWFya2VyLiAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgb25lIG9mXG4gICogdGhlc2Ugc3RyaW5ncyBpbnRvIGEgYnVmZmVyLlxuICAqXG4tICogTi5CLiAgVGhpcyBmdW5jdGlvbiBET0VTIE5PVCBwZXJmb3JtIGFueSByYW5nZSBjaGVja2luZyBvbiB0aGUgaW5wdXQuXG4tICogICAgICAgSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwsIHRoZSBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQuXG4rICogTi5CLiAgVGhlIHN0cmluZyBpcyBjbGFtcGVkIHRvIGJvdGggQGJsb2NrbGVuIGFuZCBAYnVmbGVuOyBpZiBlaXRoZXJcbisgKiAgICAgICBpcyB0b28gc21hbGwgdGhlIG91dHB1dCB3aWxsIGJlIHRydW5jYXRlZC5cbiAgKlxuICAqIFJldHVybjogIDAsIEVycm9yIGFuZCBAYnVmZmVyIGNvbnRlbnRzIGFyZSB1bmRlZmluZWRcbiAgKiAgICAgICAgICBuLCBTdHJpbmcgbGVuZ3RoIGluIGNoYXJhY3RlcnMgKGV4Y2x1ZGluZyBOVUxMKVxuICAqICAgICAgICAgIGJ1Zmxlbi0xLCBTdHJpbmcgd2FzIHRydW5jYXRlZC5cbiAgKi9cbi1zdGF0aWMgaW50IGxkbV9nZXRfdnN0ciAoY29uc3QgdTggKmJsb2NrLCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuK3N0YXRpYyBpbnQgbGRtX2dldF92c3RyKGNvbnN0IHU4ICpibG9jaywgaW50IGJsb2NrbGVuLCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuIHtcbiBcdGludCBsZW5ndGg7XG4gXG4gXHRCVUdfT04gKCFibG9jayB8fCAhYnVmZmVyKTtcbiBcbitcdGlmIChibG9ja2xlbiBcdTAwM2MgMSkge1xuK1x0XHRidWZmZXJbMF0gPSAnXFwwJztcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gXHRsZW5ndGggPSBibG9ja1swXTtcbitcdGlmIChsZW5ndGggXHUwMDNlIGJsb2NrbGVuIC0gMSlcbitcdFx0bGVuZ3RoID0gYmxvY2tsZW4gLSAxO1xuIFx0aWYgKGxlbmd0aCBcdTAwM2U9IGJ1Zmxlbikge1xuIFx0XHRsZG1fZXJyb3IgKFwiVHJ1bmNhdGluZyBzdHJpbmcgJWQgLVx1MDAzZSAlZC5cIiwgbGVuZ3RoLCBidWZsZW4pO1xuIFx0XHRsZW5ndGggPSBidWZsZW4gLSAxO1xuQEAgLTc0NCw4ICs3NTIsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfY21wMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRjb21wID0gXHUwMDI2dmItXHUwMDNldmJsay5jb21wO1xuLVx0bGRtX2dldF92c3RyIChidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBjb21wLVx1MDAzZXN0YXRlLFxuLVx0XHRzaXplb2YgKGNvbXAtXHUwMDNlc3RhdGUpKTtcbitcdGxkbV9nZXRfdnN0cihidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBidWZsZW4gLSAoMHgxOCArIHJfbmFtZSksXG4rXHRcdGNvbXAtXHUwMDNlc3RhdGUsIHNpemVvZihjb21wLVx1MDAzZXN0YXRlKSk7XG4gXHRjb21wLVx1MDAzZXR5cGUgICAgICA9IGJ1ZmZlclsweDE4ICsgcl92c3RhdGVdO1xuIFx0Y29tcC1cdTAwM2VjaGlsZHJlbiAgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciArIDB4MUQgKyByX3ZzdGF0ZSk7XG4gXHRjb21wLVx1MDAzZXBhcmVudF9pZCA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICsgMHgyRCArIHJfY2hpbGQpO1xuQEAgLTc5MCw4ICs3OTgsOCBAQCBzdGF0aWMgaW50IGxkbV9wYXJzZV9kZ3IzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGRncnAgPSBcdTAwMjZ2Yi1cdTAwM2V2YmxrLmRncnA7XG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciArIDB4MTggKyByX25hbWUsIGRncnAtXHUwMDNlZGlza19pZCxcbi1cdFx0c2l6ZW9mIChkZ3JwLVx1MDAzZWRpc2tfaWQpKTtcbitcdGxkbV9nZXRfdnN0cihidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBidWZsZW4gLSAoMHgxOCArIHJfbmFtZSksXG4rXHRcdGRncnAtXHUwMDNlZGlza19pZCwgc2l6ZW9mKGRncnAtXHUwMDNlZGlza19pZCkpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTgyOSw3ICs4MzcsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZGdyNCAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0aWYgKGxlbiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICsgMHgxNCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGxkbV9nZXRfdnN0ciAoYnVmZmVyICsgMHgxOCArIHJfb2JqaWQsIGJ1Ziwgc2l6ZW9mIChidWYpKTtcbitcdGxkbV9nZXRfdnN0cihidWZmZXIgKyAweDE4ICsgcl9vYmppZCwgYnVmbGVuIC0gKDB4MTggKyByX29iamlkKSxcbitcdFx0YnVmLCBzaXplb2YoYnVmKSk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtODY0LDggKzg3Myw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9kc2szIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGRpc2sgPSBcdTAwMjZ2Yi1cdTAwM2V2YmxrLmRpc2s7XG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciArIDB4MTggKyByX2Rpc2tpZCwgZGlzay1cdTAwM2VhbHRfbmFtZSxcbi1cdFx0c2l6ZW9mIChkaXNrLVx1MDAzZWFsdF9uYW1lKSk7XG4rXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfZGlza2lkLCBidWZsZW4gLSAoMHgxOCArIHJfZGlza2lkKSxcbitcdFx0ZGlzay1cdTAwM2VhbHRfbmFtZSwgc2l6ZW9mKGRpc2stXHUwMDNlYWx0X25hbWUpKTtcbiBcdGlmICh1dWlkX3BhcnNlKGJ1ZmZlciArIDB4MTkgKyByX25hbWUsIFx1MDAyNmRpc2stXHUwMDNlZGlza19pZCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC0xMDcyLDE2ICsxMDgxLDE2IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV92b2w1KGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFx0dm9sdSA9IFx1MDAyNnZiLVx1MDAzZXZibGsudm9sdTtcbi1cdGxkbV9nZXRfdnN0cihidWZmZXIgKyAweDE4ICsgcl9uYW1lLCB2b2x1LVx1MDAzZXZvbHVtZV90eXBlLFxuLVx0XHRcdHNpemVvZih2b2x1LVx1MDAzZXZvbHVtZV90eXBlKSk7XG4rXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxuK1x0XHRcdHZvbHUtXHUwMDNldm9sdW1lX3R5cGUsIHNpemVvZih2b2x1LVx1MDAzZXZvbHVtZV90eXBlKSk7XG4gXHRtZW1jcHkodm9sdS1cdTAwM2V2b2x1bWVfc3RhdGUsIGJ1ZmZlciArIDB4MTggKyByX2Rpc2FibGVfZHJpdmVfbGV0dGVyLFxuIFx0XHRcdHNpemVvZih2b2x1LVx1MDAzZXZvbHVtZV9zdGF0ZSkpO1xuIFx0dm9sdS1cdTAwM2VzaXplID0gbGRtX2dldF92bnVtKGJ1ZmZlciArIDB4M0QgKyByX2NoaWxkKTtcbiBcdHZvbHUtXHUwMDNlcGFydGl0aW9uX3R5cGUgPSBidWZmZXJbMHg0MSArIHJfc2l6ZV07XG4gXHRtZW1jcHkodm9sdS1cdTAwM2VndWlkLCBidWZmZXIgKyAweDQyICsgcl9zaXplLCBzaXplb2Yodm9sdS1cdTAwM2VndWlkKSk7XG4gXHRpZiAoYnVmZmVyWzB4MTJdIFx1MDAyNiBWQkxLX0ZMQUdfVk9MVV9EUklWRSkge1xuLVx0XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHg1MiArIHJfc2l6ZSwgdm9sdS1cdTAwM2Vkcml2ZV9oaW50LFxuLVx0XHRcdFx0c2l6ZW9mKHZvbHUtXHUwMDNlZHJpdmVfaGludCkpO1xuK1x0XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHg1MiArIHJfc2l6ZSwgYnVmbGVuIC0gKDB4NTIgKyByX3NpemUpLFxuK1x0XHRcdFx0dm9sdS1cdTAwM2Vkcml2ZV9oaW50LCBzaXplb2Yodm9sdS1cdTAwM2Vkcml2ZV9oaW50KSk7XG4gXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTExNSw3ICsxMTI0LDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZibGsgKGNvbnN0IHU4ICpidWYsIGludCBsZW4sIHN0cnVjdCB2YmxrICp2YilcbiBcdHZiLVx1MDAzZWZsYWdzICA9IGJ1ZlsweDEyXTtcbiBcdHZiLVx1MDAzZXR5cGUgICA9IGJ1ZlsweDEzXTtcbiBcdHZiLVx1MDAzZW9ial9pZCA9IGxkbV9nZXRfdm51bSAoYnVmICsgMHgxOCk7XG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZisweDE4K3Jfb2JqaWQsIHZiLVx1MDAzZW5hbWUsIHNpemVvZiAodmItXHUwMDNlbmFtZSkpO1xuK1x0bGRtX2dldF92c3RyKGJ1ZiArIDB4MTggKyByX29iamlkLCBsZW4gLSAoMHgxOCArIHJfb2JqaWQpLFxuK1x0XHR2Yi1cdTAwM2VuYW1lLCBzaXplb2YodmItXHUwMDNlbmFtZSkpO1xuIFxuIFx0c3dpdGNoICh2Yi1cdTAwM2V0eXBlKSB7XG4gXHRcdGNhc2UgVkJMS19DTVAzOiAgcmVzdWx0ID0gbGRtX3BhcnNlX2NtcDMgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MTU6MzcuMDIwNjA3NDI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0Njg3ODI4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgdXNlcidzIHBvbmRlcmluZyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGl0cyBvd24gS01TQU4gZnV6emluZyBydW4uIFRoYXQncyBhIHJlYXNvbmFibGUgcXVlc3Rpb247IHdlIG5lZWQgdG8gYXNzZXNzIHRoZSByaXNrLiBMZXQncyBkaWcgaW4uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgYmxvY2svcGFydGl0aW9ucy9sZG0uY2AuIFJpZ2h0LCBzbyBsb2dpY2FsIGRpc2sgbWFuYWdlbWVudCwgaW50ZXJlc3RpbmcuLi4gcG90ZW50aWFsbHkgY29tcGxleC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhhdCBmaWxlIHRvIGdhdWdlIHRoZSBpbXBhY3QuXG5cbkxldCdzIHF1aWNrbHkgZ2V0IHRoZSBjb2RlIHVwLiBJIGNhbiB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHB1bGwgdXAgYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgIGFuZCBnZXQgYSBmZWVsIGZvciB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIHRoZSBtb2RpZmllZCBzZWN0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHNjcmVhbXMgXCJwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb25cIiBvciB0aGF0IG9wZXJhdGVzIG9uIGRhdGEgc3RydWN0dXJlcyBpbiBhIHdheSB0aGF0IG1pZ2h0IGV4cG9zZSBLTVNBTiBpc3N1ZXMuIE9uY2UgSSBoYXZlIGEgZ29vZCBjb250ZXh0LCBJIGNhbiBtYWtlIGEgbW9yZSBpbmZvcm1lZCBkZWNpc2lvbiBhYm91dCB3aGV0aGVyIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiBpcyB0aGUgcmlnaHQgbW92ZS4gSSBuZWVkIHRvIGJhbGFuY2UgdGhlIGNvc3Qgb2Ygc2V0dGluZyB1cCBhIG5ldyBzZXNzaW9uIHdpdGggdGhlIHBvdGVudGlhbCBiZW5lZml0IG9mIGNhdGNoaW5nIHN1YnRsZSBLTVNBTiBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODU4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNTo0MS40ODkzOTI5MTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL3BhcnRpdGlvbnMvbGRtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjcwOlxcdFxcdHJldHVybiB0bXA7XFxuIDY3MTpcXHR9XFxuIDY3MjpcXHRcXG4gNjczOlxcdC8qKlxcbiA2NzQ6XFx0ICogbGRtX2dldF92c3RyIC0gUmVhZCBhIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmcgaW50byBhIGJ1ZmZlclxcbiA2NzU6XFx0ICogQGJsb2NrOiAgIFBvaW50ZXIgdG8gdGhlIGxlbmd0aCBtYXJrZXJcXG4gNjc2OlxcdCAqIEBibG9ja2xlbjogTnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBAYmxvY2tcXG4gNjc3OlxcdCAqIEBidWZmZXI6ICBMb2NhdGlvbiB0byBjb3B5IHN0cmluZyB0b1xcbiA2Nzg6XFx0ICogQGJ1ZmxlbjogIFNpemUgb2YgdGhlIG91dHB1dCBidWZmZXJcXG4gNjc5OlxcdCAqXFxuIDY4MDpcXHQgKiBNYW55IG9mIHRoZSBzdHJpbmdzIGluIHRoZSBMRE0gRGF0YWJhc2UgYXJlIG5vdCBOVUxMIHRlcm1pbmF0ZWQuICBJbnN0ZWFkXFxuIDY4MTpcXHQgKiB0aGV5IGFyZSBwcmVmaXhlZCBieSBhIG9uZSBieXRlIGxlbmd0aCBtYXJrZXIuICBUaGlzIGZ1bmN0aW9uIGNvcGllcyBvbmUgb2ZcXG4gNjgyOlxcdCAqIHRoZXNlIHN0cmluZ3MgaW50byBhIGJ1ZmZlci5cXG4gNjgzOlxcdCAqXFxuIDY4NDpcXHQgKiBOLkIuICBUaGUgc3RyaW5nIGlzIGNsYW1wZWQgdG8gYm90aCBAYmxvY2tsZW4gYW5kIEBidWZsZW47IGlmIGVpdGhlclxcbiA2ODU6XFx0ICogICAgICAgaXMgdG9vIHNtYWxsIHRoZSBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQuXFxuIDY4NjpcXHQgKlxcbiA2ODc6XFx0ICogUmV0dXJuOiAgMCwgRXJyb3IgYW5kIEBidWZmZXIgY29udGVudHMgYXJlIHVuZGVmaW5lZFxcbiA2ODg6XFx0ICogICAgICAgICAgbiwgU3RyaW5nIGxlbmd0aCBpbiBjaGFyYWN0ZXJzIChleGNsdWRpbmcgTlVMTClcXG4gNjg5OlxcdCAqICAgICAgICAgIGJ1Zmxlbi0xLCBTdHJpbmcgd2FzIHRydW5jYXRlZC5cXG4gNjkwOlxcdCAqL1xcbiA2OTE6XFx0c3RhdGljIGludCBsZG1fZ2V0X3ZzdHIoY29uc3QgdTggKmJsb2NrLCBpbnQgYmxvY2tsZW4sIHU4ICpidWZmZXIsIGludCBidWZsZW4pXFxuIDY5MjpcXHR7XFxuIDY5MzpcXHRcXHRpbnQgbGVuZ3RoO1xcbiA2OTQ6XFx0XFxuIDY5NTpcXHRcXHRCVUdfT04gKCFibG9jayB8fCAhYnVmZmVyKTtcXG4gNjk2OlxcdFxcbiA2OTc6XFx0XFx0aWYgKGJsb2NrbGVuIFxcdTAwM2MgMSkge1xcbiA2OTg6XFx0XFx0XFx0YnVmZmVyWzBdID0gJ1xcXFwwJztcXG4gNjk5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA3MDA6XFx0XFx0fVxcbiA3MDE6XFx0XFxuIDcwMjpcXHRcXHRsZW5ndGggPSBibG9ja1swXTtcXG4gNzAzOlxcdFxcdGlmIChsZW5ndGggXFx1MDAzZSBibG9ja2xlbiAtIDEpXFxuIDcwNDpcXHRcXHRcXHRsZW5ndGggPSBibG9ja2xlbiAtIDE7XFxuIDcwNTpcXHRcXHRpZiAobGVuZ3RoIFxcdTAwM2U9IGJ1Zmxlbikge1xcbiA3MDY6XFx0XFx0XFx0bGRtX2Vycm9yIChcXFwiVHJ1bmNhdGluZyBzdHJpbmcgJWQgLVxcdTAwM2UgJWQuXFxcIiwgbGVuZ3RoLCBidWZsZW4pO1xcbiA3MDc6XFx0XFx0XFx0bGVuZ3RoID0gYnVmbGVuIC0gMTtcXG4gNzA4OlxcdFxcdH1cXG4gNzA5OlxcdFxcdG1lbWNweSAoYnVmZmVyLCBibG9jayArIDEsIGxlbmd0aCk7XFxuIDcxMDpcXHRcXHRidWZmZXJbbGVuZ3RoXSA9IDA7XFxuIDcxMTpcXHRcXHRyZXR1cm4gbGVuZ3RoO1xcbiA3MTI6XFx0fVxcbiA3MTM6XFx0XFxuIDcxNDpcXHRcXG4gNzE1OlxcdC8qKlxcbiA3MTY6XFx0ICogbGRtX3BhcnNlX2NtcDMgLSBSZWFkIGEgcmF3IFZCTEsgQ29tcG9uZW50IG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG4gNzE3OlxcdCAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbiA3MTg6XFx0ICogQGJ1ZmxlbjogIFNpemUgb2YgdGhlIGJsb2NrIG9mIGRhdGFcXG4gNzE5OlxcdCAqIEB2YjogICAgICBJbi1tZW1vcnkgdmJsayBpbiB3aGljaCB0byByZXR1cm4gaW5mb3JtYXRpb25cXG4gNzIwOlxcdCAqXFxuIDcyMTpcXHQgKiBSZWFkIGEgcmF3IFZCTEsgQ29tcG9uZW50IG9iamVjdCAodmVyc2lvbiAzKSBpbnRvIGEgdmJsayBzdHJ1Y3R1cmUuXFxuIDcyMjpcXHQgKlxcbiA3MjM6XFx0ICogUmV0dXJuOiAgJ3RydWUnICAgQHZiIGNvbnRhaW5zIGEgQ29tcG9uZW50IFZCTEtcXG4gNzI0OlxcdCAqICAgICAgICAgICdmYWxzZScgIEB2YiBjb250ZW50cyBhcmUgbm90IGRlZmluZWRcXG4gNzI1OlxcdCAqL1xcbiA3MjY6XFx0c3RhdGljIGJvb2wgbGRtX3BhcnNlX2NtcDMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG4gNzI3OlxcdHtcXG4gNzI4OlxcdFxcdGludCByX29iamlkLCByX25hbWUsIHJfdnN0YXRlLCByX2NoaWxkLCByX3BhcmVudCwgcl9zdHJpcGUsIHJfY29scywgbGVuO1xcbiA3Mjk6XFx0XFx0c3RydWN0IHZibGtfY29tcCAqY29tcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MTU6NDEuNDg5NTEyODY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4OTQyOTg4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQWRkcmVzc2luZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFJlYWQgaW4gYGxkbV9nZXRfdnN0cmAqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoaXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBpbiB0aGUgTG9naWNhbCBEaXNrIE1hbmFnZXIgKExETSkgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgYGxkbV9nZXRfdnN0cigpYCBmdW5jdGlvbiwgd2l0aGluIGBsZG0uY2AsIGhhcyBiZWVuIG1vZGlmaWVkLlxuXG5QcmV2aW91c2x5LCBgbGRtX2dldF92c3RyYCB3YXMgdnVsbmVyYWJsZS4gSXQgcmVhZCBhIGxlbmd0aCBieXRlIChgYmxvY2tbMF1gKSBhbmQgY29waWVkIGBsZW5ndGhgIGJ5dGVzIGZyb20gYGJsb2NrICsgMWAgaW50byB0aGUgcHJvdmlkZWQgYGJ1ZmZlcmAuIFRoZSBvcmlnaW5hbCBjb2RlIG9ubHkgY2hlY2tlZCBhZ2FpbnN0IHRoZSBidWZmZXIgbGVuZ3RoIChgYnVmbGVuYCkgcGFzc2VkIGluIGZvciB0aGUgKmRlc3RpbmF0aW9uKiBidWZmZXIsIGJ1dCBub3QgYWdhaW5zdCB0aGUgKnNvdXJjZSogYnVmZmVyIGxlbmd0aC4gSWYgdGhlIHZhbHVlIGluIGBibG9ja1swXWAgc3BlY2lmaWVkIGEgbGVuZ3RoIGxhcmdlciB0aGFuIHRoZSBhdmFpbGFibGUgZGF0YSBpbiB0aGUgaW5wdXQgYnVmZmVyIChgYmxvY2tsZW5gKSwgaXQgd291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgZnJvbSB0aGUgZGlzay9wYXJ0aXRpb24gdGFibGUgYnVmZmVyLiBBIGNsYXNzaWMgbWlzdGFrZSFcblxuVGhlIGZpeCBpcyBlbGVnYW50OiBpdCBpbnRyb2R1Y2VzIGEgbmV3IGBibG9ja2xlbmAgcGFyYW1ldGVyIHRvIGBsZG1fZ2V0X3ZzdHIoKWAsIHdoaWNoIHJlcHJlc2VudHMgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVGhlIGBsZW5ndGhgIGlzIHRoZW4gY2xhbXBlZCB0byBgYmxvY2tsZW4gLSAxYCwgZW5zdXJpbmcgdGhhdCB3ZSBuZXZlciBhdHRlbXB0IHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gSXQgYWxzbyBoYW5kbGVzIHRoZSBlZGdlIGNhc2Ugd2hlcmUgYGJsb2NrbGVuYCBpcyBsZXNzIHRoYW4gMS5cblxuTm93LCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgdG8gZW5zdXJlIHRoZSBmaXggZG9lc24ndCBpbnRyb2R1Y2UgKm5ldyogdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHNlZTpcblxuMS4gICoqVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZC9MZWFrOioqIFRoZSBuZXcgY29kZSBjYXJlZnVsbHkgaGFuZGxlcyB0aGlzLiBXaGVuIGBibG9ja2xlbiBcdTAwM2MgMWAsIHRoZSBjb2RlIHNldHMgYGJ1ZmZlclswXSA9ICdcXDAnYCBhbmQgcmV0dXJucyAwLCBudWxsLXRlcm1pbmF0aW5nIHRoZSBidWZmZXIuIElmIGBsZW5ndGhgIGlzIGdyZWF0ZXIgdGhhbiBgYmxvY2tsZW4gLSAxYCwgdGhlIGNvZGUgbm93IGNsYW1wcyB0aGUgbGVuZ3RoLiBUaGUgYG1lbWNweSgpYCBvcGVyYXRpb24gZW5zdXJlcyB0aGF0IHRoZSBjb3BpZWQgZGF0YSBpcyBjb3JyZWN0bHkgbnVsbC10ZXJtaW5hdGVkLiBDcml0aWNhbGx5LCB0aGUgaW5wdXQgYnVmZmVyIGl0c2VsZiBvcmlnaW5hdGVzIGZyb20gcGFydGl0aW9uIGRhdGEgcmVhZCBmcm9tIGEgZGlzayBvciBibG9jayBkZXZpY2UuIFRoaXMgbWVhbnMgdGhlIGJ1ZmZlciBjb250YWlucyBkYXRhLCBzbyB0aGUgaXNzdWUgd2FzIGFuIG91dC1vZi1ib3VuZHMgKnJlYWQqIChwb3RlbnRpYWxseSBleHBvc2luZyBnYXJiYWdlIG9yIGV2ZW4gdHJpZ2dlcmluZyBhIGtlcm5lbCBwYW5pYyB2aWEgS0FTQU4pLlxuXG4yLiAgKipVbmludGVuZGVkIERhdGEgRXhwb3N1cmU6KiogSSdsbCBhbHNvIGRvdWJsZS1jaGVjayB3aGV0aGVyIGBidWZmZXJgIGlzIHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSwgZXNwZWNpYWxseSBpZiB1bmluaXRpYWxpemVkIG1lbW9yeSBnZXRzIHVzZWQgaW4gb3RoZXIgbG9jYXRpb25zLCBvciBpZiBhbnkgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXJzcGFjZS4gSSBzaG91bGQgYWxzbyBjaGVjayB3aGVyZSB0aGUgYGxkbV9wYXJzZV8qYCBmdW5jdGlvbnMgYXJlIGNhbGxlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGluIGEgdGhvcm91Z2ggYXVkaXQuXG5cblNvIGZhciwgaXQgbG9va3Mgc29saWQuIEJ1dCBhcyBhbHdheXMsIEkgbXVzdCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGFueSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzLiBUaGlzIGZpeCBpcyBhIGdvb2Qgc3RlcCwgYW5kIG5vdyBpdCdzIHRpbWUgdG8gZGlnIGRlZXBlciFcblxuXG4iLCJJbnB1dFRva2VucyI6NTE1OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjQ5LjM4MzgxNDE5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NjYwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGRtX3BhcnNlX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9wYXJ0aXRpb25zL2xkbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9NDE9dm9pZCBfbGRtX3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01Ni0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjU3OiAqIGxkbV9wYXJzZV9wcml2aGVhZCAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBQUklWSEVBRCBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTU4LSAqIEBkYXRhOiAgUmF3IGRhdGFiYXNlIFBSSVZIRUFEIHN0cnVjdHVyZSBsb2FkZWQgZnJvbSB0aGUgZGV2aWNlXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY2LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Njc6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3ByaXZoZWFkKGNvbnN0IHU4ICpkYXRhLCBzdHJ1Y3QgcHJpdmhlYWQgKnBoKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjgte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTItLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTM6ICogbGRtX3BhcnNlX3RvY2Jsb2NrIC0gUmVhZCB0aGUgTERNIERhdGFiYXNlIFRPQ0JMT0NLIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE0LSAqIEBkYXRhOiAgUmF3IGRhdGFiYXNlIFRPQ0JMT0NLIHN0cnVjdHVyZSBsb2FkZWQgZnJvbSB0aGUgZGV2aWNlXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEyNS0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEyNjpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdG9jYmxvY2sgKGNvbnN0IHU4ICpkYXRhLCBzdHJ1Y3QgdG9jYmxvY2sgKnRvYylcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEyNy17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE1Ny0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE1ODogKiBsZG1fcGFyc2Vfdm1kYiAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBWTURCIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTU5LSAqIEBkYXRhOiAgUmF3IGRhdGFiYXNlIFZNREIgc3RydWN0dXJlIGxvYWRlZCBmcm9tIHRoZSBkZXZpY2VcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTY5LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTcwOnN0YXRpYyBib29sIGxkbV9wYXJzZV92bWRiIChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHZtZGIgKnZtKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTcxLXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9MjYzPXN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV9wcml2aGVhZHMoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSxcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjkzLVxcdFxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjI5NDpcXHRcXHRyZXN1bHQgPSBsZG1fcGFyc2VfcHJpdmhlYWQgKGRhdGEsIHBoW2ldKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI5NS1cXHRcXHRwdXRfZGV2X3NlY3RvciAoc2VjdCk7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTM1MT1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdG9jYmxvY2tzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4My1cXHRcXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozODQ6XFx0XFx0aWYgKGxkbV9wYXJzZV90b2NibG9jayhkYXRhLCB0Yltucl90YnNdKSlcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4NS1cXHRcXHRcXHRucl90YnMrKztcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9NDI1PXN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV92bWRiKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0NC1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQ0NTpcXHRpZiAoIWxkbV9wYXJzZV92bWRiIChkYXRhLCB2bSkpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NDYtXFx0XFx0Z290byBvdXQ7XFx0XFx0XFx0XFx0LyogQWxyZWFkeSBsb2dnZWQgKi9cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9NjkxPXN0YXRpYyBpbnQgbGRtX2dldF92c3RyKGNvbnN0IHU4ICpibG9jaywgaW50IGJsb2NrbGVuLCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03MTUtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3MTY6ICogbGRtX3BhcnNlX2NtcDMgLSBSZWFkIGEgcmF3IFZCTEsgQ29tcG9uZW50IG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcxNy0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzI1LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzI2OnN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03Mjcte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NjUtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3NjY6ICogbGRtX3BhcnNlX2RncjMgLSBSZWFkIGEgcmF3IFZCTEsgRGlzayBHcm91cCBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NjctICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc3NS0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc3NjpzdGF0aWMgaW50IGxkbV9wYXJzZV9kZ3IzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03Nzcte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MDYtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4MDc6ICogbGRtX3BhcnNlX2RncjQgLSBSZWFkIGEgcmF3IFZCTEsgRGlzayBHcm91cCBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MDgtICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgxNi0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgxNzpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZGdyNCAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODE4LXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODQ1LS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODQ2OiAqIGxkbV9wYXJzZV9kc2szIC0gUmVhZCBhIHJhdyBWQkxLIERpc2sgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODQ3LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NTUtICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4NTY6c3RhdGljIGJvb2wgbGRtX3BhcnNlX2RzazMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg1Ny17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg4NC0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg4NTogKiBsZG1fcGFyc2VfZHNrNCAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg4Ni0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODk0LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODk1OnN0YXRpYyBib29sIGxkbV9wYXJzZV9kc2s0IChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04OTYte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05MTctLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MTg6ICogbGRtX3BhcnNlX3BydDMgLSBSZWFkIGEgcmF3IFZCTEsgUGFydGl0aW9uIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkxOS0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTI3LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTI4OnN0YXRpYyBib29sIGxkbV9wYXJzZV9wcnQzKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkyOS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk5MS0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk5MjogKiBsZG1fcGFyc2Vfdm9sNSAtIFJlYWQgYSByYXcgVkJMSyBWb2x1bWUgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTkzLSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDAxLSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAwMjpzdGF0aWMgYm9vbCBsZG1fcGFyc2Vfdm9sNShjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDAzLXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTA5OC0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwOTk6ICogbGRtX3BhcnNlX3ZibGsgLSBSZWFkIGEgcmF3IFZCTEsgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTEwMC0gKiBAYnVmOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTEwNS0gKiBpbmZvcm1hdGlvbiBjb21tb24gdG8gYWxsIFZCTEsgdHlwZXMsIHRoZW4gZGVsZWdhdGVzIHRoZSByZXN0IG9mIHRoZSB3b3JrIHRvXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTA2OiAqIGhlbHBlciBmdW5jdGlvbnM6IGxkbV9wYXJzZV8qLlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTEwNy0gKlxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTEwLSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTExMTpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdmJsayAoY29uc3QgdTggKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHZibGsgKnZiKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTExMi17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMzAtXFx0c3dpdGNoICh2Yi1cXHUwMDNldHlwZSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzMTpcXHRcXHRjYXNlIFZCTEtfQ01QMzogIHJlc3VsdCA9IGxkbV9wYXJzZV9jbXAzIChidWYsIGxlbiwgdmIpOyBicmVhaztcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExMzI6XFx0XFx0Y2FzZSBWQkxLX0RTSzM6ICByZXN1bHQgPSBsZG1fcGFyc2VfZHNrMyAoYnVmLCBsZW4sIHZiKTsgYnJlYWs7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTMzOlxcdFxcdGNhc2UgVkJMS19EU0s0OiAgcmVzdWx0ID0gbGRtX3BhcnNlX2RzazQgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzNDpcXHRcXHRjYXNlIFZCTEtfREdSMzogIHJlc3VsdCA9IGxkbV9wYXJzZV9kZ3IzIChidWYsIGxlbiwgdmIpOyBicmVhaztcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExMzU6XFx0XFx0Y2FzZSBWQkxLX0RHUjQ6ICByZXN1bHQgPSBsZG1fcGFyc2VfZGdyNCAoYnVmLCBsZW4sIHZiKTsgYnJlYWs7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTM2OlxcdFxcdGNhc2UgVkJMS19QUlQzOiAgcmVzdWx0ID0gbGRtX3BhcnNlX3BydDMgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzNzpcXHRcXHRjYXNlIFZCTEtfVk9MNTogIHJlc3VsdCA9IGxkbV9wYXJzZV92b2w1IChidWYsIGxlbiwgdmIpOyBicmVhaztcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMzgtXFx0fVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0xMTY0PXN0YXRpYyBib29sIGxkbV9sZG1kYl9hZGQgKHU4ICpkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbGRtZGIgKmxkYilcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE3Ni1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExNzc6XFx0aWYgKCFsZG1fcGFyc2VfdmJsayAoZGF0YSwgbGVuLCB2YikpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExNzgtXFx0XFx0a2ZyZWUodmIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNTo0OS40MjkzODMxMTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYxNTMxMjc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IEFsbG9jYXRpb24gb2YgdGhlIExETSBEYXRhYmFzZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRhdGFiYXNlIGlzIGJlaW5nIGJ1aWx0LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3Vlcy4gSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIGBsZG0uY2AuIE15IGh1bmNoIGlzIHRoYXQgdGhlIHByb2JsZW0gd2lsbCBiZSBhcm91bmQgdGhlIGBsZG1fbGRtZGJfYWRkYCBmdW5jdGlvbiwgb3Igc29tZXdoZXJlIGluIHRoZSB2aWNpbml0eSBvZiB3aGVyZSB0aGUgYHZiYCAod2hhdGV2ZXIgdGhhdCB2YXJpYWJsZSByZXByZXNlbnRzKSBpcyBhbGxvY2F0ZWQuIFRoYXQgYXJlYSBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZSBmb3IgYSBtZW1vcnkgbGVhaywgY29ycnVwdGlvbiwgb3IgYW4gaXNzdWUgd2l0aCBob3cgdGhlIGRhdGFiYXNlIGdyb3dzLiBMZXQncyBzZWUgaG93IGB2YmAgaXMgaGFuZGxlZCB0aGVyZS4uLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIGxpZmVjeWNsZSBhbmQgdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkIGFuZCBmcmVlZCwgb3IgaWYgaXQncyBiZWluZyBmcmVlZCBhdCBhbGwuIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSB2YWx1YWJsZSBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjUyLjA0NDY5ODUyNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svcGFydGl0aW9ucy9sZG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTYwOlxcdCAqXFxuMTE2MTpcXHQgKiBSZXR1cm46ICAndHJ1ZScgICBUaGUgVkJMSyB3YXMgYWRkZWRcXG4xMTYyOlxcdCAqICAgICAgICAgICdmYWxzZScgIEFuIGVycm9yIG9jY3VycmVkXFxuMTE2MzpcXHQgKi9cXG4xMTY0OlxcdHN0YXRpYyBib29sIGxkbV9sZG1kYl9hZGQgKHU4ICpkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbGRtZGIgKmxkYilcXG4xMTY1OlxcdHtcXG4xMTY2OlxcdFxcdHN0cnVjdCB2YmxrICp2YjtcXG4xMTY3OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZW07XFxuMTE2ODpcXHRcXG4xMTY5OlxcdFxcdEJVR19PTiAoIWRhdGEgfHwgIWxkYik7XFxuMTE3MDpcXHRcXG4xMTcxOlxcdFxcdHZiID0ga21hbGxvY19vYmooKnZiKTtcXG4xMTcyOlxcdFxcdGlmICghdmIpIHtcXG4xMTczOlxcdFxcdFxcdGxkbV9jcml0IChcXFwiT3V0IG9mIG1lbW9yeS5cXFwiKTtcXG4xMTc0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTc1OlxcdFxcdH1cXG4xMTc2OlxcdFxcbjExNzc6XFx0XFx0aWYgKCFsZG1fcGFyc2VfdmJsayAoZGF0YSwgbGVuLCB2YikpIHtcXG4xMTc4OlxcdFxcdFxcdGtmcmVlKHZiKTtcXG4xMTc5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXHRcXHRcXHQvKiBBbHJlYWR5IGxvZ2dlZCAqL1xcbjExODA6XFx0XFx0fVxcbjExODE6XFx0XFxuMTE4MjpcXHRcXHQvKiBQdXQgdmJsayBpbnRvIHRoZSBjb3JyZWN0IGxpc3QuICovXFxuMTE4MzpcXHRcXHRzd2l0Y2ggKHZiLVxcdTAwM2V0eXBlKSB7XFxuMTE4NDpcXHRcXHRjYXNlIFZCTEtfREdSMzpcXG4xMTg1OlxcdFxcdGNhc2UgVkJMS19ER1I0OlxcbjExODY6XFx0XFx0XFx0bGlzdF9hZGQgKFxcdTAwMjZ2Yi1cXHUwMDNlbGlzdCwgXFx1MDAyNmxkYi1cXHUwMDNldl9kZ3JwKTtcXG4xMTg3OlxcdFxcdFxcdGJyZWFrO1xcbjExODg6XFx0XFx0Y2FzZSBWQkxLX0RTSzM6XFxuMTE4OTpcXHRcXHRjYXNlIFZCTEtfRFNLNDpcXG4xMTkwOlxcdFxcdFxcdGxpc3RfYWRkIChcXHUwMDI2dmItXFx1MDAzZWxpc3QsIFxcdTAwMjZsZGItXFx1MDAzZXZfZGlzayk7XFxuMTE5MTpcXHRcXHRcXHRicmVhaztcXG4xMTkyOlxcdFxcdGNhc2UgVkJMS19WT0w1OlxcbjExOTM6XFx0XFx0XFx0bGlzdF9hZGQgKFxcdTAwMjZ2Yi1cXHUwMDNlbGlzdCwgXFx1MDAyNmxkYi1cXHUwMDNldl92b2x1KTtcXG4xMTk0OlxcdFxcdFxcdGJyZWFrO1xcbjExOTU6XFx0XFx0Y2FzZSBWQkxLX0NNUDM6XFxuMTE5NjpcXHRcXHRcXHRsaXN0X2FkZCAoXFx1MDAyNnZiLVxcdTAwM2VsaXN0LCBcXHUwMDI2bGRiLVxcdTAwM2V2X2NvbXApO1xcbjExOTc6XFx0XFx0XFx0YnJlYWs7XFxuMTE5ODpcXHRcXHRjYXNlIFZCTEtfUFJUMzpcXG4xMTk5OlxcdFxcdFxcdC8qIFNvcnQgYnkgdGhlIHBhcnRpdGlvbidzIHN0YXJ0IHNlY3Rvci4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MTU6NTIuMDQ0ODAxNzU1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MDg0MDc4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTWVtb3J5IFNhZmV0eSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciB0aGUgTERNIHBhcnRpdGlvbiBwYXJzZXIuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgbGRtX2dldF92c3RyYCBpcyB1c2VkIHdpdGhpbiB0aGUgcGFyc2luZyBmdW5jdGlvbnMgbGlrZSBgbGRtX3BhcnNlX2RzazNgIGFuZCBgbGRtX3BhcnNlX2NtcDNgLiBJIG5lZWQgdG8gc2VlIHRoZSBjYWxsIHNpdGVzLCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5Mb29raW5nIGF0IGBsZG1fZ2V0X3ZzdHJgIGl0c2VsZiwgdGhlIGNvcmUgaXNzdWUgaXMgY2xlYXIuIEl0IHdhcyB2dWxuZXJhYmxlIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIGZ1bmN0aW9uIG5haXZlbHkgY29waWVkIGEgc3RyaW5nIG9mIGBsZW5ndGhgIGJ5dGVzIGZyb20gYW4gaW5wdXQgYGJsb2NrYCwgc3RhcnRpbmcgYXQgYGJsb2NrICsgMWAsIGludG8gYSBwcm92aWRlZCBgYnVmZmVyYCB3aXRob3V0IGNoZWNraW5nIGlmIHRoYXQgYGxlbmd0aGAgd291bGQgZXhjZWVkIHRoZSBib3VuZHMgb2YgdGhlIGlucHV0IGBibG9ja2AuIFRoYXQncyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93LCBhbmQgcXVpdGUgZnJhbmtseSwgYSBwcmV0dHkgYmFzaWMgb3ZlcnNpZ2h0LiBUaGUgcGF0Y2ggY2xldmVybHkgYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGJvdW5kcyBjaGVja2luZyBhZ2FpbnN0IGBibG9ja2xlbmAsIHRoZSBhY3R1YWwgYXZhaWxhYmxlIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyLiAgSXQgbG9va3Mgc29saWQgb24gZmlyc3QgZ2xhbmNlLiBUaGUgb3RoZXIgbmljZSBwb2ludCBpcyB0aGF0IGV2ZW4gaWYgYGJsb2NrbGVuIFx1MDAzYyAxYCB0aGVuIGBidWZmZXJbMF0gPSAnXFwwJztgLCBzbyB0aGUgYnVmZmVyIGlzIGFsd2F5cyBudWxsLXRlcm1pbmF0ZWQuIFNvIG5vIGluaXRpYWxpemF0aW9uIHJpc2tzIGhlcmUuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBcmUgd2UgcGFzc2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhbHVlcywgb3IgdXNpbmcgdGhlbSBpbiBjb25kaXRpb25hbHM/ICBOby4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSAqcHJldmVudHMqIG91dC1vZi1ib3VuZHMgcmVhZHMuICBJbXBvcnRhbnRseSwgdGhlIGJ1ZyAqZml4ZWQqIGhlcmUgaXMgZnVuZGFtZW50YWxseSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gYW4gZXhpc3RpbmcgYnVmZmVyLiBUaGlzIHR5cGUgb2YgdnVsbmVyYWJpbGl0eSBpcyAqZXhhY3RseSogd2hhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgZml4IGlzIGEgYm91bmRzIGNoZWNrLCB0aGVyZSdzIG5vIG5lZWQgZm9yIEtNU0FOLCBhcyBLQVNBTiBoYW5kbGVzIHRoZSByaXNrLiBJIGFtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuSSdtIGRvdWJsZS1jaGVja2luZyBteXNlbGYuIFRoZSBydWxlIGlzLCBhbmQgdGhpcyBtYWtlcyBzZW5zZSwgd2h5IHVzZSBLTVNBTiBpZiBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCB0b29scyBhbHJlYWR5IGNvdmVyIHRoZSBidWc/IE15IGFuYWx5c2lzIGNvbmZpcm1zIHRoaXM6IHRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBpbiBMRE0gcGFydGl0aW9uIHBhcnNpbmcgYnkgY2xhbXBpbmcgdGhlIHN0cmluZyBsZW5ndGggdG8gdGhlIGlucHV0IGJ1ZmZlciBsZW5ndGguIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIGhlcmUuIFRoaXMgaXMgbm90IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzOyB0aG9zZSBhcmUgdGhlIGRvbWFpbnMgb2YgS01TQU4sIGFuZCB0aGF0J3Mgbm90IHdoYXQgd2UncmUgYWRkcmVzc2luZyBoZXJlLlxuXG5Pa2F5LCBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY5OCwiT3V0cHV0VG9rZW5zIjoxODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNTo1Ni45NTMyMTE3NDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGluIGJsb2NrL3BhcnRpdGlvbnMvbGRtLmMgYnkgYWRkaW5nIGJvdW5kcyBjaGVja2luZyBvbiB0aGUgaW5wdXQgYnVmZmVyIGxlbmd0aCAoYGJsb2NrbGVuYCkgd2l0aGluIGBsZG1fZ2V0X3ZzdHIoKWAuIFByZXZpb3VzbHksIGBsZG1fZ2V0X3ZzdHIoKWAgb25seSBjaGVja2VkIG91dHB1dCBidWZmZXIgYm91bmRzIChgYnVmbGVuYCksIGFsbG93aW5nIGEgY29ycnVwdGVkIG9yIG1hbGljaW91cyBsZW5ndGggYnl0ZSBpbiBhIHBhcnRpdGlvbiBzdHJ1Y3R1cmUgdG8gcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgYnVmZmVyLiBcXG5cXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgZnVsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyAoS01TQU4gZG9tYWluKS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIGJ5IGFkZGluZyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IGJ1ZmZlciBsZW5ndGggKGBibG9ja2xlbmApIHdpdGhpbiBgbGRtX2dldF92c3RyKClgLiBQcmV2aW91c2x5LCBgbGRtX2dldF92c3RyKClgIG9ubHkgY2hlY2tlZCBvdXRwdXQgYnVmZmVyIGJvdW5kcyAoYGJ1ZmxlbmApLCBhbGxvd2luZyBhIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgbGVuZ3RoIGJ5dGUgaW4gYSBwYXJ0aXRpb24gc3RydWN0dXJlIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gXFxuXFxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIGZ1bGx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgKEtNU0FOIGRvbWFpbikuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhd9kn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 20:14:58 +0000 UTC FinishedAt: 2026-09-06 21:15:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PARTITION_ADVANCED", "LDM_PARTITION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PARTITION_ADVANCED", "LDM_PARTITION" ], "series_id": "e1574937-79df-4fe8-ba94-e21248fb3c6b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ldm_get_vstr", "ldm_parse_vblk", "ldm_parse_cmp3", "ldm_parse_dgr3", "ldm_parse_dgr4", "ldm_parse_dsk3", "ldm_parse_vol5", "ldm_partition" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBUlRJVElPTl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtMRE1fUEFSVElUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGRtX2dldF92c3RyJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV92YmxrJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9jbXAzJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9kZ3IzJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9kZ3I0JiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9kc2szJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV92b2w1JiMzNDssCiAgICAmIzM0O2xkbV9wYXJ0aXRpb24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIGJ5IGFkZGluZyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IGJ1ZmZlciBsZW5ndGggKGBibG9ja2xlbmApIHdpdGhpbiBgbGRtX2dldF92c3RyKClgLiBQcmV2aW91c2x5LCBgbGRtX2dldF92c3RyKClgIG9ubHkgY2hlY2tlZCBvdXRwdXQgYnVmZmVyIGJvdW5kcyAoYGJ1ZmxlbmApLCBhbGxvd2luZyBhIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgbGVuZ3RoIGJ5dGUgaW4gYSBwYXJ0aXRpb24gc3RydWN0dXJlIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gXG5cbk91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSBmdWxseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIChLTVNBTiBkb21haW4pLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2luZG93cyBMb2dpY2FsIERpc2sgTWFuYWdlciAoTERNKSBwYXJ0aXRpb24gcGFyc2VyIGluIGJsb2NrL3BhcnRpdGlvbnMvbGRtLmMgdG8gYWRkIGJvdW5kcyBjaGVja2luZyB3aGVuIHJlYWRpbmcgbGVuZ3RoLXByZWZpeGVkIHN0cmluZ3MsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgYmxvY2sgZGV2aWNlIHBhcnRpdGlvbiBzY2FubmluZyAoZS5nLiwgbG9vcCBkZXZpY2VzKSBhbmQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIHRydW5jYXRpb25zLCBvciB1bmV4cGVjdGVkIHBhcnNlciBiZWhhdmlvcnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZjBkZDQzZmQ3MjNkOWYyNDliZGY3YTkwMzAzMDQxMmYwYWQ2NWJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMToxNTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2xkbS5jIGIvYmxvY2svcGFydGl0aW9ucy9sZG0uY1xuaW5kZXggYzBiZGNhZTU4YTNlZS4uNTQ2OGUwMzhhMDlmNCAxMDA2NDRcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcbkBAIC02NzMsNiAmIzQzOzY3Myw3IEBAIHN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spXG4gLyoqXG4gICogbGRtX2dldF92c3RyIC0gUmVhZCBhIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmcgaW50byBhIGJ1ZmZlclxuICAqIEBibG9jazogICBQb2ludGVyIHRvIHRoZSBsZW5ndGggbWFya2VyXG4mIzQzOyAqIEBibG9ja2xlbjogTnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBAYmxvY2tcbiAgKiBAYnVmZmVyOiAgTG9jYXRpb24gdG8gY29weSBzdHJpbmcgdG9cbiAgKiBAYnVmbGVuOiAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlclxuICAqXG5AQCAtNjgwLDIwICYjNDM7NjgxLDI3IEBAIHN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spXG4gICogdGhleSBhcmUgcHJlZml4ZWQgYnkgYSBvbmUgYnl0ZSBsZW5ndGggbWFya2VyLiAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgb25lIG9mXG4gICogdGhlc2Ugc3RyaW5ncyBpbnRvIGEgYnVmZmVyLlxuICAqXG4tICogTi5CLiAgVGhpcyBmdW5jdGlvbiBET0VTIE5PVCBwZXJmb3JtIGFueSByYW5nZSBjaGVja2luZyBvbiB0aGUgaW5wdXQuXG4tICogICAgICAgSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwsIHRoZSBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQuXG4mIzQzOyAqIE4uQi4gIFRoZSBzdHJpbmcgaXMgY2xhbXBlZCB0byBib3RoIEBibG9ja2xlbiBhbmQgQGJ1ZmxlbjsgaWYgZWl0aGVyXG4mIzQzOyAqICAgICAgIGlzIHRvbyBzbWFsbCB0aGUgb3V0cHV0IHdpbGwgYmUgdHJ1bmNhdGVkLlxuICAqXG4gICogUmV0dXJuOiAgMCwgRXJyb3IgYW5kIEBidWZmZXIgY29udGVudHMgYXJlIHVuZGVmaW5lZFxuICAqICAgICAgICAgIG4sIFN0cmluZyBsZW5ndGggaW4gY2hhcmFjdGVycyAoZXhjbHVkaW5nIE5VTEwpXG4gICogICAgICAgICAgYnVmbGVuLTEsIFN0cmluZyB3YXMgdHJ1bmNhdGVkLlxuICAqL1xuLXN0YXRpYyBpbnQgbGRtX2dldF92c3RyIChjb25zdCB1OCAqYmxvY2ssIHU4ICpidWZmZXIsIGludCBidWZsZW4pXG4mIzQzO3N0YXRpYyBpbnQgbGRtX2dldF92c3RyKGNvbnN0IHU4ICpibG9jaywgaW50IGJsb2NrbGVuLCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuIHtcbiBcdGludCBsZW5ndGg7XG4gXG4gXHRCVUdfT04gKCFibG9jayB8fCAhYnVmZmVyKTtcbiBcbiYjNDM7XHRpZiAoYmxvY2tsZW4gXHUwMDNjIDEpIHtcbiYjNDM7XHRcdGJ1ZmZlclswXSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0bGVuZ3RoID0gYmxvY2tbMF07XG4mIzQzO1x0aWYgKGxlbmd0aCBcdTAwM2UgYmxvY2tsZW4gLSAxKVxuJiM0MztcdFx0bGVuZ3RoID0gYmxvY2tsZW4gLSAxO1xuIFx0aWYgKGxlbmd0aCBcdTAwM2U9IGJ1Zmxlbikge1xuIFx0XHRsZG1fZXJyb3IgKFwmIzM0O1RydW5jYXRpbmcgc3RyaW5nICVkIC1cdTAwM2UgJWQuXCYjMzQ7LCBsZW5ndGgsIGJ1Zmxlbik7XG4gXHRcdGxlbmd0aCA9IGJ1ZmxlbiAtIDE7XG5AQCAtNzQ0LDggJiM0Mzs3NTIsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfY21wMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRjb21wID0gXHUwMDI2dmItXHUwMDNldmJsay5jb21wO1xuLVx0bGRtX2dldF92c3RyIChidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGNvbXAtXHUwMDNlc3RhdGUsXG4tXHRcdHNpemVvZiAoY29tcC1cdTAwM2VzdGF0ZSkpO1xuJiM0MztcdGxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfbmFtZSksXG4mIzQzO1x0XHRjb21wLVx1MDAzZXN0YXRlLCBzaXplb2YoY29tcC1cdTAwM2VzdGF0ZSkpO1xuIFx0Y29tcC1cdTAwM2V0eXBlICAgICAgPSBidWZmZXJbMHgxOCAmIzQzOyByX3ZzdGF0ZV07XG4gXHRjb21wLVx1MDAzZWNoaWxkcmVuICA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICYjNDM7IDB4MUQgJiM0Mzsgcl92c3RhdGUpO1xuIFx0Y29tcC1cdTAwM2VwYXJlbnRfaWQgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciAmIzQzOyAweDJEICYjNDM7IHJfY2hpbGQpO1xuQEAgLTc5MCw4ICYjNDM7Nzk4LDggQEAgc3RhdGljIGludCBsZG1fcGFyc2VfZGdyMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRkZ3JwID0gXHUwMDI2dmItXHUwMDNldmJsay5kZ3JwO1xuLVx0bGRtX2dldF92c3RyIChidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGRncnAtXHUwMDNlZGlza19pZCxcbi1cdFx0c2l6ZW9mIChkZ3JwLVx1MDAzZWRpc2tfaWQpKTtcbiYjNDM7XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9uYW1lLCBidWZsZW4gLSAoMHgxOCAmIzQzOyByX25hbWUpLFxuJiM0MztcdFx0ZGdycC1cdTAwM2VkaXNrX2lkLCBzaXplb2YoZGdycC1cdTAwM2VkaXNrX2lkKSk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtODI5LDcgJiM0Mzs4MzcsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZGdyNCAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0aWYgKGxlbiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICYjNDM7IDB4MTQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfb2JqaWQsIGJ1Ziwgc2l6ZW9mIChidWYpKTtcbiYjNDM7XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9vYmppZCwgYnVmbGVuIC0gKDB4MTggJiM0Mzsgcl9vYmppZCksXG4mIzQzO1x0XHRidWYsIHNpemVvZihidWYpKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC04NjQsOCAmIzQzOzg3Myw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9kc2szIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGRpc2sgPSBcdTAwMjZ2Yi1cdTAwM2V2YmxrLmRpc2s7XG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfZGlza2lkLCBkaXNrLVx1MDAzZWFsdF9uYW1lLFxuLVx0XHRzaXplb2YgKGRpc2stXHUwMDNlYWx0X25hbWUpKTtcbiYjNDM7XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9kaXNraWQsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfZGlza2lkKSxcbiYjNDM7XHRcdGRpc2stXHUwMDNlYWx0X25hbWUsIHNpemVvZihkaXNrLVx1MDAzZWFsdF9uYW1lKSk7XG4gXHRpZiAodXVpZF9wYXJzZShidWZmZXIgJiM0MzsgMHgxOSAmIzQzOyByX25hbWUsIFx1MDAyNmRpc2stXHUwMDNlZGlza19pZCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC0xMDcyLDE2ICYjNDM7MTA4MSwxNiBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2Vfdm9sNShjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcdHZvbHUgPSBcdTAwMjZ2Yi1cdTAwM2V2YmxrLnZvbHU7XG4tXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9uYW1lLCB2b2x1LVx1MDAzZXZvbHVtZV90eXBlLFxuLVx0XHRcdHNpemVvZih2b2x1LVx1MDAzZXZvbHVtZV90eXBlKSk7XG4mIzQzO1x0bGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggJiM0Mzsgcl9uYW1lKSxcbiYjNDM7XHRcdFx0dm9sdS1cdTAwM2V2b2x1bWVfdHlwZSwgc2l6ZW9mKHZvbHUtXHUwMDNldm9sdW1lX3R5cGUpKTtcbiBcdG1lbWNweSh2b2x1LVx1MDAzZXZvbHVtZV9zdGF0ZSwgYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9kaXNhYmxlX2RyaXZlX2xldHRlcixcbiBcdFx0XHRzaXplb2Yodm9sdS1cdTAwM2V2b2x1bWVfc3RhdGUpKTtcbiBcdHZvbHUtXHUwMDNlc2l6ZSA9IGxkbV9nZXRfdm51bShidWZmZXIgJiM0MzsgMHgzRCAmIzQzOyByX2NoaWxkKTtcbiBcdHZvbHUtXHUwMDNlcGFydGl0aW9uX3R5cGUgPSBidWZmZXJbMHg0MSAmIzQzOyByX3NpemVdO1xuIFx0bWVtY3B5KHZvbHUtXHUwMDNlZ3VpZCwgYnVmZmVyICYjNDM7IDB4NDIgJiM0Mzsgcl9zaXplLCBzaXplb2Yodm9sdS1cdTAwM2VndWlkKSk7XG4gXHRpZiAoYnVmZmVyWzB4MTJdIFx1MDAyNiBWQkxLX0ZMQUdfVk9MVV9EUklWRSkge1xuLVx0XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4NTIgJiM0Mzsgcl9zaXplLCB2b2x1LVx1MDAzZWRyaXZlX2hpbnQsXG4tXHRcdFx0XHRzaXplb2Yodm9sdS1cdTAwM2Vkcml2ZV9oaW50KSk7XG4mIzQzO1x0XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4NTIgJiM0Mzsgcl9zaXplLCBidWZsZW4gLSAoMHg1MiAmIzQzOyByX3NpemUpLFxuJiM0MztcdFx0XHRcdHZvbHUtXHUwMDNlZHJpdmVfaGludCwgc2l6ZW9mKHZvbHUtXHUwMDNlZHJpdmVfaGludCkpO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTExMTUsNyAmIzQzOzExMjQsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdmJsayAoY29uc3QgdTggKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0dmItXHUwMDNlZmxhZ3MgID0gYnVmWzB4MTJdO1xuIFx0dmItXHUwMDNldHlwZSAgID0gYnVmWzB4MTNdO1xuIFx0dmItXHUwMDNlb2JqX2lkID0gbGRtX2dldF92bnVtIChidWYgJiM0MzsgMHgxOCk7XG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZiYjNDM7MHgxOCYjNDM7cl9vYmppZCwgdmItXHUwMDNlbmFtZSwgc2l6ZW9mICh2Yi1cdTAwM2VuYW1lKSk7XG4mIzQzO1x0bGRtX2dldF92c3RyKGJ1ZiAmIzQzOyAweDE4ICYjNDM7IHJfb2JqaWQsIGxlbiAtICgweDE4ICYjNDM7IHJfb2JqaWQpLFxuJiM0MztcdFx0dmItXHUwMDNlbmFtZSwgc2l6ZW9mKHZiLVx1MDAzZW5hbWUpKTtcbiBcbiBcdHN3aXRjaCAodmItXHUwMDNldHlwZSkge1xuIFx0XHRjYXNlIFZCTEtfQ01QMzogIHJlc3VsdCA9IGxkbV9wYXJzZV9jbXAzIChidWYsIGxlbiwgdmIpOyBicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQVJUSVRJT05fQURWQU5DRUQmIzM0OywKICAgICYjMzQ7TERNX1BBUlRJVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xkbV9nZXRfdnN0ciYjMzQ7LAogICAgJiMzNDtsZG1fcGFyc2VfdmJsayYjMzQ7LAogICAgJiMzNDtsZG1fcGFyc2VfY21wMyYjMzQ7LAogICAgJiMzNDtsZG1fcGFyc2VfZGdyMyYjMzQ7LAogICAgJiMzNDtsZG1fcGFyc2VfZGdyNCYjMzQ7LAogICAgJiMzNDtsZG1fcGFyc2VfZHNrMyYjMzQ7LAogICAgJiMzNDtsZG1fcGFyc2Vfdm9sNSYjMzQ7LAogICAgJiMzNDtsZG1fcGFydGl0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaW5kb3dzIExvZ2ljYWwgRGlzayBNYW5hZ2VyIChMRE0pIHBhcnRpdGlvbiBwYXJzZXIgaW4gYmxvY2svcGFydGl0aW9ucy9sZG0uYyB0byBhZGQgYm91bmRzIGNoZWNraW5nIHdoZW4gcmVhZGluZyBsZW5ndGgtcHJlZml4ZWQgc3RyaW5ncywgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBibG9jayBkZXZpY2UgcGFydGl0aW9uIHNjYW5uaW5nIChlLmcuLCBsb29wIGRldmljZXMpIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgdHJ1bmNhdGlvbnMsIG9yIHVuZXhwZWN0ZWQgcGFyc2VyIGJlaGF2aW9ycyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmMGRkNDNmZDcyM2Q5ZjI0OWJkZjdhOTAzMDMwNDEyZjBhZDY1YmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDIxOjE1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9sZG0uYyBiL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmMKaW5kZXggYzBiZGNhZTU4YTNlZS4uNTQ2OGUwMzhhMDlmNCAxMDA2NDQKLS0tIGEvYmxvY2svcGFydGl0aW9ucy9sZG0uYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL2xkbS5jCkBAIC02NzMsNiAmIzQzOzY3Myw3IEBAIHN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spCiAvKioKICAqIGxkbV9nZXRfdnN0ciAtIFJlYWQgYSBsZW5ndGgtcHJlZml4ZWQgc3RyaW5nIGludG8gYSBidWZmZXIKICAqIEBibG9jazogICBQb2ludGVyIHRvIHRoZSBsZW5ndGggbWFya2VyCiYjNDM7ICogQGJsb2NrbGVuOiBOdW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IEBibG9jawogICogQGJ1ZmZlcjogIExvY2F0aW9uIHRvIGNvcHkgc3RyaW5nIHRvCiAgKiBAYnVmbGVuOiAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgogICoKQEAgLTY4MCwyMCAmIzQzOzY4MSwyNyBAQCBzdGF0aWMgdTY0IGxkbV9nZXRfdm51bSAoY29uc3QgdTggKmJsb2NrKQogICogdGhleSBhcmUgcHJlZml4ZWQgYnkgYSBvbmUgYnl0ZSBsZW5ndGggbWFya2VyLiAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgb25lIG9mCiAgKiB0aGVzZSBzdHJpbmdzIGludG8gYSBidWZmZXIuCiAgKgotICogTi5CLiAgVGhpcyBmdW5jdGlvbiBET0VTIE5PVCBwZXJmb3JtIGFueSByYW5nZSBjaGVja2luZyBvbiB0aGUgaW5wdXQuCi0gKiAgICAgICBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgdGhlIG91dHB1dCB3aWxsIGJlIHRydW5jYXRlZC4KJiM0MzsgKiBOLkIuICBUaGUgc3RyaW5nIGlzIGNsYW1wZWQgdG8gYm90aCBAYmxvY2tsZW4gYW5kIEBidWZsZW47IGlmIGVpdGhlcgomIzQzOyAqICAgICAgIGlzIHRvbyBzbWFsbCB0aGUgb3V0cHV0IHdpbGwgYmUgdHJ1bmNhdGVkLgogICoKICAqIFJldHVybjogIDAsIEVycm9yIGFuZCBAYnVmZmVyIGNvbnRlbnRzIGFyZSB1bmRlZmluZWQKICAqICAgICAgICAgIG4sIFN0cmluZyBsZW5ndGggaW4gY2hhcmFjdGVycyAoZXhjbHVkaW5nIE5VTEwpCiAgKiAgICAgICAgICBidWZsZW4tMSwgU3RyaW5nIHdhcyB0cnVuY2F0ZWQuCiAgKi8KLXN0YXRpYyBpbnQgbGRtX2dldF92c3RyIChjb25zdCB1OCAqYmxvY2ssIHU4ICpidWZmZXIsIGludCBidWZsZW4pCiYjNDM7c3RhdGljIGludCBsZG1fZ2V0X3ZzdHIoY29uc3QgdTggKmJsb2NrLCBpbnQgYmxvY2tsZW4sIHU4ICpidWZmZXIsIGludCBidWZsZW4pCiB7CiAJaW50IGxlbmd0aDsKIAogCUJVR19PTiAoIWJsb2NrIHx8ICFidWZmZXIpOwogCiYjNDM7CWlmIChibG9ja2xlbiAmbHQ7IDEpIHsKJiM0MzsJCWJ1ZmZlclswXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiAJbGVuZ3RoID0gYmxvY2tbMF07CiYjNDM7CWlmIChsZW5ndGggJmd0OyBibG9ja2xlbiAtIDEpCiYjNDM7CQlsZW5ndGggPSBibG9ja2xlbiAtIDE7CiAJaWYgKGxlbmd0aCAmZ3Q7PSBidWZsZW4pIHsKIAkJbGRtX2Vycm9yICgmIzM0O1RydW5jYXRpbmcgc3RyaW5nICVkIC0mZ3Q7ICVkLiYjMzQ7LCBsZW5ndGgsIGJ1Zmxlbik7CiAJCWxlbmd0aCA9IGJ1ZmxlbiAtIDE7CkBAIC03NDQsOCAmIzQzOzc1Miw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCiAJCXJldHVybiBmYWxzZTsKIAogCWNvbXAgPSAmYW1wO3ZiLSZndDt2YmxrLmNvbXA7Ci0JbGRtX2dldF92c3RyIChidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGNvbXAtJmd0O3N0YXRlLAotCQlzaXplb2YgKGNvbXAtJmd0O3N0YXRlKSk7CiYjNDM7CWxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfbmFtZSksCiYjNDM7CQljb21wLSZndDtzdGF0ZSwgc2l6ZW9mKGNvbXAtJmd0O3N0YXRlKSk7CiAJY29tcC0mZ3Q7dHlwZSAgICAgID0gYnVmZmVyWzB4MTggJiM0Mzsgcl92c3RhdGVdOwogCWNvbXAtJmd0O2NoaWxkcmVuICA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICYjNDM7IDB4MUQgJiM0Mzsgcl92c3RhdGUpOwogCWNvbXAtJmd0O3BhcmVudF9pZCA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICYjNDM7IDB4MkQgJiM0Mzsgcl9jaGlsZCk7CkBAIC03OTAsOCAmIzQzOzc5OCw4IEBAIHN0YXRpYyBpbnQgbGRtX3BhcnNlX2RncjMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKIAkJcmV0dXJuIGZhbHNlOwogCiAJZGdycCA9ICZhbXA7dmItJmd0O3ZibGsuZGdycDsKLQlsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgZGdycC0mZ3Q7ZGlza19pZCwKLQkJc2l6ZW9mIChkZ3JwLSZndDtkaXNrX2lkKSk7CiYjNDM7CWxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfbmFtZSksCiYjNDM7CQlkZ3JwLSZndDtkaXNrX2lkLCBzaXplb2YoZGdycC0mZ3Q7ZGlza19pZCkpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC04MjksNyAmIzQzOzgzNyw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9kZ3I0IChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCiAJaWYgKGxlbiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICYjNDM7IDB4MTQpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfb2JqaWQsIGJ1Ziwgc2l6ZW9mIChidWYpKTsKJiM0MzsJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfb2JqaWQsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfb2JqaWQpLAomIzQzOwkJYnVmLCBzaXplb2YoYnVmKSk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTg2NCw4ICYjNDM7ODczLDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX2RzazMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKIAkJcmV0dXJuIGZhbHNlOwogCiAJZGlzayA9ICZhbXA7dmItJmd0O3ZibGsuZGlzazsKLQlsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfZGlza2lkLCBkaXNrLSZndDthbHRfbmFtZSwKLQkJc2l6ZW9mIChkaXNrLSZndDthbHRfbmFtZSkpOwomIzQzOwlsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9kaXNraWQsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfZGlza2lkKSwKJiM0MzsJCWRpc2stJmd0O2FsdF9uYW1lLCBzaXplb2YoZGlzay0mZ3Q7YWx0X25hbWUpKTsKIAlpZiAodXVpZF9wYXJzZShidWZmZXIgJiM0MzsgMHgxOSAmIzQzOyByX25hbWUsICZhbXA7ZGlzay0mZ3Q7ZGlza19pZCkpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMTA3MiwxNiAmIzQzOzEwODEsMTYgQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZvbDUoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCXZvbHUgPSAmYW1wO3ZiLSZndDt2YmxrLnZvbHU7Ci0JbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgdm9sdS0mZ3Q7dm9sdW1lX3R5cGUsCi0JCQlzaXplb2Yodm9sdS0mZ3Q7dm9sdW1lX3R5cGUpKTsKJiM0MzsJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggJiM0Mzsgcl9uYW1lKSwKJiM0MzsJCQl2b2x1LSZndDt2b2x1bWVfdHlwZSwgc2l6ZW9mKHZvbHUtJmd0O3ZvbHVtZV90eXBlKSk7CiAJbWVtY3B5KHZvbHUtJmd0O3ZvbHVtZV9zdGF0ZSwgYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9kaXNhYmxlX2RyaXZlX2xldHRlciwKIAkJCXNpemVvZih2b2x1LSZndDt2b2x1bWVfc3RhdGUpKTsKIAl2b2x1LSZndDtzaXplID0gbGRtX2dldF92bnVtKGJ1ZmZlciAmIzQzOyAweDNEICYjNDM7IHJfY2hpbGQpOwogCXZvbHUtJmd0O3BhcnRpdGlvbl90eXBlID0gYnVmZmVyWzB4NDEgJiM0Mzsgcl9zaXplXTsKIAltZW1jcHkodm9sdS0mZ3Q7Z3VpZCwgYnVmZmVyICYjNDM7IDB4NDIgJiM0Mzsgcl9zaXplLCBzaXplb2Yodm9sdS0mZ3Q7Z3VpZCkpOwogCWlmIChidWZmZXJbMHgxMl0gJmFtcDsgVkJMS19GTEFHX1ZPTFVfRFJJVkUpIHsKLQkJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDUyICYjNDM7IHJfc2l6ZSwgdm9sdS0mZ3Q7ZHJpdmVfaGludCwKLQkJCQlzaXplb2Yodm9sdS0mZ3Q7ZHJpdmVfaGludCkpOwomIzQzOwkJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDUyICYjNDM7IHJfc2l6ZSwgYnVmbGVuIC0gKDB4NTIgJiM0Mzsgcl9zaXplKSwKJiM0MzsJCQkJdm9sdS0mZ3Q7ZHJpdmVfaGludCwgc2l6ZW9mKHZvbHUtJmd0O2RyaXZlX2hpbnQpKTsKIAl9CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMTE1LDcgJiM0MzsxMTI0LDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZibGsgKGNvbnN0IHU4ICpidWYsIGludCBsZW4sIHN0cnVjdCB2YmxrICp2YikKIAl2Yi0mZ3Q7ZmxhZ3MgID0gYnVmWzB4MTJdOwogCXZiLSZndDt0eXBlICAgPSBidWZbMHgxM107CiAJdmItJmd0O29ial9pZCA9IGxkbV9nZXRfdm51bSAoYnVmICYjNDM7IDB4MTgpOwotCWxkbV9nZXRfdnN0ciAoYnVmJiM0MzsweDE4JiM0MztyX29iamlkLCB2Yi0mZ3Q7bmFtZSwgc2l6ZW9mICh2Yi0mZ3Q7bmFtZSkpOwomIzQzOwlsZG1fZ2V0X3ZzdHIoYnVmICYjNDM7IDB4MTggJiM0Mzsgcl9vYmppZCwgbGVuIC0gKDB4MTggJiM0Mzsgcl9vYmppZCksCiYjNDM7CQl2Yi0mZ3Q7bmFtZSwgc2l6ZW9mKHZiLSZndDtuYW1lKSk7CiAKIAlzd2l0Y2ggKHZiLSZndDt0eXBlKSB7CiAJCWNhc2UgVkJMS19DTVAzOiAgcmVzdWx0ID0gbGRtX3BhcnNlX2NtcDMgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjQ2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBMRE0gVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBmdXp6aW5nIG1ha2VzIHNlbnNlIGhlcmUsIGFuZCBob3cgd2UmIzM5O2QgZ28gYWJvdXQgaXQuIFRoZSBjaGFuZ2UgaXMgaW4gYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyBwYXJ0aXRpb24gdGFibGUgcGFyc2luZywgc28gd2UmIzM5O3JlIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBmaWxlIHN5c3RlbSBkcml2ZXIgb3IgZGlzayB1dGlsaXR5LiBUaGF0JiMzOTtzIGFsd2F5cyBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4KClRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiB0aGUgYGxkbV9nZXRfdnN0cmAgZnVuY3Rpb24sIGFkZGluZyBhIGBibG9ja2xlbmAgYXJndW1lbnQgYW5kIGJvdW5kIGNoZWNrcy4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIGl0IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaGFuZGxpbmcgTERNIChMb2dpY2FsIERpc2sgTWFuYWdlciwgV2luZG93cyBEeW5hbWljIERpc2tzKSBwYXJ0aXRpb24gdGFibGVzIGFuZCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBvbiBlbmhhbmNpbmcgbWVtb3J5IHNhZmV0eSBkdXJpbmcgcGFydGl0aW9uIHRhYmxlIHBhcnNpbmcuIEFsbCB0aGUgb3RoZXIgZnVuY3Rpb25zLCBgbGRtX3BhcnNlX2NtcDNgLCBgbGRtX3BhcnNlX2RncjNgLCBgbGRtX3BhcnNlX2RncjRgLCBgbGRtX3BhcnNlX2RzazNgLCBgbGRtX3BhcnNlX3ZvbDVgLCBhbmQgYGxkbV9wYXJzZV92YmxrYCwgYXJlIHVwZGF0ZWQgdG8gY2FsbCB0aGlzIG1vZGlmaWVkIGBsZG1fZ2V0X3ZzdHJgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgbGRtX2dldF92c3RyYCBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUsIGFuZCBpZiB3ZSYjMzk7cmUgc3VjY2Vzc2Z1bCwgaXQgd2lsbCBiZS4KCk5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgIHRvIHNlZSBob3cgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS4gSSYjMzk7bGwgZWl0aGVyIHVzZSBgZ3JlcHBlcmAgb3IganVzdCByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LCBhbmQgZmluZCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIHBhcnRpdGlvbiBwYXJzaW5nIGlzIGludm9rZWQgdG8gcHJvcGVybHkgc2NvcGUgdGhlIGZ1enppbmcuIE9uY2UgSSB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9ucywgSSYjMzk7bGwgYmUgYWJsZSB0byBmb2N1cyBvbiB3aGF0IHRvIGZ1enogYW5kIGhvdyBiZXN0IHRvIGRvIGl0LiBUaGUgdGFyZ2V0IGlzIGNsZWFyOiB0aGlzIGBsZG1fZ2V0X3ZzdHJgIGZ1bmN0aW9uIGlzIHRoZSBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtMRE1fUEFSVElUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL0tjb25maWc9MTU4PWNvbmZpZyBVTklYV0FSRV9ESVNLTEFCRUxcbi0tXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMTc3LVxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnOjE3ODpjb25maWcgTERNX1BBUlRJVElPTlxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTE3OS1cdGJvb2wgXCYjMzQ7V2luZG93cyBMb2dpY2FsIERpc2sgTWFuYWdlciAoRHluYW1pYyBEaXNrKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnPTIwMz1jb25maWcgTERNX0RFQlVHXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMjA0LVx0Ym9vbCBcJiMzNDtXaW5kb3dzIExETSBleHRyYSBsb2dnaW5nXCYjMzQ7XG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWc6MjA1Olx0ZGVwZW5kcyBvbiBMRE1fUEFSVElUSU9OXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMjA2LVx0aGVscFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGU9MTI9b2JqLSQoQ09ORklHX01BQ19QQVJUSVRJT04pICYjNDM7PSBtYWMub1xuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTERNX1BBUlRJVElPTikgJiM0Mzs9IGxkbS5vXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlLTE0LW9iai0kKENPTkZJR19NU0RPU19QQVJUSVRJT04pICYjNDM7PSBtc2Rvcy5vXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MTc9c3RhdGljIGludCAoKmNvbnN0IGNoZWNrX3BhcnRbXSkoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICopID0ge1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTU2LSNlbmRpZlxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6NTc6I2lmZGVmIENPTkZJR19MRE1fUEFSVElUSU9OXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy01OC1cdGxkbV9wYXJ0aXRpb24sXHRcdC8qIHRoaXMgbXVzdCBjb21lIGJlZm9yZSBtc2RvcyAqL1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9NDkwPXN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV9wYXJ0aXRpb25fdGFibGUoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUxMC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIDQ7IGkmIzQzOyYjNDM7LCBwJiM0MzsmIzQzOylcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTExOlx0XHRpZiAocC1cdTAwM2VzeXNfaW5kID09IExETV9QQVJUSVRJT04pIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTEyLVx0XHRcdHJlc3VsdCA9IHRydWU7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uaD0yMT1zdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnM7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uaC04MC1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmg6ODE6I2RlZmluZSBMRE1fUEFSVElUSU9OXHRcdDB4NDJcdFx0LyogRm9ybWVybHkgU0ZTIChMYW5kaXMpLiAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uaC04Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODgyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBDT05GSUdfTERNX1BBUlRJVElPTioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBDT05GSUdfTERNX1BBUlRJVElPTmAgZGVwZW5kcyBvbi4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoZXkmIzM5O3JlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgZGVzY3JpYmluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBibG9jay9wYXJ0aXRpb25zL0tjb25maWdgIGFuZCB6b29tIGluIGFyb3VuZCBsaW5lIDE3OC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBzcG90IHRvIGZpbmQgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhbmQgdGhlaXIgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgbGlzdCBvZiAmIzM0O2RlcGVuZHMgb24mIzM0OyBzdGF0ZW1lbnRzIG9yIG90aGVyIHJlbGV2YW50IGxvZ2ljIHRoYXQgZGljdGF0ZXMgd2hlbiB0aGlzIG9wdGlvbiBpcyBhdmFpbGFibGUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZSwgYW5kIHRoZW4gSSYjMzk7bGwgZm9ybXVsYXRlIGEgY29uY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XHQgIExpbnV4IGJveCB2aWEgYSByZW1vdmFibGUgbWVkaXVtIGxpa2UgbWFnbmV0by1vcHRpY2FsLCBaSVAgb3JcbiAxNzE6XHRcdCAgcmVtb3ZhYmxlIElERSBkcml2ZXMuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgYSBnb29kIHBvcnRhYmxlIHdheSB0b1xuIDE3MjpcdFx0ICB0cmFuc3BvcnQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGJldHdlZW4gdW5peGVzIChhbmQgZXZlbiBvdGhlclxuIDE3MzpcdFx0ICBvcGVyYXRpbmcgc3lzdGVtcykgaXMgZ2l2ZW4gYnkgdGhlIHRhciBwcm9ncmFtIChcJiMzNDttYW4gdGFyXCYjMzQ7IG9yXG4gMTc0Olx0XHQgIHByZWZlcmFibHkgXCYjMzQ7aW5mbyB0YXJcJiMzNDspLlxuIDE3NTpcdFxuIDE3NjpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCBhbGwgdGhpcyBpcyBhYm91dCwgc2F5IE4uXG4gMTc3Olx0XG4gMTc4Olx0Y29uZmlnIExETV9QQVJUSVRJT05cbiAxNzk6XHRcdGJvb2wgXCYjMzQ7V2luZG93cyBMb2dpY2FsIERpc2sgTWFuYWdlciAoRHluYW1pYyBEaXNrKSBzdXBwb3J0XCYjMzQ7XG4gMTgwOlx0XHRkZXBlbmRzIG9uIFBBUlRJVElPTl9BRFZBTkNFRFxuIDE4MTpcdFx0aGVscFxuIDE4MjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBoYXJkIGRpc2tzIHVuZGVyIExpbnV4IHdoaWNoXG4gMTgzOlx0XHQgIHdlcmUgcGFydGl0aW9uZWQgdXNpbmcgV2luZG93cyAyMDAwJiMzOTtzL1hQJiMzOTtzIG9yIFZpc3RhJiMzOTtzIExvZ2ljYWwgRGlza1xuIDE4NDpcdFx0ICBNYW5hZ2VyLiAgVGhleSBhcmUgYWxzbyBrbm93biBhcyBcJiMzNDtEeW5hbWljIERpc2tzXCYjMzQ7LlxuIDE4NTpcdFxuIDE4NjpcdFx0ICBOb3RlIHRoaXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgRHluYW1pYyBEaXNrcyB3aXRoIGEgcHJvdGVjdGl2ZSBNQlJcbiAxODc6XHRcdCAgbGFiZWwsIGkuZS4gRE9TIHBhcnRpdGlvbiB0YWJsZS4gIEl0IGRvZXMgbm90IHN1cHBvcnQgR1BUIGxhYmVsbGVkXG4gMTg4Olx0XHQgIER5bmFtaWMgRGlza3MgeWV0IGFzIGNhbiBiZSBjcmVhdGVkIHdpdGggVmlzdGEuXG4gMTg5Olx0XG4gMTkwOlx0XHQgIFdpbmRvd3MgMjAwMCBpbnRyb2R1Y2VkIHRoZSBjb25jZXB0IG9mIER5bmFtaWMgRGlza3MgdG8gZ2V0IGFyb3VuZFxuIDE5MTpcdFx0ICB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIFBDJiMzOTtzIHBhcnRpdGlvbmluZyBzY2hlbWUuICBUaGUgTG9naWNhbCBEaXNrXG4gMTkyOlx0XHQgIE1hbmFnZXIgYWxsb3dzIHRoZSB1c2VyIHRvIHJlcGFydGl0aW9uIGEgZGlzayBhbmQgY3JlYXRlIHNwYW5uZWQsXG4gMTkzOlx0XHQgIG1pcnJvcmVkLCBzdHJpcGVkIG9yIFJBSUQgdm9sdW1lcywgYWxsIHdpdGhvdXQgdGhlIG5lZWQgZm9yXG4gMTk0Olx0XHQgIHJlYm9vdGluZy5cbiAxOTU6XHRcbiAxOTY6XHRcdCAgTm9ybWFsIHBhcnRpdGlvbnMgYXJlIG5vdyBjYWxsZWQgQmFzaWMgRGlza3MgdW5kZXIgV2luZG93cyAyMDAwLCBYUCxcbiAxOTc6XHRcdCAgYW5kIFZpc3RhLlxuIDE5ODpcdFxuIDE5OTpcdFx0ICBGb3IgYSBmdWxsZXIgZGVzY3JpcHRpb24gcmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbGRtLnJzdFx1MDAzZS5cbiAyMDA6XHRcbiAyMDE6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyMDI6XHRcbiAyMDM6XHRjb25maWcgTERNX0RFQlVHXG4gMjA0Olx0XHRib29sIFwmIzM0O1dpbmRvd3MgTERNIGV4dHJhIGxvZ2dpbmdcJiMzNDtcbiAyMDU6XHRcdGRlcGVuZHMgb24gTERNX1BBUlRJVElPTlxuIDIwNjpcdFx0aGVscFxuIDIwNzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIExETSB0byBsb2cgdmVyYm9zZWx5LiAgVGhpcyBjb3VsZCBiZVxuIDIwODpcdFx0ICBoZWxwZnVsIGlmIHRoZSBkcml2ZXIgZG9lc24mIzM5O3Qgd29yayBhcyBleHBlY3RlZCBhbmQgeW91JiMzOTtkIGxpa2UgdG9cbiAyMDk6XHRcdCAgcmVwb3J0IGEgYnVnLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3OTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhcnRpdGlvbiBQYXJzaW5nIGluIExpbnV4KioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGBQQVJUSVRJT05fQURWQU5DRURgIGZlYXR1cmUgaW50ZXJhY3RzIHdpdGggdGhlIGV4aXN0aW5nIHBhcnRpdGlvbiBwYXJzaW5nIG1lY2hhbmlzbXMgaW4gTGludXguIEkmIzM5O2xsIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBob3cgdGhlIHBhcnNpbmcgaXMgYWN0dWFsbHkgKnRyaWdnZXJlZCouIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgc3lzdGVtIGtpY2tzIGl0IG9mZiB3aGVuIGEgYmxvY2sgZGV2aWNlLCBsaWtlIGEgbG9vcCBkZXZpY2Ugb3IgYSB2aXJ0aW9fYmxrIGRldmljZSwgaXMgcHJvYmVkIG9yIHJlc2Nhbm5lZC4gVGhlIGBCTEtSUlBBUlRgIGlvY3RsIG9yIG9wZW5pbmcgc29tZXRoaW5nIGxpa2UgYC9kZXYvbG9vcFhgIGFmdGVyIHRoZSBiYWNraW5nIGZpbGUgaXMgc2V0IGlzIHdoYXQgc2VlbXMgdG8gZG8gdGhlIHRyaWNrLgoKVGhlIG5pY2UgdGhpbmcgaXMgdGhhdCBTeXprYWxsZXIsIGEgdG9vbCBJJiMzOTttIHZlcnkgZmFtaWxpYXIgd2l0aCBhbmQgcmVseSBvbiBpbiBteSBvd24gd29yaywgYWxyZWFkeSBoYXMgcm91dGluZXMgdG8gdGVzdCBibG9jayBkZXZpY2VzLCBsb29wIGRldmljZXMsIGFuZCBvZiBjb3Vyc2UsIHRoZSBwYXJ0aXRpb24gcGFyc2luZyBpdHNlbGYuIFNvLCBJIHNob3VsZCBiZSBhYmxlIHRvIHJlbHkgb24gaXRzIHJlc3VsdHMuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYCBmaWxlLiBBY2NvcmRpbmcgdG8gdGhlIGRhdGEgSSBoYXZlLCB0aGUgcGFydGl0aW9uIHBhcnNpbmcgbG9naWMgd2l0aGluIHRoaXMgZmlsZSBpcyBhbHJlYWR5IGZ1bGx5IHJlYWNoYWJsZSBpbiBvdXIgc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgdGVzdGluZyBzZXR1cC4gSSYjMzk7bGwgZm9jdXMgbXkgaW52ZXN0aWdhdGlvbiB0aGVyZS4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGNoZWNrIHRoZSBjYWxsZXJzIGFuZCBzeW1ib2xzIGluIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCByZWxhdGlvbnNoaXBzIG9mIHRoZSBwYXJ0aXRpb25pbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsZG1fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9sZG0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzQ1IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIyLS8qXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjIzOiAqIGxkbV9kZWJ1Zy9pbmZvL2Vycm9yL2NyaXQgLSBPdXRwdXQgYW4gZXJyb3IgbWVzc2FnZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNC0gKiBAZjogICAgQSBwcmludGYgZm9ybWF0IHN0cmluZyBjb250YWluaW5nIHRoZSBtZXNzYWdlXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNi0gKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyNzogKiBsZG1fZGVidWcoKSB3cml0ZXMgYSBERUJVRyBsZXZlbCBtZXNzYWdlIHRvIHRoZSBzeXNsb2cgYnV0IG9ubHkgaWYgdGhlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI4LSAqIGRyaXZlciB3YXMgY29tcGlsZWQgd2l0aCBkZWJ1ZyBlbmFibGVkLiBPdGhlcndpc2UsIHRoZSBjYWxsIHR1cm5zIGludG8gYSBOT1AuXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zMC0jaWZuZGVmIENPTkZJR19MRE1fREVCVUdcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzE6I2RlZmluZSBsZG1fZGVidWcoLi4uKVx0ZG8ge30gd2hpbGUgKDApXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMyLSNlbHNlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjMzOiNkZWZpbmUgbGRtX2RlYnVnKGYsIGEuLi4pIF9sZG1fcHJpbnRrIChLRVJOX0RFQlVHLCBfX2Z1bmNfXywgZiwgIyNhKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNC0jZW5kaWZcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzUtXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM2OiNkZWZpbmUgbGRtX2NyaXQoZiwgYS4uLikgIF9sZG1fcHJpbnRrIChLRVJOX0NSSVQsICBfX2Z1bmNfXywgZiwgIyNhKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNzojZGVmaW5lIGxkbV9lcnJvcihmLCBhLi4uKSBfbGRtX3ByaW50ayAoS0VSTl9FUlIsICAgX19mdW5jX18sIGYsICMjYSlcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzg6I2RlZmluZSBsZG1faW5mbyhmLCBhLi4uKSAgX2xkbV9wcmludGsgKEtFUk5fSU5GTywgIF9fZnVuY19fLCBmLCAjI2EpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM5LVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz00MD1zdGF0aWMgX19wcmludGYoMywgNClcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDE6dm9pZCBfbGRtX3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00Mi17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01Ni0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTc6ICogbGRtX3BhcnNlX3ByaXZoZWFkIC0gUmVhZCB0aGUgTERNIERhdGFiYXNlIFBSSVZIRUFEIHN0cnVjdHVyZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01OC0gKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBQUklWSEVBRCBzdHJ1Y3R1cmUgbG9hZGVkIGZyb20gdGhlIGRldmljZVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjYtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjY3OnN0YXRpYyBib29sIGxkbV9wYXJzZV9wcml2aGVhZChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHByaXZoZWFkICpwaClcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjgte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzItXHRpZiAoTUFHSUNfUFJJVkhFQUQgIT0gZ2V0X3VuYWxpZ25lZF9iZTY0KGRhdGEpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjczOlx0XHRsZG1fZXJyb3IoXCYjMzQ7Q2Fubm90IGZpbmQgUFJJVkhFQUQgc3RydWN0dXJlLiBMRE0gZGF0YWJhc2UgaXNcJiMzNDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzQtXHRcdFx0XCYjMzQ7IGNvcnJ1cHQuIEFib3J0aW5nLlwmIzM0Oyk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04Ni1cdGlmICghaXNfdmlzdGEgXHUwMDI2XHUwMDI2IChwaC1cdTAwM2V2ZXJfbWFqb3IgIT0gMiB8fCBwaC1cdTAwM2V2ZXJfbWlub3IgIT0gMTEpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg3Olx0XHRsZG1fZXJyb3IoXCYjMzQ7RXhwZWN0ZWQgUFJJVkhFQUQgdmVyc2lvbiAyLjExIG9yIDIuMTIsIGdvdCAlZC4lZC5cJiMzNDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODgtXHRcdFx0XCYjMzQ7IEFib3J0aW5nLlwmIzM0OywgcGgtXHUwMDNldmVyX21ham9yLCBwaC1cdTAwM2V2ZXJfbWlub3IpO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTAtXHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjkxOlx0bGRtX2RlYnVnKFwmIzM0O1BSSVZIRUFEIHZlcnNpb24gJWQuJWQgKFdpbmRvd3MgJXMpLlwmIzM0OywgcGgtXHUwMDNldmVyX21ham9yLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05Mi1cdFx0XHRwaC1cdTAwM2V2ZXJfbWlub3IsIGlzX3Zpc3RhID8gXCYjMzQ7VmlzdGFcJiMzNDsgOiBcJiMzNDsyMDAwL1hQXCYjMzQ7KTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk0LVx0XHQvKiBXYXJuIHRoZSB1c2VyIGFuZCBjb250aW51ZSwgY2FyZWZ1bGx5LiAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NTpcdFx0bGRtX2luZm8oXCYjMzQ7RGF0YWJhc2UgaXMgbm9ybWFsbHkgJXUgYnl0ZXMsIGl0IGNsYWltcyB0byBcJiMzNDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTYtXHRcdFx0XCYjMzQ7YmUgJWxsdSBieXRlcy5cJiMzNDssIExETV9EQl9TSVpFLFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAwLVx0XHRcdHBoLVx1MDAzZWxvZ2ljYWxfZGlza19zaXplIFx1MDAzZSBwaC1cdTAwM2Vjb25maWdfc3RhcnQpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMTpcdFx0bGRtX2Vycm9yKFwmIzM0O1BSSVZIRUFEIGRpc2sgc2l6ZSBkb2VzbiYjMzk7dCBtYXRjaCByZWFsIGRpc2sgc2l6ZVwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTA0LVx0aWYgKHV1aWRfcGFyc2UoZGF0YSAmIzQzOyAweDAwMzAsIFx1MDAyNnBoLVx1MDAzZWRpc2tfaWQpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwNTpcdFx0bGRtX2Vycm9yKFwmIzM0O1BSSVZIRUFEIGNvbnRhaW5zIGFuIGludmFsaWQgR1VJRC5cJiMzNDspO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDYtXHRcdHJldHVybiBmYWxzZTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTA3LVx0fVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDg6XHRsZG1fZGVidWcoXCYjMzQ7UGFyc2VkIFBSSVZIRUFEIHN1Y2Nlc3NmdWxseS5cJiMzNDspO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDktXHRyZXR1cm4gdHJ1ZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMi0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzOiAqIGxkbV9wYXJzZV90b2NibG9jayAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE0LSAqIEBkYXRhOiAgUmF3IGRhdGFiYXNlIFRPQ0JMT0NLIHN0cnVjdHVyZSBsb2FkZWQgZnJvbSB0aGUgZGV2aWNlXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMjUtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEyNjpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdG9jYmxvY2sgKGNvbnN0IHU4ICpkYXRhLCBzdHJ1Y3QgdG9jYmxvY2sgKnRvYylcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTI3LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEzMC1cdGlmIChNQUdJQ19UT0NCTE9DSyAhPSBnZXRfdW5hbGlnbmVkX2JlNjQoZGF0YSkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTMxOlx0XHRsZG1fY3JpdCAoXCYjMzQ7Q2Fubm90IGZpbmQgVE9DQkxPQ0ssIGRhdGFiYXNlIG1heSBiZSBjb3JydXB0LlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEzMi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTM5LVx0XHRcdHNpemVvZiAodG9jLVx1MDAzZWJpdG1hcDFfbmFtZSkpICE9IDApIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTQwOlx0XHRsZG1fY3JpdCAoXCYjMzQ7VE9DQkxPQ0smIzM5O3MgZmlyc3QgYml0bWFwIGlzICYjMzk7JXMmIzM5Oywgc2hvdWxkIGJlICYjMzk7JXMmIzM5Oy5cJiMzNDssXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE0MS1cdFx0XHRcdFRPQ19CSVRNQVAxLCB0b2MtXHUwMDNlYml0bWFwMV9uYW1lKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE0OC1cdFx0XHRzaXplb2YgKHRvYy1cdTAwM2ViaXRtYXAyX25hbWUpKSAhPSAwKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE0OTpcdFx0bGRtX2NyaXQgKFwmIzM0O1RPQ0JMT0NLJiMzOTtzIHNlY29uZCBiaXRtYXAgaXMgJiMzOTslcyYjMzk7LCBzaG91bGQgYmUgJiMzOTslcyYjMzk7LlwmIzM0OyxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTUwLVx0XHRcdFx0VE9DX0JJVE1BUDIsIHRvYy1cdTAwM2ViaXRtYXAyX25hbWUpO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTUyLVx0fVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNTM6XHRsZG1fZGVidWcgKFwmIzM0O1BhcnNlZCBUT0NCTE9DSyBzdWNjZXNzZnVsbHkuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTU0LVx0cmV0dXJuIHRydWU7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNTctLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE1ODogKiBsZG1fcGFyc2Vfdm1kYiAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBWTURCIHN0cnVjdHVyZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNTktICogQGRhdGE6ICBSYXcgZGF0YWJhc2UgVk1EQiBzdHJ1Y3R1cmUgbG9hZGVkIGZyb20gdGhlIGRldmljZVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTY5LSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNzA6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZtZGIgKGNvbnN0IHU4ICpkYXRhLCBzdHJ1Y3Qgdm1kYiAqdm0pXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE3MS17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNzQtXHRpZiAoTUFHSUNfVk1EQiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoZGF0YSkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTc1Olx0XHRsZG1fY3JpdCAoXCYjMzQ7Q2Fubm90IGZpbmQgdGhlIFZNREIsIGRhdGFiYXNlIG1heSBiZSBjb3JydXB0LlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE3Ni1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTgxLVx0aWYgKCh2bS1cdTAwM2V2ZXJfbWFqb3IgIT0gNCkgfHwgKHZtLVx1MDAzZXZlcl9taW5vciAhPSAxMCkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTgyOlx0XHRsZG1fZXJyb3IgKFwmIzM0O0V4cGVjdGVkIFZNREIgdmVyc2lvbiAlZC4lZCwgZ290ICVkLiVkLiBcJiMzNDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTgzLVx0XHRcdFwmIzM0O0Fib3J0aW5nLlwmIzM0OywgNCwgMTAsIHZtLVx1MDAzZXZlcl9tYWpvciwgdm0tXHUwMDNldmVyX21pbm9yKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE4OC1cdGlmICh2bS1cdTAwM2V2YmxrX3NpemUgPT0gMCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxODk6XHRcdGxkbV9lcnJvciAoXCYjMzQ7SWxsZWdhbCBWQkxLIHNpemVcJiMzNDspO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xOTAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE5NS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTk2Olx0bGRtX2RlYnVnIChcJiMzNDtQYXJzZWQgVk1EQiBzdWNjZXNzZnVsbHkuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTk3LVx0cmV0dXJuIHRydWU7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMDAtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjIwMTogKiBsZG1fY29tcGFyZV9wcml2aGVhZHMgLSBDb21wYXJlIHR3byBwcml2aGVhZCBvYmplY3RzXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIwMi0gKiBAcGgxOiAgRmlyc3QgcHJpdmhlYWRcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIwOS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MjEwOnN0YXRpYyBib29sIGxkbV9jb21wYXJlX3ByaXZoZWFkcyAoY29uc3Qgc3RydWN0IHByaXZoZWFkICpwaDEsXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIxMS1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBwcml2aGVhZCAqcGgyKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjI0LS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyMjU6ICogbGRtX2NvbXBhcmVfdG9jYmxvY2tzIC0gQ29tcGFyZSB0d28gdG9jYmxvY2sgb2JqZWN0c1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMjYtICogQHRvYzE6ICBGaXJzdCB0b2Ncbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIzMy0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MjM0OnN0YXRpYyBib29sIGxkbV9jb21wYXJlX3RvY2Jsb2NrcyAoY29uc3Qgc3RydWN0IHRvY2Jsb2NrICp0b2MxLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMzUtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdG9jYmxvY2sgKnRvYzIpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNDktLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjI1MDogKiBsZG1fdmFsaWRhdGVfcHJpdmhlYWRzIC0gQ29tcGFyZSB0aGUgcHJpbWFyeSBwcml2aGVhZCB3aXRoIGl0cyBiYWNrdXBzXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI1MS0gKiBAc3RhdGU6IFBhcnRpdGlvbiBjaGVjayBzdGF0ZSBpbmNsdWRpbmcgZGV2aWNlIGhvbGRpbmcgdGhlIExETSBEYXRhYmFzZVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjYyLSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyNjM6c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3ByaXZoZWFkcyhzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNjQtXHRcdFx0XHQgICBzdHJ1Y3QgcHJpdmhlYWQgKnBoMSlcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI3OC1cdGlmICghcGhbMV0gfHwgIXBoWzJdKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjI3OTpcdFx0bGRtX2NyaXQgKFwmIzM0O091dCBvZiBtZW1vcnkuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjgwLVx0XHRnb3RvIG91dDtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI5MC1cdFx0aWYgKCFkYXRhKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjI5MTpcdFx0XHRsZG1fY3JpdCAoXCYjMzQ7RGlzayByZWFkIGZhaWxlZC5cJiMzNDspO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yOTItXHRcdFx0Z290byBvdXQ7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI5My1cdFx0fVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyOTQ6XHRcdHJlc3VsdCA9IGxkbV9wYXJzZV9wcml2aGVhZCAoZGF0YSwgcGhbaV0pO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yOTUtXHRcdHB1dF9kZXZfc2VjdG9yIChzZWN0KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjk2LVx0XHRpZiAoIXJlc3VsdCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyOTc6XHRcdFx0bGRtX2Vycm9yIChcJiMzNDtDYW5ub3QgZmluZCBQUklWSEVBRCAlZC5cJiMzNDssIGkmIzQzOzEpOyAvKiBMb2cgYWdhaW4gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjk4LVx0XHRcdGlmIChpIFx1MDAzYyAyKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzA4LVx0ICAgKChwaFswXS1cdTAwM2Vjb25maWdfc3RhcnQgJiM0MzsgcGhbMF0tXHUwMDNlY29uZmlnX3NpemUpIFx1MDAzZSBudW1fc2VjdHMpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjMwOTpcdFx0bGRtX2NyaXQgKFwmIzM0O0RhdGFiYXNlIGV4dGVuZHMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGRpc2suXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzEwLVx0XHRnb3RvIG91dDtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMxNS1cdFx0ICAgIFx1MDAzZSBwaFswXS1cdTAwM2Vjb25maWdfc3RhcnQpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjMxNjpcdFx0bGRtX2NyaXQgKFwmIzM0O0Rpc2sgYW5kIGRhdGFiYXNlIG92ZXJsYXAuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzE3LVx0XHRnb3RvIG91dDtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMxOS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzIwOlx0aWYgKCFsZG1fY29tcGFyZV9wcml2aGVhZHMgKHBoWzBdLCBwaFsxXSkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzIxOlx0XHRsZG1fY3JpdCAoXCYjMzQ7UHJpbWFyeSBhbmQgYmFja3VwIFBSSVZIRUFEcyBkb24mIzM5O3QgbWF0Y2guXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzIyLVx0XHRnb3RvIG91dDtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMyNC1cdC8qIEZJWE1FIGlnbm9yZSB0aGlzIGZvciBub3dcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzI1Olx0aWYgKCFsZG1fY29tcGFyZV9wcml2aGVhZHMgKHBoWzBdLCBwaFsyXSkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzI2Olx0XHRsZG1fY3JpdCAoXCYjMzQ7UHJpbWFyeSBhbmQgYmFja3VwIFBSSVZIRUFEcyBkb24mIzM5O3QgbWF0Y2guXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzI3LVx0XHRnb3RvIG91dDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzI4LVx0fSovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjMyOTpcdGxkbV9kZWJ1ZyAoXCYjMzQ7VmFsaWRhdGVkIFBSSVZIRUFEcyBzdWNjZXNzZnVsbHkuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzMwLVx0cmVzdWx0ID0gdHJ1ZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMzNy0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzM4OiAqIGxkbV92YWxpZGF0ZV90b2NibG9ja3MgLSBWYWxpZGF0ZSB0aGUgdGFibGUgb2YgY29udGVudHMgYW5kIGl0cyBiYWNrdXBzXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMzOS0gKiBAc3RhdGU6IFBhcnRpdGlvbiBjaGVjayBzdGF0ZSBpbmNsdWRpbmcgZGV2aWNlIGhvbGRpbmcgdGhlIExETSBEYXRhYmFzZVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzUwLSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNTE6c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3RvY2Jsb2NrcyhzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNTItXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCBsZG1kYiAqbGRiKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzY2LVx0aWYgKCF0YlsxXSkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNjc6XHRcdGxkbV9jcml0KFwmIzM0O091dCBvZiBtZW1vcnkuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzY4LVx0XHRnb3RvIGVycjtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4MC1cdFx0aWYgKCFkYXRhKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM4MTpcdFx0XHRsZG1fZXJyb3IoXCYjMzQ7RGlzayByZWFkIGZhaWxlZCBmb3IgVE9DQkxPQ0sgJWQuXCYjMzQ7LCBpKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzgyLVx0XHRcdGNvbnRpbnVlO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODMtXHRcdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzg0Olx0XHRpZiAobGRtX3BhcnNlX3RvY2Jsb2NrKGRhdGEsIHRiW25yX3Ric10pKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODUtXHRcdFx0bnJfdGJzJiM0MzsmIzQzOztcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4OC1cdGlmICghbnJfdGJzKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM4OTpcdFx0bGRtX2NyaXQoXCYjMzQ7RmFpbGVkIHRvIGZpbmQgYSB2YWxpZCBUT0NCTE9DSy5cJiMzNDspO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zOTAtXHRcdGdvdG8gZXJyO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzk1LVx0XHRcdHBoLVx1MDAzZWNvbmZpZ19zaXplKSkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozOTY6XHRcdGxkbV9jcml0KFwmIzM0O1RoZSBiaXRtYXBzIGFyZSBvdXQgb2YgcmFuZ2UuICBHaXZpbmcgdXAuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzk3LVx0XHRnb3RvIGVycjtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwMC1cdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yX3RiczsgaSYjNDM7JiM0MzspIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDAxOlx0XHRpZiAoIWxkbV9jb21wYXJlX3RvY2Jsb2Nrcyh0YlswXSwgdGJbaV0pKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQwMjpcdFx0XHRsZG1fY3JpdChcJiMzNDtUT0NCTE9DS3MgMCBhbmQgJWQgZG8gbm90IG1hdGNoLlwmIzM0OywgaSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwMy1cdFx0XHRnb3RvIGVycjtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwNS1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDA2Olx0bGRtX2RlYnVnKFwmIzM0O1ZhbGlkYXRlZCAlZCBUT0NCTE9DS3Mgc3VjY2Vzc2Z1bGx5LlwmIzM0OywgbnJfdGJzKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDA3LVx0cmVzdWx0ID0gdHJ1ZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQxMy0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDE0OiAqIGxkbV92YWxpZGF0ZV92bWRiIC0gUmVhZCB0aGUgVk1EQiBhbmQgdmFsaWRhdGUgaXRcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDE1LSAqIEBzdGF0ZTogUGFydGl0aW9uIGNoZWNrIHN0YXRlIGluY2x1ZGluZyBkZXZpY2UgaG9sZGluZyB0aGUgTERNIERhdGFiYXNlXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00MjQtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQyNTpzdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdm1kYihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00MjYtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBiYXNlLCBzdHJ1Y3QgbGRtZGIgKmxkYilcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0MC1cdGlmICghZGF0YSkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0NDE6XHRcdGxkbV9jcml0IChcJiMzNDtEaXNrIHJlYWQgZmFpbGVkLlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDQ0LVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0NDU6XHRpZiAoIWxkbV9wYXJzZV92bWRiIChkYXRhLCB2bSkpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0Ni1cdFx0Z290byBvdXQ7XHRcdFx0XHQvKiBBbHJlYWR5IGxvZ2dlZCAqL1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDQ5LVx0aWYgKGdldF91bmFsaWduZWRfYmUxNihkYXRhICYjNDM7IDB4MTApICE9IDB4MDEpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDUwOlx0XHRsZG1fY3JpdCAoXCYjMzQ7RGF0YWJhc2UgaXMgbm90IGluIGEgY29uc2lzdGVudCBzdGF0ZS4gIEFib3J0aW5nLlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ1MS1cdFx0Z290byBvdXQ7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NTQtXHRpZiAodm0tXHUwMDNldmJsa19vZmZzZXQgIT0gNTEyKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0NTU6XHRcdGxkbV9pbmZvIChcJiMzNDtWQkxLcyBzdGFydCBhdCBvZmZzZXQgMHglMDR4LlwmIzM0Oywgdm0tXHUwMDNldmJsa19vZmZzZXQpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NTYtXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NjEtXHRpZiAoKHZtLVx1MDAzZXZibGtfc2l6ZSAqIHZtLVx1MDAzZWxhc3RfdmJsa19zZXEpIFx1MDAzZSAodG9jLVx1MDAzZWJpdG1hcDFfc2l6ZSBcdTAwM2NcdTAwM2MgOSkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDYyOlx0XHRsZG1fY3JpdCAoXCYjMzQ7Vk1EQiBleGNlZWRzIGFsbG93ZWQgc2l6ZSBzcGVjaWZpZWQgYnkgVE9DQkxPQ0suICBcJiMzNDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDYzLVx0XHRcdFx0XCYjMzQ7RGF0YWJhc2UgaXMgY29ycnVwdC4gIEFib3J0aW5nLlwmIzM0Oyk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NzQtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQ3NTogKiBsZG1fdmFsaWRhdGVfcGFydGl0aW9uX3RhYmxlIC0gRGV0ZXJtaW5lIHdoZXRoZXIgYmRldiBtaWdodCBiZSBhIGR5bmFtaWMgZGlza1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NzYtICogQHN0YXRlOiBQYXJ0aXRpb24gY2hlY2sgc3RhdGUgaW5jbHVkaW5nIGRldmljZSBob2xkaW5nIHRoZSBMRE0gRGF0YWJhc2Vcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ4OS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDkwOnN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV9wYXJ0aXRpb25fdGFibGUoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDkxLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUwMS1cdGlmICghZGF0YSkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo1MDI6XHRcdGxkbV9pbmZvIChcJiMzNDtEaXNrIHJlYWQgZmFpbGVkLlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUwMy1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTE2LVx0aWYgKHJlc3VsdClcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTE3Olx0XHRsZG1fZGVidWcgKFwmIzM0O0ZvdW5kIFcySyBkeW5hbWljIGRpc2sgcGFydGl0aW9uIHR5cGUuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTE4LVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTI0LS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo1MjU6ICogbGRtX2dldF9kaXNrX29iamlkIC0gU2VhcmNoIGEgbGlua2VkIGxpc3Qgb2YgdmJsayYjMzk7cyBmb3IgYSBnaXZlbiBEaXNrIElkXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUyNi0gKiBAbGRiOiAgQ2FjaGUgb2YgdGhlIGRhdGFiYXNlIHN0cnVjdHVyZXNcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUzNS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTM2OnN0YXRpYyBzdHJ1Y3QgdmJsayAqIGxkbV9nZXRfZGlza19vYmppZCAoY29uc3Qgc3RydWN0IGxkbWRiICpsZGIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUzNy17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01NTEtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjU1MjogKiBsZG1fY3JlYXRlX2RhdGFfcGFydGl0aW9ucyAtIENyZWF0ZSBkYXRhIHBhcnRpdGlvbnMgZm9yIHRoaXMgZGV2aWNlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTU1My0gKiBAcHA6ICAgTGlzdCBvZiB0aGUgcGFydGl0aW9ucyBwYXJzZWQgc28gZmFyXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01NjctICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjU2ODpzdGF0aWMgYm9vbCBsZG1fY3JlYXRlX2RhdGFfcGFydGl0aW9ucyAoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpwcCxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTY5LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbGRtZGIgKmxkYilcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTU3OC1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTc5Olx0ZGlzayA9IGxkbV9nZXRfZGlza19vYmppZCAobGRiKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTgwLVx0aWYgKCFkaXNrKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjU4MTpcdFx0bGRtX2NyaXQgKFwmIzM0O0NhbiYjMzk7dCBmaW5kIHRoZSBJRCBvZiB0aGlzIGRpc2sgaW4gdGhlIGRhdGFiYXNlLlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTU4Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjA1LS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2MDY6ICogbGRtX3JlbGF0aXZlIC0gQ2FsY3VsYXRlIHRoZSBuZXh0IHJlbGF0aXZlIG9mZnNldFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MDctICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MTgtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjYxOTpzdGF0aWMgaW50IGxkbV9yZWxhdGl2ZShjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBpbnQgYmFzZSwgaW50IG9mZnNldClcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjIwLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTYyNC1cdFx0aWYgKCFidWZmZXIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjYyNTpcdFx0XHRsZG1fZXJyb3IoXCYjMzQ7IWJ1ZmZlclwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTYyNi1cdFx0aWYgKG9mZnNldCBcdTAwM2MgMClcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjI3Olx0XHRcdGxkbV9lcnJvcihcJiMzNDtvZmZzZXQgKCVkKSBcdTAwM2MgMFwmIzM0Oywgb2Zmc2V0KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjI4LVx0XHRpZiAoYmFzZSBcdTAwM2UgYnVmbGVuKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2Mjk6XHRcdFx0bGRtX2Vycm9yKFwmIzM0O2Jhc2UgKCVkKSBcdTAwM2UgYnVmbGVuICglZClcJiMzNDssIGJhc2UsIGJ1Zmxlbik7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTYzMC1cdFx0cmV0dXJuIC0xO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjMyLVx0aWYgKGJhc2UgJiM0MzsgYnVmZmVyW2Jhc2VdIFx1MDAzZT0gYnVmbGVuKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjYzMzpcdFx0bGRtX2Vycm9yKFwmIzM0O2Jhc2UgKCVkKSAmIzQzOyBidWZmZXJbYmFzZV0gKCVkKSBcdTAwM2U9IGJ1ZmxlbiAoJWQpXCYjMzQ7LCBiYXNlLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MzQtXHRcdFx0XHRidWZmZXJbYmFzZV0sIGJ1Zmxlbik7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NDAtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjY0MTogKiBsZG1fZ2V0X3ZudW0gLSBDb252ZXJ0IGEgdmFyaWFibGUtd2lkdGgsIGJpZyBlbmRpYW4gbnVtYmVyLCBpbnRvIGNwdSBvcmRlclxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NDItICogQGJsb2NrOiAgUG9pbnRlciB0byB0aGUgdmFyaWFibGUtd2lkdGggbnVtYmVyIHRvIGNvbnZlcnRcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY1NC0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjU1OnN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY1Ni17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NjctXHRlbHNlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjY2ODpcdFx0bGRtX2Vycm9yIChcJiMzNDtJbGxlZ2FsIGxlbmd0aCAlZC5cJiMzNDssIGxlbmd0aCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY2OS1cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY3My0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Njc0OiAqIGxkbV9nZXRfdnN0ciAtIFJlYWQgYSBsZW5ndGgtcHJlZml4ZWQgc3RyaW5nIGludG8gYSBidWZmZXJcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjc1LSAqIEBibG9jazogICBQb2ludGVyIHRvIHRoZSBsZW5ndGggbWFya2VyXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02OTAtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjY5MTpzdGF0aWMgaW50IGxkbV9nZXRfdnN0cihjb25zdCB1OCAqYmxvY2ssIGludCBibG9ja2xlbiwgdTggKmJ1ZmZlciwgaW50IGJ1ZmxlbilcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjkyLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcwNS1cdGlmIChsZW5ndGggXHUwMDNlPSBidWZsZW4pIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzA2Olx0XHRsZG1fZXJyb3IgKFwmIzM0O1RydW5jYXRpbmcgc3RyaW5nICVkIC1cdTAwM2UgJWQuXCYjMzQ7LCBsZW5ndGgsIGJ1Zmxlbik7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcwNy1cdFx0bGVuZ3RoID0gYnVmbGVuIC0gMTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcxNS0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzE2OiAqIGxkbV9wYXJzZV9jbXAzIC0gUmVhZCBhIHJhdyBWQkxLIENvbXBvbmVudCBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcxNy0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcyNS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzI2OnN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcyNy17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03MzItXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjczMzpcdHJfb2JqaWQgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjczNDpcdHJfbmFtZSAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjczNTpcdHJfdnN0YXRlID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9uYW1lKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzM2Olx0cl9jaGlsZCAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDFELCByX3ZzdGF0ZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjczNzpcdHJfcGFyZW50ID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgyRCwgcl9jaGlsZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTczOC1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzM5LVx0aWYgKGJ1ZmZlclsweDEyXSBcdTAwMjYgVkJMS19GTEFHX0NPTVBfU1RSSVBFKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc0MDpcdFx0cl9zdHJpcGUgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDJFLCByX3BhcmVudCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc0MTpcdFx0cl9jb2xzICAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDJFLCByX3N0cmlwZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc0Mi1cdFx0bGVuID0gcl9jb2xzO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzU0LVx0Y29tcCA9IFx1MDAyNnZiLVx1MDAzZXZibGsuY29tcDtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzU1Olx0bGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggJiM0Mzsgcl9uYW1lKSxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzU2LVx0XHRjb21wLVx1MDAzZXN0YXRlLCBzaXplb2YoY29tcC1cdTAwM2VzdGF0ZSkpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NTctXHRjb21wLVx1MDAzZXR5cGUgICAgICA9IGJ1ZmZlclsweDE4ICYjNDM7IHJfdnN0YXRlXTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzU4Olx0Y29tcC1cdTAwM2VjaGlsZHJlbiAgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciAmIzQzOyAweDFEICYjNDM7IHJfdnN0YXRlKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzU5Olx0Y29tcC1cdTAwM2VwYXJlbnRfaWQgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciAmIzQzOyAweDJEICYjNDM7IHJfY2hpbGQpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3NjA6XHRjb21wLVx1MDAzZWNodW5rc2l6ZSA9IHJfc3RyaXBlID8gbGRtX2dldF92bnVtIChidWZmZXImIzQzO3JfcGFyZW50JiM0MzsweDJFKSA6IDA7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc2MS1cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc2NS0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzY2OiAqIGxkbV9wYXJzZV9kZ3IzIC0gUmVhZCBhIHJhdyBWQkxLIERpc2sgR3JvdXAgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NjctICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NzUtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc3NjpzdGF0aWMgaW50IGxkbV9wYXJzZV9kZ3IzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc3Ny17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03ODItXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc4MzpcdHJfb2JqaWQgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc4NDpcdHJfbmFtZSAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc4NTpcdHJfZGlza2lkID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9uYW1lKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzg2LVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03ODctXHRpZiAoYnVmZmVyWzB4MTJdIFx1MDAyNiBWQkxLX0ZMQUdfREdSM19JRFMpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Nzg4Olx0XHRyX2lkMSA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MjQsIHJfZGlza2lkKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Nzg5Olx0XHRyX2lkMiA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MjQsIHJfaWQxKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzkwLVx0XHRsZW4gPSByX2lkMjtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgwMC1cdGRncnAgPSBcdTAwMjZ2Yi1cdTAwM2V2YmxrLmRncnA7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgwMTpcdGxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfbmFtZSksXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgwMi1cdFx0ZGdycC1cdTAwM2VkaXNrX2lkLCBzaXplb2YoZGdycC1cdTAwM2VkaXNrX2lkKSk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MDYtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgwNzogKiBsZG1fcGFyc2VfZGdyNCAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIEdyb3VwIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODA4LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODE2LSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4MTc6c3RhdGljIGJvb2wgbGRtX3BhcnNlX2RncjQgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODE4LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgyMy1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODI0Olx0cl9vYmppZCAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCAwKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODI1Olx0cl9uYW1lICAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX29iamlkKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODI2LVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MjctXHRpZiAoYnVmZmVyWzB4MTJdIFx1MDAyNiBWQkxLX0ZMQUdfREdSNF9JRFMpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODI4Olx0XHRyX2lkMSA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4NDQsIHJfbmFtZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgyOTpcdFx0cl9pZDIgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDQ0LCByX2lkMSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgzMC1cdFx0bGVuID0gcl9pZDI7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MzktXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg0MDpcdGxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX29iamlkLCBidWZsZW4gLSAoMHgxOCAmIzQzOyByX29iamlkKSxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODQxLVx0XHRidWYsIHNpemVvZihidWYpKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg0NS0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODQ2OiAqIGxkbV9wYXJzZV9kc2szIC0gUmVhZCBhIHJhdyBWQkxLIERpc2sgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NDctICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NTUtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg1NjpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZHNrMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NTcte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODYyLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4NjM6XHRyX29iamlkICAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCAwKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODY0Olx0cl9uYW1lICAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg2NTpcdHJfZGlza2lkICA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfbmFtZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg2NjpcdHJfYWx0bmFtZSA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfZGlza2lkKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODY3LVx0bGVuID0gcl9hbHRuYW1lO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODc1LVx0ZGlzayA9IFx1MDAyNnZiLVx1MDAzZXZibGsuZGlzaztcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODc2Olx0bGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfZGlza2lkLCBidWZsZW4gLSAoMHgxOCAmIzQzOyByX2Rpc2tpZCksXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg3Ny1cdFx0ZGlzay1cdTAwM2VhbHRfbmFtZSwgc2l6ZW9mKGRpc2stXHUwMDNlYWx0X25hbWUpKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg4NC0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODg1OiAqIGxkbV9wYXJzZV9kc2s0IC0gUmVhZCBhIHJhdyBWQkxLIERpc2sgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04ODYtICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04OTQtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg5NTpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZHNrNCAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04OTYte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTAxLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MDI6XHRyX29iamlkID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjkwMzpcdHJfbmFtZSAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX29iamlkKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTA0LVx0bGVuICAgICA9IHJfbmFtZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkxNy0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTE4OiAqIGxkbV9wYXJzZV9wcnQzIC0gUmVhZCBhIHJhdyBWQkxLIFBhcnRpdGlvbiBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkxOS0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkyNy0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTI4OnN0YXRpYyBib29sIGxkbV9wYXJzZV9wcnQzKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTI5LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkzMy1cdEJVR19PTighYnVmZmVyIHx8ICF2Yik7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjkzNDpcdHJfb2JqaWQgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MTgsIDApO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05MzUtXHRpZiAocl9vYmppZCBcdTAwM2MgMCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MzY6XHRcdGxkbV9lcnJvcihcJiMzNDtyX29iamlkICVkIFx1MDAzYyAwXCYjMzQ7LCByX29iamlkKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTM3LVx0XHRyZXR1cm4gZmFsc2U7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkzOC1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTM5Olx0cl9uYW1lID0gbGRtX3JlbGF0aXZlKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX29iamlkKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTQwLVx0aWYgKHJfbmFtZSBcdTAwM2MgMCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NDE6XHRcdGxkbV9lcnJvcihcJiMzNDtyX25hbWUgJWQgXHUwMDNjIDBcJiMzNDssIHJfbmFtZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk0Mi1cdFx0cmV0dXJuIGZhbHNlO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NDMtXHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk0NDpcdHJfc2l6ZSA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgzNCwgcl9uYW1lKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTQ1LVx0aWYgKHJfc2l6ZSBcdTAwM2MgMCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NDY6XHRcdGxkbV9lcnJvcihcJiMzNDtyX3NpemUgJWQgXHUwMDNjIDBcJiMzNDssIHJfc2l6ZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk0Ny1cdFx0cmV0dXJuIGZhbHNlO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NDgtXHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk0OTpcdHJfcGFyZW50ID0gbGRtX3JlbGF0aXZlKGJ1ZmZlciwgYnVmbGVuLCAweDM0LCByX3NpemUpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NTAtXHRpZiAocl9wYXJlbnQgXHUwMDNjIDApIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTUxOlx0XHRsZG1fZXJyb3IoXCYjMzQ7cl9wYXJlbnQgJWQgXHUwMDNjIDBcJiMzNDssIHJfcGFyZW50KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTUyLVx0XHRyZXR1cm4gZmFsc2U7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk1My1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTU0Olx0cl9kaXNraWQgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MzQsIHJfcGFyZW50KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTU1LVx0aWYgKHJfZGlza2lkIFx1MDAzYyAwKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk1NjpcdFx0bGRtX2Vycm9yKFwmIzM0O3JfZGlza2lkICVkIFx1MDAzYyAwXCYjMzQ7LCByX2Rpc2tpZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk1Ny1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTU5LVx0aWYgKGJ1ZmZlclsweDEyXSBcdTAwMjYgVkJMS19GTEFHX1BBUlRfSU5ERVgpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTYwOlx0XHRyX2luZGV4ID0gbGRtX3JlbGF0aXZlKGJ1ZmZlciwgYnVmbGVuLCAweDM0LCByX2Rpc2tpZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk2MS1cdFx0aWYgKHJfaW5kZXggXHUwMDNjIDApIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTYyOlx0XHRcdGxkbV9lcnJvcihcJiMzNDtyX2luZGV4ICVkIFx1MDAzYyAwXCYjMzQ7LCByX2luZGV4KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTYzLVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk2OC1cdGlmIChsZW4gXHUwMDNjIDApIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTY5Olx0XHRsZG1fZXJyb3IoXCYjMzQ7bGVuICVkIFx1MDAzYyAwXCYjMzQ7LCBsZW4pO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NzAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk3My1cdGlmIChsZW4gXHUwMDNlIGdldF91bmFsaWduZWRfYmUzMihidWZmZXIgJiM0MzsgMHgxNCkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTc0Olx0XHRsZG1fZXJyb3IoXCYjMzQ7bGVuICVkIFx1MDAzZSBCRTMyKGJ1ZmZlciAmIzQzOyAweDE0KSAlZFwmIzM0OywgbGVuLFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NzUtXHRcdFx0XHRnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICYjNDM7IDB4MTQpKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk4MC1cdHBhcnQtXHUwMDNldm9sdW1lX29mZnNldCA9IGdldF91bmFsaWduZWRfYmU2NChidWZmZXIgJiM0MzsgMHgyQyAmIzQzOyByX25hbWUpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5ODE6XHRwYXJ0LVx1MDAzZXNpemUgPSBsZG1fZ2V0X3ZudW0oYnVmZmVyICYjNDM7IDB4MzQgJiM0Mzsgcl9uYW1lKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTgyOlx0cGFydC1cdTAwM2VwYXJlbnRfaWQgPSBsZG1fZ2V0X3ZudW0oYnVmZmVyICYjNDM7IDB4MzQgJiM0Mzsgcl9zaXplKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTgzOlx0cGFydC1cdTAwM2VkaXNrX2lkID0gbGRtX2dldF92bnVtKGJ1ZmZlciAmIzQzOyAweDM0ICYjNDM7IHJfcGFyZW50KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTg0LVx0aWYgKHZiLVx1MDAzZWZsYWdzIFx1MDAyNiBWQkxLX0ZMQUdfUEFSVF9JTkRFWClcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk5MS0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTkyOiAqIGxkbV9wYXJzZV92b2w1IC0gUmVhZCBhIHJhdyBWQkxLIFZvbHVtZSBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk5My0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMDEtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMDI6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZvbDUoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDAzLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMDgtXHRCVUdfT04oIWJ1ZmZlciB8fCAhdmIpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDA5Olx0cl9vYmppZCA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMTAtXHRpZiAocl9vYmppZCBcdTAwM2MgMCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDExOlx0XHRsZG1fZXJyb3IoXCYjMzQ7cl9vYmppZCAlZCBcdTAwM2MgMFwmIzM0Oywgcl9vYmppZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMTItXHRcdHJldHVybiBmYWxzZTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAxMy1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAxNDpcdHJfbmFtZSA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMTUtXHRpZiAocl9uYW1lIFx1MDAzYyAwKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMTY6XHRcdGxkbV9lcnJvcihcJiMzNDtyX25hbWUgJWQgXHUwMDNjIDBcJiMzNDssIHJfbmFtZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMTctXHRcdHJldHVybiBmYWxzZTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAxOC1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAxOTpcdHJfdnR5cGUgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfbmFtZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMjAtXHRpZiAocl92dHlwZSBcdTAwM2MgMCkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDIxOlx0XHRsZG1fZXJyb3IoXCYjMzQ7cl92dHlwZSAlZCBcdTAwM2MgMFwmIzM0Oywgcl92dHlwZSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMjItXHRcdHJldHVybiBmYWxzZTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAyMy1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAyNDpcdHJfZGlzYWJsZV9kcml2ZV9sZXR0ZXIgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfdnR5cGUpO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDI1LVx0aWYgKHJfZGlzYWJsZV9kcml2ZV9sZXR0ZXIgXHUwMDNjIDApIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAyNjpcdFx0bGRtX2Vycm9yKFwmIzM0O3JfZGlzYWJsZV9kcml2ZV9sZXR0ZXIgJWQgXHUwMDNjIDBcJiMzNDssXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMjctXHRcdFx0XHRyX2Rpc2FibGVfZHJpdmVfbGV0dGVyKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMjktXHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMzA6XHRyX2NoaWxkID0gbGRtX3JlbGF0aXZlKGJ1ZmZlciwgYnVmbGVuLCAweDJELCByX2Rpc2FibGVfZHJpdmVfbGV0dGVyKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAzMS1cdGlmIChyX2NoaWxkIFx1MDAzYyAwKSB7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE2NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgYGxkbV9wYXJ0aXRpb25gIEVudHJ5cG9pbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGxkbV9wYXJ0aXRpb25gIGVudHJ5cG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyB0byBgbGRtX3BhcnRpdGlvbmAsIG1hcHBpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzLCBhbmQgZ2V0dGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGNhbGwgZmxvdy4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCYjMzk7cyAqY2FsbGVkIGZyb20qIGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgaXRzIGludGVuZGVkIHB1cnBvc2UgYW5kIHRoZSBjb250ZXh0IGl0IG9wZXJhdGVzIHdpdGhpbi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBrbm93bGVkZ2UgaXMsIHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMganVzdCBjb2RlLCBpdCBpcyB0aGUgaW50ZWdyYXRpb24gdGhhdCBpcyBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGRtX3BhcnRpdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9jaGVjay5oPTU5PWludCBrYXJtYV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSk7XG5ibG9jay9wYXJ0aXRpb25zL2NoZWNrLmg6NjA6aW50IGxkbV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSk7XG5ibG9jay9wYXJ0aXRpb25zL2NoZWNrLmgtNjEtaW50IG1hY19wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MTc9c3RhdGljIGludCAoKmNvbnN0IGNoZWNrX3BhcnRbXSkoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICopID0ge1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTU3LSNpZmRlZiBDT05GSUdfTERNX1BBUlRJVElPTlxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6NTg6XHRsZG1fcGFydGl0aW9uLFx0XHQvKiB0aGlzIG11c3QgY29tZSBiZWZvcmUgbXNkb3MgKi9cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTU5LSNlbmRpZlxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9MTQxMT1zdGF0aWMgdm9pZCBsZG1fZnJlZV92YmxrcyAoc3RydWN0IGxpc3RfaGVhZCAqbGgpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNDIyLS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNDIzOiAqIGxkbV9wYXJ0aXRpb24gLSBGaW5kIG91dCB3aGV0aGVyIGEgZGV2aWNlIGlzIGEgZHluYW1pYyBkaXNrIGFuZCBoYW5kbGUgaXRcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQyNC0gKiBAc3RhdGU6IFBhcnRpdGlvbiBjaGVjayBzdGF0ZSBpbmNsdWRpbmcgZGV2aWNlIGhvbGRpbmcgdGhlIExETSBEYXRhYmFzZVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQzOC0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTQzOTppbnQgbGRtX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNDQwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3MjQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIExETSBQYXJ0aXRpb25pbmcgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZXhhbWluZSB0aGUgc3RhdGljIHZlcnN1cyBub24tc3RhdGljIHN5bWJvbCBzaXR1YXRpb24gZm9yIGBsZG1fZ2V0X3ZzdHJgIGFuZCBgbGRtX3BhcnNlX3ZibGtgLiBTcGVjaWZpY2FsbHksIEkgd2FzIGxvb2tpbmcgYXQgYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgLiBJIG5vdGVkIHRoYXQgYGxkbV9wYXJ0aXRpb25gIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIG91ciBlbnRyeSBwb2ludC4gSG93ZXZlciwgdGhlIG90aGVycywgYGxkbV9nZXRfdnN0cmAsIGBsZG1fcGFyc2VfY21wM2AsIGBsZG1fcGFyc2VfZGdyM2AsIGBsZG1fcGFyc2VfZGdyNGAsIGBsZG1fcGFyc2VfZHNrM2AsIGBsZG1fcGFyc2Vfdm9sNWAsIGFuZCBgbGRtX3BhcnNlX3ZibGtgLCBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBzYW1lIGZpbGUuCgpUaGVuIEkgaGFkIGEgKm1vbWVudCouIEluIG1vZGVybiBrZXJuZWwgYnVpbGRzIHdpdGggc3ltYm9sIHRhYmxlcyBhbmQgdG9vbHMgbGlrZSBrYWxsc3ltcywga2NvdiwgYW5kIHN5emthbGxlciwgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYSBgLmNgIGZpbGUgKmFyZSogZXhwb3NlZCBhcyBzeW1ib2xzIGluIGB2bWxpbnV4YCwgYXMgbG9uZyBhcyB0aGUgY29tcGlsZXIgaGFzbiYjMzk7dCBpbmxpbmVkIHRoZW0gYW5kIHRoZXkgYXJlbiYjMzk7dCBpbiBoZWFkZXIgZmlsZXMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyIGluIHRoZSBjb250ZXh0IG9mIGZ1enppbmcsIGFuZCBJIHJlbWVtYmVyZWQgdGhlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgZ3VpZGVsaW5lLCB3aGljaCBpcyBpbmNyZWRpYmx5IHVzZWZ1bCBmb3IgZGlyZWN0aW5nIGZ1enppbmcgZWZmb3J0cy4gSXQgc3RyZXNzZXMgdGhlIGltcG9ydGFuY2Ugb2YgbGlzdGluZyBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBjb3JlIGxvZ2ljIG9yIEFQSSBlbnRyeSBwb2ludHMuIEl0IGFsc28gbm90ZXMgdGhhdCBpbmxpbmUgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzIGFyZSBtb3JlIGRpZmZpY3VsdCwgYW5kIHN1Z2dlc3RzIGZvY3VzaW5nIG9uIG5vbi1zdGF0aWMgY2FsbGVyIGZ1bmN0aW9ucyBpbiBgLmNgIGZpbGVzIGluc3RlYWQuCgpOb3csIGNvbnNpZGVyaW5nIGFsbCBmdW5jdGlvbnMgKGBsZG1fZ2V0X3ZzdHJgLCBgbGRtX3BhcnNlX3ZibGtgLCBgbGRtX3BhcnRpdGlvbmAsIGBsZG1fcGFyc2VfY21wM2AsIGBsZG1fcGFyc2VfZGdyM2AsIGBsZG1fcGFyc2VfZGdyNGAsIGBsZG1fcGFyc2VfZHNrM2AsIGFuZCBgbGRtX3BhcnNlX3ZvbDVgKSBhcmUgaW4gYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgLCB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbGVycyBvZiBgbGRtX2dldF92c3RyYCBvciBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgYXJlYSBoYXZlIGJlZW4gbW9kaWZpZWQuCgpTbywgdGFraW5nIHN0b2NrIG9mIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLCBpdCYjMzk7czogYGxkbV9nZXRfdnN0cmAsIGBsZG1fcGFyc2VfY21wM2AsIGBsZG1fcGFyc2VfZGdyM2AsIGBsZG1fcGFyc2VfZGdyNGAsIGBsZG1fcGFyc2VfZHNrM2AsIGBsZG1fcGFyc2Vfdm9sNWAsIGFuZCBgbGRtX3BhcnNlX3ZibGtgLiBQbHVzLCB0aGUgZW50cnlwb2ludCBpcyBgbGRtX3BhcnRpdGlvbmAuCgpOb3cgdG8gdGhlIGtleSBxdWVzdGlvbjogSXMgdGhpcyBXb3J0aEZ1enppbmc/IFRoZSBhbnN3ZXIgaXMgbG9va2luZyBsaWtlIGEgc29saWQgeWVzLiBJdCB0b3VjaGVzIGJsb2NrIHBhcnRpdGlvbiBwYXJzaW5nIGxvZ2ljIHdpdGhpbiBgYmxvY2svcGFydGl0aW9ucy9sZG0uY2AsIHdoaWNoIGlzIGV4ZWN1dGVkIHdoZW4gYmxvY2sgZGV2aWNlcyBnZXQgcGFydGl0aW9uZWQgb3Igc2Nhbm5lZDsgdGhpbmdzIGxpa2UgbG9vcCwgbmJkLCB2aXJ0aW8sIGFuZCByYW1kaXNrIGFyZSBhbGwgYWZmZWN0ZWQuIEl0IGFsc28gbG9va3MgcmVhY2hhYmxlIGluIFFFTVUgYW5kIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gUGx1cywgaXQgbW9kaWZpZXMgc3RyaW5nIGxlbmd0aCBib3VuZHMgYW5kIGNoZWNraW5nIGxvZ2ljLiBQZXJmZWN0LgoKTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSW4gYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AsIGl0JiMzOTtzIGNsZWFyOiBgY29uZmlnIExETV9QQVJUSVRJT05gIGRlcGVuZHMgb24gYFBBUlRJVElPTl9BRFZBTkNFRGAuIFNvLCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGZvciBgUEFSVElUSU9OX0FEVkFOQ0VEYCBmb3IgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVmb3JlIGdvaW5nIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQVJUSVRJT05fQURWQU5DRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZz01PW1lbnUgXCYjMzQ7UGFydGl0aW9uIFR5cGVzXCYjMzQ7XG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctNi1cbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZzo3OmNvbmZpZyBQQVJUSVRJT05fQURWQU5DRURcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy04LVx0Ym9vbCBcJiMzNDtBZHZhbmNlZCBwYXJ0aXRpb24gc2VsZWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjQwCgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDQxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYFBBUlRJVElPTl9BRFZBTkNFRGAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgUEFSVElUSU9OX0FEVkFOQ0VEYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgKm90aGVyKiB0aGFuIGl0c2VsZiwgd2hpY2ggSSYjMzk7bGwga2VlcCBpbiBtaW5kIGFzIEkgY29udGludWUgdG8gcmV2aWV3LiBUaGUgaW1tZWRpYXRlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCB0aGVyZWZvcmUsIHNlZW0gdG8gYmUgYExETV9QQVJUSVRJT05gIGFuZCwgb2J2aW91c2x5LCBgUEFSVElUSU9OX0FEVkFOQ0VEYC4KCk5vdywgbGV0JiMzOTtzIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgbGlzdCBvZiBGb2N1c1N5bWJvbHMgcHJvdmlkZWQuIEkgc2VlIGEgZmFtaWxpYXIgc2V0IG9mIGZ1bmN0aW9uIGNhbGxzIHRoYXQgYXBwZWFyIHRvIGJlIG91ciBjb3JlIHBhcnNpbmcgcm91dGluZXMgd2l0aGluIHRoZSBMRE0gbW9kdWxlLiBHb29kLCBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvbiB0aGVtOiBgbGRtX2dldF92c3RyYCwgYGxkbV9wYXJzZV9jbXAzYCwgYGxkbV9wYXJzZV9kZ3IzYCwgYGxkbV9wYXJzZV9kZ3I0YCwgYGxkbV9wYXJzZV9kc2szYCwgYGxkbV9wYXJzZV92b2w1YCwgYGxkbV9wYXJzZV92YmxrYCwgYW5kIG9mIGNvdXJzZSwgYGxkbV9wYXJ0aXRpb25gLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRpZmYgZGlyZWN0bHkgaW1wYWN0cyB0aGVzZSBmdW5jdGlvbnMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNpZGUtZWZmZWN0cywgSSB3YW50IHRvIGNhdGNoIHRoZW0gaW1tZWRpYXRlbHkuIE9rYXksIGxvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IGNvbmZpcm1zIHRoYXQgYWxsIDcgb2YgdGhvc2UgcGFyc2luZyBmdW5jdGlvbnMgYXJlIGluZGVlZCBtb2RpZmllZC4gTGluZXMgNjgwLTcxMCwgNzUyLTc1NiwgNzkwLTgwMiwgODI5LTg0MSwgODY0LTg3NywgMTA3Mi0xMDkyLCBhbmQgMTExNS0xMTI4LCByZXNwZWN0aXZlbHkuIEl0IHNlZW1zIHRoYXQgYGxkbV9wYXJ0aXRpb25gIGlzIHRoZSBlbnRyeSBwb2ludCwgd2hpY2ggbWFrZXMgc2Vuc2UuCgpOb3cgbGV0JiMzOTtzIHZlcmlmeSBzY29wZS4gT2theSwgSSBvbmx5IHNlZSBtb2RpZmljYXRpb25zIHRvIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYC4gR29vZC4KCkFuZCBmaW5hbGx5LCB0byByZWl0ZXJhdGUsIGl0JiMzOTtzIGNsZWFyIHRoYXQgYENPTkZJR19MRE1fUEFSVElUSU9OYCByZXF1aXJlcyBgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRGAsIHdoaWNoIGNvbmZpcm1zIGV2ZXJ5dGhpbmcuCgpFdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFSVElUSU9OX0FEVkFOQ0VEJiMzNDssCiAgICAmIzM0O0xETV9QQVJUSVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsZG1fZ2V0X3ZzdHImIzM0OywKICAgICYjMzQ7bGRtX3BhcnNlX3ZibGsmIzM0OywKICAgICYjMzQ7bGRtX3BhcnNlX2NtcDMmIzM0OywKICAgICYjMzQ7bGRtX3BhcnNlX2RncjMmIzM0OywKICAgICYjMzQ7bGRtX3BhcnNlX2RncjQmIzM0OywKICAgICYjMzQ7bGRtX3BhcnNlX2RzazMmIzM0OywKICAgICYjMzQ7bGRtX3BhcnNlX3ZvbDUmIzM0OywKICAgICYjMzQ7bGRtX3BhcnRpdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2luZG93cyBMb2dpY2FsIERpc2sgTWFuYWdlciAoTERNKSBwYXJ0aXRpb24gcGFyc2VyIGluIGJsb2NrL3BhcnRpdGlvbnMvbGRtLmMgdG8gYWRkIGJvdW5kcyBjaGVja2luZyB3aGVuIHJlYWRpbmcgbGVuZ3RoLXByZWZpeGVkIHN0cmluZ3MsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgYmxvY2sgZGV2aWNlIHBhcnRpdGlvbiBzY2FubmluZyAoZS5nLiwgbG9vcCBkZXZpY2VzKSBhbmQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIHRydW5jYXRpb25zLCBvciB1bmV4cGVjdGVkIHBhcnNlciBiZWhhdmlvcnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBUlRJVElPTl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtMRE1fUEFSVElUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bGRtX2dldF92c3RyJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV92YmxrJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9jbXAzJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9kZ3IzJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9kZ3I0JiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV9kc2szJiMzNDssCiAgICAmIzM0O2xkbV9wYXJzZV92b2w1JiMzNDssCiAgICAmIzM0O2xkbV9wYXJ0aXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpbmRvd3MgTG9naWNhbCBEaXNrIE1hbmFnZXIgKExETSkgcGFydGl0aW9uIHBhcnNlciBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgd2hlbiByZWFkaW5nIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmdzLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGJsb2NrIGRldmljZSBwYXJ0aXRpb24gc2Nhbm5pbmcgKGUuZy4sIGxvb3AgZGV2aWNlcykgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB0cnVuY2F0aW9ucywgb3IgdW5leHBlY3RlZCBwYXJzZXIgYmVoYXZpb3JzIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgaW4gYmxvY2svcGFydGl0aW9ucy9sZG0uYyBieSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIG9uIHRoZSBpbnB1dCBidWZmZXIgbGVuZ3RoIChgYmxvY2tsZW5gKSB3aXRoaW4gYGxkbV9nZXRfdnN0cigpYC4gUHJldmlvdXNseSwgYGxkbV9nZXRfdnN0cigpYCBvbmx5IGNoZWNrZWQgb3V0cHV0IGJ1ZmZlciBib3VuZHMgKGBidWZsZW5gKSwgYWxsb3dpbmcgYSBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzIGxlbmd0aCBieXRlIGluIGEgcGFydGl0aW9uIHN0cnVjdHVyZSB0byByZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIuIFxuXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgZnVsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyAoS01TQU4gZG9tYWluKS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNmMGRkNDNmZDcyM2Q5ZjI0OWJkZjdhOTAzMDMwNDEyZjBhZDY1YmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDIxOjE1OjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9sZG0uYyBiL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmMKaW5kZXggYzBiZGNhZTU4YTNlZS4uNTQ2OGUwMzhhMDlmNCAxMDA2NDQKLS0tIGEvYmxvY2svcGFydGl0aW9ucy9sZG0uYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL2xkbS5jCkBAIC02NzMsNiAmIzQzOzY3Myw3IEBAIHN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spCiAvKioKICAqIGxkbV9nZXRfdnN0ciAtIFJlYWQgYSBsZW5ndGgtcHJlZml4ZWQgc3RyaW5nIGludG8gYSBidWZmZXIKICAqIEBibG9jazogICBQb2ludGVyIHRvIHRoZSBsZW5ndGggbWFya2VyCiYjNDM7ICogQGJsb2NrbGVuOiBOdW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IEBibG9jawogICogQGJ1ZmZlcjogIExvY2F0aW9uIHRvIGNvcHkgc3RyaW5nIHRvCiAgKiBAYnVmbGVuOiAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlcgogICoKQEAgLTY4MCwyMCAmIzQzOzY4MSwyNyBAQCBzdGF0aWMgdTY0IGxkbV9nZXRfdm51bSAoY29uc3QgdTggKmJsb2NrKQogICogdGhleSBhcmUgcHJlZml4ZWQgYnkgYSBvbmUgYnl0ZSBsZW5ndGggbWFya2VyLiAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgb25lIG9mCiAgKiB0aGVzZSBzdHJpbmdzIGludG8gYSBidWZmZXIuCiAgKgotICogTi5CLiAgVGhpcyBmdW5jdGlvbiBET0VTIE5PVCBwZXJmb3JtIGFueSByYW5nZSBjaGVja2luZyBvbiB0aGUgaW5wdXQuCi0gKiAgICAgICBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgdGhlIG91dHB1dCB3aWxsIGJlIHRydW5jYXRlZC4KJiM0MzsgKiBOLkIuICBUaGUgc3RyaW5nIGlzIGNsYW1wZWQgdG8gYm90aCBAYmxvY2tsZW4gYW5kIEBidWZsZW47IGlmIGVpdGhlcgomIzQzOyAqICAgICAgIGlzIHRvbyBzbWFsbCB0aGUgb3V0cHV0IHdpbGwgYmUgdHJ1bmNhdGVkLgogICoKICAqIFJldHVybjogIDAsIEVycm9yIGFuZCBAYnVmZmVyIGNvbnRlbnRzIGFyZSB1bmRlZmluZWQKICAqICAgICAgICAgIG4sIFN0cmluZyBsZW5ndGggaW4gY2hhcmFjdGVycyAoZXhjbHVkaW5nIE5VTEwpCiAgKiAgICAgICAgICBidWZsZW4tMSwgU3RyaW5nIHdhcyB0cnVuY2F0ZWQuCiAgKi8KLXN0YXRpYyBpbnQgbGRtX2dldF92c3RyIChjb25zdCB1OCAqYmxvY2ssIHU4ICpidWZmZXIsIGludCBidWZsZW4pCiYjNDM7c3RhdGljIGludCBsZG1fZ2V0X3ZzdHIoY29uc3QgdTggKmJsb2NrLCBpbnQgYmxvY2tsZW4sIHU4ICpidWZmZXIsIGludCBidWZsZW4pCiB7CiAJaW50IGxlbmd0aDsKIAogCUJVR19PTiAoIWJsb2NrIHx8ICFidWZmZXIpOwogCiYjNDM7CWlmIChibG9ja2xlbiAmbHQ7IDEpIHsKJiM0MzsJCWJ1ZmZlclswXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiAJbGVuZ3RoID0gYmxvY2tbMF07CiYjNDM7CWlmIChsZW5ndGggJmd0OyBibG9ja2xlbiAtIDEpCiYjNDM7CQlsZW5ndGggPSBibG9ja2xlbiAtIDE7CiAJaWYgKGxlbmd0aCAmZ3Q7PSBidWZsZW4pIHsKIAkJbGRtX2Vycm9yICgmIzM0O1RydW5jYXRpbmcgc3RyaW5nICVkIC0mZ3Q7ICVkLiYjMzQ7LCBsZW5ndGgsIGJ1Zmxlbik7CiAJCWxlbmd0aCA9IGJ1ZmxlbiAtIDE7CkBAIC03NDQsOCAmIzQzOzc1Miw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCiAJCXJldHVybiBmYWxzZTsKIAogCWNvbXAgPSAmYW1wO3ZiLSZndDt2YmxrLmNvbXA7Ci0JbGRtX2dldF92c3RyIChidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGNvbXAtJmd0O3N0YXRlLAotCQlzaXplb2YgKGNvbXAtJmd0O3N0YXRlKSk7CiYjNDM7CWxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfbmFtZSksCiYjNDM7CQljb21wLSZndDtzdGF0ZSwgc2l6ZW9mKGNvbXAtJmd0O3N0YXRlKSk7CiAJY29tcC0mZ3Q7dHlwZSAgICAgID0gYnVmZmVyWzB4MTggJiM0Mzsgcl92c3RhdGVdOwogCWNvbXAtJmd0O2NoaWxkcmVuICA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICYjNDM7IDB4MUQgJiM0Mzsgcl92c3RhdGUpOwogCWNvbXAtJmd0O3BhcmVudF9pZCA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICYjNDM7IDB4MkQgJiM0Mzsgcl9jaGlsZCk7CkBAIC03OTAsOCAmIzQzOzc5OCw4IEBAIHN0YXRpYyBpbnQgbGRtX3BhcnNlX2RncjMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKIAkJcmV0dXJuIGZhbHNlOwogCiAJZGdycCA9ICZhbXA7dmItJmd0O3ZibGsuZGdycDsKLQlsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgZGdycC0mZ3Q7ZGlza19pZCwKLQkJc2l6ZW9mIChkZ3JwLSZndDtkaXNrX2lkKSk7CiYjNDM7CWxkbV9nZXRfdnN0cihidWZmZXIgJiM0MzsgMHgxOCAmIzQzOyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfbmFtZSksCiYjNDM7CQlkZ3JwLSZndDtkaXNrX2lkLCBzaXplb2YoZGdycC0mZ3Q7ZGlza19pZCkpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC04MjksNyAmIzQzOzgzNyw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9kZ3I0IChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCiAJaWYgKGxlbiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICYjNDM7IDB4MTQpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfb2JqaWQsIGJ1Ziwgc2l6ZW9mIChidWYpKTsKJiM0MzsJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfb2JqaWQsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfb2JqaWQpLAomIzQzOwkJYnVmLCBzaXplb2YoYnVmKSk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTg2NCw4ICYjNDM7ODczLDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX2RzazMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKIAkJcmV0dXJuIGZhbHNlOwogCiAJZGlzayA9ICZhbXA7dmItJmd0O3ZibGsuZGlzazsKLQlsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfZGlza2lkLCBkaXNrLSZndDthbHRfbmFtZSwKLQkJc2l6ZW9mIChkaXNrLSZndDthbHRfbmFtZSkpOwomIzQzOwlsZG1fZ2V0X3ZzdHIoYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9kaXNraWQsIGJ1ZmxlbiAtICgweDE4ICYjNDM7IHJfZGlza2lkKSwKJiM0MzsJCWRpc2stJmd0O2FsdF9uYW1lLCBzaXplb2YoZGlzay0mZ3Q7YWx0X25hbWUpKTsKIAlpZiAodXVpZF9wYXJzZShidWZmZXIgJiM0MzsgMHgxOSAmIzQzOyByX25hbWUsICZhbXA7ZGlzay0mZ3Q7ZGlza19pZCkpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMTA3MiwxNiAmIzQzOzEwODEsMTYgQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZvbDUoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCXZvbHUgPSAmYW1wO3ZiLSZndDt2YmxrLnZvbHU7Ci0JbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgdm9sdS0mZ3Q7dm9sdW1lX3R5cGUsCi0JCQlzaXplb2Yodm9sdS0mZ3Q7dm9sdW1lX3R5cGUpKTsKJiM0MzsJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDE4ICYjNDM7IHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggJiM0Mzsgcl9uYW1lKSwKJiM0MzsJCQl2b2x1LSZndDt2b2x1bWVfdHlwZSwgc2l6ZW9mKHZvbHUtJmd0O3ZvbHVtZV90eXBlKSk7CiAJbWVtY3B5KHZvbHUtJmd0O3ZvbHVtZV9zdGF0ZSwgYnVmZmVyICYjNDM7IDB4MTggJiM0Mzsgcl9kaXNhYmxlX2RyaXZlX2xldHRlciwKIAkJCXNpemVvZih2b2x1LSZndDt2b2x1bWVfc3RhdGUpKTsKIAl2b2x1LSZndDtzaXplID0gbGRtX2dldF92bnVtKGJ1ZmZlciAmIzQzOyAweDNEICYjNDM7IHJfY2hpbGQpOwogCXZvbHUtJmd0O3BhcnRpdGlvbl90eXBlID0gYnVmZmVyWzB4NDEgJiM0Mzsgcl9zaXplXTsKIAltZW1jcHkodm9sdS0mZ3Q7Z3VpZCwgYnVmZmVyICYjNDM7IDB4NDIgJiM0Mzsgcl9zaXplLCBzaXplb2Yodm9sdS0mZ3Q7Z3VpZCkpOwogCWlmIChidWZmZXJbMHgxMl0gJmFtcDsgVkJMS19GTEFHX1ZPTFVfRFJJVkUpIHsKLQkJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDUyICYjNDM7IHJfc2l6ZSwgdm9sdS0mZ3Q7ZHJpdmVfaGludCwKLQkJCQlzaXplb2Yodm9sdS0mZ3Q7ZHJpdmVfaGludCkpOwomIzQzOwkJbGRtX2dldF92c3RyKGJ1ZmZlciAmIzQzOyAweDUyICYjNDM7IHJfc2l6ZSwgYnVmbGVuIC0gKDB4NTIgJiM0Mzsgcl9zaXplKSwKJiM0MzsJCQkJdm9sdS0mZ3Q7ZHJpdmVfaGludCwgc2l6ZW9mKHZvbHUtJmd0O2RyaXZlX2hpbnQpKTsKIAl9CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMTE1LDcgJiM0MzsxMTI0LDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZibGsgKGNvbnN0IHU4ICpidWYsIGludCBsZW4sIHN0cnVjdCB2YmxrICp2YikKIAl2Yi0mZ3Q7ZmxhZ3MgID0gYnVmWzB4MTJdOwogCXZiLSZndDt0eXBlICAgPSBidWZbMHgxM107CiAJdmItJmd0O29ial9pZCA9IGxkbV9nZXRfdm51bSAoYnVmICYjNDM7IDB4MTgpOwotCWxkbV9nZXRfdnN0ciAoYnVmJiM0MzsweDE4JiM0MztyX29iamlkLCB2Yi0mZ3Q7bmFtZSwgc2l6ZW9mICh2Yi0mZ3Q7bmFtZSkpOwomIzQzOwlsZG1fZ2V0X3ZzdHIoYnVmICYjNDM7IDB4MTggJiM0Mzsgcl9vYmppZCwgbGVuIC0gKDB4MTggJiM0Mzsgcl9vYmppZCksCiYjNDM7CQl2Yi0mZ3Q7bmFtZSwgc2l6ZW9mKHZiLSZndDtuYW1lKSk7CiAKIAlzd2l0Y2ggKHZiLSZndDt0eXBlKSB7CiAJCWNhc2UgVkJMS19DTVAzOiAgcmVzdWx0ID0gbGRtX3BhcnNlX2NtcDMgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoZSB1c2VyJiMzOTtzIHBvbmRlcmluZyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGl0cyBvd24gS01TQU4gZnV6emluZyBydW4uIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHF1ZXN0aW9uOyB3ZSBuZWVkIHRvIGFzc2VzcyB0aGUgcmlzay4gTGV0JiMzOTtzIGRpZyBpbi4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYC4gUmlnaHQsIHNvIGxvZ2ljYWwgZGlzayBtYW5hZ2VtZW50LCBpbnRlcmVzdGluZy4uLiBwb3RlbnRpYWxseSBjb21wbGV4LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhhdCBmaWxlIHRvIGdhdWdlIHRoZSBpbXBhY3QuCgpMZXQmIzM5O3MgcXVpY2tseSBnZXQgdGhlIGNvZGUgdXAuIEkgY2FuIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcHVsbCB1cCBgYmxvY2svcGFydGl0aW9ucy9sZG0uY2AgYW5kIGdldCBhIGZlZWwgZm9yIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIHRoZSBtb2RpZmllZCBzZWN0aW9ucy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uJiMzNDsgb3IgdGhhdCBvcGVyYXRlcyBvbiBkYXRhIHN0cnVjdHVyZXMgaW4gYSB3YXkgdGhhdCBtaWdodCBleHBvc2UgS01TQU4gaXNzdWVzLiBPbmNlIEkgaGF2ZSBhIGdvb2QgY29udGV4dCwgSSBjYW4gbWFrZSBhIG1vcmUgaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgd2hldGhlciBhIGRlZGljYXRlZCBmdXp6aW5nIHNlc3Npb24gaXMgdGhlIHJpZ2h0IG1vdmUuIEkgbmVlZCB0byBiYWxhbmNlIHRoZSBjb3N0IG9mIHNldHRpbmcgdXAgYSBuZXcgc2Vzc2lvbiB3aXRoIHRoZSBwb3RlbnRpYWwgYmVuZWZpdCBvZiBjYXRjaGluZyBzdWJ0bGUgS01TQU4gYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2xkbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHRcdHJldHVybiB0bXA7XG4gNjcxOlx0fVxuIDY3MjpcdFxuIDY3MzpcdC8qKlxuIDY3NDpcdCAqIGxkbV9nZXRfdnN0ciAtIFJlYWQgYSBsZW5ndGgtcHJlZml4ZWQgc3RyaW5nIGludG8gYSBidWZmZXJcbiA2NzU6XHQgKiBAYmxvY2s6ICAgUG9pbnRlciB0byB0aGUgbGVuZ3RoIG1hcmtlclxuIDY3NjpcdCAqIEBibG9ja2xlbjogTnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBAYmxvY2tcbiA2Nzc6XHQgKiBAYnVmZmVyOiAgTG9jYXRpb24gdG8gY29weSBzdHJpbmcgdG9cbiA2Nzg6XHQgKiBAYnVmbGVuOiAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlclxuIDY3OTpcdCAqXG4gNjgwOlx0ICogTWFueSBvZiB0aGUgc3RyaW5ncyBpbiB0aGUgTERNIERhdGFiYXNlIGFyZSBub3QgTlVMTCB0ZXJtaW5hdGVkLiAgSW5zdGVhZFxuIDY4MTpcdCAqIHRoZXkgYXJlIHByZWZpeGVkIGJ5IGEgb25lIGJ5dGUgbGVuZ3RoIG1hcmtlci4gIFRoaXMgZnVuY3Rpb24gY29waWVzIG9uZSBvZlxuIDY4MjpcdCAqIHRoZXNlIHN0cmluZ3MgaW50byBhIGJ1ZmZlci5cbiA2ODM6XHQgKlxuIDY4NDpcdCAqIE4uQi4gIFRoZSBzdHJpbmcgaXMgY2xhbXBlZCB0byBib3RoIEBibG9ja2xlbiBhbmQgQGJ1ZmxlbjsgaWYgZWl0aGVyXG4gNjg1Olx0ICogICAgICAgaXMgdG9vIHNtYWxsIHRoZSBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQuXG4gNjg2Olx0ICpcbiA2ODc6XHQgKiBSZXR1cm46ICAwLCBFcnJvciBhbmQgQGJ1ZmZlciBjb250ZW50cyBhcmUgdW5kZWZpbmVkXG4gNjg4Olx0ICogICAgICAgICAgbiwgU3RyaW5nIGxlbmd0aCBpbiBjaGFyYWN0ZXJzIChleGNsdWRpbmcgTlVMTClcbiA2ODk6XHQgKiAgICAgICAgICBidWZsZW4tMSwgU3RyaW5nIHdhcyB0cnVuY2F0ZWQuXG4gNjkwOlx0ICovXG4gNjkxOlx0c3RhdGljIGludCBsZG1fZ2V0X3ZzdHIoY29uc3QgdTggKmJsb2NrLCBpbnQgYmxvY2tsZW4sIHU4ICpidWZmZXIsIGludCBidWZsZW4pXG4gNjkyOlx0e1xuIDY5MzpcdFx0aW50IGxlbmd0aDtcbiA2OTQ6XHRcbiA2OTU6XHRcdEJVR19PTiAoIWJsb2NrIHx8ICFidWZmZXIpO1xuIDY5NjpcdFxuIDY5NzpcdFx0aWYgKGJsb2NrbGVuIFx1MDAzYyAxKSB7XG4gNjk4Olx0XHRcdGJ1ZmZlclswXSA9ICYjMzk7XFwwJiMzOTs7XG4gNjk5Olx0XHRcdHJldHVybiAwO1xuIDcwMDpcdFx0fVxuIDcwMTpcdFxuIDcwMjpcdFx0bGVuZ3RoID0gYmxvY2tbMF07XG4gNzAzOlx0XHRpZiAobGVuZ3RoIFx1MDAzZSBibG9ja2xlbiAtIDEpXG4gNzA0Olx0XHRcdGxlbmd0aCA9IGJsb2NrbGVuIC0gMTtcbiA3MDU6XHRcdGlmIChsZW5ndGggXHUwMDNlPSBidWZsZW4pIHtcbiA3MDY6XHRcdFx0bGRtX2Vycm9yIChcJiMzNDtUcnVuY2F0aW5nIHN0cmluZyAlZCAtXHUwMDNlICVkLlwmIzM0OywgbGVuZ3RoLCBidWZsZW4pO1xuIDcwNzpcdFx0XHRsZW5ndGggPSBidWZsZW4gLSAxO1xuIDcwODpcdFx0fVxuIDcwOTpcdFx0bWVtY3B5IChidWZmZXIsIGJsb2NrICYjNDM7IDEsIGxlbmd0aCk7XG4gNzEwOlx0XHRidWZmZXJbbGVuZ3RoXSA9IDA7XG4gNzExOlx0XHRyZXR1cm4gbGVuZ3RoO1xuIDcxMjpcdH1cbiA3MTM6XHRcbiA3MTQ6XHRcbiA3MTU6XHQvKipcbiA3MTY6XHQgKiBsZG1fcGFyc2VfY21wMyAtIFJlYWQgYSByYXcgVkJMSyBDb21wb25lbnQgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxuIDcxNzpcdCAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxuIDcxODpcdCAqIEBidWZsZW46ICBTaXplIG9mIHRoZSBibG9jayBvZiBkYXRhXG4gNzE5Olx0ICogQHZiOiAgICAgIEluLW1lbW9yeSB2YmxrIGluIHdoaWNoIHRvIHJldHVybiBpbmZvcm1hdGlvblxuIDcyMDpcdCAqXG4gNzIxOlx0ICogUmVhZCBhIHJhdyBWQkxLIENvbXBvbmVudCBvYmplY3QgKHZlcnNpb24gMykgaW50byBhIHZibGsgc3RydWN0dXJlLlxuIDcyMjpcdCAqXG4gNzIzOlx0ICogUmV0dXJuOiAgJiMzOTt0cnVlJiMzOTsgICBAdmIgY29udGFpbnMgYSBDb21wb25lbnQgVkJMS1xuIDcyNDpcdCAqICAgICAgICAgICYjMzk7ZmFsc2UmIzM5OyAgQHZiIGNvbnRlbnRzIGFyZSBub3QgZGVmaW5lZFxuIDcyNTpcdCAqL1xuIDcyNjpcdHN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gNzI3Olx0e1xuIDcyODpcdFx0aW50IHJfb2JqaWQsIHJfbmFtZSwgcl92c3RhdGUsIHJfY2hpbGQsIHJfcGFyZW50LCByX3N0cmlwZSwgcl9jb2xzLCBsZW47XG4gNzI5Olx0XHRzdHJ1Y3QgdmJsa19jb21wICpjb21wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEFkZHJlc3NpbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBSZWFkIGluIGBsZG1fZ2V0X3ZzdHJgKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBpbiB0aGUgTG9naWNhbCBEaXNrIE1hbmFnZXIgKExETSkgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgYGxkbV9nZXRfdnN0cigpYCBmdW5jdGlvbiwgd2l0aGluIGBsZG0uY2AsIGhhcyBiZWVuIG1vZGlmaWVkLgoKUHJldmlvdXNseSwgYGxkbV9nZXRfdnN0cmAgd2FzIHZ1bG5lcmFibGUuIEl0IHJlYWQgYSBsZW5ndGggYnl0ZSAoYGJsb2NrWzBdYCkgYW5kIGNvcGllZCBgbGVuZ3RoYCBieXRlcyBmcm9tIGBibG9jayAmIzQzOyAxYCBpbnRvIHRoZSBwcm92aWRlZCBgYnVmZmVyYC4gVGhlIG9yaWdpbmFsIGNvZGUgb25seSBjaGVja2VkIGFnYWluc3QgdGhlIGJ1ZmZlciBsZW5ndGggKGBidWZsZW5gKSBwYXNzZWQgaW4gZm9yIHRoZSAqZGVzdGluYXRpb24qIGJ1ZmZlciwgYnV0IG5vdCBhZ2FpbnN0IHRoZSAqc291cmNlKiBidWZmZXIgbGVuZ3RoLiBJZiB0aGUgdmFsdWUgaW4gYGJsb2NrWzBdYCBzcGVjaWZpZWQgYSBsZW5ndGggbGFyZ2VyIHRoYW4gdGhlIGF2YWlsYWJsZSBkYXRhIGluIHRoZSBpbnB1dCBidWZmZXIgKGBibG9ja2xlbmApLCBpdCB3b3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBmcm9tIHRoZSBkaXNrL3BhcnRpdGlvbiB0YWJsZSBidWZmZXIuIEEgY2xhc3NpYyBtaXN0YWtlIQoKVGhlIGZpeCBpcyBlbGVnYW50OiBpdCBpbnRyb2R1Y2VzIGEgbmV3IGBibG9ja2xlbmAgcGFyYW1ldGVyIHRvIGBsZG1fZ2V0X3ZzdHIoKWAsIHdoaWNoIHJlcHJlc2VudHMgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVGhlIGBsZW5ndGhgIGlzIHRoZW4gY2xhbXBlZCB0byBgYmxvY2tsZW4gLSAxYCwgZW5zdXJpbmcgdGhhdCB3ZSBuZXZlciBhdHRlbXB0IHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gSXQgYWxzbyBoYW5kbGVzIHRoZSBlZGdlIGNhc2Ugd2hlcmUgYGJsb2NrbGVuYCBpcyBsZXNzIHRoYW4gMS4KCk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHRvIGVuc3VyZSB0aGUgZml4IGRvZXNuJiMzOTt0IGludHJvZHVjZSAqbmV3KiB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIHNlZToKCjEuICAqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQvTGVhazoqKiBUaGUgbmV3IGNvZGUgY2FyZWZ1bGx5IGhhbmRsZXMgdGhpcy4gV2hlbiBgYmxvY2tsZW4gJmx0OyAxYCwgdGhlIGNvZGUgc2V0cyBgYnVmZmVyWzBdID0gJiMzOTtcMCYjMzk7YCBhbmQgcmV0dXJucyAwLCBudWxsLXRlcm1pbmF0aW5nIHRoZSBidWZmZXIuIElmIGBsZW5ndGhgIGlzIGdyZWF0ZXIgdGhhbiBgYmxvY2tsZW4gLSAxYCwgdGhlIGNvZGUgbm93IGNsYW1wcyB0aGUgbGVuZ3RoLiBUaGUgYG1lbWNweSgpYCBvcGVyYXRpb24gZW5zdXJlcyB0aGF0IHRoZSBjb3BpZWQgZGF0YSBpcyBjb3JyZWN0bHkgbnVsbC10ZXJtaW5hdGVkLiBDcml0aWNhbGx5LCB0aGUgaW5wdXQgYnVmZmVyIGl0c2VsZiBvcmlnaW5hdGVzIGZyb20gcGFydGl0aW9uIGRhdGEgcmVhZCBmcm9tIGEgZGlzayBvciBibG9jayBkZXZpY2UuIFRoaXMgbWVhbnMgdGhlIGJ1ZmZlciBjb250YWlucyBkYXRhLCBzbyB0aGUgaXNzdWUgd2FzIGFuIG91dC1vZi1ib3VuZHMgKnJlYWQqIChwb3RlbnRpYWxseSBleHBvc2luZyBnYXJiYWdlIG9yIGV2ZW4gdHJpZ2dlcmluZyBhIGtlcm5lbCBwYW5pYyB2aWEgS0FTQU4pLgoKMi4gICoqVW5pbnRlbmRlZCBEYXRhIEV4cG9zdXJlOioqIEkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIHdoZXRoZXIgYGJ1ZmZlcmAgaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLCBlc3BlY2lhbGx5IGlmIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGdldHMgdXNlZCBpbiBvdGhlciBsb2NhdGlvbnMsIG9yIGlmIGFueSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBkYXRhIGFyZSBiZWluZyBwYXNzZWQgdG8gdXNlcnNwYWNlLiBJIHNob3VsZCBhbHNvIGNoZWNrIHdoZXJlIHRoZSBgbGRtX3BhcnNlXypgIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdy4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgaW4gYSB0aG9yb3VnaCBhdWRpdC4KClNvIGZhciwgaXQgbG9va3Mgc29saWQuIEJ1dCBhcyBhbHdheXMsIEkgbXVzdCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGFueSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzLiBUaGlzIGZpeCBpcyBhIGdvb2Qgc3RlcCwgYW5kIG5vdyBpdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xkbV9wYXJzZV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2xkbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmM9NDE9dm9pZCBfbGRtX3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTYtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjU3OiAqIGxkbV9wYXJzZV9wcml2aGVhZCAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBQUklWSEVBRCBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTgtICogQGRhdGE6ICBSYXcgZGF0YWJhc2UgUFJJVkhFQUQgc3RydWN0dXJlIGxvYWRlZCBmcm9tIHRoZSBkZXZpY2Vcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY2LSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2NzpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfcHJpdmhlYWQoY29uc3QgdTggKmRhdGEsIHN0cnVjdCBwcml2aGVhZCAqcGgpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY4LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMi0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzOiAqIGxkbV9wYXJzZV90b2NibG9jayAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE0LSAqIEBkYXRhOiAgUmF3IGRhdGFiYXNlIFRPQ0JMT0NLIHN0cnVjdHVyZSBsb2FkZWQgZnJvbSB0aGUgZGV2aWNlXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMjUtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEyNjpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdG9jYmxvY2sgKGNvbnN0IHU4ICpkYXRhLCBzdHJ1Y3QgdG9jYmxvY2sgKnRvYylcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTI3LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE1Ny0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTU4OiAqIGxkbV9wYXJzZV92bWRiIC0gUmVhZCB0aGUgTERNIERhdGFiYXNlIFZNREIgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE1OS0gKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBWTURCIHN0cnVjdHVyZSBsb2FkZWQgZnJvbSB0aGUgZGV2aWNlXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNjktICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE3MDpzdGF0aWMgYm9vbCBsZG1fcGFyc2Vfdm1kYiAoY29uc3QgdTggKmRhdGEsIHN0cnVjdCB2bWRiICp2bSlcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTcxLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTI2Mz1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfcHJpdmhlYWRzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yOTMtXHRcdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mjk0Olx0XHRyZXN1bHQgPSBsZG1fcGFyc2VfcHJpdmhlYWQgKGRhdGEsIHBoW2ldKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjk1LVx0XHRwdXRfZGV2X3NlY3RvciAoc2VjdCk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0zNTE9c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3RvY2Jsb2NrcyhzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzgzLVx0XHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM4NDpcdFx0aWYgKGxkbV9wYXJzZV90b2NibG9jayhkYXRhLCB0Yltucl90YnNdKSlcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzg1LVx0XHRcdG5yX3RicyYjNDM7JiM0Mzs7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz00MjU9c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3ZtZGIoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSxcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0NC1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDQ1Olx0aWYgKCFsZG1fcGFyc2Vfdm1kYiAoZGF0YSwgdm0pKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NDYtXHRcdGdvdG8gb3V0O1x0XHRcdFx0LyogQWxyZWFkeSBsb2dnZWQgKi9cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTY5MT1zdGF0aWMgaW50IGxkbV9nZXRfdnN0cihjb25zdCB1OCAqYmxvY2ssIGludCBibG9ja2xlbiwgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbilcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcxNS0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzE2OiAqIGxkbV9wYXJzZV9jbXAzIC0gUmVhZCBhIHJhdyBWQkxLIENvbXBvbmVudCBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcxNy0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcyNS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzI2OnN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcyNy17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NjUtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc2NjogKiBsZG1fcGFyc2VfZGdyMyAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIEdyb3VwIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzY3LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzc1LSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3NzY6c3RhdGljIGludCBsZG1fcGFyc2VfZGdyMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03Nzcte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODA2LS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4MDc6ICogbGRtX3BhcnNlX2RncjQgLSBSZWFkIGEgcmF3IFZCTEsgRGlzayBHcm91cCBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgwOC0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgxNi0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODE3OnN0YXRpYyBib29sIGxkbV9wYXJzZV9kZ3I0IChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgxOC17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NDUtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg0NjogKiBsZG1fcGFyc2VfZHNrMyAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODQ3LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODU1LSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4NTY6c3RhdGljIGJvb2wgbGRtX3BhcnNlX2RzazMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODU3LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg4NC0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODg1OiAqIGxkbV9wYXJzZV9kc2s0IC0gUmVhZCBhIHJhdyBWQkxLIERpc2sgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04ODYtICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04OTQtICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg5NTpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZHNrNCAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04OTYte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTE3LS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MTg6ICogbGRtX3BhcnNlX3BydDMgLSBSZWFkIGEgcmF3IFZCTEsgUGFydGl0aW9uIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTE5LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTI3LSAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5Mjg6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3BydDMoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05Mjkte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTkxLS8qKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5OTI6ICogbGRtX3BhcnNlX3ZvbDUgLSBSZWFkIGEgcmF3IFZCTEsgVm9sdW1lIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTkzLSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAwMS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAwMjpzdGF0aWMgYm9vbCBsZG1fcGFyc2Vfdm9sNShjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMDMte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTA5OC0vKipcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTA5OTogKiBsZG1fcGFyc2VfdmJsayAtIFJlYWQgYSByYXcgVkJMSyBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMDAtICogQGJ1ZjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTA1LSAqIGluZm9ybWF0aW9uIGNvbW1vbiB0byBhbGwgVkJMSyB0eXBlcywgdGhlbiBkZWxlZ2F0ZXMgdGhlIHJlc3Qgb2YgdGhlIHdvcmsgdG9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEwNjogKiBoZWxwZXIgZnVuY3Rpb25zOiBsZG1fcGFyc2VfKi5cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTEwNy0gKlxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTExMC0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTExMTpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdmJsayAoY29uc3QgdTggKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHZibGsgKnZiKVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTEyLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMzAtXHRzd2l0Y2ggKHZiLVx1MDAzZXR5cGUpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzMTpcdFx0Y2FzZSBWQkxLX0NNUDM6ICByZXN1bHQgPSBsZG1fcGFyc2VfY21wMyAoYnVmLCBsZW4sIHZiKTsgYnJlYWs7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExMzI6XHRcdGNhc2UgVkJMS19EU0szOiAgcmVzdWx0ID0gbGRtX3BhcnNlX2RzazMgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTMzOlx0XHRjYXNlIFZCTEtfRFNLNDogIHJlc3VsdCA9IGxkbV9wYXJzZV9kc2s0IChidWYsIGxlbiwgdmIpOyBicmVhaztcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzNDpcdFx0Y2FzZSBWQkxLX0RHUjM6ICByZXN1bHQgPSBsZG1fcGFyc2VfZGdyMyAoYnVmLCBsZW4sIHZiKTsgYnJlYWs7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExMzU6XHRcdGNhc2UgVkJMS19ER1I0OiAgcmVzdWx0ID0gbGRtX3BhcnNlX2RncjQgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTM2Olx0XHRjYXNlIFZCTEtfUFJUMzogIHJlc3VsdCA9IGxkbV9wYXJzZV9wcnQzIChidWYsIGxlbiwgdmIpOyBicmVhaztcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzNzpcdFx0Y2FzZSBWQkxLX1ZPTDU6ICByZXN1bHQgPSBsZG1fcGFyc2Vfdm9sNSAoYnVmLCBsZW4sIHZiKTsgYnJlYWs7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMzgtXHR9XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0xMTY0PXN0YXRpYyBib29sIGxkbV9sZG1kYl9hZGQgKHU4ICpkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbGRtZGIgKmxkYilcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExNzYtXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExNzc6XHRpZiAoIWxkbV9wYXJzZV92YmxrIChkYXRhLCBsZW4sIHZiKSkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTc4LVx0XHRrZnJlZSh2Yik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBvZiB0aGUgTERNIERhdGFiYXNlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRhdGFiYXNlIGlzIGJlaW5nIGJ1aWx0LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3Vlcy4gSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIGBsZG0uY2AuIE15IGh1bmNoIGlzIHRoYXQgdGhlIHByb2JsZW0gd2lsbCBiZSBhcm91bmQgdGhlIGBsZG1fbGRtZGJfYWRkYCBmdW5jdGlvbiwgb3Igc29tZXdoZXJlIGluIHRoZSB2aWNpbml0eSBvZiB3aGVyZSB0aGUgYHZiYCAod2hhdGV2ZXIgdGhhdCB2YXJpYWJsZSByZXByZXNlbnRzKSBpcyBhbGxvY2F0ZWQuIFRoYXQgYXJlYSBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZSBmb3IgYSBtZW1vcnkgbGVhaywgY29ycnVwdGlvbiwgb3IgYW4gaXNzdWUgd2l0aCBob3cgdGhlIGRhdGFiYXNlIGdyb3dzLiBMZXQmIzM5O3Mgc2VlIGhvdyBgdmJgIGlzIGhhbmRsZWQgdGhlcmUuLi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgbGlmZWN5Y2xlIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBmcmVlZCwgb3IgaWYgaXQmIzM5O3MgYmVpbmcgZnJlZWQgYXQgYWxsLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdmFsdWFibGUgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9sZG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE2MDpcdCAqXG4xMTYxOlx0ICogUmV0dXJuOiAgJiMzOTt0cnVlJiMzOTsgICBUaGUgVkJMSyB3YXMgYWRkZWRcbjExNjI6XHQgKiAgICAgICAgICAmIzM5O2ZhbHNlJiMzOTsgIEFuIGVycm9yIG9jY3VycmVkXG4xMTYzOlx0ICovXG4xMTY0Olx0c3RhdGljIGJvb2wgbGRtX2xkbWRiX2FkZCAodTggKmRhdGEsIGludCBsZW4sIHN0cnVjdCBsZG1kYiAqbGRiKVxuMTE2NTpcdHtcbjExNjY6XHRcdHN0cnVjdCB2YmxrICp2YjtcbjExNjc6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZW07XG4xMTY4Olx0XG4xMTY5Olx0XHRCVUdfT04gKCFkYXRhIHx8ICFsZGIpO1xuMTE3MDpcdFxuMTE3MTpcdFx0dmIgPSBrbWFsbG9jX29iaigqdmIpO1xuMTE3MjpcdFx0aWYgKCF2Yikge1xuMTE3MzpcdFx0XHRsZG1fY3JpdCAoXCYjMzQ7T3V0IG9mIG1lbW9yeS5cJiMzNDspO1xuMTE3NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMTc1Olx0XHR9XG4xMTc2Olx0XG4xMTc3Olx0XHRpZiAoIWxkbV9wYXJzZV92YmxrIChkYXRhLCBsZW4sIHZiKSkge1xuMTE3ODpcdFx0XHRrZnJlZSh2Yik7XG4xMTc5Olx0XHRcdHJldHVybiBmYWxzZTtcdFx0XHQvKiBBbHJlYWR5IGxvZ2dlZCAqL1xuMTE4MDpcdFx0fVxuMTE4MTpcdFxuMTE4MjpcdFx0LyogUHV0IHZibGsgaW50byB0aGUgY29ycmVjdCBsaXN0LiAqL1xuMTE4MzpcdFx0c3dpdGNoICh2Yi1cdTAwM2V0eXBlKSB7XG4xMTg0Olx0XHRjYXNlIFZCTEtfREdSMzpcbjExODU6XHRcdGNhc2UgVkJMS19ER1I0OlxuMTE4NjpcdFx0XHRsaXN0X2FkZCAoXHUwMDI2dmItXHUwMDNlbGlzdCwgXHUwMDI2bGRiLVx1MDAzZXZfZGdycCk7XG4xMTg3Olx0XHRcdGJyZWFrO1xuMTE4ODpcdFx0Y2FzZSBWQkxLX0RTSzM6XG4xMTg5Olx0XHRjYXNlIFZCTEtfRFNLNDpcbjExOTA6XHRcdFx0bGlzdF9hZGQgKFx1MDAyNnZiLVx1MDAzZWxpc3QsIFx1MDAyNmxkYi1cdTAwM2V2X2Rpc2spO1xuMTE5MTpcdFx0XHRicmVhaztcbjExOTI6XHRcdGNhc2UgVkJMS19WT0w1OlxuMTE5MzpcdFx0XHRsaXN0X2FkZCAoXHUwMDI2dmItXHUwMDNlbGlzdCwgXHUwMDI2bGRiLVx1MDAzZXZfdm9sdSk7XG4xMTk0Olx0XHRcdGJyZWFrO1xuMTE5NTpcdFx0Y2FzZSBWQkxLX0NNUDM6XG4xMTk2Olx0XHRcdGxpc3RfYWRkIChcdTAwMjZ2Yi1cdTAwM2VsaXN0LCBcdTAwMjZsZGItXHUwMDNldl9jb21wKTtcbjExOTc6XHRcdFx0YnJlYWs7XG4xMTk4Olx0XHRjYXNlIFZCTEtfUFJUMzpcbjExOTk6XHRcdFx0LyogU29ydCBieSB0aGUgcGFydGl0aW9uJiMzOTtzIHN0YXJ0IHNlY3Rvci4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY5OAoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTWVtb3J5IFNhZmV0eSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIHRoZSBMRE0gcGFydGl0aW9uIHBhcnNlci4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBsZG1fZ2V0X3ZzdHJgIGlzIHVzZWQgd2l0aGluIHRoZSBwYXJzaW5nIGZ1bmN0aW9ucyBsaWtlIGBsZG1fcGFyc2VfZHNrM2AgYW5kIGBsZG1fcGFyc2VfY21wM2AuIEkgbmVlZCB0byBzZWUgdGhlIGNhbGwgc2l0ZXMsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgpMb29raW5nIGF0IGBsZG1fZ2V0X3ZzdHJgIGl0c2VsZiwgdGhlIGNvcmUgaXNzdWUgaXMgY2xlYXIuIEl0IHdhcyB2dWxuZXJhYmxlIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIGZ1bmN0aW9uIG5haXZlbHkgY29waWVkIGEgc3RyaW5nIG9mIGBsZW5ndGhgIGJ5dGVzIGZyb20gYW4gaW5wdXQgYGJsb2NrYCwgc3RhcnRpbmcgYXQgYGJsb2NrICYjNDM7IDFgLCBpbnRvIGEgcHJvdmlkZWQgYGJ1ZmZlcmAgd2l0aG91dCBjaGVja2luZyBpZiB0aGF0IGBsZW5ndGhgIHdvdWxkIGV4Y2VlZCB0aGUgYm91bmRzIG9mIHRoZSBpbnB1dCBgYmxvY2tgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcmZsb3csIGFuZCBxdWl0ZSBmcmFua2x5LCBhIHByZXR0eSBiYXNpYyBvdmVyc2lnaHQuIFRoZSBwYXRjaCBjbGV2ZXJseSBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIGFnYWluc3QgYGJsb2NrbGVuYCwgdGhlIGFjdHVhbCBhdmFpbGFibGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIuICBJdCBsb29rcyBzb2xpZCBvbiBmaXJzdCBnbGFuY2UuIFRoZSBvdGhlciBuaWNlIHBvaW50IGlzIHRoYXQgZXZlbiBpZiBgYmxvY2tsZW4gJmx0OyAxYCB0aGVuIGBidWZmZXJbMF0gPSAmIzM5O1wwJiMzOTs7YCwgc28gdGhlIGJ1ZmZlciBpcyBhbHdheXMgbnVsbC10ZXJtaW5hdGVkLiBTbyBubyBpbml0aWFsaXphdGlvbiByaXNrcyBoZXJlLgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBcmUgd2UgcGFzc2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhbHVlcywgb3IgdXNpbmcgdGhlbSBpbiBjb25kaXRpb25hbHM/ICBOby4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSAqcHJldmVudHMqIG91dC1vZi1ib3VuZHMgcmVhZHMuICBJbXBvcnRhbnRseSwgdGhlIGJ1ZyAqZml4ZWQqIGhlcmUgaXMgZnVuZGFtZW50YWxseSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gYW4gZXhpc3RpbmcgYnVmZmVyLiBUaGlzIHR5cGUgb2YgdnVsbmVyYWJpbGl0eSBpcyAqZXhhY3RseSogd2hhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGZpeCBpcyBhIGJvdW5kcyBjaGVjaywgdGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgS01TQU4sIGFzIEtBU0FOIGhhbmRsZXMgdGhlIHJpc2suIEkgYW0gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOID0gZmFsc2VgLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgbXlzZWxmLiBUaGUgcnVsZSBpcywgYW5kIHRoaXMgbWFrZXMgc2Vuc2UsIHdoeSB1c2UgS01TQU4gaWYgS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgdG9vbHMgYWxyZWFkeSBjb3ZlciB0aGUgYnVnPyBNeSBhbmFseXNpcyBjb25maXJtcyB0aGlzOiB0aGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgaW4gTERNIHBhcnRpdGlvbiBwYXJzaW5nIGJ5IGNsYW1waW5nIHRoZSBzdHJpbmcgbGVuZ3RoIHRvIHRoZSBpbnB1dCBidWZmZXIgbGVuZ3RoLiBLQVNBTiBpcyB0aGUgYXBwcm9wcmlhdGUgdG9vbCBoZXJlLiBUaGlzIGlzIG5vdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrczsgdGhvc2UgYXJlIHRoZSBkb21haW5zIG9mIEtNU0FOLCBhbmQgdGhhdCYjMzk7cyBub3Qgd2hhdCB3ZSYjMzk7cmUgYWRkcmVzc2luZyBoZXJlLgoKT2theSwgSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIGJ5IGFkZGluZyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IGJ1ZmZlciBsZW5ndGggKGBibG9ja2xlbmApIHdpdGhpbiBgbGRtX2dldF92c3RyKClgLiBQcmV2aW91c2x5LCBgbGRtX2dldF92c3RyKClgIG9ubHkgY2hlY2tlZCBvdXRwdXQgYnVmZmVyIGJvdW5kcyAoYGJ1ZmxlbmApLCBhbGxvd2luZyBhIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgbGVuZ3RoIGJ5dGUgaW4gYSBwYXJ0aXRpb24gc3RydWN0dXJlIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gXG5cbk91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIGFyZSBmdWxseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIChLTVNBTiBkb21haW4pLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgaW4gYmxvY2svcGFydGl0aW9ucy9sZG0uYyBieSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIG9uIHRoZSBpbnB1dCBidWZmZXIgbGVuZ3RoIChgYmxvY2tsZW5gKSB3aXRoaW4gYGxkbV9nZXRfdnN0cigpYC4gUHJldmlvdXNseSwgYGxkbV9nZXRfdnN0cigpYCBvbmx5IGNoZWNrZWQgb3V0cHV0IGJ1ZmZlciBib3VuZHMgKGBidWZsZW5gKSwgYWxsb3dpbmcgYSBjb3JydXB0ZWQgb3IgbWFsaWNpb3VzIGxlbmd0aCBieXRlIGluIGEgcGFydGl0aW9uIHN0cnVjdHVyZSB0byByZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIuIFxuXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgZnVsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyAoS01TQU4gZG9tYWluKS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MTU6MDguNDA3OTM2MzQxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NDUzMDQ3NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFSVElUSU9OX0FEVkFOQ0VEXCIsXG4gICAgXCJMRE1fUEFSVElUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGRtX2dldF92c3RyXCIsXG4gICAgXCJsZG1fcGFyc2VfdmJsa1wiLFxuICAgIFwibGRtX3BhcnNlX2NtcDNcIixcbiAgICBcImxkbV9wYXJzZV9kZ3IzXCIsXG4gICAgXCJsZG1fcGFyc2VfZGdyNFwiLFxuICAgIFwibGRtX3BhcnNlX2RzazNcIixcbiAgICBcImxkbV9wYXJzZV92b2w1XCIsXG4gICAgXCJsZG1fcGFydGl0aW9uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIGJ5IGFkZGluZyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IGJ1ZmZlciBsZW5ndGggKGBibG9ja2xlbmApIHdpdGhpbiBgbGRtX2dldF92c3RyKClgLiBQcmV2aW91c2x5LCBgbGRtX2dldF92c3RyKClgIG9ubHkgY2hlY2tlZCBvdXRwdXQgYnVmZmVyIGJvdW5kcyAoYGJ1ZmxlbmApLCBhbGxvd2luZyBhIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgbGVuZ3RoIGJ5dGUgaW4gYSBwYXJ0aXRpb24gc3RydWN0dXJlIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gXFxuXFxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIGZ1bGx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgKEtNU0FOIGRvbWFpbikuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpbmRvd3MgTG9naWNhbCBEaXNrIE1hbmFnZXIgKExETSkgcGFydGl0aW9uIHBhcnNlciBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgd2hlbiByZWFkaW5nIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmdzLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGJsb2NrIGRldmljZSBwYXJ0aXRpb24gc2Nhbm5pbmcgKGUuZy4sIGxvb3AgZGV2aWNlcykgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB0cnVuY2F0aW9ucywgb3IgdW5leHBlY3RlZCBwYXJzZXIgYmVoYXZpb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNTowOC40MDc5NDA4ODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTE0NDczMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZjBkZDQzZmQ3MjNkOWYyNDliZGY3YTkwMzAzMDQxMmYwYWQ2NWJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMjE6MTU6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9sZG0uYyBiL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcXG5pbmRleCBjMGJkY2FlNThhM2VlLi41NDY4ZTAzOGEwOWY0IDEwMDY0NFxcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL2xkbS5jXFxuQEAgLTY3Myw2ICs2NzMsNyBAQCBzdGF0aWMgdTY0IGxkbV9nZXRfdm51bSAoY29uc3QgdTggKmJsb2NrKVxcbiAvKipcXG4gICogbGRtX2dldF92c3RyIC0gUmVhZCBhIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmcgaW50byBhIGJ1ZmZlclxcbiAgKiBAYmxvY2s6ICAgUG9pbnRlciB0byB0aGUgbGVuZ3RoIG1hcmtlclxcbisgKiBAYmxvY2tsZW46IE51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgQGJsb2NrXFxuICAqIEBidWZmZXI6ICBMb2NhdGlvbiB0byBjb3B5IHN0cmluZyB0b1xcbiAgKiBAYnVmbGVuOiAgU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlclxcbiAgKlxcbkBAIC02ODAsMjAgKzY4MSwyNyBAQCBzdGF0aWMgdTY0IGxkbV9nZXRfdm51bSAoY29uc3QgdTggKmJsb2NrKVxcbiAgKiB0aGV5IGFyZSBwcmVmaXhlZCBieSBhIG9uZSBieXRlIGxlbmd0aCBtYXJrZXIuICBUaGlzIGZ1bmN0aW9uIGNvcGllcyBvbmUgb2ZcXG4gICogdGhlc2Ugc3RyaW5ncyBpbnRvIGEgYnVmZmVyLlxcbiAgKlxcbi0gKiBOLkIuICBUaGlzIGZ1bmN0aW9uIERPRVMgTk9UIHBlcmZvcm0gYW55IHJhbmdlIGNoZWNraW5nIG9uIHRoZSBpbnB1dC5cXG4tICogICAgICAgSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwsIHRoZSBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQuXFxuKyAqIE4uQi4gIFRoZSBzdHJpbmcgaXMgY2xhbXBlZCB0byBib3RoIEBibG9ja2xlbiBhbmQgQGJ1ZmxlbjsgaWYgZWl0aGVyXFxuKyAqICAgICAgIGlzIHRvbyBzbWFsbCB0aGUgb3V0cHV0IHdpbGwgYmUgdHJ1bmNhdGVkLlxcbiAgKlxcbiAgKiBSZXR1cm46ICAwLCBFcnJvciBhbmQgQGJ1ZmZlciBjb250ZW50cyBhcmUgdW5kZWZpbmVkXFxuICAqICAgICAgICAgIG4sIFN0cmluZyBsZW5ndGggaW4gY2hhcmFjdGVycyAoZXhjbHVkaW5nIE5VTEwpXFxuICAqICAgICAgICAgIGJ1Zmxlbi0xLCBTdHJpbmcgd2FzIHRydW5jYXRlZC5cXG4gICovXFxuLXN0YXRpYyBpbnQgbGRtX2dldF92c3RyIChjb25zdCB1OCAqYmxvY2ssIHU4ICpidWZmZXIsIGludCBidWZsZW4pXFxuK3N0YXRpYyBpbnQgbGRtX2dldF92c3RyKGNvbnN0IHU4ICpibG9jaywgaW50IGJsb2NrbGVuLCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuKVxcbiB7XFxuIFxcdGludCBsZW5ndGg7XFxuIFxcbiBcXHRCVUdfT04gKCFibG9jayB8fCAhYnVmZmVyKTtcXG4gXFxuK1xcdGlmIChibG9ja2xlbiBcXHUwMDNjIDEpIHtcXG4rXFx0XFx0YnVmZmVyWzBdID0gJ1xcXFwwJztcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdGxlbmd0aCA9IGJsb2NrWzBdO1xcbitcXHRpZiAobGVuZ3RoIFxcdTAwM2UgYmxvY2tsZW4gLSAxKVxcbitcXHRcXHRsZW5ndGggPSBibG9ja2xlbiAtIDE7XFxuIFxcdGlmIChsZW5ndGggXFx1MDAzZT0gYnVmbGVuKSB7XFxuIFxcdFxcdGxkbV9lcnJvciAoXFxcIlRydW5jYXRpbmcgc3RyaW5nICVkIC1cXHUwMDNlICVkLlxcXCIsIGxlbmd0aCwgYnVmbGVuKTtcXG4gXFx0XFx0bGVuZ3RoID0gYnVmbGVuIC0gMTtcXG5AQCAtNzQ0LDggKzc1Miw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGNvbXAgPSBcXHUwMDI2dmItXFx1MDAzZXZibGsuY29tcDtcXG4tXFx0bGRtX2dldF92c3RyIChidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBjb21wLVxcdTAwM2VzdGF0ZSxcXG4tXFx0XFx0c2l6ZW9mIChjb21wLVxcdTAwM2VzdGF0ZSkpO1xcbitcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxcbitcXHRcXHRjb21wLVxcdTAwM2VzdGF0ZSwgc2l6ZW9mKGNvbXAtXFx1MDAzZXN0YXRlKSk7XFxuIFxcdGNvbXAtXFx1MDAzZXR5cGUgICAgICA9IGJ1ZmZlclsweDE4ICsgcl92c3RhdGVdO1xcbiBcXHRjb21wLVxcdTAwM2VjaGlsZHJlbiAgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciArIDB4MUQgKyByX3ZzdGF0ZSk7XFxuIFxcdGNvbXAtXFx1MDAzZXBhcmVudF9pZCA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICsgMHgyRCArIHJfY2hpbGQpO1xcbkBAIC03OTAsOCArNzk4LDggQEAgc3RhdGljIGludCBsZG1fcGFyc2VfZGdyMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRkZ3JwID0gXFx1MDAyNnZiLVxcdTAwM2V2YmxrLmRncnA7XFxuLVxcdGxkbV9nZXRfdnN0ciAoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgZGdycC1cXHUwMDNlZGlza19pZCxcXG4tXFx0XFx0c2l6ZW9mIChkZ3JwLVxcdTAwM2VkaXNrX2lkKSk7XFxuK1xcdGxkbV9nZXRfdnN0cihidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBidWZsZW4gLSAoMHgxOCArIHJfbmFtZSksXFxuK1xcdFxcdGRncnAtXFx1MDAzZWRpc2tfaWQsIHNpemVvZihkZ3JwLVxcdTAwM2VkaXNrX2lkKSk7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbkBAIC04MjksNyArODM3LDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX2RncjQgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG4gXFx0aWYgKGxlbiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICsgMHgxNCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGxkbV9nZXRfdnN0ciAoYnVmZmVyICsgMHgxOCArIHJfb2JqaWQsIGJ1Ziwgc2l6ZW9mIChidWYpKTtcXG4rXFx0bGRtX2dldF92c3RyKGJ1ZmZlciArIDB4MTggKyByX29iamlkLCBidWZsZW4gLSAoMHgxOCArIHJfb2JqaWQpLFxcbitcXHRcXHRidWYsIHNpemVvZihidWYpKTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTg2NCw4ICs4NzMsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZHNrMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRkaXNrID0gXFx1MDAyNnZiLVxcdTAwM2V2YmxrLmRpc2s7XFxuLVxcdGxkbV9nZXRfdnN0ciAoYnVmZmVyICsgMHgxOCArIHJfZGlza2lkLCBkaXNrLVxcdTAwM2VhbHRfbmFtZSxcXG4tXFx0XFx0c2l6ZW9mIChkaXNrLVxcdTAwM2VhbHRfbmFtZSkpO1xcbitcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfZGlza2lkLCBidWZsZW4gLSAoMHgxOCArIHJfZGlza2lkKSxcXG4rXFx0XFx0ZGlzay1cXHUwMDNlYWx0X25hbWUsIHNpemVvZihkaXNrLVxcdTAwM2VhbHRfbmFtZSkpO1xcbiBcXHRpZiAodXVpZF9wYXJzZShidWZmZXIgKyAweDE5ICsgcl9uYW1lLCBcXHUwMDI2ZGlzay1cXHUwMDNlZGlza19pZCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuQEAgLTEwNzIsMTYgKzEwODEsMTYgQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZvbDUoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFx0dm9sdSA9IFxcdTAwMjZ2Yi1cXHUwMDNldmJsay52b2x1O1xcbi1cXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgdm9sdS1cXHUwMDNldm9sdW1lX3R5cGUsXFxuLVxcdFxcdFxcdHNpemVvZih2b2x1LVxcdTAwM2V2b2x1bWVfdHlwZSkpO1xcbitcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxcbitcXHRcXHRcXHR2b2x1LVxcdTAwM2V2b2x1bWVfdHlwZSwgc2l6ZW9mKHZvbHUtXFx1MDAzZXZvbHVtZV90eXBlKSk7XFxuIFxcdG1lbWNweSh2b2x1LVxcdTAwM2V2b2x1bWVfc3RhdGUsIGJ1ZmZlciArIDB4MTggKyByX2Rpc2FibGVfZHJpdmVfbGV0dGVyLFxcbiBcXHRcXHRcXHRzaXplb2Yodm9sdS1cXHUwMDNldm9sdW1lX3N0YXRlKSk7XFxuIFxcdHZvbHUtXFx1MDAzZXNpemUgPSBsZG1fZ2V0X3ZudW0oYnVmZmVyICsgMHgzRCArIHJfY2hpbGQpO1xcbiBcXHR2b2x1LVxcdTAwM2VwYXJ0aXRpb25fdHlwZSA9IGJ1ZmZlclsweDQxICsgcl9zaXplXTtcXG4gXFx0bWVtY3B5KHZvbHUtXFx1MDAzZWd1aWQsIGJ1ZmZlciArIDB4NDIgKyByX3NpemUsIHNpemVvZih2b2x1LVxcdTAwM2VndWlkKSk7XFxuIFxcdGlmIChidWZmZXJbMHgxMl0gXFx1MDAyNiBWQkxLX0ZMQUdfVk9MVV9EUklWRSkge1xcbi1cXHRcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHg1MiArIHJfc2l6ZSwgdm9sdS1cXHUwMDNlZHJpdmVfaGludCxcXG4tXFx0XFx0XFx0XFx0c2l6ZW9mKHZvbHUtXFx1MDAzZWRyaXZlX2hpbnQpKTtcXG4rXFx0XFx0bGRtX2dldF92c3RyKGJ1ZmZlciArIDB4NTIgKyByX3NpemUsIGJ1ZmxlbiAtICgweDUyICsgcl9zaXplKSxcXG4rXFx0XFx0XFx0XFx0dm9sdS1cXHUwMDNlZHJpdmVfaGludCwgc2l6ZW9mKHZvbHUtXFx1MDAzZWRyaXZlX2hpbnQpKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbkBAIC0xMTE1LDcgKzExMjQsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdmJsayAoY29uc3QgdTggKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHZibGsgKnZiKVxcbiBcXHR2Yi1cXHUwMDNlZmxhZ3MgID0gYnVmWzB4MTJdO1xcbiBcXHR2Yi1cXHUwMDNldHlwZSAgID0gYnVmWzB4MTNdO1xcbiBcXHR2Yi1cXHUwMDNlb2JqX2lkID0gbGRtX2dldF92bnVtIChidWYgKyAweDE4KTtcXG4tXFx0bGRtX2dldF92c3RyIChidWYrMHgxOCtyX29iamlkLCB2Yi1cXHUwMDNlbmFtZSwgc2l6ZW9mICh2Yi1cXHUwMDNlbmFtZSkpO1xcbitcXHRsZG1fZ2V0X3ZzdHIoYnVmICsgMHgxOCArIHJfb2JqaWQsIGxlbiAtICgweDE4ICsgcl9vYmppZCksXFxuK1xcdFxcdHZiLVxcdTAwM2VuYW1lLCBzaXplb2YodmItXFx1MDAzZW5hbWUpKTtcXG4gXFxuIFxcdHN3aXRjaCAodmItXFx1MDAzZXR5cGUpIHtcXG4gXFx0XFx0Y2FzZSBWQkxLX0NNUDM6ICByZXN1bHQgPSBsZG1fcGFyc2VfY21wMyAoYnVmLCBsZW4sIHZiKTsgYnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjA5Ljg1OTk3MTE1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjcxNjAxMzA5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFSVElUSU9OX0FEVkFOQ0VEXCIsXG4gICAgXCJMRE1fUEFSVElUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGRtX2dldF92c3RyXCIsXG4gICAgXCJsZG1fcGFyc2VfdmJsa1wiLFxuICAgIFwibGRtX3BhcnNlX2NtcDNcIixcbiAgICBcImxkbV9wYXJzZV9kZ3IzXCIsXG4gICAgXCJsZG1fcGFyc2VfZGdyNFwiLFxuICAgIFwibGRtX3BhcnNlX2RzazNcIixcbiAgICBcImxkbV9wYXJzZV92b2w1XCIsXG4gICAgXCJsZG1fcGFydGl0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpbmRvd3MgTG9naWNhbCBEaXNrIE1hbmFnZXIgKExETSkgcGFydGl0aW9uIHBhcnNlciBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgd2hlbiByZWFkaW5nIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmdzLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGJsb2NrIGRldmljZSBwYXJ0aXRpb24gc2Nhbm5pbmcgKGUuZy4sIGxvb3AgZGV2aWNlcykgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB0cnVuY2F0aW9ucywgb3IgdW5leHBlY3RlZCBwYXJzZXIgYmVoYXZpb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNmMGRkNDNmZDcyM2Q5ZjI0OWJkZjdhOTAzMDMwNDEyZjBhZDY1YmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDIxOjE1OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9sZG0uYyBiL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcbmluZGV4IGMwYmRjYWU1OGEzZWUuLjU0NjhlMDM4YTA5ZjQgMTAwNjQ0XG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2xkbS5jXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL2xkbS5jXG5AQCAtNjczLDYgKzY3Myw3IEBAIHN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spXG4gLyoqXG4gICogbGRtX2dldF92c3RyIC0gUmVhZCBhIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmcgaW50byBhIGJ1ZmZlclxuICAqIEBibG9jazogICBQb2ludGVyIHRvIHRoZSBsZW5ndGggbWFya2VyXG4rICogQGJsb2NrbGVuOiBOdW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IEBibG9ja1xuICAqIEBidWZmZXI6ICBMb2NhdGlvbiB0byBjb3B5IHN0cmluZyB0b1xuICAqIEBidWZsZW46ICBTaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyXG4gICpcbkBAIC02ODAsMjAgKzY4MSwyNyBAQCBzdGF0aWMgdTY0IGxkbV9nZXRfdm51bSAoY29uc3QgdTggKmJsb2NrKVxuICAqIHRoZXkgYXJlIHByZWZpeGVkIGJ5IGEgb25lIGJ5dGUgbGVuZ3RoIG1hcmtlci4gIFRoaXMgZnVuY3Rpb24gY29waWVzIG9uZSBvZlxuICAqIHRoZXNlIHN0cmluZ3MgaW50byBhIGJ1ZmZlci5cbiAgKlxuLSAqIE4uQi4gIFRoaXMgZnVuY3Rpb24gRE9FUyBOT1QgcGVyZm9ybSBhbnkgcmFuZ2UgY2hlY2tpbmcgb24gdGhlIGlucHV0LlxuLSAqICAgICAgIElmIHRoZSBidWZmZXIgaXMgdG9vIHNtYWxsLCB0aGUgb3V0cHV0IHdpbGwgYmUgdHJ1bmNhdGVkLlxuKyAqIE4uQi4gIFRoZSBzdHJpbmcgaXMgY2xhbXBlZCB0byBib3RoIEBibG9ja2xlbiBhbmQgQGJ1ZmxlbjsgaWYgZWl0aGVyXG4rICogICAgICAgaXMgdG9vIHNtYWxsIHRoZSBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQuXG4gICpcbiAgKiBSZXR1cm46ICAwLCBFcnJvciBhbmQgQGJ1ZmZlciBjb250ZW50cyBhcmUgdW5kZWZpbmVkXG4gICogICAgICAgICAgbiwgU3RyaW5nIGxlbmd0aCBpbiBjaGFyYWN0ZXJzIChleGNsdWRpbmcgTlVMTClcbiAgKiAgICAgICAgICBidWZsZW4tMSwgU3RyaW5nIHdhcyB0cnVuY2F0ZWQuXG4gICovXG4tc3RhdGljIGludCBsZG1fZ2V0X3ZzdHIgKGNvbnN0IHU4ICpibG9jaywgdTggKmJ1ZmZlciwgaW50IGJ1ZmxlbilcbitzdGF0aWMgaW50IGxkbV9nZXRfdnN0cihjb25zdCB1OCAqYmxvY2ssIGludCBibG9ja2xlbiwgdTggKmJ1ZmZlciwgaW50IGJ1ZmxlbilcbiB7XG4gXHRpbnQgbGVuZ3RoO1xuIFxuIFx0QlVHX09OICghYmxvY2sgfHwgIWJ1ZmZlcik7XG4gXG4rXHRpZiAoYmxvY2tsZW4gXHUwMDNjIDEpIHtcbitcdFx0YnVmZmVyWzBdID0gJ1xcMCc7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuIFx0bGVuZ3RoID0gYmxvY2tbMF07XG4rXHRpZiAobGVuZ3RoIFx1MDAzZSBibG9ja2xlbiAtIDEpXG4rXHRcdGxlbmd0aCA9IGJsb2NrbGVuIC0gMTtcbiBcdGlmIChsZW5ndGggXHUwMDNlPSBidWZsZW4pIHtcbiBcdFx0bGRtX2Vycm9yIChcIlRydW5jYXRpbmcgc3RyaW5nICVkIC1cdTAwM2UgJWQuXCIsIGxlbmd0aCwgYnVmbGVuKTtcbiBcdFx0bGVuZ3RoID0gYnVmbGVuIC0gMTtcbkBAIC03NDQsOCArNzUyLDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX2NtcDMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Y29tcCA9IFx1MDAyNnZiLVx1MDAzZXZibGsuY29tcDtcbi1cdGxkbV9nZXRfdnN0ciAoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgY29tcC1cdTAwM2VzdGF0ZSxcbi1cdFx0c2l6ZW9mIChjb21wLVx1MDAzZXN0YXRlKSk7XG4rXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxuK1x0XHRjb21wLVx1MDAzZXN0YXRlLCBzaXplb2YoY29tcC1cdTAwM2VzdGF0ZSkpO1xuIFx0Y29tcC1cdTAwM2V0eXBlICAgICAgPSBidWZmZXJbMHgxOCArIHJfdnN0YXRlXTtcbiBcdGNvbXAtXHUwMDNlY2hpbGRyZW4gID0gbGRtX2dldF92bnVtIChidWZmZXIgKyAweDFEICsgcl92c3RhdGUpO1xuIFx0Y29tcC1cdTAwM2VwYXJlbnRfaWQgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciArIDB4MkQgKyByX2NoaWxkKTtcbkBAIC03OTAsOCArNzk4LDggQEAgc3RhdGljIGludCBsZG1fcGFyc2VfZGdyMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRkZ3JwID0gXHUwMDI2dmItXHUwMDNldmJsay5kZ3JwO1xuLVx0bGRtX2dldF92c3RyIChidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBkZ3JwLVx1MDAzZWRpc2tfaWQsXG4tXHRcdHNpemVvZiAoZGdycC1cdTAwM2VkaXNrX2lkKSk7XG4rXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxuK1x0XHRkZ3JwLVx1MDAzZWRpc2tfaWQsIHNpemVvZihkZ3JwLVx1MDAzZWRpc2tfaWQpKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC04MjksNyArODM3LDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX2RncjQgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcbiBcdGlmIChsZW4gIT0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1ZmZlciArIDB4MTQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciArIDB4MTggKyByX29iamlkLCBidWYsIHNpemVvZiAoYnVmKSk7XG4rXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfb2JqaWQsIGJ1ZmxlbiAtICgweDE4ICsgcl9vYmppZCksXG4rXHRcdGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTg2NCw4ICs4NzMsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZHNrMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRkaXNrID0gXHUwMDI2dmItXHUwMDNldmJsay5kaXNrO1xuLVx0bGRtX2dldF92c3RyIChidWZmZXIgKyAweDE4ICsgcl9kaXNraWQsIGRpc2stXHUwMDNlYWx0X25hbWUsXG4tXHRcdHNpemVvZiAoZGlzay1cdTAwM2VhbHRfbmFtZSkpO1xuK1x0bGRtX2dldF92c3RyKGJ1ZmZlciArIDB4MTggKyByX2Rpc2tpZCwgYnVmbGVuIC0gKDB4MTggKyByX2Rpc2tpZCksXG4rXHRcdGRpc2stXHUwMDNlYWx0X25hbWUsIHNpemVvZihkaXNrLVx1MDAzZWFsdF9uYW1lKSk7XG4gXHRpZiAodXVpZF9wYXJzZShidWZmZXIgKyAweDE5ICsgcl9uYW1lLCBcdTAwMjZkaXNrLVx1MDAzZWRpc2tfaWQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtMTA3MiwxNiArMTA4MSwxNiBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2Vfdm9sNShjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcdHZvbHUgPSBcdTAwMjZ2Yi1cdTAwM2V2YmxrLnZvbHU7XG4tXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgdm9sdS1cdTAwM2V2b2x1bWVfdHlwZSxcbi1cdFx0XHRzaXplb2Yodm9sdS1cdTAwM2V2b2x1bWVfdHlwZSkpO1xuK1x0bGRtX2dldF92c3RyKGJ1ZmZlciArIDB4MTggKyByX25hbWUsIGJ1ZmxlbiAtICgweDE4ICsgcl9uYW1lKSxcbitcdFx0XHR2b2x1LVx1MDAzZXZvbHVtZV90eXBlLCBzaXplb2Yodm9sdS1cdTAwM2V2b2x1bWVfdHlwZSkpO1xuIFx0bWVtY3B5KHZvbHUtXHUwMDNldm9sdW1lX3N0YXRlLCBidWZmZXIgKyAweDE4ICsgcl9kaXNhYmxlX2RyaXZlX2xldHRlcixcbiBcdFx0XHRzaXplb2Yodm9sdS1cdTAwM2V2b2x1bWVfc3RhdGUpKTtcbiBcdHZvbHUtXHUwMDNlc2l6ZSA9IGxkbV9nZXRfdm51bShidWZmZXIgKyAweDNEICsgcl9jaGlsZCk7XG4gXHR2b2x1LVx1MDAzZXBhcnRpdGlvbl90eXBlID0gYnVmZmVyWzB4NDEgKyByX3NpemVdO1xuIFx0bWVtY3B5KHZvbHUtXHUwMDNlZ3VpZCwgYnVmZmVyICsgMHg0MiArIHJfc2l6ZSwgc2l6ZW9mKHZvbHUtXHUwMDNlZ3VpZCkpO1xuIFx0aWYgKGJ1ZmZlclsweDEyXSBcdTAwMjYgVkJMS19GTEFHX1ZPTFVfRFJJVkUpIHtcbi1cdFx0bGRtX2dldF92c3RyKGJ1ZmZlciArIDB4NTIgKyByX3NpemUsIHZvbHUtXHUwMDNlZHJpdmVfaGludCxcbi1cdFx0XHRcdHNpemVvZih2b2x1LVx1MDAzZWRyaXZlX2hpbnQpKTtcbitcdFx0bGRtX2dldF92c3RyKGJ1ZmZlciArIDB4NTIgKyByX3NpemUsIGJ1ZmxlbiAtICgweDUyICsgcl9zaXplKSxcbitcdFx0XHRcdHZvbHUtXHUwMDNlZHJpdmVfaGludCwgc2l6ZW9mKHZvbHUtXHUwMDNlZHJpdmVfaGludCkpO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTExMTUsNyArMTEyNCw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV92YmxrIChjb25zdCB1OCAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gXHR2Yi1cdTAwM2VmbGFncyAgPSBidWZbMHgxMl07XG4gXHR2Yi1cdTAwM2V0eXBlICAgPSBidWZbMHgxM107XG4gXHR2Yi1cdTAwM2VvYmpfaWQgPSBsZG1fZ2V0X3ZudW0gKGJ1ZiArIDB4MTgpO1xuLVx0bGRtX2dldF92c3RyIChidWYrMHgxOCtyX29iamlkLCB2Yi1cdTAwM2VuYW1lLCBzaXplb2YgKHZiLVx1MDAzZW5hbWUpKTtcbitcdGxkbV9nZXRfdnN0cihidWYgKyAweDE4ICsgcl9vYmppZCwgbGVuIC0gKDB4MTggKyByX29iamlkKSxcbitcdFx0dmItXHUwMDNlbmFtZSwgc2l6ZW9mKHZiLVx1MDAzZW5hbWUpKTtcbiBcbiBcdHN3aXRjaCAodmItXHUwMDNldHlwZSkge1xuIFx0XHRjYXNlIFZCTEtfQ01QMzogIHJlc3VsdCA9IGxkbV9wYXJzZV9jbXAzIChidWYsIGxlbiwgdmIpOyBicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjA5Ljg1OTk3MjQ0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwODgzNjAyMDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBMRE0gVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgZnV6emluZyBtYWtlcyBzZW5zZSBoZXJlLCBhbmQgaG93IHdlJ2QgZ28gYWJvdXQgaXQuIFRoZSBjaGFuZ2UgaXMgaW4gYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyBwYXJ0aXRpb24gdGFibGUgcGFyc2luZywgc28gd2UncmUgcHJvYmFibHkgbG9va2luZyBhdCBhIGZpbGUgc3lzdGVtIGRyaXZlciBvciBkaXNrIHV0aWxpdHkuIFRoYXQncyBhbHdheXMgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuXG5cblRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiB0aGUgYGxkbV9nZXRfdnN0cmAgZnVuY3Rpb24sIGFkZGluZyBhIGBibG9ja2xlbmAgYXJndW1lbnQgYW5kIGJvdW5kIGNoZWNrcy4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIGl0IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaGFuZGxpbmcgTERNIChMb2dpY2FsIERpc2sgTWFuYWdlciwgV2luZG93cyBEeW5hbWljIERpc2tzKSBwYXJ0aXRpb24gdGFibGVzIGFuZCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBvbiBlbmhhbmNpbmcgbWVtb3J5IHNhZmV0eSBkdXJpbmcgcGFydGl0aW9uIHRhYmxlIHBhcnNpbmcuIEFsbCB0aGUgb3RoZXIgZnVuY3Rpb25zLCBgbGRtX3BhcnNlX2NtcDNgLCBgbGRtX3BhcnNlX2RncjNgLCBgbGRtX3BhcnNlX2RncjRgLCBgbGRtX3BhcnNlX2RzazNgLCBgbGRtX3BhcnNlX3ZvbDVgLCBhbmQgYGxkbV9wYXJzZV92YmxrYCwgYXJlIHVwZGF0ZWQgdG8gY2FsbCB0aGlzIG1vZGlmaWVkIGBsZG1fZ2V0X3ZzdHJgLiBJdCdzIHByZXR0eSBjbGVhciB0aGF0IGBsZG1fZ2V0X3ZzdHJgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSwgYW5kIGlmIHdlJ3JlIHN1Y2Nlc3NmdWwsIGl0IHdpbGwgYmUuXG5cbk5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgYmxvY2svcGFydGl0aW9ucy9sZG0uY2AgdG8gc2VlIGhvdyB0byBlbmFibGUgdGhpcyBmZWF0dXJlLiBJJ2xsIGVpdGhlciB1c2UgYGdyZXBwZXJgIG9yIGp1c3QgcmVhZCB0aGUgZmlsZSBkaXJlY3RseSwgYW5kIGZpbmQgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBwYXJ0aXRpb24gcGFyc2luZyBpcyBpbnZva2VkIHRvIHByb3Blcmx5IHNjb3BlIHRoZSBmdXp6aW5nLiBPbmNlIEkgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbnMsIEknbGwgYmUgYWJsZSB0byBmb2N1cyBvbiB3aGF0IHRvIGZ1enogYW5kIGhvdyBiZXN0IHRvIGRvIGl0LiBUaGUgdGFyZ2V0IGlzIGNsZWFyOiB0aGlzIGBsZG1fZ2V0X3ZzdHJgIGZ1bmN0aW9uIGlzIHRoZSBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY0NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjIwLjc0MzU3NjQ1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE4OTg1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJMRE1fUEFSVElUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL3BhcnRpdGlvbnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svcGFydGl0aW9ucy9LY29uZmlnPTE1OD1jb25maWcgVU5JWFdBUkVfRElTS0xBQkVMXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMTc3LVxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZzoxNzg6Y29uZmlnIExETV9QQVJUSVRJT05cXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMTc5LVxcdGJvb2wgXFxcIldpbmRvd3MgTG9naWNhbCBEaXNrIE1hbmFnZXIgKER5bmFtaWMgRGlzaykgc3VwcG9ydFxcXCJcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZz0yMDM9Y29uZmlnIExETV9ERUJVR1xcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy0yMDQtXFx0Ym9vbCBcXFwiV2luZG93cyBMRE0gZXh0cmEgbG9nZ2luZ1xcXCJcXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWc6MjA1OlxcdGRlcGVuZHMgb24gTERNX1BBUlRJVElPTlxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy0yMDYtXFx0aGVscFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfTUFDX1BBUlRJVElPTikgKz0gbWFjLm9cXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19MRE1fUEFSVElUSU9OKSArPSBsZG0ub1xcbmJsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX01TRE9TX1BBUlRJVElPTikgKz0gbXNkb3Mub1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MTc9c3RhdGljIGludCAoKmNvbnN0IGNoZWNrX3BhcnRbXSkoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICopID0ge1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNTYtI2VuZGlmXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6NTc6I2lmZGVmIENPTkZJR19MRE1fUEFSVElUSU9OXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNTgtXFx0bGRtX3BhcnRpdGlvbixcXHRcXHQvKiB0aGlzIG11c3QgY29tZSBiZWZvcmUgbXNkb3MgKi9cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9NDkwPXN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV9wYXJ0aXRpb25fdGFibGUoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTEwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA0OyBpKyssIHArKylcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjUxMTpcXHRcXHRpZiAocC1cXHUwMDNlc3lzX2luZCA9PSBMRE1fUEFSVElUSU9OKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01MTItXFx0XFx0XFx0cmVzdWx0ID0gdHJ1ZTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmg9MjE9c3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uaC04MC1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5oOjgxOiNkZWZpbmUgTERNX1BBUlRJVElPTlxcdFxcdDB4NDJcXHRcXHQvKiBGb3JtZXJseSBTRlMgKExhbmRpcykuICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uaC04Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MTU6MjAuNzg2NzY4Njk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzNjEyMjgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIENPTkZJR19MRE1fUEFSVElUSU9OKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgQ09ORklHX0xETV9QQVJUSVRJT05gIGRlcGVuZHMgb24uIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGxpa2VseSB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyB0aGV5J3JlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgZGVzY3JpYmluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGludG8gYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AgYW5kIHpvb20gaW4gYXJvdW5kIGxpbmUgMTc4LiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3BvdCB0byBmaW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYW5kIHRoZWlyIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgbGlzdCBvZiBcImRlcGVuZHMgb25cIiBzdGF0ZW1lbnRzIG9yIG90aGVyIHJlbGV2YW50IGxvZ2ljIHRoYXQgZGljdGF0ZXMgd2hlbiB0aGlzIG9wdGlvbiBpcyBhdmFpbGFibGUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaW4gdGhlcmUsIGFuZCB0aGVuIEknbGwgZm9ybXVsYXRlIGEgY29uY2x1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjIyLjYyMjg5MzMzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0XFx0ICBMaW51eCBib3ggdmlhIGEgcmVtb3ZhYmxlIG1lZGl1bSBsaWtlIG1hZ25ldG8tb3B0aWNhbCwgWklQIG9yXFxuIDE3MTpcXHRcXHQgIHJlbW92YWJsZSBJREUgZHJpdmVzLiBOb3RlLCBob3dldmVyLCB0aGF0IGEgZ29vZCBwb3J0YWJsZSB3YXkgdG9cXG4gMTcyOlxcdFxcdCAgdHJhbnNwb3J0IGZpbGVzIGFuZCBkaXJlY3RvcmllcyBiZXR3ZWVuIHVuaXhlcyAoYW5kIGV2ZW4gb3RoZXJcXG4gMTczOlxcdFxcdCAgb3BlcmF0aW5nIHN5c3RlbXMpIGlzIGdpdmVuIGJ5IHRoZSB0YXIgcHJvZ3JhbSAoXFxcIm1hbiB0YXJcXFwiIG9yXFxuIDE3NDpcXHRcXHQgIHByZWZlcmFibHkgXFxcImluZm8gdGFyXFxcIikuXFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBhbGwgdGhpcyBpcyBhYm91dCwgc2F5IE4uXFxuIDE3NzpcXHRcXG4gMTc4OlxcdGNvbmZpZyBMRE1fUEFSVElUSU9OXFxuIDE3OTpcXHRcXHRib29sIFxcXCJXaW5kb3dzIExvZ2ljYWwgRGlzayBNYW5hZ2VyIChEeW5hbWljIERpc2spIHN1cHBvcnRcXFwiXFxuIDE4MDpcXHRcXHRkZXBlbmRzIG9uIFBBUlRJVElPTl9BRFZBTkNFRFxcbiAxODE6XFx0XFx0aGVscFxcbiAxODI6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBoYXJkIGRpc2tzIHVuZGVyIExpbnV4IHdoaWNoXFxuIDE4MzpcXHRcXHQgIHdlcmUgcGFydGl0aW9uZWQgdXNpbmcgV2luZG93cyAyMDAwJ3MvWFAncyBvciBWaXN0YSdzIExvZ2ljYWwgRGlza1xcbiAxODQ6XFx0XFx0ICBNYW5hZ2VyLiAgVGhleSBhcmUgYWxzbyBrbm93biBhcyBcXFwiRHluYW1pYyBEaXNrc1xcXCIuXFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdCAgTm90ZSB0aGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIER5bmFtaWMgRGlza3Mgd2l0aCBhIHByb3RlY3RpdmUgTUJSXFxuIDE4NzpcXHRcXHQgIGxhYmVsLCBpLmUuIERPUyBwYXJ0aXRpb24gdGFibGUuICBJdCBkb2VzIG5vdCBzdXBwb3J0IEdQVCBsYWJlbGxlZFxcbiAxODg6XFx0XFx0ICBEeW5hbWljIERpc2tzIHlldCBhcyBjYW4gYmUgY3JlYXRlZCB3aXRoIFZpc3RhLlxcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHQgIFdpbmRvd3MgMjAwMCBpbnRyb2R1Y2VkIHRoZSBjb25jZXB0IG9mIER5bmFtaWMgRGlza3MgdG8gZ2V0IGFyb3VuZFxcbiAxOTE6XFx0XFx0ICB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIFBDJ3MgcGFydGl0aW9uaW5nIHNjaGVtZS4gIFRoZSBMb2dpY2FsIERpc2tcXG4gMTkyOlxcdFxcdCAgTWFuYWdlciBhbGxvd3MgdGhlIHVzZXIgdG8gcmVwYXJ0aXRpb24gYSBkaXNrIGFuZCBjcmVhdGUgc3Bhbm5lZCxcXG4gMTkzOlxcdFxcdCAgbWlycm9yZWQsIHN0cmlwZWQgb3IgUkFJRCB2b2x1bWVzLCBhbGwgd2l0aG91dCB0aGUgbmVlZCBmb3JcXG4gMTk0OlxcdFxcdCAgcmVib290aW5nLlxcbiAxOTU6XFx0XFxuIDE5NjpcXHRcXHQgIE5vcm1hbCBwYXJ0aXRpb25zIGFyZSBub3cgY2FsbGVkIEJhc2ljIERpc2tzIHVuZGVyIFdpbmRvd3MgMjAwMCwgWFAsXFxuIDE5NzpcXHRcXHQgIGFuZCBWaXN0YS5cXG4gMTk4OlxcdFxcbiAxOTk6XFx0XFx0ICBGb3IgYSBmdWxsZXIgZGVzY3JpcHRpb24gcmVhZCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2xkbS5yc3RcXHUwMDNlLlxcbiAyMDA6XFx0XFxuIDIwMTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDIwMjpcXHRcXG4gMjAzOlxcdGNvbmZpZyBMRE1fREVCVUdcXG4gMjA0OlxcdFxcdGJvb2wgXFxcIldpbmRvd3MgTERNIGV4dHJhIGxvZ2dpbmdcXFwiXFxuIDIwNTpcXHRcXHRkZXBlbmRzIG9uIExETV9QQVJUSVRJT05cXG4gMjA2OlxcdFxcdGhlbHBcXG4gMjA3OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd291bGQgbGlrZSBMRE0gdG8gbG9nIHZlcmJvc2VseS4gIFRoaXMgY291bGQgYmVcXG4gMjA4OlxcdFxcdCAgaGVscGZ1bCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3Qgd29yayBhcyBleHBlY3RlZCBhbmQgeW91J2QgbGlrZSB0b1xcbiAyMDk6XFx0XFx0ICByZXBvcnQgYSBidWcuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjIyLjYyMjk3NTgxOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NDQyMjcwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBhcnRpdGlvbiBQYXJzaW5nIGluIExpbnV4KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgYFBBUlRJVElPTl9BRFZBTkNFRGAgZmVhdHVyZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgcGFydGl0aW9uIHBhcnNpbmcgbWVjaGFuaXNtcyBpbiBMaW51eC4gSSdsbCBzdGFydCBieSBsb29raW5nIGludG8gaG93IHRoZSBwYXJzaW5nIGlzIGFjdHVhbGx5ICp0cmlnZ2VyZWQqLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIHN5c3RlbSBraWNrcyBpdCBvZmYgd2hlbiBhIGJsb2NrIGRldmljZSwgbGlrZSBhIGxvb3AgZGV2aWNlIG9yIGEgdmlydGlvX2JsayBkZXZpY2UsIGlzIHByb2JlZCBvciByZXNjYW5uZWQuIFRoZSBgQkxLUlJQQVJUYCBpb2N0bCBvciBvcGVuaW5nIHNvbWV0aGluZyBsaWtlIGAvZGV2L2xvb3BYYCBhZnRlciB0aGUgYmFja2luZyBmaWxlIGlzIHNldCBpcyB3aGF0IHNlZW1zIHRvIGRvIHRoZSB0cmljay5cblxuVGhlIG5pY2UgdGhpbmcgaXMgdGhhdCBTeXprYWxsZXIsIGEgdG9vbCBJJ20gdmVyeSBmYW1pbGlhciB3aXRoIGFuZCByZWx5IG9uIGluIG15IG93biB3b3JrLCBhbHJlYWR5IGhhcyByb3V0aW5lcyB0byB0ZXN0IGJsb2NrIGRldmljZXMsIGxvb3AgZGV2aWNlcywgYW5kIG9mIGNvdXJzZSwgdGhlIHBhcnRpdGlvbiBwYXJzaW5nIGl0c2VsZi4gU28sIEkgc2hvdWxkIGJlIGFibGUgdG8gcmVseSBvbiBpdHMgcmVzdWx0cy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYCBmaWxlLiBBY2NvcmRpbmcgdG8gdGhlIGRhdGEgSSBoYXZlLCB0aGUgcGFydGl0aW9uIHBhcnNpbmcgbG9naWMgd2l0aGluIHRoaXMgZmlsZSBpcyBhbHJlYWR5IGZ1bGx5IHJlYWNoYWJsZSBpbiBvdXIgc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgdGVzdGluZyBzZXR1cC4gSSdsbCBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uIHRoZXJlLlxuXG5OZXh0LCBJJ2xsIG5lZWQgdG8gbWV0aWN1bG91c2x5IGNoZWNrIHRoZSBjYWxsZXJzIGFuZCBzeW1ib2xzIGluIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCByZWxhdGlvbnNoaXBzIG9mIHRoZSBwYXJ0aXRpb25pbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc5OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjI1LjM2NzIwNDk1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk3ODg2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsZG1fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvbGRtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3NDUgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjItLypcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjIzOiAqIGxkbV9kZWJ1Zy9pbmZvL2Vycm9yL2NyaXQgLSBPdXRwdXQgYW4gZXJyb3IgbWVzc2FnZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjQtICogQGY6ICAgIEEgcHJpbnRmIGZvcm1hdCBzdHJpbmcgY29udGFpbmluZyB0aGUgbWVzc2FnZVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNi0gKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mjc6ICogbGRtX2RlYnVnKCkgd3JpdGVzIGEgREVCVUcgbGV2ZWwgbWVzc2FnZSB0byB0aGUgc3lzbG9nIGJ1dCBvbmx5IGlmIHRoZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjgtICogZHJpdmVyIHdhcyBjb21waWxlZCB3aXRoIGRlYnVnIGVuYWJsZWQuIE90aGVyd2lzZSwgdGhlIGNhbGwgdHVybnMgaW50byBhIE5PUC5cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzAtI2lmbmRlZiBDT05GSUdfTERNX0RFQlVHXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozMTojZGVmaW5lIGxkbV9kZWJ1ZyguLi4pXFx0ZG8ge30gd2hpbGUgKDApXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zMi0jZWxzZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzM6I2RlZmluZSBsZG1fZGVidWcoZiwgYS4uLikgX2xkbV9wcmludGsgKEtFUk5fREVCVUcsIF9fZnVuY19fLCBmLCAjI2EpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNC0jZW5kaWZcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM1LVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzY6I2RlZmluZSBsZG1fY3JpdChmLCBhLi4uKSAgX2xkbV9wcmludGsgKEtFUk5fQ1JJVCwgIF9fZnVuY19fLCBmLCAjI2EpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNzojZGVmaW5lIGxkbV9lcnJvcihmLCBhLi4uKSBfbGRtX3ByaW50ayAoS0VSTl9FUlIsICAgX19mdW5jX18sIGYsICMjYSlcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM4OiNkZWZpbmUgbGRtX2luZm8oZiwgYS4uLikgIF9sZG1fcHJpbnRrIChLRVJOX0lORk8sICBfX2Z1bmNfXywgZiwgIyNhKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzktXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz00MD1zdGF0aWMgX19wcmludGYoMywgNClcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQxOnZvaWQgX2xkbV9wcmludGsoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQyLXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTYtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo1NzogKiBsZG1fcGFyc2VfcHJpdmhlYWQgLSBSZWFkIHRoZSBMRE0gRGF0YWJhc2UgUFJJVkhFQUQgc3RydWN0dXJlXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01OC0gKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBQUklWSEVBRCBzdHJ1Y3R1cmUgbG9hZGVkIGZyb20gdGhlIGRldmljZVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02Ni0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjY3OnN0YXRpYyBib29sIGxkbV9wYXJzZV9wcml2aGVhZChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHByaXZoZWFkICpwaClcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY4LXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzItXFx0aWYgKE1BR0lDX1BSSVZIRUFEICE9IGdldF91bmFsaWduZWRfYmU2NChkYXRhKSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzM6XFx0XFx0bGRtX2Vycm9yKFxcXCJDYW5ub3QgZmluZCBQUklWSEVBRCBzdHJ1Y3R1cmUuIExETSBkYXRhYmFzZSBpc1xcXCJcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc0LVxcdFxcdFxcdFxcXCIgY29ycnVwdC4gQWJvcnRpbmcuXFxcIik7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg2LVxcdGlmICghaXNfdmlzdGEgXFx1MDAyNlxcdTAwMjYgKHBoLVxcdTAwM2V2ZXJfbWFqb3IgIT0gMiB8fCBwaC1cXHUwMDNldmVyX21pbm9yICE9IDExKSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODc6XFx0XFx0bGRtX2Vycm9yKFxcXCJFeHBlY3RlZCBQUklWSEVBRCB2ZXJzaW9uIDIuMTEgb3IgMi4xMiwgZ290ICVkLiVkLlxcXCJcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg4LVxcdFxcdFxcdFxcXCIgQWJvcnRpbmcuXFxcIiwgcGgtXFx1MDAzZXZlcl9tYWpvciwgcGgtXFx1MDAzZXZlcl9taW5vcik7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkwLVxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjkxOlxcdGxkbV9kZWJ1ZyhcXFwiUFJJVkhFQUQgdmVyc2lvbiAlZC4lZCAoV2luZG93cyAlcykuXFxcIiwgcGgtXFx1MDAzZXZlcl9tYWpvcixcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkyLVxcdFxcdFxcdHBoLVxcdTAwM2V2ZXJfbWlub3IsIGlzX3Zpc3RhID8gXFxcIlZpc3RhXFxcIiA6IFxcXCIyMDAwL1hQXFxcIik7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk0LVxcdFxcdC8qIFdhcm4gdGhlIHVzZXIgYW5kIGNvbnRpbnVlLCBjYXJlZnVsbHkuICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NTpcXHRcXHRsZG1faW5mbyhcXFwiRGF0YWJhc2UgaXMgbm9ybWFsbHkgJXUgYnl0ZXMsIGl0IGNsYWltcyB0byBcXFwiXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05Ni1cXHRcXHRcXHRcXFwiYmUgJWxsdSBieXRlcy5cXFwiLCBMRE1fREJfU0laRSxcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAwLVxcdFxcdFxcdHBoLVxcdTAwM2Vsb2dpY2FsX2Rpc2tfc2l6ZSBcXHUwMDNlIHBoLVxcdTAwM2Vjb25maWdfc3RhcnQpKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDE6XFx0XFx0bGRtX2Vycm9yKFxcXCJQUklWSEVBRCBkaXNrIHNpemUgZG9lc24ndCBtYXRjaCByZWFsIGRpc2sgc2l6ZVxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTA0LVxcdGlmICh1dWlkX3BhcnNlKGRhdGEgKyAweDAwMzAsIFxcdTAwMjZwaC1cXHUwMDNlZGlza19pZCkpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwNTpcXHRcXHRsZG1fZXJyb3IoXFxcIlBSSVZIRUFEIGNvbnRhaW5zIGFuIGludmFsaWQgR1VJRC5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwNi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDctXFx0fVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTA4OlxcdGxkbV9kZWJ1ZyhcXFwiUGFyc2VkIFBSSVZIRUFEIHN1Y2Nlc3NmdWxseS5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwOS1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTEyLS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzOiAqIGxkbV9wYXJzZV90b2NibG9jayAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExNC0gKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmUgbG9hZGVkIGZyb20gdGhlIGRldmljZVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMjUtICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMjY6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3RvY2Jsb2NrIChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHRvY2Jsb2NrICp0b2MpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMjcte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMzAtXFx0aWYgKE1BR0lDX1RPQ0JMT0NLICE9IGdldF91bmFsaWduZWRfYmU2NChkYXRhKSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTMxOlxcdFxcdGxkbV9jcml0IChcXFwiQ2Fubm90IGZpbmQgVE9DQkxPQ0ssIGRhdGFiYXNlIG1heSBiZSBjb3JydXB0LlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTMyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTM5LVxcdFxcdFxcdHNpemVvZiAodG9jLVxcdTAwM2ViaXRtYXAxX25hbWUpKSAhPSAwKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNDA6XFx0XFx0bGRtX2NyaXQgKFxcXCJUT0NCTE9DSydzIGZpcnN0IGJpdG1hcCBpcyAnJXMnLCBzaG91bGQgYmUgJyVzJy5cXFwiLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQxLVxcdFxcdFxcdFxcdFRPQ19CSVRNQVAxLCB0b2MtXFx1MDAzZWJpdG1hcDFfbmFtZSk7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE0OC1cXHRcXHRcXHRzaXplb2YgKHRvYy1cXHUwMDNlYml0bWFwMl9uYW1lKSkgIT0gMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTQ5OlxcdFxcdGxkbV9jcml0IChcXFwiVE9DQkxPQ0sncyBzZWNvbmQgYml0bWFwIGlzICclcycsIHNob3VsZCBiZSAnJXMnLlxcXCIsXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNTAtXFx0XFx0XFx0XFx0VE9DX0JJVE1BUDIsIHRvYy1cXHUwMDNlYml0bWFwMl9uYW1lKTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTUyLVxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE1MzpcXHRsZG1fZGVidWcgKFxcXCJQYXJzZWQgVE9DQkxPQ0sgc3VjY2Vzc2Z1bGx5LlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTU0LVxcdHJldHVybiB0cnVlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNTctLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNTg6ICogbGRtX3BhcnNlX3ZtZGIgLSBSZWFkIHRoZSBMRE0gRGF0YWJhc2UgVk1EQiBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE1OS0gKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBWTURCIHN0cnVjdHVyZSBsb2FkZWQgZnJvbSB0aGUgZGV2aWNlXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE2OS0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE3MDpzdGF0aWMgYm9vbCBsZG1fcGFyc2Vfdm1kYiAoY29uc3QgdTggKmRhdGEsIHN0cnVjdCB2bWRiICp2bSlcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE3MS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE3NC1cXHRpZiAoTUFHSUNfVk1EQiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoZGF0YSkpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE3NTpcXHRcXHRsZG1fY3JpdCAoXFxcIkNhbm5vdCBmaW5kIHRoZSBWTURCLCBkYXRhYmFzZSBtYXkgYmUgY29ycnVwdC5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE3Ni1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE4MS1cXHRpZiAoKHZtLVxcdTAwM2V2ZXJfbWFqb3IgIT0gNCkgfHwgKHZtLVxcdTAwM2V2ZXJfbWlub3IgIT0gMTApKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxODI6XFx0XFx0bGRtX2Vycm9yIChcXFwiRXhwZWN0ZWQgVk1EQiB2ZXJzaW9uICVkLiVkLCBnb3QgJWQuJWQuIFxcXCJcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE4My1cXHRcXHRcXHRcXFwiQWJvcnRpbmcuXFxcIiwgNCwgMTAsIHZtLVxcdTAwM2V2ZXJfbWFqb3IsIHZtLVxcdTAwM2V2ZXJfbWlub3IpO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xODgtXFx0aWYgKHZtLVxcdTAwM2V2YmxrX3NpemUgPT0gMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTg5OlxcdFxcdGxkbV9lcnJvciAoXFxcIklsbGVnYWwgVkJMSyBzaXplXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xOTAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xOTUtXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxOTY6XFx0bGRtX2RlYnVnIChcXFwiUGFyc2VkIFZNREIgc3VjY2Vzc2Z1bGx5LlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTk3LVxcdHJldHVybiB0cnVlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMDAtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyMDE6ICogbGRtX2NvbXBhcmVfcHJpdmhlYWRzIC0gQ29tcGFyZSB0d28gcHJpdmhlYWQgb2JqZWN0c1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjAyLSAqIEBwaDE6ICBGaXJzdCBwcml2aGVhZFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMDktICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyMTA6c3RhdGljIGJvb2wgbGRtX2NvbXBhcmVfcHJpdmhlYWRzIChjb25zdCBzdHJ1Y3QgcHJpdmhlYWQgKnBoMSxcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIxMS1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcHJpdmhlYWQgKnBoMilcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjI0LS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MjI1OiAqIGxkbV9jb21wYXJlX3RvY2Jsb2NrcyAtIENvbXBhcmUgdHdvIHRvY2Jsb2NrIG9iamVjdHNcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTIyNi0gKiBAdG9jMTogIEZpcnN0IHRvY1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMzMtICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyMzQ6c3RhdGljIGJvb2wgbGRtX2NvbXBhcmVfdG9jYmxvY2tzIChjb25zdCBzdHJ1Y3QgdG9jYmxvY2sgKnRvYzEsXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yMzUtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHRvY2Jsb2NrICp0b2MyKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNDktLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyNTA6ICogbGRtX3ZhbGlkYXRlX3ByaXZoZWFkcyAtIENvbXBhcmUgdGhlIHByaW1hcnkgcHJpdmhlYWQgd2l0aCBpdHMgYmFja3Vwc1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjUxLSAqIEBzdGF0ZTogUGFydGl0aW9uIGNoZWNrIHN0YXRlIGluY2x1ZGluZyBkZXZpY2UgaG9sZGluZyB0aGUgTERNIERhdGFiYXNlXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI2Mi0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjI2MzpzdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfcHJpdmhlYWRzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yNjQtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHByaXZoZWFkICpwaDEpXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI3OC1cXHRpZiAoIXBoWzFdIHx8ICFwaFsyXSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mjc5OlxcdFxcdGxkbV9jcml0IChcXFwiT3V0IG9mIG1lbW9yeS5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI4MC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjkwLVxcdFxcdGlmICghZGF0YSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MjkxOlxcdFxcdFxcdGxkbV9jcml0IChcXFwiRGlzayByZWFkIGZhaWxlZC5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI5Mi1cXHRcXHRcXHRnb3RvIG91dDtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI5My1cXHRcXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyOTQ6XFx0XFx0cmVzdWx0ID0gbGRtX3BhcnNlX3ByaXZoZWFkIChkYXRhLCBwaFtpXSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yOTUtXFx0XFx0cHV0X2Rldl9zZWN0b3IgKHNlY3QpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjk2LVxcdFxcdGlmICghcmVzdWx0KSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoyOTc6XFx0XFx0XFx0bGRtX2Vycm9yIChcXFwiQ2Fubm90IGZpbmQgUFJJVkhFQUQgJWQuXFxcIiwgaSsxKTsgLyogTG9nIGFnYWluICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0yOTgtXFx0XFx0XFx0aWYgKGkgXFx1MDAzYyAyKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zMDgtXFx0ICAgKChwaFswXS1cXHUwMDNlY29uZmlnX3N0YXJ0ICsgcGhbMF0tXFx1MDAzZWNvbmZpZ19zaXplKSBcXHUwMDNlIG51bV9zZWN0cykpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjMwOTpcXHRcXHRsZG1fY3JpdCAoXFxcIkRhdGFiYXNlIGV4dGVuZHMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGRpc2suXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zMTAtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMxNS1cXHRcXHQgICAgXFx1MDAzZSBwaFswXS1cXHUwMDNlY29uZmlnX3N0YXJ0KSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzE2OlxcdFxcdGxkbV9jcml0IChcXFwiRGlzayBhbmQgZGF0YWJhc2Ugb3ZlcmxhcC5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMxNy1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzE5LVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzIwOlxcdGlmICghbGRtX2NvbXBhcmVfcHJpdmhlYWRzIChwaFswXSwgcGhbMV0pKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozMjE6XFx0XFx0bGRtX2NyaXQgKFxcXCJQcmltYXJ5IGFuZCBiYWNrdXAgUFJJVkhFQURzIGRvbid0IG1hdGNoLlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzIyLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zMjQtXFx0LyogRklYTUUgaWdub3JlIHRoaXMgZm9yIG5vd1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzI1OlxcdGlmICghbGRtX2NvbXBhcmVfcHJpdmhlYWRzIChwaFswXSwgcGhbMl0pKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozMjY6XFx0XFx0bGRtX2NyaXQgKFxcXCJQcmltYXJ5IGFuZCBiYWNrdXAgUFJJVkhFQURzIGRvbid0IG1hdGNoLlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzI3LVxcdFxcdGdvdG8gb3V0O1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzI4LVxcdH0qL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzI5OlxcdGxkbV9kZWJ1ZyAoXFxcIlZhbGlkYXRlZCBQUklWSEVBRHMgc3VjY2Vzc2Z1bGx5LlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzMwLVxcdHJlc3VsdCA9IHRydWU7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTMzNy0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjMzODogKiBsZG1fdmFsaWRhdGVfdG9jYmxvY2tzIC0gVmFsaWRhdGUgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIGFuZCBpdHMgYmFja3Vwc1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzM5LSAqIEBzdGF0ZTogUGFydGl0aW9uIGNoZWNrIHN0YXRlIGluY2x1ZGluZyBkZXZpY2UgaG9sZGluZyB0aGUgTERNIERhdGFiYXNlXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM1MC0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM1MTpzdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdG9jYmxvY2tzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNTItXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBiYXNlLCBzdHJ1Y3QgbGRtZGIgKmxkYilcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzY2LVxcdGlmICghdGJbMV0pIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM2NzpcXHRcXHRsZG1fY3JpdChcXFwiT3V0IG9mIG1lbW9yeS5cXFwiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM2OC1cXHRcXHRnb3RvIGVycjtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzgwLVxcdFxcdGlmICghZGF0YSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzgxOlxcdFxcdFxcdGxkbV9lcnJvcihcXFwiRGlzayByZWFkIGZhaWxlZCBmb3IgVE9DQkxPQ0sgJWQuXFxcIiwgaSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODItXFx0XFx0XFx0Y29udGludWU7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODMtXFx0XFx0fVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzg0OlxcdFxcdGlmIChsZG1fcGFyc2VfdG9jYmxvY2soZGF0YSwgdGJbbnJfdGJzXSkpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODUtXFx0XFx0XFx0bnJfdGJzKys7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4OC1cXHRpZiAoIW5yX3Ricykge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzg5OlxcdFxcdGxkbV9jcml0KFxcXCJGYWlsZWQgdG8gZmluZCBhIHZhbGlkIFRPQ0JMT0NLLlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzkwLVxcdFxcdGdvdG8gZXJyO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zOTUtXFx0XFx0XFx0cGgtXFx1MDAzZWNvbmZpZ19zaXplKSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzk2OlxcdFxcdGxkbV9jcml0KFxcXCJUaGUgYml0bWFwcyBhcmUgb3V0IG9mIHJhbmdlLiAgR2l2aW5nIHVwLlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzk3LVxcdFxcdGdvdG8gZXJyO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00MDAtXFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIG5yX3RiczsgaSsrKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0MDE6XFx0XFx0aWYgKCFsZG1fY29tcGFyZV90b2NibG9ja3ModGJbMF0sIHRiW2ldKSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDAyOlxcdFxcdFxcdGxkbV9jcml0KFxcXCJUT0NCTE9DS3MgMCBhbmQgJWQgZG8gbm90IG1hdGNoLlxcXCIsIGkpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDAzLVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00MDUtXFx0fVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDA2OlxcdGxkbV9kZWJ1ZyhcXFwiVmFsaWRhdGVkICVkIFRPQ0JMT0NLcyBzdWNjZXNzZnVsbHkuXFxcIiwgbnJfdGJzKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwNy1cXHRyZXN1bHQgPSB0cnVlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00MTMtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0MTQ6ICogbGRtX3ZhbGlkYXRlX3ZtZGIgLSBSZWFkIHRoZSBWTURCIGFuZCB2YWxpZGF0ZSBpdFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDE1LSAqIEBzdGF0ZTogUGFydGl0aW9uIGNoZWNrIHN0YXRlIGluY2x1ZGluZyBkZXZpY2UgaG9sZGluZyB0aGUgTERNIERhdGFiYXNlXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQyNC0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQyNTpzdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdm1kYihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDI2LVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgc3RydWN0IGxkbWRiICpsZGIpXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0MC1cXHRpZiAoIWRhdGEpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQ0MTpcXHRcXHRsZG1fY3JpdCAoXFxcIkRpc2sgcmVhZCBmYWlsZWQuXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NDItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NDQtXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0NDU6XFx0aWYgKCFsZG1fcGFyc2Vfdm1kYiAoZGF0YSwgdm0pKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDQ2LVxcdFxcdGdvdG8gb3V0O1xcdFxcdFxcdFxcdC8qIEFscmVhZHkgbG9nZ2VkICovXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0OS1cXHRpZiAoZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEgKyAweDEwKSAhPSAweDAxKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0NTA6XFx0XFx0bGRtX2NyaXQgKFxcXCJEYXRhYmFzZSBpcyBub3QgaW4gYSBjb25zaXN0ZW50IHN0YXRlLiAgQWJvcnRpbmcuXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NTEtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ1NC1cXHRpZiAodm0tXFx1MDAzZXZibGtfb2Zmc2V0ICE9IDUxMilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQ1NTpcXHRcXHRsZG1faW5mbyAoXFxcIlZCTEtzIHN0YXJ0IGF0IG9mZnNldCAweCUwNHguXFxcIiwgdm0tXFx1MDAzZXZibGtfb2Zmc2V0KTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ1Ni1cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDYxLVxcdGlmICgodm0tXFx1MDAzZXZibGtfc2l6ZSAqIHZtLVxcdTAwM2VsYXN0X3ZibGtfc2VxKSBcXHUwMDNlICh0b2MtXFx1MDAzZWJpdG1hcDFfc2l6ZSBcXHUwMDNjXFx1MDAzYyA5KSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDYyOlxcdFxcdGxkbV9jcml0IChcXFwiVk1EQiBleGNlZWRzIGFsbG93ZWQgc2l6ZSBzcGVjaWZpZWQgYnkgVE9DQkxPQ0suICBcXFwiXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NjMtXFx0XFx0XFx0XFx0XFxcIkRhdGFiYXNlIGlzIGNvcnJ1cHQuICBBYm9ydGluZy5cXFwiKTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDc0LS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDc1OiAqIGxkbV92YWxpZGF0ZV9wYXJ0aXRpb25fdGFibGUgLSBEZXRlcm1pbmUgd2hldGhlciBiZGV2IG1pZ2h0IGJlIGEgZHluYW1pYyBkaXNrXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NzYtICogQHN0YXRlOiBQYXJ0aXRpb24gY2hlY2sgc3RhdGUgaW5jbHVkaW5nIGRldmljZSBob2xkaW5nIHRoZSBMRE0gRGF0YWJhc2VcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDg5LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDkwOnN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV9wYXJ0aXRpb25fdGFibGUoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ5MS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUwMS1cXHRpZiAoIWRhdGEpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjUwMjpcXHRcXHRsZG1faW5mbyAoXFxcIkRpc2sgcmVhZCBmYWlsZWQuXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01MDMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01MTYtXFx0aWYgKHJlc3VsdClcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjUxNzpcXHRcXHRsZG1fZGVidWcgKFxcXCJGb3VuZCBXMksgZHluYW1pYyBkaXNrIHBhcnRpdGlvbiB0eXBlLlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTE4LVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01MjQtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo1MjU6ICogbGRtX2dldF9kaXNrX29iamlkIC0gU2VhcmNoIGEgbGlua2VkIGxpc3Qgb2YgdmJsaydzIGZvciBhIGdpdmVuIERpc2sgSWRcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTUyNi0gKiBAbGRiOiAgQ2FjaGUgb2YgdGhlIGRhdGFiYXNlIHN0cnVjdHVyZXNcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTM1LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTM2OnN0YXRpYyBzdHJ1Y3QgdmJsayAqIGxkbV9nZXRfZGlza19vYmppZCAoY29uc3Qgc3RydWN0IGxkbWRiICpsZGIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01Mzcte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01NTEtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo1NTI6ICogbGRtX2NyZWF0ZV9kYXRhX3BhcnRpdGlvbnMgLSBDcmVhdGUgZGF0YSBwYXJ0aXRpb25zIGZvciB0aGlzIGRldmljZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTUzLSAqIEBwcDogICBMaXN0IG9mIHRoZSBwYXJ0aXRpb25zIHBhcnNlZCBzbyBmYXJcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTY3LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NTY4OnN0YXRpYyBib29sIGxkbV9jcmVhdGVfZGF0YV9wYXJ0aXRpb25zIChzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnBwLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNTY5LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBsZG1kYiAqbGRiKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01NzgtXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo1Nzk6XFx0ZGlzayA9IGxkbV9nZXRfZGlza19vYmppZCAobGRiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTU4MC1cXHRpZiAoIWRpc2spIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjU4MTpcXHRcXHRsZG1fY3JpdCAoXFxcIkNhbid0IGZpbmQgdGhlIElEIG9mIHRoaXMgZGlzayBpbiB0aGUgZGF0YWJhc2UuXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01ODItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MDUtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2MDY6ICogbGRtX3JlbGF0aXZlIC0gQ2FsY3VsYXRlIHRoZSBuZXh0IHJlbGF0aXZlIG9mZnNldFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjA3LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MTgtICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2MTk6c3RhdGljIGludCBsZG1fcmVsYXRpdmUoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1ZmxlbiwgaW50IGJhc2UsIGludCBvZmZzZXQpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MjAte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MjQtXFx0XFx0aWYgKCFidWZmZXIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2MjU6XFx0XFx0XFx0bGRtX2Vycm9yKFxcXCIhYnVmZmVyXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02MjYtXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo2Mjc6XFx0XFx0XFx0bGRtX2Vycm9yKFxcXCJvZmZzZXQgKCVkKSBcXHUwMDNjIDBcXFwiLCBvZmZzZXQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjI4LVxcdFxcdGlmIChiYXNlIFxcdTAwM2UgYnVmbGVuKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjI5OlxcdFxcdFxcdGxkbV9lcnJvcihcXFwiYmFzZSAoJWQpIFxcdTAwM2UgYnVmbGVuICglZClcXFwiLCBiYXNlLCBidWZsZW4pO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjMwLVxcdFxcdHJldHVybiAtMTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjMyLVxcdGlmIChiYXNlICsgYnVmZmVyW2Jhc2VdIFxcdTAwM2U9IGJ1Zmxlbikge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjMzOlxcdFxcdGxkbV9lcnJvcihcXFwiYmFzZSAoJWQpICsgYnVmZmVyW2Jhc2VdICglZCkgXFx1MDAzZT0gYnVmbGVuICglZClcXFwiLCBiYXNlLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjM0LVxcdFxcdFxcdFxcdGJ1ZmZlcltiYXNlXSwgYnVmbGVuKTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjQwLS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjQxOiAqIGxkbV9nZXRfdm51bSAtIENvbnZlcnQgYSB2YXJpYWJsZS13aWR0aCwgYmlnIGVuZGlhbiBudW1iZXIsIGludG8gY3B1IG9yZGVyXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NDItICogQGJsb2NrOiAgUG9pbnRlciB0byB0aGUgdmFyaWFibGUtd2lkdGggbnVtYmVyIHRvIGNvbnZlcnRcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjU0LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjU1OnN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NTYte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NjctXFx0ZWxzZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjY4OlxcdFxcdGxkbV9lcnJvciAoXFxcIklsbGVnYWwgbGVuZ3RoICVkLlxcXCIsIGxlbmd0aCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NjktXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY3My0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjY3NDogKiBsZG1fZ2V0X3ZzdHIgLSBSZWFkIGEgbGVuZ3RoLXByZWZpeGVkIHN0cmluZyBpbnRvIGEgYnVmZmVyXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy02NzUtICogQGJsb2NrOiAgIFBvaW50ZXIgdG8gdGhlIGxlbmd0aCBtYXJrZXJcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjkwLSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NjkxOnN0YXRpYyBpbnQgbGRtX2dldF92c3RyKGNvbnN0IHU4ICpibG9jaywgaW50IGJsb2NrbGVuLCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjkyLXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzA1LVxcdGlmIChsZW5ndGggXFx1MDAzZT0gYnVmbGVuKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3MDY6XFx0XFx0bGRtX2Vycm9yIChcXFwiVHJ1bmNhdGluZyBzdHJpbmcgJWQgLVxcdTAwM2UgJWQuXFxcIiwgbGVuZ3RoLCBidWZsZW4pO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzA3LVxcdFxcdGxlbmd0aCA9IGJ1ZmxlbiAtIDE7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcxNS0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjcxNjogKiBsZG1fcGFyc2VfY21wMyAtIFJlYWQgYSByYXcgVkJMSyBDb21wb25lbnQgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzE3LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03MjUtICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3MjY6c3RhdGljIGJvb2wgbGRtX3BhcnNlX2NtcDMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcyNy17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTczMi1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjczMzpcXHRyX29iamlkICA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MTgsIDApO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzM0OlxcdHJfbmFtZSAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3MzU6XFx0cl92c3RhdGUgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX25hbWUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzM2OlxcdHJfY2hpbGQgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxRCwgcl92c3RhdGUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzM3OlxcdHJfcGFyZW50ID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgyRCwgcl9jaGlsZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03MzgtXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03MzktXFx0aWYgKGJ1ZmZlclsweDEyXSBcXHUwMDI2IFZCTEtfRkxBR19DT01QX1NUUklQRSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzQwOlxcdFxcdHJfc3RyaXBlID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgyRSwgcl9wYXJlbnQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzQxOlxcdFxcdHJfY29scyAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgyRSwgcl9zdHJpcGUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzQyLVxcdFxcdGxlbiA9IHJfY29scztcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzU0LVxcdGNvbXAgPSBcXHUwMDI2dmItXFx1MDAzZXZibGsuY29tcDtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc1NTpcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzU2LVxcdFxcdGNvbXAtXFx1MDAzZXN0YXRlLCBzaXplb2YoY29tcC1cXHUwMDNlc3RhdGUpKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc1Ny1cXHRjb21wLVxcdTAwM2V0eXBlICAgICAgPSBidWZmZXJbMHgxOCArIHJfdnN0YXRlXTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc1ODpcXHRjb21wLVxcdTAwM2VjaGlsZHJlbiAgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciArIDB4MUQgKyByX3ZzdGF0ZSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3NTk6XFx0Y29tcC1cXHUwMDNlcGFyZW50X2lkID0gbGRtX2dldF92bnVtIChidWZmZXIgKyAweDJEICsgcl9jaGlsZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3NjA6XFx0Y29tcC1cXHUwMDNlY2h1bmtzaXplID0gcl9zdHJpcGUgPyBsZG1fZ2V0X3ZudW0gKGJ1ZmZlcityX3BhcmVudCsweDJFKSA6IDA7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NjEtXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc2NS0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc2NjogKiBsZG1fcGFyc2VfZGdyMyAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIEdyb3VwIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc2Ny0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzc1LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Nzc2OnN0YXRpYyBpbnQgbGRtX3BhcnNlX2RncjMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc3Ny17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc4Mi1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc4MzpcXHRyX29iamlkICA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MTgsIDApO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Nzg0OlxcdHJfbmFtZSAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3ODU6XFx0cl9kaXNraWQgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX25hbWUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzg2LVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzg3LVxcdGlmIChidWZmZXJbMHgxMl0gXFx1MDAyNiBWQkxLX0ZMQUdfREdSM19JRFMpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc4ODpcXHRcXHRyX2lkMSA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MjQsIHJfZGlza2lkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc4OTpcXHRcXHRyX2lkMiA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MjQsIHJfaWQxKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc5MC1cXHRcXHRsZW4gPSByX2lkMjtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODAwLVxcdGRncnAgPSBcXHUwMDI2dmItXFx1MDAzZXZibGsuZGdycDtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgwMTpcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODAyLVxcdFxcdGRncnAtXFx1MDAzZWRpc2tfaWQsIHNpemVvZihkZ3JwLVxcdTAwM2VkaXNrX2lkKSk7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgwNi0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgwNzogKiBsZG1fcGFyc2VfZGdyNCAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIEdyb3VwIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgwOC0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODE2LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODE3OnN0YXRpYyBib29sIGxkbV9wYXJzZV9kZ3I0IChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MTgte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MjMtXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4MjQ6XFx0cl9vYmppZCAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCAwKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgyNTpcXHRyX25hbWUgICA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfb2JqaWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODI2LVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODI3LVxcdGlmIChidWZmZXJbMHgxMl0gXFx1MDAyNiBWQkxLX0ZMQUdfREdSNF9JRFMpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgyODpcXHRcXHRyX2lkMSA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4NDQsIHJfbmFtZSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4Mjk6XFx0XFx0cl9pZDIgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDQ0LCByX2lkMSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MzAtXFx0XFx0bGVuID0gcl9pZDI7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgzOS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg0MDpcXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfb2JqaWQsIGJ1ZmxlbiAtICgweDE4ICsgcl9vYmppZCksXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NDEtXFx0XFx0YnVmLCBzaXplb2YoYnVmKSk7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg0NS0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg0NjogKiBsZG1fcGFyc2VfZHNrMyAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg0Ny0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODU1LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODU2OnN0YXRpYyBib29sIGxkbV9wYXJzZV9kc2szIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NTcte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NjItXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4NjM6XFx0cl9vYmppZCAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4NjQ6XFx0cl9uYW1lICAgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9vYmppZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4NjU6XFx0cl9kaXNraWQgID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9uYW1lKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg2NjpcXHRyX2FsdG5hbWUgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX2Rpc2tpZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NjctXFx0bGVuID0gcl9hbHRuYW1lO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NzUtXFx0ZGlzayA9IFxcdTAwMjZ2Yi1cXHUwMDNldmJsay5kaXNrO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODc2OlxcdGxkbV9nZXRfdnN0cihidWZmZXIgKyAweDE4ICsgcl9kaXNraWQsIGJ1ZmxlbiAtICgweDE4ICsgcl9kaXNraWQpLFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODc3LVxcdFxcdGRpc2stXFx1MDAzZWFsdF9uYW1lLCBzaXplb2YoZGlzay1cXHUwMDNlYWx0X25hbWUpKTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODg0LS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODg1OiAqIGxkbV9wYXJzZV9kc2s0IC0gUmVhZCBhIHJhdyBWQkxLIERpc2sgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODg2LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04OTQtICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4OTU6c3RhdGljIGJvb2wgbGRtX3BhcnNlX2RzazQgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg5Ni17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkwMS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjkwMjpcXHRyX29iamlkID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MDM6XFx0cl9uYW1lICA9IGxkbV9yZWxhdGl2ZSAoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfb2JqaWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTA0LVxcdGxlbiAgICAgPSByX25hbWU7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkxNy0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjkxODogKiBsZG1fcGFyc2VfcHJ0MyAtIFJlYWQgYSByYXcgVkJMSyBQYXJ0aXRpb24gb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTE5LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05MjctICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5Mjg6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3BydDMoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTI5LXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTMzLVxcdEJVR19PTighYnVmZmVyIHx8ICF2Yik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MzQ6XFx0cl9vYmppZCA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05MzUtXFx0aWYgKHJfb2JqaWQgXFx1MDAzYyAwKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MzY6XFx0XFx0bGRtX2Vycm9yKFxcXCJyX29iamlkICVkIFxcdTAwM2MgMFxcXCIsIHJfb2JqaWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTM3LVxcdFxcdHJldHVybiBmYWxzZTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkzOC1cXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5Mzk6XFx0cl9uYW1lID0gbGRtX3JlbGF0aXZlKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX29iamlkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk0MC1cXHRpZiAocl9uYW1lIFxcdTAwM2MgMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTQxOlxcdFxcdGxkbV9lcnJvcihcXFwicl9uYW1lICVkIFxcdTAwM2MgMFxcXCIsIHJfbmFtZSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NDItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTQzLVxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk0NDpcXHRyX3NpemUgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MzQsIHJfbmFtZSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NDUtXFx0aWYgKHJfc2l6ZSBcXHUwMDNjIDApIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk0NjpcXHRcXHRsZG1fZXJyb3IoXFxcInJfc2l6ZSAlZCBcXHUwMDNjIDBcXFwiLCByX3NpemUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTQ3LVxcdFxcdHJldHVybiBmYWxzZTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk0OC1cXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NDk6XFx0cl9wYXJlbnQgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MzQsIHJfc2l6ZSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NTAtXFx0aWYgKHJfcGFyZW50IFxcdTAwM2MgMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTUxOlxcdFxcdGxkbV9lcnJvcihcXFwicl9wYXJlbnQgJWQgXFx1MDAzYyAwXFxcIiwgcl9wYXJlbnQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTUyLVxcdFxcdHJldHVybiBmYWxzZTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk1My1cXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NTQ6XFx0cl9kaXNraWQgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MzQsIHJfcGFyZW50KTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk1NS1cXHRpZiAocl9kaXNraWQgXFx1MDAzYyAwKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NTY6XFx0XFx0bGRtX2Vycm9yKFxcXCJyX2Rpc2tpZCAlZCBcXHUwMDNjIDBcXFwiLCByX2Rpc2tpZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NTctXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NTktXFx0aWYgKGJ1ZmZlclsweDEyXSBcXHUwMDI2IFZCTEtfRkxBR19QQVJUX0lOREVYKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5NjA6XFx0XFx0cl9pbmRleCA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgzNCwgcl9kaXNraWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTYxLVxcdFxcdGlmIChyX2luZGV4IFxcdTAwM2MgMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTYyOlxcdFxcdFxcdGxkbV9lcnJvcihcXFwicl9pbmRleCAlZCBcXHUwMDNjIDBcXFwiLCByX2luZGV4KTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk2My1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk2OC1cXHRpZiAobGVuIFxcdTAwM2MgMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTY5OlxcdFxcdGxkbV9lcnJvcihcXFwibGVuICVkIFxcdTAwM2MgMFxcXCIsIGxlbik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NzAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05NzMtXFx0aWYgKGxlbiBcXHUwMDNlIGdldF91bmFsaWduZWRfYmUzMihidWZmZXIgKyAweDE0KSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTc0OlxcdFxcdGxkbV9lcnJvcihcXFwibGVuICVkIFxcdTAwM2UgQkUzMihidWZmZXIgKyAweDE0KSAlZFxcXCIsIGxlbixcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk3NS1cXHRcXHRcXHRcXHRnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICsgMHgxNCkpO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05ODAtXFx0cGFydC1cXHUwMDNldm9sdW1lX29mZnNldCA9IGdldF91bmFsaWduZWRfYmU2NChidWZmZXIgKyAweDJDICsgcl9uYW1lKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk4MTpcXHRwYXJ0LVxcdTAwM2VzaXplID0gbGRtX2dldF92bnVtKGJ1ZmZlciArIDB4MzQgKyByX25hbWUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTgyOlxcdHBhcnQtXFx1MDAzZXBhcmVudF9pZCA9IGxkbV9nZXRfdm51bShidWZmZXIgKyAweDM0ICsgcl9zaXplKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk4MzpcXHRwYXJ0LVxcdTAwM2VkaXNrX2lkID0gbGRtX2dldF92bnVtKGJ1ZmZlciArIDB4MzQgKyByX3BhcmVudCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05ODQtXFx0aWYgKHZiLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZCTEtfRkxBR19QQVJUX0lOREVYKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05OTEtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5OTI6ICogbGRtX3BhcnNlX3ZvbDUgLSBSZWFkIGEgcmF3IFZCTEsgVm9sdW1lIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk5My0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAwMS0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMDI6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZvbDUoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAwMy17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMDgtXFx0QlVHX09OKCFidWZmZXIgfHwgIXZiKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMDk6XFx0cl9vYmppZCA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgMCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDEwLVxcdGlmIChyX29iamlkIFxcdTAwM2MgMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAxMTpcXHRcXHRsZG1fZXJyb3IoXFxcInJfb2JqaWQgJWQgXFx1MDAzYyAwXFxcIiwgcl9vYmppZCk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDEyLVxcdFxcdHJldHVybiBmYWxzZTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMTMtXFx0fVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAxNDpcXHRyX25hbWUgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfb2JqaWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAxNS1cXHRpZiAocl9uYW1lIFxcdTAwM2MgMCkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAxNjpcXHRcXHRsZG1fZXJyb3IoXFxcInJfbmFtZSAlZCBcXHUwMDNjIDBcXFwiLCByX25hbWUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAxNy1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDE4LVxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMTk6XFx0cl92dHlwZSA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9uYW1lKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMjAtXFx0aWYgKHJfdnR5cGUgXFx1MDAzYyAwKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDIxOlxcdFxcdGxkbV9lcnJvcihcXFwicl92dHlwZSAlZCBcXHUwMDNjIDBcXFwiLCByX3Z0eXBlKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEwMjItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAyMy1cXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMDI0OlxcdHJfZGlzYWJsZV9kcml2ZV9sZXR0ZXIgPSBsZG1fcmVsYXRpdmUoYnVmZmVyLCBidWZsZW4sIDB4MTgsIHJfdnR5cGUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTAyNS1cXHRpZiAocl9kaXNhYmxlX2RyaXZlX2xldHRlciBcXHUwMDNjIDApIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMjY6XFx0XFx0bGRtX2Vycm9yKFxcXCJyX2Rpc2FibGVfZHJpdmVfbGV0dGVyICVkIFxcdTAwM2MgMFxcXCIsXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDI3LVxcdFxcdFxcdFxcdHJfZGlzYWJsZV9kcml2ZV9sZXR0ZXIpO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDI5LVxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwMzA6XFx0cl9jaGlsZCA9IGxkbV9yZWxhdGl2ZShidWZmZXIsIGJ1ZmxlbiwgMHgyRCwgcl9kaXNhYmxlX2RyaXZlX2xldHRlcik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDMxLVxcdGlmIChyX2NoaWxkIFxcdTAwM2MgMCkge1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNToyNS40MTIxODY3MDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjA1OTM2NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBsZG1fcGFydGl0aW9uYCBFbnRyeXBvaW50KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbGRtX3BhcnRpdGlvbmAgZW50cnlwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgZnVuY3Rpb24sIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQncyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBzeXN0ZW0uIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyB0byBgbGRtX3BhcnRpdGlvbmAsIG1hcHBpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzLCBhbmQgZ2V0dGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGNhbGwgZmxvdy4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCdzICpjYWxsZWQgZnJvbSogaXMgY3J1Y2lhbCB0byBncmFzcGluZyBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgdGhlIGNvbnRleHQgaXQgb3BlcmF0ZXMgd2l0aGluLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGtub3dsZWRnZSBpcywgdGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBqdXN0IGNvZGUsIGl0IGlzIHRoZSBpbnRlZ3JhdGlvbiB0aGF0IGlzIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE2NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjI3LjYxODEyNjA5M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MjA0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGRtX3BhcnRpdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9wYXJ0aXRpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvY2hlY2suaD01OT1pbnQga2FybWFfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY2hlY2suaDo2MDppbnQgbGRtX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NoZWNrLmgtNjEtaW50IG1hY19wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSk7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0xNz1zdGF0aWMgaW50ICgqY29uc3QgY2hlY2tfcGFydFtdKShzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKikgPSB7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy01Ny0jaWZkZWYgQ09ORklHX0xETV9QQVJUSVRJT05cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo1ODpcXHRsZG1fcGFydGl0aW9uLFxcdFxcdC8qIHRoaXMgbXVzdCBjb21lIGJlZm9yZSBtc2RvcyAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTU5LSNlbmRpZlxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0xNDExPXN0YXRpYyB2b2lkIGxkbV9mcmVlX3ZibGtzIChzdHJ1Y3QgbGlzdF9oZWFkICpsaClcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQyMi0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE0MjM6ICogbGRtX3BhcnRpdGlvbiAtIEZpbmQgb3V0IHdoZXRoZXIgYSBkZXZpY2UgaXMgYSBkeW5hbWljIGRpc2sgYW5kIGhhbmRsZSBpdFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQyNC0gKiBAc3RhdGU6IFBhcnRpdGlvbiBjaGVjayBzdGF0ZSBpbmNsdWRpbmcgZGV2aWNlIGhvbGRpbmcgdGhlIExETSBEYXRhYmFzZVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNDM4LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTQzOTppbnQgbGRtX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQ0MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjI3LjY2NTg1MjAzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjY2MjQ5NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBMRE0gUGFydGl0aW9uaW5nIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBleGFtaW5lIHRoZSBzdGF0aWMgdmVyc3VzIG5vbi1zdGF0aWMgc3ltYm9sIHNpdHVhdGlvbiBmb3IgYGxkbV9nZXRfdnN0cmAgYW5kIGBsZG1fcGFyc2VfdmJsa2AuIFNwZWNpZmljYWxseSwgSSB3YXMgbG9va2luZyBhdCBgYmxvY2svcGFydGl0aW9ucy9sZG0uY2AuIEkgbm90ZWQgdGhhdCBgbGRtX3BhcnRpdGlvbmAgaXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgb3VyIGVudHJ5IHBvaW50LiBIb3dldmVyLCB0aGUgb3RoZXJzLCBgbGRtX2dldF92c3RyYCwgYGxkbV9wYXJzZV9jbXAzYCwgYGxkbV9wYXJzZV9kZ3IzYCwgYGxkbV9wYXJzZV9kZ3I0YCwgYGxkbV9wYXJzZV9kc2szYCwgYGxkbV9wYXJzZV92b2w1YCwgYW5kIGBsZG1fcGFyc2VfdmJsa2AsIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNhbWUgZmlsZS5cblxuVGhlbiBJIGhhZCBhICptb21lbnQqLiBJbiBtb2Rlcm4ga2VybmVsIGJ1aWxkcyB3aXRoIHN5bWJvbCB0YWJsZXMgYW5kIHRvb2xzIGxpa2Uga2FsbHN5bXMsIGtjb3YsIGFuZCBzeXprYWxsZXIsIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGEgYC5jYCBmaWxlICphcmUqIGV4cG9zZWQgYXMgc3ltYm9scyBpbiBgdm1saW51eGAsIGFzIGxvbmcgYXMgdGhlIGNvbXBpbGVyIGhhc24ndCBpbmxpbmVkIHRoZW0gYW5kIHRoZXkgYXJlbid0IGluIGhlYWRlciBmaWxlcy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgaW4gdGhlIGNvbnRleHQgb2YgZnV6emluZywgYW5kIEkgcmVtZW1iZXJlZCB0aGUgXCJGb2N1c1N5bWJvbHNcIiBndWlkZWxpbmUsIHdoaWNoIGlzIGluY3JlZGlibHkgdXNlZnVsIGZvciBkaXJlY3RpbmcgZnV6emluZyBlZmZvcnRzLiBJdCBzdHJlc3NlcyB0aGUgaW1wb3J0YW5jZSBvZiBsaXN0aW5nIGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGNvcmUgbG9naWMgb3IgQVBJIGVudHJ5IHBvaW50cy4gSXQgYWxzbyBub3RlcyB0aGF0IGlubGluZSBzdGF0aWMgZnVuY3Rpb25zIGluIGhlYWRlcnMgYXJlIG1vcmUgZGlmZmljdWx0LCBhbmQgc3VnZ2VzdHMgZm9jdXNpbmcgb24gbm9uLXN0YXRpYyBjYWxsZXIgZnVuY3Rpb25zIGluIGAuY2AgZmlsZXMgaW5zdGVhZC5cblxuTm93LCBjb25zaWRlcmluZyBhbGwgZnVuY3Rpb25zIChgbGRtX2dldF92c3RyYCwgYGxkbV9wYXJzZV92YmxrYCwgYGxkbV9wYXJ0aXRpb25gLCBgbGRtX3BhcnNlX2NtcDNgLCBgbGRtX3BhcnNlX2RncjNgLCBgbGRtX3BhcnNlX2RncjRgLCBgbGRtX3BhcnNlX2RzazNgLCBhbmQgYGxkbV9wYXJzZV92b2w1YCkgYXJlIGluIGBibG9jay9wYXJ0aXRpb25zL2xkbS5jYCwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIG9mIGBsZG1fZ2V0X3ZzdHJgIG9yIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhIGhhdmUgYmVlbiBtb2RpZmllZC5cblxuU28sIHRha2luZyBzdG9jayBvZiB3aGF0J3MgYmVlbiBjaGFuZ2VkLCBpdCdzOiBgbGRtX2dldF92c3RyYCwgYGxkbV9wYXJzZV9jbXAzYCwgYGxkbV9wYXJzZV9kZ3IzYCwgYGxkbV9wYXJzZV9kZ3I0YCwgYGxkbV9wYXJzZV9kc2szYCwgYGxkbV9wYXJzZV92b2w1YCwgYW5kIGBsZG1fcGFyc2VfdmJsa2AuIFBsdXMsIHRoZSBlbnRyeXBvaW50IGlzIGBsZG1fcGFydGl0aW9uYC5cblxuTm93IHRvIHRoZSBrZXkgcXVlc3Rpb246IElzIHRoaXMgV29ydGhGdXp6aW5nPyBUaGUgYW5zd2VyIGlzIGxvb2tpbmcgbGlrZSBhIHNvbGlkIHllcy4gSXQgdG91Y2hlcyBibG9jayBwYXJ0aXRpb24gcGFyc2luZyBsb2dpYyB3aXRoaW4gYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgLCB3aGljaCBpcyBleGVjdXRlZCB3aGVuIGJsb2NrIGRldmljZXMgZ2V0IHBhcnRpdGlvbmVkIG9yIHNjYW5uZWQ7IHRoaW5ncyBsaWtlIGxvb3AsIG5iZCwgdmlydGlvLCBhbmQgcmFtZGlzayBhcmUgYWxsIGFmZmVjdGVkLiBJdCBhbHNvIGxvb2tzIHJlYWNoYWJsZSBpbiBRRU1VIGFuZCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFBsdXMsIGl0IG1vZGlmaWVzIHN0cmluZyBsZW5ndGggYm91bmRzIGFuZCBjaGVja2luZyBsb2dpYy4gUGVyZmVjdC5cblxuTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSW4gYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AsIGl0J3MgY2xlYXI6IGBjb25maWcgTERNX1BBUlRJVElPTmAgZGVwZW5kcyBvbiBgUEFSVElUSU9OX0FEVkFOQ0VEYC4gU28sIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBmb3IgYFBBUlRJVElPTl9BRFZBTkNFRGAgZm9yIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGJlZm9yZSBnb2luZyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcyNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNTozMi45MzIxMDM5NjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODg3MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQVJUSVRJT05fQURWQU5DRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svcGFydGl0aW9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9wYXJ0aXRpb25zL0tjb25maWc9NT1tZW51IFxcXCJQYXJ0aXRpb24gVHlwZXNcXFwiXFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTYtXFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnOjc6Y29uZmlnIFBBUlRJVElPTl9BRFZBTkNFRFxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy04LVxcdGJvb2wgXFxcIkFkdmFuY2VkIHBhcnRpdGlvbiBzZWxlY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjMyLjk3Nzk5NzEwOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTY1NzgxOTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgUEFSVElUSU9OX0FEVkFOQ0VEYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgUEFSVElUSU9OX0FEVkFOQ0VEYCBkb2Vzbid0IGhhdmUgYW55IGRlcGVuZGVuY2llcyAqb3RoZXIqIHRoYW4gaXRzZWxmLCB3aGljaCBJJ2xsIGtlZXAgaW4gbWluZCBhcyBJIGNvbnRpbnVlIHRvIHJldmlldy4gVGhlIGltbWVkaWF0ZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywgdGhlcmVmb3JlLCBzZWVtIHRvIGJlIGBMRE1fUEFSVElUSU9OYCBhbmQsIG9idmlvdXNseSwgYFBBUlRJVElPTl9BRFZBTkNFRGAuXG5cbk5vdywgbGV0J3MgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBsaXN0IG9mIEZvY3VzU3ltYm9scyBwcm92aWRlZC4gSSBzZWUgYSBmYW1pbGlhciBzZXQgb2YgZnVuY3Rpb24gY2FsbHMgdGhhdCBhcHBlYXIgdG8gYmUgb3VyIGNvcmUgcGFyc2luZyByb3V0aW5lcyB3aXRoaW4gdGhlIExETSBtb2R1bGUuIEdvb2QsIEknbGwga2VlcCBhbiBleWUgb24gdGhlbTogYGxkbV9nZXRfdnN0cmAsIGBsZG1fcGFyc2VfY21wM2AsIGBsZG1fcGFyc2VfZGdyM2AsIGBsZG1fcGFyc2VfZGdyNGAsIGBsZG1fcGFyc2VfZHNrM2AsIGBsZG1fcGFyc2Vfdm9sNWAsIGBsZG1fcGFyc2VfdmJsa2AsIGFuZCBvZiBjb3Vyc2UsIGBsZG1fcGFydGl0aW9uYC5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRpZmYgZGlyZWN0bHkgaW1wYWN0cyB0aGVzZSBmdW5jdGlvbnMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNpZGUtZWZmZWN0cywgSSB3YW50IHRvIGNhdGNoIHRoZW0gaW1tZWRpYXRlbHkuIE9rYXksIGxvb2tpbmcgYXQgdGhlIGRpZmYsIGl0IGNvbmZpcm1zIHRoYXQgYWxsIDcgb2YgdGhvc2UgcGFyc2luZyBmdW5jdGlvbnMgYXJlIGluZGVlZCBtb2RpZmllZC4gTGluZXMgNjgwLTcxMCwgNzUyLTc1NiwgNzkwLTgwMiwgODI5LTg0MSwgODY0LTg3NywgMTA3Mi0xMDkyLCBhbmQgMTExNS0xMTI4LCByZXNwZWN0aXZlbHkuIEl0IHNlZW1zIHRoYXQgYGxkbV9wYXJ0aXRpb25gIGlzIHRoZSBlbnRyeSBwb2ludCwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbk5vdyBsZXQncyB2ZXJpZnkgc2NvcGUuIE9rYXksIEkgb25seSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgYmxvY2svcGFydGl0aW9ucy9sZG0uY2AuIEdvb2QuXG5cbkFuZCBmaW5hbGx5LCB0byByZWl0ZXJhdGUsIGl0J3MgY2xlYXIgdGhhdCBgQ09ORklHX0xETV9QQVJUSVRJT05gIHJlcXVpcmVzIGBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEYCwgd2hpY2ggY29uZmlybXMgZXZlcnl0aGluZy5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gc2F0aXNmaWVkLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQwLCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNTozNi45NDM3ODE0ODlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjMxODEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFSVElUSU9OX0FEVkFOQ0VEXCIsXG4gICAgXCJMRE1fUEFSVElUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibGRtX2dldF92c3RyXCIsXG4gICAgXCJsZG1fcGFyc2VfdmJsa1wiLFxuICAgIFwibGRtX3BhcnNlX2NtcDNcIixcbiAgICBcImxkbV9wYXJzZV9kZ3IzXCIsXG4gICAgXCJsZG1fcGFyc2VfZGdyNFwiLFxuICAgIFwibGRtX3BhcnNlX2RzazNcIixcbiAgICBcImxkbV9wYXJzZV92b2w1XCIsXG4gICAgXCJsZG1fcGFydGl0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpbmRvd3MgTG9naWNhbCBEaXNrIE1hbmFnZXIgKExETSkgcGFydGl0aW9uIHBhcnNlciBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgd2hlbiByZWFkaW5nIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmdzLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGJsb2NrIGRldmljZSBwYXJ0aXRpb24gc2Nhbm5pbmcgKGUuZy4sIGxvb3AgZGV2aWNlcykgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB0cnVuY2F0aW9ucywgb3IgdW5leHBlY3RlZCBwYXJzZXIgYmVoYXZpb3JzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBUlRJVElPTl9BRFZBTkNFRFwiLFxuICAgIFwiTERNX1BBUlRJVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxkbV9nZXRfdnN0clwiLFxuICAgIFwibGRtX3BhcnNlX3ZibGtcIixcbiAgICBcImxkbV9wYXJzZV9jbXAzXCIsXG4gICAgXCJsZG1fcGFyc2VfZGdyM1wiLFxuICAgIFwibGRtX3BhcnNlX2RncjRcIixcbiAgICBcImxkbV9wYXJzZV9kc2szXCIsXG4gICAgXCJsZG1fcGFyc2Vfdm9sNVwiLFxuICAgIFwibGRtX3BhcnRpdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaW5kb3dzIExvZ2ljYWwgRGlzayBNYW5hZ2VyIChMRE0pIHBhcnRpdGlvbiBwYXJzZXIgaW4gYmxvY2svcGFydGl0aW9ucy9sZG0uYyB0byBhZGQgYm91bmRzIGNoZWNraW5nIHdoZW4gcmVhZGluZyBsZW5ndGgtcHJlZml4ZWQgc3RyaW5ncywgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBibG9jayBkZXZpY2UgcGFydGl0aW9uIHNjYW5uaW5nIChlLmcuLCBsb29wIGRldmljZXMpIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgdHJ1bmNhdGlvbnMsIG9yIHVuZXhwZWN0ZWQgcGFyc2VyIGJlaGF2aW9ycyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MTU6MzcuMDIwMTIxNzc3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkzMzExMDg1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjM3LjAyMDYwNjM1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5OTMyNjIyODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIGJ5IGFkZGluZyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IGJ1ZmZlciBsZW5ndGggKGBibG9ja2xlbmApIHdpdGhpbiBgbGRtX2dldF92c3RyKClgLiBQcmV2aW91c2x5LCBgbGRtX2dldF92c3RyKClgIG9ubHkgY2hlY2tlZCBvdXRwdXQgYnVmZmVyIGJvdW5kcyAoYGJ1ZmxlbmApLCBhbGxvd2luZyBhIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgbGVuZ3RoIGJ5dGUgaW4gYSBwYXJ0aXRpb24gc3RydWN0dXJlIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gXFxuXFxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIGZ1bGx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgKEtNU0FOIGRvbWFpbikuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2YwZGQ0M2ZkNzIzZDlmMjQ5YmRmN2E5MDMwMzA0MTJmMGFkNjViZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMjE6MTU6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2xkbS5jIGIvYmxvY2svcGFydGl0aW9ucy9sZG0uY1xuaW5kZXggYzBiZGNhZTU4YTNlZS4uNTQ2OGUwMzhhMDlmNCAxMDA2NDRcbi0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcbisrKyBiL2Jsb2NrL3BhcnRpdGlvbnMvbGRtLmNcbkBAIC02NzMsNiArNjczLDcgQEAgc3RhdGljIHU2NCBsZG1fZ2V0X3ZudW0gKGNvbnN0IHU4ICpibG9jaylcbiAvKipcbiAgKiBsZG1fZ2V0X3ZzdHIgLSBSZWFkIGEgbGVuZ3RoLXByZWZpeGVkIHN0cmluZyBpbnRvIGEgYnVmZmVyXG4gICogQGJsb2NrOiAgIFBvaW50ZXIgdG8gdGhlIGxlbmd0aCBtYXJrZXJcbisgKiBAYmxvY2tsZW46IE51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgQGJsb2NrXG4gICogQGJ1ZmZlcjogIExvY2F0aW9uIHRvIGNvcHkgc3RyaW5nIHRvXG4gICogQGJ1ZmxlbjogIFNpemUgb2YgdGhlIG91dHB1dCBidWZmZXJcbiAgKlxuQEAgLTY4MCwyMCArNjgxLDI3IEBAIHN0YXRpYyB1NjQgbGRtX2dldF92bnVtIChjb25zdCB1OCAqYmxvY2spXG4gICogdGhleSBhcmUgcHJlZml4ZWQgYnkgYSBvbmUgYnl0ZSBsZW5ndGggbWFya2VyLiAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgb25lIG9mXG4gICogdGhlc2Ugc3RyaW5ncyBpbnRvIGEgYnVmZmVyLlxuICAqXG4tICogTi5CLiAgVGhpcyBmdW5jdGlvbiBET0VTIE5PVCBwZXJmb3JtIGFueSByYW5nZSBjaGVja2luZyBvbiB0aGUgaW5wdXQuXG4tICogICAgICAgSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwsIHRoZSBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQuXG4rICogTi5CLiAgVGhlIHN0cmluZyBpcyBjbGFtcGVkIHRvIGJvdGggQGJsb2NrbGVuIGFuZCBAYnVmbGVuOyBpZiBlaXRoZXJcbisgKiAgICAgICBpcyB0b28gc21hbGwgdGhlIG91dHB1dCB3aWxsIGJlIHRydW5jYXRlZC5cbiAgKlxuICAqIFJldHVybjogIDAsIEVycm9yIGFuZCBAYnVmZmVyIGNvbnRlbnRzIGFyZSB1bmRlZmluZWRcbiAgKiAgICAgICAgICBuLCBTdHJpbmcgbGVuZ3RoIGluIGNoYXJhY3RlcnMgKGV4Y2x1ZGluZyBOVUxMKVxuICAqICAgICAgICAgIGJ1Zmxlbi0xLCBTdHJpbmcgd2FzIHRydW5jYXRlZC5cbiAgKi9cbi1zdGF0aWMgaW50IGxkbV9nZXRfdnN0ciAoY29uc3QgdTggKmJsb2NrLCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuK3N0YXRpYyBpbnQgbGRtX2dldF92c3RyKGNvbnN0IHU4ICpibG9jaywgaW50IGJsb2NrbGVuLCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuKVxuIHtcbiBcdGludCBsZW5ndGg7XG4gXG4gXHRCVUdfT04gKCFibG9jayB8fCAhYnVmZmVyKTtcbiBcbitcdGlmIChibG9ja2xlbiBcdTAwM2MgMSkge1xuK1x0XHRidWZmZXJbMF0gPSAnXFwwJztcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gXHRsZW5ndGggPSBibG9ja1swXTtcbitcdGlmIChsZW5ndGggXHUwMDNlIGJsb2NrbGVuIC0gMSlcbitcdFx0bGVuZ3RoID0gYmxvY2tsZW4gLSAxO1xuIFx0aWYgKGxlbmd0aCBcdTAwM2U9IGJ1Zmxlbikge1xuIFx0XHRsZG1fZXJyb3IgKFwiVHJ1bmNhdGluZyBzdHJpbmcgJWQgLVx1MDAzZSAlZC5cIiwgbGVuZ3RoLCBidWZsZW4pO1xuIFx0XHRsZW5ndGggPSBidWZsZW4gLSAxO1xuQEAgLTc0NCw4ICs3NTIsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfY21wMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRjb21wID0gXHUwMDI2dmItXHUwMDNldmJsay5jb21wO1xuLVx0bGRtX2dldF92c3RyIChidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBjb21wLVx1MDAzZXN0YXRlLFxuLVx0XHRzaXplb2YgKGNvbXAtXHUwMDNlc3RhdGUpKTtcbitcdGxkbV9nZXRfdnN0cihidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBidWZsZW4gLSAoMHgxOCArIHJfbmFtZSksXG4rXHRcdGNvbXAtXHUwMDNlc3RhdGUsIHNpemVvZihjb21wLVx1MDAzZXN0YXRlKSk7XG4gXHRjb21wLVx1MDAzZXR5cGUgICAgICA9IGJ1ZmZlclsweDE4ICsgcl92c3RhdGVdO1xuIFx0Y29tcC1cdTAwM2VjaGlsZHJlbiAgPSBsZG1fZ2V0X3ZudW0gKGJ1ZmZlciArIDB4MUQgKyByX3ZzdGF0ZSk7XG4gXHRjb21wLVx1MDAzZXBhcmVudF9pZCA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICsgMHgyRCArIHJfY2hpbGQpO1xuQEAgLTc5MCw4ICs3OTgsOCBAQCBzdGF0aWMgaW50IGxkbV9wYXJzZV9kZ3IzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGRncnAgPSBcdTAwMjZ2Yi1cdTAwM2V2YmxrLmRncnA7XG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciArIDB4MTggKyByX25hbWUsIGRncnAtXHUwMDNlZGlza19pZCxcbi1cdFx0c2l6ZW9mIChkZ3JwLVx1MDAzZWRpc2tfaWQpKTtcbitcdGxkbV9nZXRfdnN0cihidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBidWZsZW4gLSAoMHgxOCArIHJfbmFtZSksXG4rXHRcdGRncnAtXHUwMDNlZGlza19pZCwgc2l6ZW9mKGRncnAtXHUwMDNlZGlza19pZCkpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTgyOSw3ICs4MzcsOCBAQCBzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZGdyNCAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxuIFx0aWYgKGxlbiAhPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyICsgMHgxNCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGxkbV9nZXRfdnN0ciAoYnVmZmVyICsgMHgxOCArIHJfb2JqaWQsIGJ1Ziwgc2l6ZW9mIChidWYpKTtcbitcdGxkbV9nZXRfdnN0cihidWZmZXIgKyAweDE4ICsgcl9vYmppZCwgYnVmbGVuIC0gKDB4MTggKyByX29iamlkKSxcbitcdFx0YnVmLCBzaXplb2YoYnVmKSk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtODY0LDggKzg3Myw4IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV9kc2szIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGRpc2sgPSBcdTAwMjZ2Yi1cdTAwM2V2YmxrLmRpc2s7XG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZmZlciArIDB4MTggKyByX2Rpc2tpZCwgZGlzay1cdTAwM2VhbHRfbmFtZSxcbi1cdFx0c2l6ZW9mIChkaXNrLVx1MDAzZWFsdF9uYW1lKSk7XG4rXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfZGlza2lkLCBidWZsZW4gLSAoMHgxOCArIHJfZGlza2lkKSxcbitcdFx0ZGlzay1cdTAwM2VhbHRfbmFtZSwgc2l6ZW9mKGRpc2stXHUwMDNlYWx0X25hbWUpKTtcbiBcdGlmICh1dWlkX3BhcnNlKGJ1ZmZlciArIDB4MTkgKyByX25hbWUsIFx1MDAyNmRpc2stXHUwMDNlZGlza19pZCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC0xMDcyLDE2ICsxMDgxLDE2IEBAIHN0YXRpYyBib29sIGxkbV9wYXJzZV92b2w1KGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFx0dm9sdSA9IFx1MDAyNnZiLVx1MDAzZXZibGsudm9sdTtcbi1cdGxkbV9nZXRfdnN0cihidWZmZXIgKyAweDE4ICsgcl9uYW1lLCB2b2x1LVx1MDAzZXZvbHVtZV90eXBlLFxuLVx0XHRcdHNpemVvZih2b2x1LVx1MDAzZXZvbHVtZV90eXBlKSk7XG4rXHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHgxOCArIHJfbmFtZSwgYnVmbGVuIC0gKDB4MTggKyByX25hbWUpLFxuK1x0XHRcdHZvbHUtXHUwMDNldm9sdW1lX3R5cGUsIHNpemVvZih2b2x1LVx1MDAzZXZvbHVtZV90eXBlKSk7XG4gXHRtZW1jcHkodm9sdS1cdTAwM2V2b2x1bWVfc3RhdGUsIGJ1ZmZlciArIDB4MTggKyByX2Rpc2FibGVfZHJpdmVfbGV0dGVyLFxuIFx0XHRcdHNpemVvZih2b2x1LVx1MDAzZXZvbHVtZV9zdGF0ZSkpO1xuIFx0dm9sdS1cdTAwM2VzaXplID0gbGRtX2dldF92bnVtKGJ1ZmZlciArIDB4M0QgKyByX2NoaWxkKTtcbiBcdHZvbHUtXHUwMDNlcGFydGl0aW9uX3R5cGUgPSBidWZmZXJbMHg0MSArIHJfc2l6ZV07XG4gXHRtZW1jcHkodm9sdS1cdTAwM2VndWlkLCBidWZmZXIgKyAweDQyICsgcl9zaXplLCBzaXplb2Yodm9sdS1cdTAwM2VndWlkKSk7XG4gXHRpZiAoYnVmZmVyWzB4MTJdIFx1MDAyNiBWQkxLX0ZMQUdfVk9MVV9EUklWRSkge1xuLVx0XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHg1MiArIHJfc2l6ZSwgdm9sdS1cdTAwM2Vkcml2ZV9oaW50LFxuLVx0XHRcdFx0c2l6ZW9mKHZvbHUtXHUwMDNlZHJpdmVfaGludCkpO1xuK1x0XHRsZG1fZ2V0X3ZzdHIoYnVmZmVyICsgMHg1MiArIHJfc2l6ZSwgYnVmbGVuIC0gKDB4NTIgKyByX3NpemUpLFxuK1x0XHRcdFx0dm9sdS1cdTAwM2Vkcml2ZV9oaW50LCBzaXplb2Yodm9sdS1cdTAwM2Vkcml2ZV9oaW50KSk7XG4gXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTExNSw3ICsxMTI0LDggQEAgc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZibGsgKGNvbnN0IHU4ICpidWYsIGludCBsZW4sIHN0cnVjdCB2YmxrICp2YilcbiBcdHZiLVx1MDAzZWZsYWdzICA9IGJ1ZlsweDEyXTtcbiBcdHZiLVx1MDAzZXR5cGUgICA9IGJ1ZlsweDEzXTtcbiBcdHZiLVx1MDAzZW9ial9pZCA9IGxkbV9nZXRfdm51bSAoYnVmICsgMHgxOCk7XG4tXHRsZG1fZ2V0X3ZzdHIgKGJ1ZisweDE4K3Jfb2JqaWQsIHZiLVx1MDAzZW5hbWUsIHNpemVvZiAodmItXHUwMDNlbmFtZSkpO1xuK1x0bGRtX2dldF92c3RyKGJ1ZiArIDB4MTggKyByX29iamlkLCBsZW4gLSAoMHgxOCArIHJfb2JqaWQpLFxuK1x0XHR2Yi1cdTAwM2VuYW1lLCBzaXplb2YodmItXHUwMDNlbmFtZSkpO1xuIFxuIFx0c3dpdGNoICh2Yi1cdTAwM2V0eXBlKSB7XG4gXHRcdGNhc2UgVkJMS19DTVAzOiAgcmVzdWx0ID0gbGRtX3BhcnNlX2NtcDMgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MTU6MzcuMDIwNjA3NDI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0Njg3ODI4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgdXNlcidzIHBvbmRlcmluZyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGl0cyBvd24gS01TQU4gZnV6emluZyBydW4uIFRoYXQncyBhIHJlYXNvbmFibGUgcXVlc3Rpb247IHdlIG5lZWQgdG8gYXNzZXNzIHRoZSByaXNrLiBMZXQncyBkaWcgaW4uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgYmxvY2svcGFydGl0aW9ucy9sZG0uY2AuIFJpZ2h0LCBzbyBsb2dpY2FsIGRpc2sgbWFuYWdlbWVudCwgaW50ZXJlc3RpbmcuLi4gcG90ZW50aWFsbHkgY29tcGxleC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhhdCBmaWxlIHRvIGdhdWdlIHRoZSBpbXBhY3QuXG5cbkxldCdzIHF1aWNrbHkgZ2V0IHRoZSBjb2RlIHVwLiBJIGNhbiB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHB1bGwgdXAgYGJsb2NrL3BhcnRpdGlvbnMvbGRtLmNgIGFuZCBnZXQgYSBmZWVsIGZvciB3aGF0J3MgZ29pbmcgb24gYXJvdW5kIHRoZSBtb2RpZmllZCBzZWN0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHNjcmVhbXMgXCJwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb25cIiBvciB0aGF0IG9wZXJhdGVzIG9uIGRhdGEgc3RydWN0dXJlcyBpbiBhIHdheSB0aGF0IG1pZ2h0IGV4cG9zZSBLTVNBTiBpc3N1ZXMuIE9uY2UgSSBoYXZlIGEgZ29vZCBjb250ZXh0LCBJIGNhbiBtYWtlIGEgbW9yZSBpbmZvcm1lZCBkZWNpc2lvbiBhYm91dCB3aGV0aGVyIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiBpcyB0aGUgcmlnaHQgbW92ZS4gSSBuZWVkIHRvIGJhbGFuY2UgdGhlIGNvc3Qgb2Ygc2V0dGluZyB1cCBhIG5ldyBzZXNzaW9uIHdpdGggdGhlIHBvdGVudGlhbCBiZW5lZml0IG9mIGNhdGNoaW5nIHN1YnRsZSBLTVNBTiBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODU4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNTo0MS40ODkzOTI5MTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL3BhcnRpdGlvbnMvbGRtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjcwOlxcdFxcdHJldHVybiB0bXA7XFxuIDY3MTpcXHR9XFxuIDY3MjpcXHRcXG4gNjczOlxcdC8qKlxcbiA2NzQ6XFx0ICogbGRtX2dldF92c3RyIC0gUmVhZCBhIGxlbmd0aC1wcmVmaXhlZCBzdHJpbmcgaW50byBhIGJ1ZmZlclxcbiA2NzU6XFx0ICogQGJsb2NrOiAgIFBvaW50ZXIgdG8gdGhlIGxlbmd0aCBtYXJrZXJcXG4gNjc2OlxcdCAqIEBibG9ja2xlbjogTnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBAYmxvY2tcXG4gNjc3OlxcdCAqIEBidWZmZXI6ICBMb2NhdGlvbiB0byBjb3B5IHN0cmluZyB0b1xcbiA2Nzg6XFx0ICogQGJ1ZmxlbjogIFNpemUgb2YgdGhlIG91dHB1dCBidWZmZXJcXG4gNjc5OlxcdCAqXFxuIDY4MDpcXHQgKiBNYW55IG9mIHRoZSBzdHJpbmdzIGluIHRoZSBMRE0gRGF0YWJhc2UgYXJlIG5vdCBOVUxMIHRlcm1pbmF0ZWQuICBJbnN0ZWFkXFxuIDY4MTpcXHQgKiB0aGV5IGFyZSBwcmVmaXhlZCBieSBhIG9uZSBieXRlIGxlbmd0aCBtYXJrZXIuICBUaGlzIGZ1bmN0aW9uIGNvcGllcyBvbmUgb2ZcXG4gNjgyOlxcdCAqIHRoZXNlIHN0cmluZ3MgaW50byBhIGJ1ZmZlci5cXG4gNjgzOlxcdCAqXFxuIDY4NDpcXHQgKiBOLkIuICBUaGUgc3RyaW5nIGlzIGNsYW1wZWQgdG8gYm90aCBAYmxvY2tsZW4gYW5kIEBidWZsZW47IGlmIGVpdGhlclxcbiA2ODU6XFx0ICogICAgICAgaXMgdG9vIHNtYWxsIHRoZSBvdXRwdXQgd2lsbCBiZSB0cnVuY2F0ZWQuXFxuIDY4NjpcXHQgKlxcbiA2ODc6XFx0ICogUmV0dXJuOiAgMCwgRXJyb3IgYW5kIEBidWZmZXIgY29udGVudHMgYXJlIHVuZGVmaW5lZFxcbiA2ODg6XFx0ICogICAgICAgICAgbiwgU3RyaW5nIGxlbmd0aCBpbiBjaGFyYWN0ZXJzIChleGNsdWRpbmcgTlVMTClcXG4gNjg5OlxcdCAqICAgICAgICAgIGJ1Zmxlbi0xLCBTdHJpbmcgd2FzIHRydW5jYXRlZC5cXG4gNjkwOlxcdCAqL1xcbiA2OTE6XFx0c3RhdGljIGludCBsZG1fZ2V0X3ZzdHIoY29uc3QgdTggKmJsb2NrLCBpbnQgYmxvY2tsZW4sIHU4ICpidWZmZXIsIGludCBidWZsZW4pXFxuIDY5MjpcXHR7XFxuIDY5MzpcXHRcXHRpbnQgbGVuZ3RoO1xcbiA2OTQ6XFx0XFxuIDY5NTpcXHRcXHRCVUdfT04gKCFibG9jayB8fCAhYnVmZmVyKTtcXG4gNjk2OlxcdFxcbiA2OTc6XFx0XFx0aWYgKGJsb2NrbGVuIFxcdTAwM2MgMSkge1xcbiA2OTg6XFx0XFx0XFx0YnVmZmVyWzBdID0gJ1xcXFwwJztcXG4gNjk5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA3MDA6XFx0XFx0fVxcbiA3MDE6XFx0XFxuIDcwMjpcXHRcXHRsZW5ndGggPSBibG9ja1swXTtcXG4gNzAzOlxcdFxcdGlmIChsZW5ndGggXFx1MDAzZSBibG9ja2xlbiAtIDEpXFxuIDcwNDpcXHRcXHRcXHRsZW5ndGggPSBibG9ja2xlbiAtIDE7XFxuIDcwNTpcXHRcXHRpZiAobGVuZ3RoIFxcdTAwM2U9IGJ1Zmxlbikge1xcbiA3MDY6XFx0XFx0XFx0bGRtX2Vycm9yIChcXFwiVHJ1bmNhdGluZyBzdHJpbmcgJWQgLVxcdTAwM2UgJWQuXFxcIiwgbGVuZ3RoLCBidWZsZW4pO1xcbiA3MDc6XFx0XFx0XFx0bGVuZ3RoID0gYnVmbGVuIC0gMTtcXG4gNzA4OlxcdFxcdH1cXG4gNzA5OlxcdFxcdG1lbWNweSAoYnVmZmVyLCBibG9jayArIDEsIGxlbmd0aCk7XFxuIDcxMDpcXHRcXHRidWZmZXJbbGVuZ3RoXSA9IDA7XFxuIDcxMTpcXHRcXHRyZXR1cm4gbGVuZ3RoO1xcbiA3MTI6XFx0fVxcbiA3MTM6XFx0XFxuIDcxNDpcXHRcXG4gNzE1OlxcdC8qKlxcbiA3MTY6XFx0ICogbGRtX3BhcnNlX2NtcDMgLSBSZWFkIGEgcmF3IFZCTEsgQ29tcG9uZW50IG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG4gNzE3OlxcdCAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbiA3MTg6XFx0ICogQGJ1ZmxlbjogIFNpemUgb2YgdGhlIGJsb2NrIG9mIGRhdGFcXG4gNzE5OlxcdCAqIEB2YjogICAgICBJbi1tZW1vcnkgdmJsayBpbiB3aGljaCB0byByZXR1cm4gaW5mb3JtYXRpb25cXG4gNzIwOlxcdCAqXFxuIDcyMTpcXHQgKiBSZWFkIGEgcmF3IFZCTEsgQ29tcG9uZW50IG9iamVjdCAodmVyc2lvbiAzKSBpbnRvIGEgdmJsayBzdHJ1Y3R1cmUuXFxuIDcyMjpcXHQgKlxcbiA3MjM6XFx0ICogUmV0dXJuOiAgJ3RydWUnICAgQHZiIGNvbnRhaW5zIGEgQ29tcG9uZW50IFZCTEtcXG4gNzI0OlxcdCAqICAgICAgICAgICdmYWxzZScgIEB2YiBjb250ZW50cyBhcmUgbm90IGRlZmluZWRcXG4gNzI1OlxcdCAqL1xcbiA3MjY6XFx0c3RhdGljIGJvb2wgbGRtX3BhcnNlX2NtcDMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG4gNzI3OlxcdHtcXG4gNzI4OlxcdFxcdGludCByX29iamlkLCByX25hbWUsIHJfdnN0YXRlLCByX2NoaWxkLCByX3BhcmVudCwgcl9zdHJpcGUsIHJfY29scywgbGVuO1xcbiA3Mjk6XFx0XFx0c3RydWN0IHZibGtfY29tcCAqY29tcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MTU6NDEuNDg5NTEyODY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4OTQyOTg4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQWRkcmVzc2luZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFJlYWQgaW4gYGxkbV9nZXRfdnN0cmAqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoaXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBpbiB0aGUgTG9naWNhbCBEaXNrIE1hbmFnZXIgKExETSkgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgYGxkbV9nZXRfdnN0cigpYCBmdW5jdGlvbiwgd2l0aGluIGBsZG0uY2AsIGhhcyBiZWVuIG1vZGlmaWVkLlxuXG5QcmV2aW91c2x5LCBgbGRtX2dldF92c3RyYCB3YXMgdnVsbmVyYWJsZS4gSXQgcmVhZCBhIGxlbmd0aCBieXRlIChgYmxvY2tbMF1gKSBhbmQgY29waWVkIGBsZW5ndGhgIGJ5dGVzIGZyb20gYGJsb2NrICsgMWAgaW50byB0aGUgcHJvdmlkZWQgYGJ1ZmZlcmAuIFRoZSBvcmlnaW5hbCBjb2RlIG9ubHkgY2hlY2tlZCBhZ2FpbnN0IHRoZSBidWZmZXIgbGVuZ3RoIChgYnVmbGVuYCkgcGFzc2VkIGluIGZvciB0aGUgKmRlc3RpbmF0aW9uKiBidWZmZXIsIGJ1dCBub3QgYWdhaW5zdCB0aGUgKnNvdXJjZSogYnVmZmVyIGxlbmd0aC4gSWYgdGhlIHZhbHVlIGluIGBibG9ja1swXWAgc3BlY2lmaWVkIGEgbGVuZ3RoIGxhcmdlciB0aGFuIHRoZSBhdmFpbGFibGUgZGF0YSBpbiB0aGUgaW5wdXQgYnVmZmVyIChgYmxvY2tsZW5gKSwgaXQgd291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgZnJvbSB0aGUgZGlzay9wYXJ0aXRpb24gdGFibGUgYnVmZmVyLiBBIGNsYXNzaWMgbWlzdGFrZSFcblxuVGhlIGZpeCBpcyBlbGVnYW50OiBpdCBpbnRyb2R1Y2VzIGEgbmV3IGBibG9ja2xlbmAgcGFyYW1ldGVyIHRvIGBsZG1fZ2V0X3ZzdHIoKWAsIHdoaWNoIHJlcHJlc2VudHMgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVGhlIGBsZW5ndGhgIGlzIHRoZW4gY2xhbXBlZCB0byBgYmxvY2tsZW4gLSAxYCwgZW5zdXJpbmcgdGhhdCB3ZSBuZXZlciBhdHRlbXB0IHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gSXQgYWxzbyBoYW5kbGVzIHRoZSBlZGdlIGNhc2Ugd2hlcmUgYGJsb2NrbGVuYCBpcyBsZXNzIHRoYW4gMS5cblxuTm93LCBteSBwcmltYXJ5IGNvbmNlcm4gaXMgdG8gZW5zdXJlIHRoZSBmaXggZG9lc24ndCBpbnRyb2R1Y2UgKm5ldyogdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHNlZTpcblxuMS4gICoqVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZC9MZWFrOioqIFRoZSBuZXcgY29kZSBjYXJlZnVsbHkgaGFuZGxlcyB0aGlzLiBXaGVuIGBibG9ja2xlbiBcdTAwM2MgMWAsIHRoZSBjb2RlIHNldHMgYGJ1ZmZlclswXSA9ICdcXDAnYCBhbmQgcmV0dXJucyAwLCBudWxsLXRlcm1pbmF0aW5nIHRoZSBidWZmZXIuIElmIGBsZW5ndGhgIGlzIGdyZWF0ZXIgdGhhbiBgYmxvY2tsZW4gLSAxYCwgdGhlIGNvZGUgbm93IGNsYW1wcyB0aGUgbGVuZ3RoLiBUaGUgYG1lbWNweSgpYCBvcGVyYXRpb24gZW5zdXJlcyB0aGF0IHRoZSBjb3BpZWQgZGF0YSBpcyBjb3JyZWN0bHkgbnVsbC10ZXJtaW5hdGVkLiBDcml0aWNhbGx5LCB0aGUgaW5wdXQgYnVmZmVyIGl0c2VsZiBvcmlnaW5hdGVzIGZyb20gcGFydGl0aW9uIGRhdGEgcmVhZCBmcm9tIGEgZGlzayBvciBibG9jayBkZXZpY2UuIFRoaXMgbWVhbnMgdGhlIGJ1ZmZlciBjb250YWlucyBkYXRhLCBzbyB0aGUgaXNzdWUgd2FzIGFuIG91dC1vZi1ib3VuZHMgKnJlYWQqIChwb3RlbnRpYWxseSBleHBvc2luZyBnYXJiYWdlIG9yIGV2ZW4gdHJpZ2dlcmluZyBhIGtlcm5lbCBwYW5pYyB2aWEgS0FTQU4pLlxuXG4yLiAgKipVbmludGVuZGVkIERhdGEgRXhwb3N1cmU6KiogSSdsbCBhbHNvIGRvdWJsZS1jaGVjayB3aGV0aGVyIGBidWZmZXJgIGlzIHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSwgZXNwZWNpYWxseSBpZiB1bmluaXRpYWxpemVkIG1lbW9yeSBnZXRzIHVzZWQgaW4gb3RoZXIgbG9jYXRpb25zLCBvciBpZiBhbnkgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXJzcGFjZS4gSSBzaG91bGQgYWxzbyBjaGVjayB3aGVyZSB0aGUgYGxkbV9wYXJzZV8qYCBmdW5jdGlvbnMgYXJlIGNhbGxlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIFRoaXMgaXMgYSBjcml0aWNhbCBzdGVwIGluIGEgdGhvcm91Z2ggYXVkaXQuXG5cblNvIGZhciwgaXQgbG9va3Mgc29saWQuIEJ1dCBhcyBhbHdheXMsIEkgbXVzdCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGFueSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzLiBUaGlzIGZpeCBpcyBhIGdvb2Qgc3RlcCwgYW5kIG5vdyBpdCdzIHRpbWUgdG8gZGlnIGRlZXBlciFcblxuXG4iLCJJbnB1dFRva2VucyI6NTE1OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjQ5LjM4MzgxNDE5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NjYwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGRtX3BhcnNlX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9wYXJ0aXRpb25zL2xkbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9NDE9dm9pZCBfbGRtX3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy01Ni0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjU3OiAqIGxkbV9wYXJzZV9wcml2aGVhZCAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBQUklWSEVBRCBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTU4LSAqIEBkYXRhOiAgUmF3IGRhdGFiYXNlIFBSSVZIRUFEIHN0cnVjdHVyZSBsb2FkZWQgZnJvbSB0aGUgZGV2aWNlXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTY2LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Njc6c3RhdGljIGJvb2wgbGRtX3BhcnNlX3ByaXZoZWFkKGNvbnN0IHU4ICpkYXRhLCBzdHJ1Y3QgcHJpdmhlYWQgKnBoKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNjgte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTItLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTM6ICogbGRtX3BhcnNlX3RvY2Jsb2NrIC0gUmVhZCB0aGUgTERNIERhdGFiYXNlIFRPQ0JMT0NLIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE0LSAqIEBkYXRhOiAgUmF3IGRhdGFiYXNlIFRPQ0JMT0NLIHN0cnVjdHVyZSBsb2FkZWQgZnJvbSB0aGUgZGV2aWNlXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEyNS0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEyNjpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdG9jYmxvY2sgKGNvbnN0IHU4ICpkYXRhLCBzdHJ1Y3QgdG9jYmxvY2sgKnRvYylcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEyNy17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE1Ny0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE1ODogKiBsZG1fcGFyc2Vfdm1kYiAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBWTURCIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTU5LSAqIEBkYXRhOiAgUmF3IGRhdGFiYXNlIFZNREIgc3RydWN0dXJlIGxvYWRlZCBmcm9tIHRoZSBkZXZpY2VcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTY5LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTcwOnN0YXRpYyBib29sIGxkbV9wYXJzZV92bWRiIChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHZtZGIgKnZtKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTcxLXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9MjYzPXN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV9wcml2aGVhZHMoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSxcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMjkzLVxcdFxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjI5NDpcXHRcXHRyZXN1bHQgPSBsZG1fcGFyc2VfcHJpdmhlYWQgKGRhdGEsIHBoW2ldKTtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTI5NS1cXHRcXHRwdXRfZGV2X3NlY3RvciAoc2VjdCk7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTM1MT1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdG9jYmxvY2tzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4My1cXHRcXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozODQ6XFx0XFx0aWYgKGxkbV9wYXJzZV90b2NibG9jayhkYXRhLCB0Yltucl90YnNdKSlcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4NS1cXHRcXHRcXHRucl90YnMrKztcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9NDI1PXN0YXRpYyBib29sIGxkbV92YWxpZGF0ZV92bWRiKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ0NC1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQ0NTpcXHRpZiAoIWxkbV9wYXJzZV92bWRiIChkYXRhLCB2bSkpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NDYtXFx0XFx0Z290byBvdXQ7XFx0XFx0XFx0XFx0LyogQWxyZWFkeSBsb2dnZWQgKi9cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM9NjkxPXN0YXRpYyBpbnQgbGRtX2dldF92c3RyKGNvbnN0IHU4ICpibG9jaywgaW50IGJsb2NrbGVuLCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03MTUtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3MTY6ICogbGRtX3BhcnNlX2NtcDMgLSBSZWFkIGEgcmF3IFZCTEsgQ29tcG9uZW50IG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTcxNy0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNzI1LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NzI2OnN0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03Mjcte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NjUtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo3NjY6ICogbGRtX3BhcnNlX2RncjMgLSBSZWFkIGEgcmF3IFZCTEsgRGlzayBHcm91cCBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03NjctICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTc3NS0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjc3NjpzdGF0aWMgaW50IGxkbV9wYXJzZV9kZ3IzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy03Nzcte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MDYtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4MDc6ICogbGRtX3BhcnNlX2RncjQgLSBSZWFkIGEgcmF3IFZCTEsgRGlzayBHcm91cCBvYmplY3QgaW50byBhIHZibGsgc3RydWN0dXJlXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04MDgtICogQGJ1ZmZlcjogIEJsb2NrIG9mIGRhdGEgYmVpbmcgd29ya2VkIG9uXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTgxNi0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjgxNzpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZGdyNCAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODE4LXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODQ1LS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODQ2OiAqIGxkbV9wYXJzZV9kc2szIC0gUmVhZCBhIHJhdyBWQkxLIERpc2sgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODQ3LSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04NTUtICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo4NTY6c3RhdGljIGJvb2wgbGRtX3BhcnNlX2RzazMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg1Ny17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg4NC0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjg4NTogKiBsZG1fcGFyc2VfZHNrNCAtIFJlYWQgYSByYXcgVkJMSyBEaXNrIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTg4Ni0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtODk0LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6ODk1OnN0YXRpYyBib29sIGxkbV9wYXJzZV9kc2s0IChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy04OTYte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy05MTctLyoqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo5MTg6ICogbGRtX3BhcnNlX3BydDMgLSBSZWFkIGEgcmF3IFZCTEsgUGFydGl0aW9uIG9iamVjdCBpbnRvIGEgdmJsayBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkxOS0gKiBAYnVmZmVyOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTI3LSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6OTI4OnN0YXRpYyBib29sIGxkbV9wYXJzZV9wcnQzKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YilcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTkyOS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTk5MS0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjk5MjogKiBsZG1fcGFyc2Vfdm9sNSAtIFJlYWQgYSByYXcgVkJMSyBWb2x1bWUgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtOTkzLSAqIEBidWZmZXI6ICBCbG9jayBvZiBkYXRhIGJlaW5nIHdvcmtlZCBvblxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDAxLSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTAwMjpzdGF0aWMgYm9vbCBsZG1fcGFyc2Vfdm9sNShjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMDAzLXtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTA5OC0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEwOTk6ICogbGRtX3BhcnNlX3ZibGsgLSBSZWFkIGEgcmF3IFZCTEsgb2JqZWN0IGludG8gYSB2YmxrIHN0cnVjdHVyZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTEwMC0gKiBAYnVmOiAgQmxvY2sgb2YgZGF0YSBiZWluZyB3b3JrZWQgb25cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTEwNS0gKiBpbmZvcm1hdGlvbiBjb21tb24gdG8gYWxsIFZCTEsgdHlwZXMsIHRoZW4gZGVsZWdhdGVzIHRoZSByZXN0IG9mIHRoZSB3b3JrIHRvXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTA2OiAqIGhlbHBlciBmdW5jdGlvbnM6IGxkbV9wYXJzZV8qLlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTEwNy0gKlxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTEwLSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTExMTpzdGF0aWMgYm9vbCBsZG1fcGFyc2VfdmJsayAoY29uc3QgdTggKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHZibGsgKnZiKVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTExMi17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMzAtXFx0c3dpdGNoICh2Yi1cXHUwMDNldHlwZSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzMTpcXHRcXHRjYXNlIFZCTEtfQ01QMzogIHJlc3VsdCA9IGxkbV9wYXJzZV9jbXAzIChidWYsIGxlbiwgdmIpOyBicmVhaztcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExMzI6XFx0XFx0Y2FzZSBWQkxLX0RTSzM6ICByZXN1bHQgPSBsZG1fcGFyc2VfZHNrMyAoYnVmLCBsZW4sIHZiKTsgYnJlYWs7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTMzOlxcdFxcdGNhc2UgVkJMS19EU0s0OiAgcmVzdWx0ID0gbGRtX3BhcnNlX2RzazQgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzNDpcXHRcXHRjYXNlIFZCTEtfREdSMzogIHJlc3VsdCA9IGxkbV9wYXJzZV9kZ3IzIChidWYsIGxlbiwgdmIpOyBicmVhaztcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExMzU6XFx0XFx0Y2FzZSBWQkxLX0RHUjQ6ICByZXN1bHQgPSBsZG1fcGFyc2VfZGdyNCAoYnVmLCBsZW4sIHZiKTsgYnJlYWs7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTM2OlxcdFxcdGNhc2UgVkJMS19QUlQzOiAgcmVzdWx0ID0gbGRtX3BhcnNlX3BydDMgKGJ1ZiwgbGVuLCB2Yik7IGJyZWFrO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzNzpcXHRcXHRjYXNlIFZCTEtfVk9MNTogIHJlc3VsdCA9IGxkbV9wYXJzZV92b2w1IChidWYsIGxlbiwgdmIpOyBicmVhaztcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExMzgtXFx0fVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0xMTY0PXN0YXRpYyBib29sIGxkbV9sZG1kYl9hZGQgKHU4ICpkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbGRtZGIgKmxkYilcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE3Ni1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExNzc6XFx0aWYgKCFsZG1fcGFyc2VfdmJsayAoZGF0YSwgbGVuLCB2YikpIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExNzgtXFx0XFx0a2ZyZWUodmIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNTo0OS40MjkzODMxMTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYxNTMxMjc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IEFsbG9jYXRpb24gb2YgdGhlIExETSBEYXRhYmFzZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRhdGFiYXNlIGlzIGJlaW5nIGJ1aWx0LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3Vlcy4gSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIGBsZG0uY2AuIE15IGh1bmNoIGlzIHRoYXQgdGhlIHByb2JsZW0gd2lsbCBiZSBhcm91bmQgdGhlIGBsZG1fbGRtZGJfYWRkYCBmdW5jdGlvbiwgb3Igc29tZXdoZXJlIGluIHRoZSB2aWNpbml0eSBvZiB3aGVyZSB0aGUgYHZiYCAod2hhdGV2ZXIgdGhhdCB2YXJpYWJsZSByZXByZXNlbnRzKSBpcyBhbGxvY2F0ZWQuIFRoYXQgYXJlYSBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZSBmb3IgYSBtZW1vcnkgbGVhaywgY29ycnVwdGlvbiwgb3IgYW4gaXNzdWUgd2l0aCBob3cgdGhlIGRhdGFiYXNlIGdyb3dzLiBMZXQncyBzZWUgaG93IGB2YmAgaXMgaGFuZGxlZCB0aGVyZS4uLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIGxpZmVjeWNsZSBhbmQgdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkIGFuZCBmcmVlZCwgb3IgaWYgaXQncyBiZWluZyBmcmVlZCBhdCBhbGwuIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSB2YWx1YWJsZSBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjE1OjUyLjA0NDY5ODUyNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svcGFydGl0aW9ucy9sZG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTYwOlxcdCAqXFxuMTE2MTpcXHQgKiBSZXR1cm46ICAndHJ1ZScgICBUaGUgVkJMSyB3YXMgYWRkZWRcXG4xMTYyOlxcdCAqICAgICAgICAgICdmYWxzZScgIEFuIGVycm9yIG9jY3VycmVkXFxuMTE2MzpcXHQgKi9cXG4xMTY0OlxcdHN0YXRpYyBib29sIGxkbV9sZG1kYl9hZGQgKHU4ICpkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbGRtZGIgKmxkYilcXG4xMTY1OlxcdHtcXG4xMTY2OlxcdFxcdHN0cnVjdCB2YmxrICp2YjtcXG4xMTY3OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZW07XFxuMTE2ODpcXHRcXG4xMTY5OlxcdFxcdEJVR19PTiAoIWRhdGEgfHwgIWxkYik7XFxuMTE3MDpcXHRcXG4xMTcxOlxcdFxcdHZiID0ga21hbGxvY19vYmooKnZiKTtcXG4xMTcyOlxcdFxcdGlmICghdmIpIHtcXG4xMTczOlxcdFxcdFxcdGxkbV9jcml0IChcXFwiT3V0IG9mIG1lbW9yeS5cXFwiKTtcXG4xMTc0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTc1OlxcdFxcdH1cXG4xMTc2OlxcdFxcbjExNzc6XFx0XFx0aWYgKCFsZG1fcGFyc2VfdmJsayAoZGF0YSwgbGVuLCB2YikpIHtcXG4xMTc4OlxcdFxcdFxcdGtmcmVlKHZiKTtcXG4xMTc5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXHRcXHRcXHQvKiBBbHJlYWR5IGxvZ2dlZCAqL1xcbjExODA6XFx0XFx0fVxcbjExODE6XFx0XFxuMTE4MjpcXHRcXHQvKiBQdXQgdmJsayBpbnRvIHRoZSBjb3JyZWN0IGxpc3QuICovXFxuMTE4MzpcXHRcXHRzd2l0Y2ggKHZiLVxcdTAwM2V0eXBlKSB7XFxuMTE4NDpcXHRcXHRjYXNlIFZCTEtfREdSMzpcXG4xMTg1OlxcdFxcdGNhc2UgVkJMS19ER1I0OlxcbjExODY6XFx0XFx0XFx0bGlzdF9hZGQgKFxcdTAwMjZ2Yi1cXHUwMDNlbGlzdCwgXFx1MDAyNmxkYi1cXHUwMDNldl9kZ3JwKTtcXG4xMTg3OlxcdFxcdFxcdGJyZWFrO1xcbjExODg6XFx0XFx0Y2FzZSBWQkxLX0RTSzM6XFxuMTE4OTpcXHRcXHRjYXNlIFZCTEtfRFNLNDpcXG4xMTkwOlxcdFxcdFxcdGxpc3RfYWRkIChcXHUwMDI2dmItXFx1MDAzZWxpc3QsIFxcdTAwMjZsZGItXFx1MDAzZXZfZGlzayk7XFxuMTE5MTpcXHRcXHRcXHRicmVhaztcXG4xMTkyOlxcdFxcdGNhc2UgVkJMS19WT0w1OlxcbjExOTM6XFx0XFx0XFx0bGlzdF9hZGQgKFxcdTAwMjZ2Yi1cXHUwMDNlbGlzdCwgXFx1MDAyNmxkYi1cXHUwMDNldl92b2x1KTtcXG4xMTk0OlxcdFxcdFxcdGJyZWFrO1xcbjExOTU6XFx0XFx0Y2FzZSBWQkxLX0NNUDM6XFxuMTE5NjpcXHRcXHRcXHRsaXN0X2FkZCAoXFx1MDAyNnZiLVxcdTAwM2VsaXN0LCBcXHUwMDI2bGRiLVxcdTAwM2V2X2NvbXApO1xcbjExOTc6XFx0XFx0XFx0YnJlYWs7XFxuMTE5ODpcXHRcXHRjYXNlIFZCTEtfUFJUMzpcXG4xMTk5OlxcdFxcdFxcdC8qIFNvcnQgYnkgdGhlIHBhcnRpdGlvbidzIHN0YXJ0IHNlY3Rvci4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MTU6NTIuMDQ0ODAxNzU1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MDg0MDc4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTWVtb3J5IFNhZmV0eSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciB0aGUgTERNIHBhcnRpdGlvbiBwYXJzZXIuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgbGRtX2dldF92c3RyYCBpcyB1c2VkIHdpdGhpbiB0aGUgcGFyc2luZyBmdW5jdGlvbnMgbGlrZSBgbGRtX3BhcnNlX2RzazNgIGFuZCBgbGRtX3BhcnNlX2NtcDNgLiBJIG5lZWQgdG8gc2VlIHRoZSBjYWxsIHNpdGVzLCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5Mb29raW5nIGF0IGBsZG1fZ2V0X3ZzdHJgIGl0c2VsZiwgdGhlIGNvcmUgaXNzdWUgaXMgY2xlYXIuIEl0IHdhcyB2dWxuZXJhYmxlIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIGZ1bmN0aW9uIG5haXZlbHkgY29waWVkIGEgc3RyaW5nIG9mIGBsZW5ndGhgIGJ5dGVzIGZyb20gYW4gaW5wdXQgYGJsb2NrYCwgc3RhcnRpbmcgYXQgYGJsb2NrICsgMWAsIGludG8gYSBwcm92aWRlZCBgYnVmZmVyYCB3aXRob3V0IGNoZWNraW5nIGlmIHRoYXQgYGxlbmd0aGAgd291bGQgZXhjZWVkIHRoZSBib3VuZHMgb2YgdGhlIGlucHV0IGBibG9ja2AuIFRoYXQncyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93LCBhbmQgcXVpdGUgZnJhbmtseSwgYSBwcmV0dHkgYmFzaWMgb3ZlcnNpZ2h0LiBUaGUgcGF0Y2ggY2xldmVybHkgYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGJvdW5kcyBjaGVja2luZyBhZ2FpbnN0IGBibG9ja2xlbmAsIHRoZSBhY3R1YWwgYXZhaWxhYmxlIGxlbmd0aCBvZiB0aGUgaW5wdXQgYnVmZmVyLiAgSXQgbG9va3Mgc29saWQgb24gZmlyc3QgZ2xhbmNlLiBUaGUgb3RoZXIgbmljZSBwb2ludCBpcyB0aGF0IGV2ZW4gaWYgYGJsb2NrbGVuIFx1MDAzYyAxYCB0aGVuIGBidWZmZXJbMF0gPSAnXFwwJztgLCBzbyB0aGUgYnVmZmVyIGlzIGFsd2F5cyBudWxsLXRlcm1pbmF0ZWQuIFNvIG5vIGluaXRpYWxpemF0aW9uIHJpc2tzIGhlcmUuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBcmUgd2UgcGFzc2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgcmVhZGluZyB1bmluaXRpYWxpemVkIHZhbHVlcywgb3IgdXNpbmcgdGhlbSBpbiBjb25kaXRpb25hbHM/ICBOby4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSAqcHJldmVudHMqIG91dC1vZi1ib3VuZHMgcmVhZHMuICBJbXBvcnRhbnRseSwgdGhlIGJ1ZyAqZml4ZWQqIGhlcmUgaXMgZnVuZGFtZW50YWxseSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gYW4gZXhpc3RpbmcgYnVmZmVyLiBUaGlzIHR5cGUgb2YgdnVsbmVyYWJpbGl0eSBpcyAqZXhhY3RseSogd2hhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgZml4IGlzIGEgYm91bmRzIGNoZWNrLCB0aGVyZSdzIG5vIG5lZWQgZm9yIEtNU0FOLCBhcyBLQVNBTiBoYW5kbGVzIHRoZSByaXNrLiBJIGFtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuSSdtIGRvdWJsZS1jaGVja2luZyBteXNlbGYuIFRoZSBydWxlIGlzLCBhbmQgdGhpcyBtYWtlcyBzZW5zZSwgd2h5IHVzZSBLTVNBTiBpZiBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCB0b29scyBhbHJlYWR5IGNvdmVyIHRoZSBidWc/IE15IGFuYWx5c2lzIGNvbmZpcm1zIHRoaXM6IHRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBpbiBMRE0gcGFydGl0aW9uIHBhcnNpbmcgYnkgY2xhbXBpbmcgdGhlIHN0cmluZyBsZW5ndGggdG8gdGhlIGlucHV0IGJ1ZmZlciBsZW5ndGguIEtBU0FOIGlzIHRoZSBhcHByb3ByaWF0ZSB0b29sIGhlcmUuIFRoaXMgaXMgbm90IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzOyB0aG9zZSBhcmUgdGhlIGRvbWFpbnMgb2YgS01TQU4sIGFuZCB0aGF0J3Mgbm90IHdoYXQgd2UncmUgYWRkcmVzc2luZyBoZXJlLlxuXG5Pa2F5LCBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY5OCwiT3V0cHV0VG9rZW5zIjoxODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMToxNTo1Ni45NTMyMTE3NDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGluIGJsb2NrL3BhcnRpdGlvbnMvbGRtLmMgYnkgYWRkaW5nIGJvdW5kcyBjaGVja2luZyBvbiB0aGUgaW5wdXQgYnVmZmVyIGxlbmd0aCAoYGJsb2NrbGVuYCkgd2l0aGluIGBsZG1fZ2V0X3ZzdHIoKWAuIFByZXZpb3VzbHksIGBsZG1fZ2V0X3ZzdHIoKWAgb25seSBjaGVja2VkIG91dHB1dCBidWZmZXIgYm91bmRzIChgYnVmbGVuYCksIGFsbG93aW5nIGEgY29ycnVwdGVkIG9yIG1hbGljaW91cyBsZW5ndGggYnl0ZSBpbiBhIHBhcnRpdGlvbiBzdHJ1Y3R1cmUgdG8gcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgYnVmZmVyLiBcXG5cXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBhcmUgZnVsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcyAoS01TQU4gZG9tYWluKS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBpbiBibG9jay9wYXJ0aXRpb25zL2xkbS5jIGJ5IGFkZGluZyBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGlucHV0IGJ1ZmZlciBsZW5ndGggKGBibG9ja2xlbmApIHdpdGhpbiBgbGRtX2dldF92c3RyKClgLiBQcmV2aW91c2x5LCBgbGRtX2dldF92c3RyKClgIG9ubHkgY2hlY2tlZCBvdXRwdXQgYnVmZmVyIGJvdW5kcyAoYGJ1ZmxlbmApLCBhbGxvd2luZyBhIGNvcnJ1cHRlZCBvciBtYWxpY2lvdXMgbGVuZ3RoIGJ5dGUgaW4gYSBwYXJ0aXRpb24gc3RydWN0dXJlIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4gXFxuXFxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgYXJlIGZ1bGx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgKEtNU0FOIGRvbWFpbikuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhd9kn[1] Phase: Succeeded StartedAt: 2026-09-06 21:16:08 +0000 UTC FinishedAt: 2026-09-06 21:16:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 21:16:08 +0000 UTC FinishedAt: 2026-09-06 21:16:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2] Phase: Succeeded StartedAt: 2026-09-06 21:16:08 +0000 UTC FinishedAt: 2026-09-07 00:57:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 21:16:08 +0000 UTC FinishedAt: 2026-09-07 00:57:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 21:16:08 +0000 UTC FinishedAt: 2026-09-06 21:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 21:16:08 +0000 UTC FinishedAt: 2026-09-06 21:16:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhd9kn/series-workflowhd9kn-convert-artifact-3753695488/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 21:16:19 +0000 UTC FinishedAt: 2026-09-06 21:32:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 21:16:19 +0000 UTC FinishedAt: 2026-09-06 21:32:07 +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:*49ec4ad0-57a7-4aaf-a901-3d39ab7d1c1e,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-workflowhd9kn/series-workflowhd9kn-convert-artifact-3753695488/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": "1dccb1c3-a721-49a7-ba02-d09aaac1058f", "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-workflowhd9kn/series-workflowhd9kn-build-action-3184141254/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 21:16:19 +0000 UTC FinishedAt: 2026-09-06 21:31:56 +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:*49ec4ad0-57a7-4aaf-a901-3d39ab7d1c1e,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-workflowhd9kn/series-workflowhd9kn-convert-artifact-3753695488/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": "1dccb1c3-a721-49a7-ba02-d09aaac1058f", "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-workflowhd9kn/series-workflowhd9kn-build-action-3184141254/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 21:32:07 +0000 UTC FinishedAt: 2026-09-06 21:32:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 21:32:07 +0000 UTC FinishedAt: 2026-09-06 21:32:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 21:32:07 +0000 UTC FinishedAt: 2026-09-06 21:32:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 21:32:07 +0000 UTC FinishedAt: 2026-09-06 21:32:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhd9kn/series-workflowhd9kn-convert-artifact-1210878631/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 21:32:18 +0000 UTC FinishedAt: 2026-09-06 21:34:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 21:32:19 +0000 UTC FinishedAt: 2026-09-06 21:34:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1dccb1c3-a721-49a7-ba02-d09aaac1058f,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-workflowhd9kn/series-workflowhd9kn-build-action-3184141254/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-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 21:34:16 +0000 UTC FinishedAt: 2026-09-06 21:34:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 21:34:16 +0000 UTC FinishedAt: 2026-09-06 21:34:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 21:34:16 +0000 UTC FinishedAt: 2026-09-06 21:54:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 21:34:16 +0000 UTC FinishedAt: 2026-09-06 21:54:00 +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:*49ec4ad0-57a7-4aaf-a901-3d39ab7d1c1e,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-workflowhd9kn/series-workflowhd9kn-convert-artifact-1210878631/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": "23840b04-022f-4079-8bd5-ed982bbbbeef", "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-workflowhd9kn/series-workflowhd9kn-build-action-2558327851/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 21:34:16 +0000 UTC FinishedAt: 2026-09-06 21:53:38 +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:*49ec4ad0-57a7-4aaf-a901-3d39ab7d1c1e,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-workflowhd9kn/series-workflowhd9kn-convert-artifact-1210878631/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": "23840b04-022f-4079-8bd5-ed982bbbbeef", "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-workflowhd9kn/series-workflowhd9kn-build-action-2558327851/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 21:54:00 +0000 UTC FinishedAt: 2026-09-06 21:54:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 21:54:00 +0000 UTC FinishedAt: 2026-09-06 21:54:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 21:54:00 +0000 UTC FinishedAt: 2026-09-06 21:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 21:54:00 +0000 UTC FinishedAt: 2026-09-06 21:56:02 +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:*23840b04-022f-4079-8bd5-ed982bbbbeef,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-workflowhd9kn/series-workflowhd9kn-build-action-2558327851/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-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 21:56:12 +0000 UTC FinishedAt: 2026-09-07 00:57:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 21:56:12 +0000 UTC FinishedAt: 2026-09-07 00:57:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"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:*1dccb1c3-a721-49a7-ba02-d09aaac1058f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23840b04-022f-4079-8bd5-ed982bbbbeef,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-workflowhd9kn/series-workflowhd9kn-build-action-3184141254/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-workflowhd9kn/series-workflowhd9kn-build-action-2558327851/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 21:56:12 +0000 UTC FinishedAt: 2026-09-06 21:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 21:56:12 +0000 UTC FinishedAt: 2026-09-06 21:56:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"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-workflowhd9kn/series-workflowhd9kn-convert-artifact-2927837184/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 21:56:12 +0000 UTC FinishedAt: 2026-09-06 21:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 21:56:12 +0000 UTC FinishedAt: 2026-09-06 21:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 21:56:13 +0000 UTC FinishedAt: 2026-09-06 21:56:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 21:56:23 +0000 UTC FinishedAt: 2026-09-07 00:57:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhd9kn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ldm_get_vstr","ldm_parse_vblk","ldm_parse_cmp3","ldm_parse_dgr3","ldm_parse_dgr4","ldm_parse_dsk3","ldm_parse_vol5","ldm_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PARTITION_ADVANCED","LDM_PARTITION"],"series_id":"e1574937-79df-4fe8-ba94-e21248fb3c6b","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 21:56:23 +0000 UTC FinishedAt: 2026-09-07 00:57:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1dccb1c3-a721-49a7-ba02-d09aaac1058f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23840b04-022f-4079-8bd5-ed982bbbbeef,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-workflowhd9kn/series-workflowhd9kn-build-action-3184141254/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-workflowhd9kn/series-workflowhd9kn-build-action-2558327851/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-workflowhd9kn/series-workflowhd9kn-convert-artifact-2927837184/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,}