Name: series-workflowblrnd Phase: Succeeded StartedAt: 2026-08-20 14:56:57 +0000 UTC FinishedAt: 2026-08-20 19:26:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[0] Phase: Succeeded StartedAt: 2026-08-20 14:56:57 +0000 UTC FinishedAt: 2026-08-20 15:42:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 14:56:57 +0000 UTC FinishedAt: 2026-08-20 15:42:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3aa1dcaa4f6f5ae08936491e08bd456f331f2d40", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3aa1dcaa4f6f5ae08936491e08bd456f331f2d40", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS" ], "series_id": "acc6cc60-cb21-45a9-b2eb-1015595ead51" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_switch_conns", "smcr_link_down_cond", "smcr_link_down_cond_sched" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfc3dpdGNoX2Nvbm5zJiMzNDssCiAgICAmIzM0O3NtY3JfbGlua19kb3duX2NvbmQmIzM0OywKICAgICYjMzQ7c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgc29ja19wdXQoXHUwMDI2c21jLVx1MDAzZXNrKWAgb24gdGhlIGVycm9yIHBhdGggd2hlbiBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIGZhaWxzLiBUaGlzIHJlc29sdmVzIGEgcmVmZXJlbmNlIGNvdW50IGxlYWsgKG1lbW9yeSBsZWFrKSBmb3IgdGhlIHNvY2tldCBzdHJ1Y3R1cmUuIFRoZSB2YXJpYWJsZXMgcG9wdWxhdGVkIGJ5IGBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoKWAgKGB3cl9idWZgIGFuZCBgcGVuZGApIGFyZSBjb3JyZWN0bHkgZ3VhcmRlZCBieSB0aGUgYGlmICghcmMpYCBjaGVjaywgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdXNlZC4gTWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWssIGFuZCByZWZlcmVuY2UgY291bnQgaXNzdWVzIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNvY2tldCByZWZlcmVuY2UgbGVhayBpbiB0aGUgU01DIGNvcmUgbmV0d29ya2luZyBjb2RlIChzbWNfc3dpdGNoX2Nvbm5zKSB3aGVuIHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCBmYWlscy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBmb3IgdGhlIFNNQyBwcm90b2NvbCBmYW1pbHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MmI0MWNkNDAyMDAyZTkwMzJjNGEyOWZhM2UzNzU2ZmZiMTQ2NDA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6NDA6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5pbmRleCBiNDIwOGNiMTg2YzVlLi4yZjdmOWQ0NjkyNzIwIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19jb3JlLmNcbkBAIC0xMTQ4LDEzICYjNDM7MTE0OCwxMyBAQCBzdHJ1Y3Qgc21jX2xpbmsgKnNtY19zd2l0Y2hfY29ubnMoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4gXHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNmxnci1cdTAwM2Vjb25uc19sb2NrKTtcbiBcdFx0LyogcHJlLWZldGNoIGJ1ZmZlciBvdXRzaWRlIG9mIHNlbmRfbG9jaywgbWlnaHQgc2xlZXAgKi9cbiBcdFx0cmMgPSBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoY29ubiwgdG9fbG5rLCBcdTAwMjZ3cl9idWYsIE5VTEwsIFx1MDAyNnBlbmQpO1xuLVx0XHRpZiAocmMpXG4tXHRcdFx0Z290byBlcnJfb3V0O1xuLVx0XHQvKiBhdm9pZCByYWNlIHdpdGggc21jcl90eF9zbmRidWZfbm9uZW1wdHkoKSAqL1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2VzZW5kX2xvY2spO1xuLVx0XHRzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KGNvbm4sIHRvX2xuayk7XG4tXHRcdHJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4mIzQzO1x0XHRpZiAoIXJjKSB7XG4mIzQzO1x0XHRcdC8qIGF2b2lkIHJhY2Ugd2l0aCBzbWNyX3R4X3NuZGJ1Zl9ub25lbXB0eSgpICovXG4mIzQzO1x0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4mIzQzO1x0XHRcdHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoY29ubiwgdG9fbG5rKTtcbiYjNDM7XHRcdFx0cmMgPSBzbWNfc3dpdGNoX2N1cnNvcihzbWMsIHBlbmQsIHdyX2J1Zik7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbiYjNDM7XHRcdH1cbiBcdFx0c29ja19wdXQoXHUwMDI2c21jLVx1MDAzZXNrKTtcbiBcdFx0aWYgKHJjKVxuIFx0XHRcdGdvdG8gZXJyX291dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19zd2l0Y2hfY29ubnMmIzM0OywKICAgICYjMzQ7c21jcl9saW5rX2Rvd25fY29uZCYjMzQ7LAogICAgJiMzNDtzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBTTUMgY29yZSBuZXR3b3JraW5nIGNvZGUgKHNtY19zd2l0Y2hfY29ubnMpIHdoZW4gc21jX2NkY19nZXRfZnJlZV9zbG90IGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciB0aGUgU01DIHByb3RvY29sIGZhbWlseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyYjQxY2Q0MDIwMDJlOTAzMmM0YTI5ZmEzZTM3NTZmZmIxNDY0MDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAxNTo0MDoyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuYyBiL25ldC9zbWMvc21jX2NvcmUuYwppbmRleCBiNDIwOGNiMTg2YzVlLi4yZjdmOWQ0NjkyNzIwIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY29yZS5jCkBAIC0xMTQ4LDEzICYjNDM7MTE0OCwxMyBAQCBzdHJ1Y3Qgc21jX2xpbmsgKnNtY19zd2l0Y2hfY29ubnMoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsCiAJCXJlYWRfdW5sb2NrX2JoKCZhbXA7bGdyLSZndDtjb25uc19sb2NrKTsKIAkJLyogcHJlLWZldGNoIGJ1ZmZlciBvdXRzaWRlIG9mIHNlbmRfbG9jaywgbWlnaHQgc2xlZXAgKi8KIAkJcmMgPSBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoY29ubiwgdG9fbG5rLCAmYW1wO3dyX2J1ZiwgTlVMTCwgJmFtcDtwZW5kKTsKLQkJaWYgKHJjKQotCQkJZ290byBlcnJfb3V0OwotCQkvKiBhdm9pZCByYWNlIHdpdGggc21jcl90eF9zbmRidWZfbm9uZW1wdHkoKSAqLwotCQlzcGluX2xvY2tfYmgoJmFtcDtjb25uLSZndDtzZW5kX2xvY2spOwotCQlzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KGNvbm4sIHRvX2xuayk7Ci0JCXJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpOwotCQlzcGluX3VubG9ja19iaCgmYW1wO2Nvbm4tJmd0O3NlbmRfbG9jayk7CiYjNDM7CQlpZiAoIXJjKSB7CiYjNDM7CQkJLyogYXZvaWQgcmFjZSB3aXRoIHNtY3JfdHhfc25kYnVmX25vbmVtcHR5KCkgKi8KJiM0MzsJCQlzcGluX2xvY2tfYmgoJmFtcDtjb25uLSZndDtzZW5kX2xvY2spOwomIzQzOwkJCXNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoY29ubiwgdG9fbG5rKTsKJiM0MzsJCQlyYyA9IHNtY19zd2l0Y2hfY3Vyc29yKHNtYywgcGVuZCwgd3JfYnVmKTsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO2Nvbm4tJmd0O3NlbmRfbG9jayk7CiYjNDM7CQl9CiAJCXNvY2tfcHV0KCZhbXA7c21jLSZndDtzayk7CiAJCWlmIChyYykKIAkJCWdvdG8gZXJyX291dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRXJyb3IgSGFuZGxpbmcgaW4gU01DIENvbm5lY3Rpb24gU3dpdGNoaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgc21jX3N3aXRjaF9jb25uc2AgZnVuY3Rpb24gd2l0aGluIGBuZXQvc21jL3NtY19jb3JlLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2UgZm9jdXNlcyBvbiBob3cgZXJyb3IgaGFuZGxpbmcgaXMgbWFuYWdlZCBhcm91bmQgdGhlIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgIGNhbGwuIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGxvZ2ljIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0IGFjcXVpcmVzIGEgc2xvdCwgYW5kIGlmIHRoYXQgY2FsbCBmYWlscywgaXQganVtcHMgdG8gYGVycl9vdXRgLiBCdXQgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgaGVyZSwgYW5kIGl04oCZcyBhIHN0YW5kYXJkIGlzc3VlIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLgoKVGhlIHJldmlzZWQgY29kZSBtb3ZlcyB0aGUgYHNvY2tfcHV0KCZhbXA7c21jLSZndDtzaylgIGNhbGwgb3V0c2lkZSB0aGUgYGlmIChyYylgIGJsb2NrLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UsIGluIHRoZSAmIzM5O2JlZm9yZSYjMzk7IHZlcnNpb24sIGlmIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgIHJldHVybmVkIGFuIGVycm9yIChgcmNgIG5vbi16ZXJvKSwgd2UmIzM5O2QgaW1tZWRpYXRlbHkganVtcCB0byBgZXJyX291dGAsIHNraXBwaW5nIHRoZSBgc29ja19wdXRgLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGBzb2NrX2hvbGQoJmFtcDtzbWMtJmd0O3NrKWAgd2FzICpwcm9iYWJseSogY2FsbGVkIHByZXZpb3VzbHksIGJlZm9yZSB0aGUgZXJyb3IgcGF0aC4gSWYgc28sIHRoZW4gdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgc3VidGxlIHJlZmVyZW5jZSBsZWFrIGluIHRoZSBlcnJvciBwYXRoLgoKVG8gYmUgY2VydGFpbiwgSSBzaG91bGQgZG91YmxlLWNoZWNrIGhvdyBgc21jX3N3aXRjaF9jb25uc2AgdXNlcyBgc29ja19ob2xkYCBhbmQgYHNvY2tfcHV0YCBhcm91bmQgdGhpcyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGBzb2NrX2hvbGRgIGlzIGluZGVlZCBjYWxsZWQgYmVmb3JlIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgLCB3aGljaCB3b3VsZCBtYWtlIHRoZSBjdXJyZW50IHBhdGNoIGEgY2xlYXIgaW1wcm92ZW1lbnQsIGZpeGluZyB0aGUgcG90ZW50aWFsIGxlYWsgYnkgYWx3YXlzIHJlbGVhc2luZyB0aGUgc29ja2V0IHJlZmVyZW5jZSByZWdhcmRsZXNzIG9mIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3Rg4oCZcyByZXR1cm4uIFRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IGNvbW1vbiBpc3N1ZSB0byBmaW5kIGluIGNvbXBsZXggbmV0d29ya2luZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19zd2l0Y2hfY29ubnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTA5NC1cbm5ldC9zbWMvc21jX2NvcmUuYzoxMDk1OnN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDk2LVx0XHRcdFx0ICBzdHJ1Y3Qgc21jX2xpbmsgKmZyb21fbG5rLCBib29sIGlzX2Rldl9lcnIpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE3OTQtXG5uZXQvc21jL3NtY19jb3JlLmM6MTc5NTpcdHRvX2xuayA9IHNtY19zd2l0Y2hfY29ubnMobGdyLCBsbmssIHRydWUpO1xubmV0L3NtYy9zbWNfY29yZS5jLTE3OTYtXHRpZiAoIXRvX2xuaykgeyAvKiBubyBiYWNrdXAgbGluayBhdmFpbGFibGUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzUxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBzbWNfc3dpdGNoX2Nvbm5zYCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgc21jX3N3aXRjaF9jb25uc2AuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGl0IHJlcXVpcmVzIGFuZCBpZGVudGlmeSBhbnkgbGlrZWx5IGFyZWFzIG9mIGludGVyZXN0aW5nIGlucHV0LCBzcGVjaWZpY2FsbHkgYW55dGhpbmcgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBwb3RlbnRpYWxseSBtaXNoYW5kbGVkIGVycm9yIGNvbmRpdGlvbnMsIG9yIGFueSBsb2dpYyBwYXRocyB0aGF0IGNvdWxkIGJlIG1hbmlwdWxhdGVkIHRocm91Z2ggc3BlY2lmaWNhbGx5IGNyYWZ0ZWQgaW5wdXRzLiBJcyB0aGVyZSBhbnkgb2J2aW91cyBsb3ctaGFuZ2luZyBmcnVpdD8gTGV0JiMzOTtzIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5NTpcdHN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbjEwOTY6XHRcdFx0XHRcdCAgc3RydWN0IHNtY19saW5rICpmcm9tX2xuaywgYm9vbCBpc19kZXZfZXJyKVxuMTA5NzpcdHtcbjEwOTg6XHRcdHN0cnVjdCBzbWNfbGluayAqdG9fbG5rID0gTlVMTDtcbjEwOTk6XHRcdHN0cnVjdCBzbWNfY2RjX3R4X3BlbmQgKnBlbmQ7XG4xMTAwOlx0XHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm47XG4xMTAxOlx0XHRzdHJ1Y3Qgc21jX3dyX2J1ZiAqd3JfYnVmO1xuMTEwMjpcdFx0c3RydWN0IHNtY19zb2NrICpzbWM7XG4xMTAzOlx0XHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZTtcbjExMDQ6XHRcdGludCBpLCByYyA9IDA7XG4xMTA1Olx0XG4xMTA2Olx0XHQvKiBsaW5rIGlzIGluYWN0aXZlLCB3YWtlIHVwIHR4IHdhaXRlcnMgKi9cbjExMDc6XHRcdHNtY193cl93YWtldXBfdHhfd2FpdChmcm9tX2xuayk7XG4xMTA4Olx0XG4xMTA5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTTUNfTElOS1NfUEVSX0xHUl9NQVg7IGkmIzQzOyYjNDM7KSB7XG4xMTEwOlx0XHRcdGlmICghc21jX2xpbmtfYWN0aXZlKFx1MDAyNmxnci1cdTAwM2VsbmtbaV0pIHx8IGkgPT0gZnJvbV9sbmstXHUwMDNlbGlua19pZHgpXG4xMTExOlx0XHRcdFx0Y29udGludWU7XG4xMTEyOlx0XHRcdGlmIChpc19kZXZfZXJyIFx1MDAyNlx1MDAyNiBmcm9tX2xuay1cdTAwM2VzbWNpYmRldiA9PSBsZ3ItXHUwMDNlbG5rW2ldLnNtY2liZGV2IFx1MDAyNlx1MDAyNlxuMTExMzpcdFx0XHQgICAgZnJvbV9sbmstXHUwMDNlaWJwb3J0ID09IGxnci1cdTAwM2VsbmtbaV0uaWJwb3J0KSB7XG4xMTE0Olx0XHRcdFx0Y29udGludWU7XG4xMTE1Olx0XHRcdH1cbjExMTY6XHRcdFx0dG9fbG5rID0gXHUwMDI2bGdyLVx1MDAzZWxua1tpXTtcbjExMTc6XHRcdFx0YnJlYWs7XG4xMTE4Olx0XHR9XG4xMTE5Olx0XHRpZiAoIXRvX2xuayB8fCAhc21jX3dyX3R4X2xpbmtfaG9sZCh0b19sbmspKSB7XG4xMTIwOlx0XHRcdHNtY19sZ3JfdGVybWluYXRlX3NjaGVkKGxncik7XG4xMTIxOlx0XHRcdHJldHVybiBOVUxMO1xuMTEyMjpcdFx0fVxuMTEyMzpcdGFnYWluOlxuMTEyNDpcdFx0cmVhZF9sb2NrX2JoKFx1MDAyNmxnci1cdTAwM2Vjb25uc19sb2NrKTtcbjExMjU6XHRcdGZvciAobm9kZSA9IHJiX2ZpcnN0KFx1MDAyNmxnci1cdTAwM2Vjb25uc19hbGwpOyBub2RlOyBub2RlID0gcmJfbmV4dChub2RlKSkge1xuMTEyNjpcdFx0XHRjb25uID0gcmJfZW50cnkobm9kZSwgc3RydWN0IHNtY19jb25uZWN0aW9uLCBhbGVydF9ub2RlKTtcbjExMjc6XHRcdFx0aWYgKGNvbm4tXHUwMDNlbG5rICE9IGZyb21fbG5rKVxuMTEyODpcdFx0XHRcdGNvbnRpbnVlO1xuMTEyOTpcdFx0XHRzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbjExMzA6XHRcdFx0LyogY29ubi1cdTAwM2Vsbmsgbm90IHlldCBzZXQgaW4gU01DX0lOSVQgc3RhdGUgKi9cbjExMzE6XHRcdFx0aWYgKHNtYy1cdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfSU5JVClcbjExMzI6XHRcdFx0XHRjb250aW51ZTtcbjExMzM6XHRcdFx0aWYgKHNtYy1cdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfQ0xPU0VEIHx8XG4xMTM0Olx0XHRcdCAgICBzbWMtXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX1BFRVJDTE9TRVdBSVQxIHx8XG4xMTM1Olx0XHRcdCAgICBzbWMtXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX1BFRVJDTE9TRVdBSVQyIHx8XG4xMTM2Olx0XHRcdCAgICBzbWMtXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX0FQUEZJTkNMT1NFV0FJVCB8fFxuMTEzNzpcdFx0XHQgICAgc21jLVx1MDAzZXNrLnNrX3N0YXRlID09IFNNQ19BUFBDTE9TRVdBSVQxIHx8XG4xMTM4Olx0XHRcdCAgICBzbWMtXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX0FQUENMT1NFV0FJVDIgfHxcbjExMzk6XHRcdFx0ICAgIHNtYy1cdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfUEVFUkZJTkNMT1NFV0FJVCB8fFxuMTE0MDpcdFx0XHQgICAgc21jLVx1MDAzZXNrLnNrX3N0YXRlID09IFNNQ19QRUVSQUJPUlRXQUlUIHx8XG4xMTQxOlx0XHRcdCAgICBzbWMtXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX1BST0NFU1NBQk9SVCkge1xuMTE0MjpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4xMTQzOlx0XHRcdFx0c21jX3N3aXRjaF9saW5rX2FuZF9jb3VudChjb25uLCB0b19sbmspO1xuMTE0NDpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbjExNDU6XHRcdFx0XHRjb250aW51ZTtcbjExNDY6XHRcdFx0fVxuMTE0NzpcdFx0XHRzb2NrX2hvbGQoXHUwMDI2c21jLVx1MDAzZXNrKTtcbjExNDg6XHRcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuMTE0OTpcdFx0XHQvKiBwcmUtZmV0Y2ggYnVmZmVyIG91dHNpZGUgb2Ygc2VuZF9sb2NrLCBtaWdodCBzbGVlcCAqL1xuMTE1MDpcdFx0XHRyYyA9IHNtY19jZGNfZ2V0X2ZyZWVfc2xvdChjb25uLCB0b19sbmssIFx1MDAyNndyX2J1ZiwgTlVMTCwgXHUwMDI2cGVuZCk7XG4xMTUxOlx0XHRcdGlmICghcmMpIHtcbjExNTI6XHRcdFx0XHQvKiBhdm9pZCByYWNlIHdpdGggc21jcl90eF9zbmRidWZfbm9uZW1wdHkoKSAqL1xuMTE1MzpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4xMTU0Olx0XHRcdFx0c21jX3N3aXRjaF9saW5rX2FuZF9jb3VudChjb25uLCB0b19sbmspO1xuMTE1NTpcdFx0XHRcdHJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpO1xuMTE1NjpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbjExNTc6XHRcdFx0fVxuMTE1ODpcdFx0XHRzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spO1xuMTE1OTpcdFx0XHRpZiAocmMpXG4xMTYwOlx0XHRcdFx0Z290byBlcnJfb3V0O1xuMTE2MTpcdFx0XHRnb3RvIGFnYWluO1xuMTE2MjpcdFx0fVxuMTE2MzpcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuMTE2NDpcdFx0c21jX3dyX3R4X2xpbmtfcHV0KHRvX2xuayk7XG4xMTY1Olx0XHRyZXR1cm4gdG9fbG5rO1xuMTE2NjpcdFxuMTE2NzpcdGVycl9vdXQ6XG4xMTY4Olx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHRvX2xuayk7XG4xMTY5Olx0XHRzbWNfd3JfdHhfbGlua19wdXQodG9fbG5rKTtcbjExNzA6XHRcdHJldHVybiBOVUxMO1xuMTE3MTpcdH1cbjExNzI6XHRcbjExNzM6XHRzdGF0aWMgdm9pZCBzbWNyX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpidWZfZGVzYywgYm9vbCBpc19ybWIsXG4xMTc0Olx0XHRcdFx0ICAgc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4xMTc1Olx0e1xuMTE3NjpcdFx0c3RydWN0IHJ3X3NlbWFwaG9yZSAqbG9jaztcdC8qIGxvY2sgYnVmZmVyIGxpc3QgKi9cbjExNzc6XHRcdGludCByYztcbjExNzg6XHRcbjExNzk6XHRcdGlmIChpc19ybWIgXHUwMDI2XHUwMDI2IGJ1Zl9kZXNjLVx1MDAzZWlzX2NvbmZfcmtleSBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2bGdyLVx1MDAzZWxpc3QpKSB7XG4xMTgwOlx0XHRcdC8qIHVucmVnaXN0ZXIgcm1iIHdpdGggcGVlciAqL1xuMTE4MTpcdFx0XHRyYyA9IHNtY19sbGNfZmxvd19pbml0aWF0ZShsZ3IsIFNNQ19MTENfRkxPV19SS0VZKTtcbjExODI6XHRcdFx0aWYgKCFyYykge1xuMTE4MzpcdFx0XHRcdC8qIHByb3RlY3QgYWdhaW5zdCBzbWNfbGxjX2NsaV9ya2V5X2V4Y2hhbmdlKCkgKi9cbjExODQ6XHRcdFx0XHRkb3duX3JlYWQoXHUwMDI2bGdyLVx1MDAzZWxsY19jb25mX211dGV4KTtcbjExODU6XHRcdFx0XHRzbWNfbGxjX2RvX2RlbGV0ZV9ya2V5KGxnciwgYnVmX2Rlc2MpO1xuMTE4NjpcdFx0XHRcdGJ1Zl9kZXNjLVx1MDAzZWlzX2NvbmZfcmtleSA9IGZhbHNlO1xuMTE4NzpcdFx0XHRcdHVwX3JlYWQoXHUwMDI2bGdyLVx1MDAzZWxsY19jb25mX211dGV4KTtcbjExODg6XHRcdFx0XHRzbWNfbGxjX2Zsb3dfc3RvcChsZ3IsIFx1MDAyNmxnci1cdTAwM2VsbGNfZmxvd19sY2wpO1xuMTE4OTpcdFx0XHR9XG4xMTkwOlx0XHR9XG4xMTkxOlx0XG4xMTkyOlx0XHRpZiAoYnVmX2Rlc2MtXHUwMDNlaXNfcmVnX2Vycikge1xuMTE5MzpcdFx0XHQvKiBidWYgcmVnaXN0cmF0aW9uIGZhaWxlZCwgcmV1c2Ugbm90IHBvc3NpYmxlICovXG4xMTk0Olx0XHRcdGxvY2sgPSBpc19ybWIgPyBcdTAwMjZsZ3ItXHUwMDNlcm1ic19sb2NrIDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDA0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgU01DIEJ1ZyBGaXgqKgoKT2theSwgc28gdGhpcyBjaGFuZ2UgdGFja2xlcyBhIHByZXR0eSBuYXN0eSBidWcgd2l0aGluIHRoZSBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zIChTTUMpIG5ldHdvcmtpbmcgY29kZS4gSXQgbG9va3MgbGlrZSBgc29ja19wdXQoJmFtcDtzbWMtJmd0O3NrKWAgd2FzIGJlaW5nIHNraXBwZWQgdW5kZXIgY2VydGFpbiBlcnJvciBjb25kaXRpb25zIHdoZW4gYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdGAgZmFpbGVkLiBUaGF0IG1lYW5zIHdlIHdlcmUgbGVha2luZyBzb2NrZXQgcmVmZXJlbmNlcywgd2hpY2ggaXMgYSBiaWcgbm8tbm8uIFdlIGNhbiYjMzk7dCBoYXZlIHRob3NlIGxpbmdlcmluZyBhcm91bmQuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgaW1wYWN0aW5nIHRoZSBjb3JlIFNNQyBsb2dpYywgYW5kIGNvbnNpZGVyaW5nIFNNQyYjMzk7cyByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgZHVlIHRvIGl0cyBBRl9TTUMgc29ja2V0IGZhbWlseSwgdGhpcyBpcyBzb21ldGhpbmcgd2UgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBjaGVjayB3aGV0aGVyIFNNQywgaW4gZ2VuZXJhbCwgcmVxdWlyZXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIG9wZXJhdGlvbi4gVGhlIGZhY3QgdGhhdCB0aGUgYHNtY19zd2l0Y2hfY29ubnNgIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBzbWNyX2xpbmtfZG93bmAgcHJvdmlkZXMgYSBsaXR0bGUgbW9yZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgc3BlY2lmaWMgcGF0aCB0byBzZWUgd2hhdCBpbnRlcmFjdGlvbnMgYXJlIHRha2luZyBwbGFjZSB0aGVyZS4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGhvdyB0aGlzIGltcGFjdHMgdGhpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTEzLVxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMjItXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk1NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHdvcmtpbmcgdGhyb3VnaCB0aGlzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBOZWVkIGZvciBTTUMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBmbGFnIHVwIHRoYXQgSSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgYFNNQ2AgbW9kdWxlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBJbnN0ZWFkIG9mIGp1c3QgZGl2aW5nIGluLCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgKnVzaW5nKiB0aGlzIGBTTUNgIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIGBzbWNfc3dpdGNoX2Nvbm5zYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBpcyBiZWluZyBsZXZlcmFnZWQgYW5kIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGl0cyB1c2FnZS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgd2hhdCBpdHMgaW1wYWN0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfc3dpdGNoX2Nvbm5zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTA5NC1cbm5ldC9zbWMvc21jX2NvcmUuYzoxMDk1OnN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDk2LVx0XHRcdFx0ICBzdHJ1Y3Qgc21jX2xpbmsgKmZyb21fbG5rLCBib29sIGlzX2Rldl9lcnIpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE3OTQtXG5uZXQvc21jL3NtY19jb3JlLmM6MTc5NTpcdHRvX2xuayA9IHNtY19zd2l0Y2hfY29ubnMobGdyLCBsbmssIHRydWUpO1xubmV0L3NtYy9zbWNfY29yZS5jLTE3OTYtXHRpZiAoIXRvX2xuaykgeyAvKiBubyBiYWNrdXAgbGluayBhdmFpbGFibGUgKi9cbi0tXG5uZXQvc21jL3NtY19jb3JlLmg9NjE1PWludCBzbWNyX2xpbmtfcmVnX2J1ZihzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnJtYl9kZXNjKTtcbm5ldC9zbWMvc21jX2NvcmUuaDo2MTY6c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxubmV0L3NtYy9zbWNfY29yZS5oLTYxNy1cdFx0XHRcdCAgc3RydWN0IHNtY19saW5rICpmcm9tX2xuaywgYm9vbCBpc19kZXZfZXJyKTtcbi0tXG5uZXQvc21jL3NtY19sbGMuYz0xMjg4PXN0YXRpYyB2b2lkIHNtY19sbGNfZGVsZXRlX2FzeW1fbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xMjk4LVx0XHRyZXR1cm47XG5uZXQvc21jL3NtY19sbGMuYzoxMjk5Olx0bG5rX25ldyA9IHNtY19zd2l0Y2hfY29ubnMobGdyLCBsbmtfYXN5bSwgZmFsc2UpO1xubmV0L3NtYy9zbWNfbGxjLmMtMTMwMC1cdHNtY193cl90eF93YWl0X25vX3BlbmRpbmdfc2VuZHMobG5rX2FzeW0pO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTE1OTQ9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNjMwLVx0aWYgKHNtY19saW5rX2Rvd25pbmcoXHUwMDI2bG5rX2RlbC1cdTAwM2VzdGF0ZSkpXG5uZXQvc21jL3NtY19sbGMuYzoxNjMxOlx0XHRzbWNfc3dpdGNoX2Nvbm5zKGxnciwgbG5rX2RlbCwgZmFsc2UpO1xubmV0L3NtYy9zbWNfbGxjLmMtMTYzMi1cdHNtY3JfbGlua19jbGVhcihsbmtfZGVsLCB0cnVlKTtcbi0tXG5uZXQvc21jL3NtY19sbGMuYz0xNjcyPXN0YXRpYyB2b2lkIHNtY19sbGNfcHJvY2Vzc19zcnZfZGVsZXRlX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTcwMy1cdGlmIChzbWNfbGlua19kb3duaW5nKFx1MDAyNmxua19kZWwtXHUwMDNlc3RhdGUpKSB7XG5uZXQvc21jL3NtY19sbGMuYzoxNzA0Olx0XHRpZiAoc21jX3N3aXRjaF9jb25ucyhsZ3IsIGxua19kZWwsIGZhbHNlKSlcbm5ldC9zbWMvc21jX2xsYy5jLTE3MDUtXHRcdFx0c21jX3dyX3R4X3dhaXRfbm9fcGVuZGluZ19zZW5kcyhsbmtfZGVsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAyNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2FsbHMgdG8gYHNtY19zd2l0Y2hfY29ubnNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYHNtY19zd2l0Y2hfY29ubnNgIGlzIHVzZWQgd2l0aGluIHRoaXMgU01DIGNvZGViYXNlLiBJJiMzOTt2ZSBub3RlZCB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zOiBgc21jcl9saW5rX2Rvd25gLCBgc21jX2xsY19kZWxldGVfYXN5bV9saW5rYCwgYHNtY19sbGNfcHJvY2Vzc19jbGlfZGVsZXRlX2xpbmtgLCBhbmQgYHNtY19sbGNfcHJvY2Vzc19zcnZfZGVsZXRlX2xpbmtgLiBJIHNlZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IGFsbCBuZWNlc3NhcmlseSBzdGF0aWMsIG9yIHRoZXkgKmNvdWxkKiBiZSBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgU01DIG1vZHVsZS4KCk5vdywgSSB3YW50IHRvIGRlbHZlIGEgbGl0dGxlIGRlZXBlci4gR2l2ZW4gdGhlIGNvbnRleHRzIGxpc3RlZCBoZXJlLCBpdCYjMzk7cyBpbW1lZGlhdGVseSBvYnZpb3VzIHRoYXQgYHNtY3JfbGlua19kb3duYCBpcyB3b3J0aCBhIGNsb3NlciBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBzbWNyX2xpbmtfZG93bmAgYW5kIHNlZSB0aGUgd2lkZXIgY2FsbCBjb250ZXh0LCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNyX2xpbmtfZG93biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuYz0xMDk1PXN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTE2Ny1lcnJfb3V0OlxubmV0L3NtYy9zbWNfY29yZS5jOjExNjg6XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHRvX2xuayk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTE2OS1cdHNtY193cl90eF9saW5rX3B1dCh0b19sbmspO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xNjYzPXZvaWQgc21jX3NtY3JfdGVybWluYXRlX2FsbChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE2NzctXHRcdFx0XHRpZiAobGdyLVx1MDAzZWxua1tpXS5zbWNpYmRldiA9PSBzbWNpYmRldilcbm5ldC9zbWMvc21jX2NvcmUuYzoxNjc4Olx0XHRcdFx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKFx1MDAyNmxnci1cdTAwM2VsbmtbaV0pO1xubmV0L3NtYy9zbWNfY29yZS5jLTE2NzktXHRcdFx0fVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xNzU3PXZvaWQgc21jcl9wb3J0X2FkZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGlicG9ydClcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTc4NS0gKi9cbm5ldC9zbWMvc21jX2NvcmUuYzoxNzg2OnN0YXRpYyB2b2lkIHNtY3JfbGlua19kb3duKHN0cnVjdCBzbWNfbGluayAqbG5rKVxubmV0L3NtYy9zbWNfY29yZS5jLTE3ODcte1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xODI2LS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGxnci1cdTAwM2VsbGNfY29uZl9tdXRleCBsb2NrICovXG5uZXQvc21jL3NtY19jb3JlLmM6MTgyNzp2b2lkIHNtY3JfbGlua19kb3duX2NvbmQoc3RydWN0IHNtY19saW5rICpsbmspXG5uZXQvc21jL3NtY19jb3JlLmMtMTgyOC17XG5uZXQvc21jL3NtY19jb3JlLmMtMTgyOS1cdGlmIChzbWNfbGlua19kb3duaW5nKFx1MDAyNmxuay1cdTAwM2VzdGF0ZSkpIHtcbm5ldC9zbWMvc21jX2NvcmUuYzoxODMwOlx0XHR0cmFjZV9zbWNyX2xpbmtfZG93bihsbmssIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG5uZXQvc21jL3NtY19jb3JlLmM6MTgzMTpcdFx0c21jcl9saW5rX2Rvd24obG5rKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xODMyLVx0fVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xODM1LS8qIHdpbGwgZ2V0IHRoZSBsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXggbG9jayAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjE4MzY6dm9pZCBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHN0cnVjdCBzbWNfbGluayAqbG5rKVxubmV0L3NtYy9zbWNfY29yZS5jLTE4Mzcte1xubmV0L3NtYy9zbWNfY29yZS5jLTE4MzgtXHRpZiAoc21jX2xpbmtfZG93bmluZyhcdTAwMjZsbmstXHUwMDNlc3RhdGUpKSB7XG5uZXQvc21jL3NtY19jb3JlLmM6MTgzOTpcdFx0dHJhY2Vfc21jcl9saW5rX2Rvd24obG5rLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xubmV0L3NtYy9zbWNfY29yZS5jLTE4NDAtXHRcdHNtY3JfbGlua19ob2xkKGxuayk7IC8qIHNtY3JfbGlua19wdXQgaW4gbGlua19kb3duX3dyayAqL1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xODQ2PXZvaWQgc21jcl9wb3J0X2VycihzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGlicG9ydClcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTg2MS1cdFx0XHQgICAgbG5rLVx1MDAzZXNtY2liZGV2ID09IHNtY2liZGV2IFx1MDAyNlx1MDAyNiBsbmstXHUwMDNlaWJwb3J0ID09IGlicG9ydClcbm5ldC9zbWMvc21jX2NvcmUuYzoxODYyOlx0XHRcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsbmspO1xubmV0L3NtYy9zbWNfY29yZS5jLTE4NjMtXHRcdH1cbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTg2Nz1zdGF0aWMgdm9pZCBzbWNfbGlua19kb3duX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xODc2LVx0ZG93bl93cml0ZShcdTAwMjZsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xubmV0L3NtYy9zbWNfY29yZS5jOjE4Nzc6XHRzbWNyX2xpbmtfZG93bihsaW5rKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xODc4LVx0dXBfd3JpdGUoXHUwMDI2bGdyLVx1MDAzZWxsY19jb25mX211dGV4KTtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmg9NjE2PXN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbm5ldC9zbWMvc21jX2NvcmUuaC02MTctXHRcdFx0XHQgIHN0cnVjdCBzbWNfbGluayAqZnJvbV9sbmssIGJvb2wgaXNfZGV2X2Vycik7XG5uZXQvc21jL3NtY19jb3JlLmg6NjE4OnZvaWQgc21jcl9saW5rX2Rvd25fY29uZChzdHJ1Y3Qgc21jX2xpbmsgKmxuayk7XG5uZXQvc21jL3NtY19jb3JlLmg6NjE5OnZvaWQgc21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChzdHJ1Y3Qgc21jX2xpbmsgKmxuayk7XG5uZXQvc21jL3NtY19jb3JlLmgtNjIwLWludCBzbWNfbmxfZ2V0X3N5c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTI4OD1zdGF0aWMgdm9pZCBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTMwNy1cdGlmIChyYykge1xubmV0L3NtYy9zbWNfbGxjLmM6MTMwODpcdFx0c21jcl9saW5rX2Rvd25fY29uZChsbmtfbmV3KTtcbm5ldC9zbWMvc21jX2xsYy5jLTEzMDktXHRcdGdvdG8gb3V0X2ZyZWU7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTMxMy1cdGlmICghcWVudHJ5KSB7XG5uZXQvc21jL3NtY19sbGMuYzoxMzE0Olx0XHRzbWNyX2xpbmtfZG93bl9jb25kKGxua19uZXcpO1xubmV0L3NtYy9zbWNfbGxjLmMtMTMxNS1cdFx0Z290byBvdXRfZnJlZTtcbi0tXG5uZXQvc21jL3NtY19sbGMuYz0yMTE1PXN0YXRpYyB2b2lkIHNtY19sbGNfdGVzdGxpbmtfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMjEzOC1cdGlmIChyYyBcdTAwM2M9IDApIHtcbm5ldC9zbWMvc21jX2xsYy5jOjIxMzk6XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG5uZXQvc21jL3NtY19sbGMuYy0yMTQwLVx0XHRyZXR1cm47XG4tLVxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5jPTg9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKHNtY19yeF9yZWN2bXNnKTtcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuYzo5OkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChzbWNyX2xpbmtfZG93bik7XG4tLVxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5oPTc4PURFRklORV9FVkVOVChzbWNfbXNnX2V2ZW50LCBzbWNfcnhfcmVjdm1zZyxcbi0tXG5uZXQvc21jL3NtY190cmFjZXBvaW50LmgtODQtXG5uZXQvc21jL3NtY190cmFjZXBvaW50Lmg6ODU6VFJBQ0VfRVZFTlQoc21jcl9saW5rX2Rvd24sXG5uZXQvc21jL3NtY190cmFjZXBvaW50LmgtODYtXG4tLVxubmV0L3NtYy9zbWNfdHguYz0zMTc9c3RhdGljIGludCBzbWNfdHhfcmRtYV93cml0ZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sIGludCBwZWVyX3JtYmVfb2Zmc2V0LFxuLS1cbm5ldC9zbWMvc21jX3R4LmMtMzM0LVx0aWYgKHJjKVxubmV0L3NtYy9zbWNfdHguYzozMzU6XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG5uZXQvc21jL3NtY190eC5jLTMzNi1cdHJldHVybiByYztcbi0tXG5uZXQvc21jL3NtY193ci5jPTc3PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfd3JfdHhfcHJvY2Vzc19jcWUoc3RydWN0IGliX3djICp3Yylcbi0tXG5uZXQvc21jL3NtY193ci5jLTEyOC1cdFx0LyogdGVybWluYXRlIGxpbmsgKi9cbm5ldC9zbWMvc21jX3dyLmM6MTI5Olx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xubmV0L3NtYy9zbWNfd3IuYy0xMzAtXHR9XG4tLVxubmV0L3NtYy9zbWNfd3IuYz0xOTU9aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY193ci5jLTIyMi1cdFx0XHQvKiB0aW1lb3V0IC0gdGVybWluYXRlIGxpbmsgKi9cbm5ldC9zbWMvc21jX3dyLmM6MjIzOlx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG5uZXQvc21jL3NtY193ci5jLTIyNC1cdFx0XHRyZXR1cm4gLUVQSVBFO1xuLS1cbm5ldC9zbWMvc21jX3dyLmM9MzA0PWludCBzbWNfd3JfdHhfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwcml2KVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMzE0LVx0XHRzbWNfd3JfdHhfcHV0X3Nsb3QobGluaywgcHJpdik7XG5uZXQvc21jL3NtY193ci5jOjMxNTpcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcbm5ldC9zbWMvc21jX3dyLmMtMzE2LVx0fVxuLS1cbm5ldC9zbWMvc21jX3dyLmM9MzIwPWludCBzbWNfd3JfdHhfdjJfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwcml2LFxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMzMwLVx0XHRzbWNfd3JfdHhfcHV0X3Nsb3QobGluaywgcHJpdik7XG5uZXQvc21jL3NtY193ci5jOjMzMTpcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcbm5ldC9zbWMvc21jX3dyLmMtMzMyLVx0fVxuLS1cbm5ldC9zbWMvc21jX3dyLmM9MzY2PWludCBzbWNfd3JfcmVnX3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3QgaWJfbXIgKm1yKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMzg2LVx0XHQvKiB0aW1lb3V0IC0gdGVybWluYXRlIGxpbmsgKi9cbm5ldC9zbWMvc21jX3dyLmM6Mzg3Olx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xubmV0L3NtYy9zbWNfd3IuYy0zODgtXHRcdHJldHVybiAtRVBJUEU7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz00NDk9c3RhdGljIGlubGluZSB2b2lkIHNtY193cl9yeF9wcm9jZXNzX2NxZXMoc3RydWN0IGliX3djIHdjW10sIGludCBudW0pXG4tLVxubmV0L3NtYy9zbWNfd3IuYy00NjYtXHRcdFx0Y2FzZSBJQl9XQ19XUl9GTFVTSF9FUlI6XG5uZXQvc21jL3NtY193ci5jOjQ2NzpcdFx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG5uZXQvc21jL3NtY193ci5jLTQ2OC1cdFx0XHRcdGlmIChsaW5rLVx1MDAzZXdyX3J4X2lkX2NvbXBsID09IGxpbmstXHUwMDNld3JfcnhfaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDU4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNNQyBDb25uZWN0aW9uIFN3aXRjaGluZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgcHJvbWlzaW5nIGFyZWEgZm9yIGludmVzdGlnYXRpb24uIFRoaXMgYHNtY19zd2l0Y2hfY29ubnNgIGZ1bmN0aW9uIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyDigJMgaXQmIzM5O3Mgbm9uLXN0YXRpYywgd2hpY2ggbWVhbnMgaXQgaGFzIGJyb2FkZXIgYWNjZXNzaWJpbGl0eSB3aXRoaW4gdGhlIGNvZGUuIEkgY2FuIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBzZXZlcmFsIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGxvY2F0aW9uczogYHNtY3JfbGlua19kb3duYCwgYHNtY19sbGNfZGVsZXRlX2FzeW1fbGlua2AsIGBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rYCwgYW5kIGBzbWNfbGxjX3Byb2Nlc3Nfc3J2X2RlbGV0ZV9saW5rYC4gVGhpcyBkZWZpbml0ZWx5IG9wZW5zIHVwIHNvbWUgYXZlbnVlcyBmb3IgZXhwbG9pdGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKQmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gVGhlIGZhY3QgdGhhdCBgU01DYCByZWxhdGVzIHRvIGEgc29ja2V0IHByb3RvY29sIGZhbWlseSBpcyBhbHNvIHdvcnRoIG5vdGluZzsgdGhhdCBjb250ZXh0IGNvdWxkIGluZmx1ZW5jZSB0aGUgdHlwZXMgb2YgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gSSYjMzk7bGwgbWFrZSBhIG5vdGUgb2YgdGhhdC4gQW5kLCBvZiBjb3Vyc2UsIEkgc2hvdWxkIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBmb2NhbCBzeW1ib2xzOiBgc21jX3N3aXRjaF9jb25uc2AsIGBzbWNyX2xpbmtfZG93bmAsIGBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmtgLCBgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGlua2AsIGFuZCBgc21jX2xsY19wcm9jZXNzX3Nydl9kZWxldGVfbGlua2AuCgpIb2xkIG9uIGEgbWludXRlLCBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIHN0YXRpYy9ub24tc3RhdGljIHN0YXR1cyBvZiB0aGVzZSBmdW5jdGlvbnMuIExvb2tzIGxpa2UgYHNtY3JfbGlua19kb3duYCBhbmQgYHNtY19sbGNfZGVsZXRlX2FzeW1fbGlua2AgYXJlIHN0YXRpYywgd2hpY2ggbGltaXRzIHRoZWlyIGRpcmVjdCBleHBvc3VyZS4gVGhpcyBtYWtlcyBgc21jX3N3aXRjaF9jb25uc2AgZXZlbiBtb3JlIGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IHdpbGwgYmUgbW9yZSBhY2Nlc3NpYmxlLiBOb3csIEkgbmVlZCB0byBleGFtaW5lIGBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rYCBhbmQgYHNtY19sbGNfcHJvY2Vzc19zcnZfZGVsZXRlX2xpbmtgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdXAgd2l0aCB0aG9zZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19sbGNfcHJvY2Vzc19jbGlfZGVsZXRlX2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYz0xNTgyPXZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZClcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNTkzLVxubmV0L3NtYy9zbWNfbGxjLmM6MTU5NDpzdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxubmV0L3NtYy9zbWNfbGxjLmMtMTU5NS17XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTc0MD1zdGF0aWMgdm9pZCBzbWNfbGxjX2RlbGV0ZV9saW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTE3NTEtXHRpZiAobGdyLVx1MDAzZXJvbGUgPT0gU01DX0NMTlQpXG5uZXQvc21jL3NtY19sbGMuYzoxNzUyOlx0XHRzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKGxncik7XG5uZXQvc21jL3NtY19sbGMuYy0xNzUzLVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU01DIENvbm5lY3Rpb24gU3dpdGNoaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBpbml0aWFsIGNvbnRleHQgc2VlbXMgc3RhdGljLCB3aGljaCBpc24mIzM5O3QgZ2l2aW5nIG1lIG11Y2ggdG8gd29yayB3aXRoLiBUaW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gTXkgZm9jdXMgaW1tZWRpYXRlbHkgc2hpZnRzIHRvIGBzbWNfc3dpdGNoX2Nvbm5zYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIE5vdywgbGV0JiMzOTtzIGV4cGxvcmUgYG5ldC9zbWMvc21jX2NvcmUuY2AgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUgdGhhdCBhY3R1YWxseSBjYWxsIGBzbWNfc3dpdGNoX2Nvbm5zYC4gQWhhISBJIHNlZSBgc21jcl9saW5rX2Rvd25fY29uZGAgYW5kIGBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkYC4gVGhlc2UgYXJlbiYjMzk7dCBzdGF0aWMsIGFuZCB0aGV5JiMzOTtyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSBjYWxsIGBzbWNyX2xpbmtfZG93bmAsIHdoaWNoIGluIHR1cm4sIGNhbGxzIGBzbWNfc3dpdGNoX2Nvbm5zYC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGF2ZW51ZSBvZiBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNyX2xpbmtfZG93bl9jb25kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jPTEwOTU9c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMTY3LWVycl9vdXQ6XG5uZXQvc21jL3NtY19jb3JlLmM6MTE2ODpcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQodG9fbG5rKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xMTY5LVx0c21jX3dyX3R4X2xpbmtfcHV0KHRvX2xuayk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE2NjM9dm9pZCBzbWNfc21jcl90ZXJtaW5hdGVfYWxsKHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldilcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTY3Ny1cdFx0XHRcdGlmIChsZ3ItXHUwMDNlbG5rW2ldLnNtY2liZGV2ID09IHNtY2liZGV2KVxubmV0L3NtYy9zbWNfY29yZS5jOjE2Nzg6XHRcdFx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQoXHUwMDI2bGdyLVx1MDAzZWxua1tpXSk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTY3OS1cdFx0XHR9XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE4MjYtLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgbGdyLVx1MDAzZWxsY19jb25mX211dGV4IGxvY2sgKi9cbm5ldC9zbWMvc21jX2NvcmUuYzoxODI3OnZvaWQgc21jcl9saW5rX2Rvd25fY29uZChzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbm5ldC9zbWMvc21jX2NvcmUuYy0xODI4LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTgzNS0vKiB3aWxsIGdldCB0aGUgbGdyLVx1MDAzZWxsY19jb25mX211dGV4IGxvY2sgKi9cbm5ldC9zbWMvc21jX2NvcmUuYzoxODM2OnZvaWQgc21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbm5ldC9zbWMvc21jX2NvcmUuYy0xODM3LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTg0Nj12b2lkIHNtY3JfcG9ydF9lcnIoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE4NjEtXHRcdFx0ICAgIGxuay1cdTAwM2VzbWNpYmRldiA9PSBzbWNpYmRldiBcdTAwMjZcdTAwMjYgbG5rLVx1MDAzZWlicG9ydCA9PSBpYnBvcnQpXG5uZXQvc21jL3NtY19jb3JlLmM6MTg2MjpcdFx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobG5rKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xODYzLVx0XHR9XG4tLVxubmV0L3NtYy9zbWNfY29yZS5oPTYxNj1zdHJ1Y3Qgc21jX2xpbmsgKnNtY19zd2l0Y2hfY29ubnMoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG5uZXQvc21jL3NtY19jb3JlLmgtNjE3LVx0XHRcdFx0ICBzdHJ1Y3Qgc21jX2xpbmsgKmZyb21fbG5rLCBib29sIGlzX2Rldl9lcnIpO1xubmV0L3NtYy9zbWNfY29yZS5oOjYxODp2b2lkIHNtY3JfbGlua19kb3duX2NvbmQoc3RydWN0IHNtY19saW5rICpsbmspO1xubmV0L3NtYy9zbWNfY29yZS5oOjYxOTp2b2lkIHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQoc3RydWN0IHNtY19saW5rICpsbmspO1xubmV0L3NtYy9zbWNfY29yZS5oLTYyMC1pbnQgc21jX25sX2dldF9zeXNfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTEyODg9c3RhdGljIHZvaWQgc21jX2xsY19kZWxldGVfYXN5bV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTEzMDctXHRpZiAocmMpIHtcbm5ldC9zbWMvc21jX2xsYy5jOjEzMDg6XHRcdHNtY3JfbGlua19kb3duX2NvbmQobG5rX25ldyk7XG5uZXQvc21jL3NtY19sbGMuYy0xMzA5LVx0XHRnb3RvIG91dF9mcmVlO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTEzMTMtXHRpZiAoIXFlbnRyeSkge1xubmV0L3NtYy9zbWNfbGxjLmM6MTMxNDpcdFx0c21jcl9saW5rX2Rvd25fY29uZChsbmtfbmV3KTtcbm5ldC9zbWMvc21jX2xsYy5jLTEzMTUtXHRcdGdvdG8gb3V0X2ZyZWU7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MjExNT1zdGF0aWMgdm9pZCBzbWNfbGxjX3Rlc3RsaW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTIxMzgtXHRpZiAocmMgXHUwMDNjPSAwKSB7XG5uZXQvc21jL3NtY19sbGMuYzoyMTM5Olx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xubmV0L3NtYy9zbWNfbGxjLmMtMjE0MC1cdFx0cmV0dXJuO1xuLS1cbm5ldC9zbWMvc21jX3R4LmM9MzE3PXN0YXRpYyBpbnQgc21jX3R4X3JkbWFfd3JpdGUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLCBpbnQgcGVlcl9ybWJlX29mZnNldCxcbi0tXG5uZXQvc21jL3NtY190eC5jLTMzNC1cdGlmIChyYylcbm5ldC9zbWMvc21jX3R4LmM6MzM1Olx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xubmV0L3NtYy9zbWNfdHguYy0zMzYtXHRyZXR1cm4gcmM7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz03Nz1zdGF0aWMgaW5saW5lIHZvaWQgc21jX3dyX3R4X3Byb2Nlc3NfY3FlKHN0cnVjdCBpYl93YyAqd2MpXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0xMjgtXHRcdC8qIHRlcm1pbmF0ZSBsaW5rICovXG5uZXQvc21jL3NtY193ci5jOjEyOTpcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcbm5ldC9zbWMvc21jX3dyLmMtMTMwLVx0fVxuLS1cbm5ldC9zbWMvc21jX3dyLmM9MTk1PWludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0yMjItXHRcdFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXG5uZXQvc21jL3NtY193ci5jOjIyMzpcdFx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xubmV0L3NtYy9zbWNfd3IuYy0yMjQtXHRcdFx0cmV0dXJuIC1FUElQRTtcbi0tXG5uZXQvc21jL3NtY193ci5jPTMwND1pbnQgc21jX3dyX3R4X3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdilcbi0tXG5uZXQvc21jL3NtY193ci5jLTMxNC1cdFx0c21jX3dyX3R4X3B1dF9zbG90KGxpbmssIHByaXYpO1xubmV0L3NtYy9zbWNfd3IuYzozMTU6XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG5uZXQvc21jL3NtY193ci5jLTMxNi1cdH1cbi0tXG5uZXQvc21jL3NtY193ci5jPTMyMD1pbnQgc21jX3dyX3R4X3YyX3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdixcbi0tXG5uZXQvc21jL3NtY193ci5jLTMzMC1cdFx0c21jX3dyX3R4X3B1dF9zbG90KGxpbmssIHByaXYpO1xubmV0L3NtYy9zbWNfd3IuYzozMzE6XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG5uZXQvc21jL3NtY193ci5jLTMzMi1cdH1cbi0tXG5uZXQvc21jL3NtY193ci5jPTM2Nj1pbnQgc21jX3dyX3JlZ19zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IGliX21yICptcilcbi0tXG5uZXQvc21jL3NtY193ci5jLTM4Ni1cdFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXG5uZXQvc21jL3NtY193ci5jOjM4NzpcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcbm5ldC9zbWMvc21jX3dyLmMtMzg4LVx0XHRyZXR1cm4gLUVQSVBFO1xuLS1cbm5ldC9zbWMvc21jX3dyLmM9NDQ5PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfd3JfcnhfcHJvY2Vzc19jcWVzKHN0cnVjdCBpYl93YyB3Y1tdLCBpbnQgbnVtKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtNDY2LVx0XHRcdGNhc2UgSUJfV0NfV1JfRkxVU0hfRVJSOlxubmV0L3NtYy9zbWNfd3IuYzo0Njc6XHRcdFx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xubmV0L3NtYy9zbWNfd3IuYy00NjgtXHRcdFx0XHRpZiAobGluay1cdTAwM2V3cl9yeF9pZF9jb21wbCA9PSBsaW5rLVx1MDAzZXdyX3J4X2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEZvY3VzOiBTTUMgYW5kIExpbmsgRG93biBDb25kaXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGBzbWNyX2xpbmtfZG93bl9jb25kYCBhbmQgYHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWRgLiBUaGV5JiMzOTtyZSBub24tc3RhdGljLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB0aGV5IGFyZSBlbnRyeSBwb2ludHMuIEFuZCB0aGV5JiMzOTtyZSBlc3NlbnRpYWxseSB0aGUgZ2F0ZWtlZXBlcnMgdG8gYm90aCBgc21jcl9saW5rX2Rvd25gIGFuZCBgc21jX3N3aXRjaF9jb25uc2AuIE1ha2VzIHNlbnNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29udHJvbCBmdW5jdGlvbnMgd29yayBpbiBvcmRlciB0byB1bmRlcnN0YW5kIHRoZSBncmVhdGVyIHN5c3RlbSBiZWhhdmlvci4KClRoZXJlZm9yZSwgSSYjMzk7bGwgaW5jbHVkZSBgc21jX3N3aXRjaF9jb25uc2AsIGBzbWNyX2xpbmtfZG93bl9jb25kYCwgYW5kIGBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkYCBpbiBgRm9jdXNTeW1ib2xzYC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcuCgpOb3csIGJhc2VkIG9uIHdoYXQgSSBzZWUgaGVyZSwgaXQgc2VlbXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUgaXMgYFNNQ2AuIFRoYXQgbWFrZXMgc2Vuc2UgaW4gdGhpcyBjb250ZXh0LiBCdXQsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXMgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWcgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IExldCBtZSB0YWtlIGEgbG9vay4uLiBsZXQmIzM5O3MgY2hlY2sgdG8gc2VlIGlmIGBTTUNgIGl0c2VsZiBkZXBlbmRzIG9uIGFueXRoaW5nIGVsc2UuIFRoaXMgbWlnaHQgb3BlbiB1cCBhIGJyb2FkZXIgdmlldyBvZiByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xubmV0L3NtYy9LY29uZmlnLTUtXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gU01DXG5uZXQvc21jL0tjb25maWctMTctXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTIzPWNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xubmV0L3NtYy9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBTTUMgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMXG5uZXQvc21jL0tjb25maWctMjYtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqRGVwZW5kZW5jaWVzIGFuZCBDbGFyaWZpY2F0aW9uKioKClJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgU01DYCBzeXN0ZW0sIGFuZCBpdCYjMzk7cyBtYWtpbmcgYSBzdGF0ZW1lbnQgYWJvdXQgaXRzIGRlcGVuZGVuY2llcy4gT2theSwgaXQgKmRlcGVuZHMqIG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQuLi4gaGFuZyBvbiwgaXMgdGhhdCByaWdodD8gYERJQlNgPyBUaGF0IGZlZWxzIGEgYml0IG9mZi4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQuIE5vLCB3YWl0LCBpdCBkZWZpbml0ZWx5IHNhaWQgdGhhdCBpdCBkZXBlbmRzIG9uIGBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgLiBJIG5lZWQgdG8gcmVyZWFkIHRoaXMuLi4gb2theSwganVzdCB3YW50IHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZGVwZW5kZW5jeSBncmFwaCBpcyBhY2N1cmF0ZS4gSXQmIzM5O3MgYSBrZXkgY29tcG9uZW50LCBzbyBJJiMzOTtsbCByZXZpZXcgdGhlIGZpbGUgbm93IHRvIGNsYXJpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNNQ1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBTTUMtUiBwcm92aWRlcyBhIFwmIzM0O3NvY2tldHMgb3ZlciBSRE1BXCYjMzQ7IHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcbiAgIDc6XHRcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXG4gICA4Olx0XHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXG4gICA5Olx0XHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcbiAgMTA6XHRcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBTTUNfRElBR1xuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gU01DXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXG4gIDE5Olx0XHQgIHNtY3NzLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYzMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZGl0aW9uLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhpbmssICYjMzQ7QWhhISBgZGVwZW5kcyBvbiBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgJiMzNDsuIEJ1dCB0aGVuLCB0aGUgYERJQlNgIGp1bXBzIG91dCBhdCBtZS4gSXMgdGhhdCBldmVuIGEgKnJlYWwqIGNvbmZpZyBvcHRpb24/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSGFuZyBvbiwgcGVyaGFwcyBpdCYjMzk7cyByZWxhdGVkIHRvIGBJUFY2YD8gR290dGEgY2hlY2sgdGhhdCB0b28uIFJpZ2h0LCBsZXQgbWUgZ28gZGlnZ2luZyBpbiBgbmV0L3NtYy9LY29uZmlnYCB0byBzZWUgaWYgYERJQlNgIGlzIGRlZmluZWQgaW4gcmVsYXRpb24gdG8gdGhlIHJlbGV2YW50IGludGVyZmFjZXMuIEFjdHVhbGx5LCB0aGUgS2NvbmZpZyBjb25maXJtcyBpdCAqZG9lcyogZGVwZW5kIG9uIGBESUJTYC4gSG9sZCBvbiwgbWF5YmUgSSYjMzk7bSBtaXNyZWFkaW5nIHRoaXMuIERvZXMgaXQgaGF2ZSBzb21ldGhpbmcgdG8gZG8gd2l0aCBgSVBWNmA/IExldCBtZSByZXZpc2l0IGBuZXQvc21jL0tjb25maWdgLiBBaCwgYERJQlNgIGlzbiYjMzk7dCBhIHN0YW5kYXJkIGNvbmZpZyBlbnRyeSAtIGhtbSwgY291bGQgaXQgYmUgcmVsYXRlZCB0byBgQ1JZUFRPYCBpbnN0ZWFkPyBCYWNrIHRvIGBuZXQvc21jL0tjb25maWdgIGluIHVwc3RyZWFtIGZvciB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIFdhaXQsIHdoeSBpcyBgRElCU2AgaW4gdGhpcyBjb250ZXh0PyBObywgd2FpdCwgY291bGQgdGhpcyBiZSBhYm91dCBgSVBWNmA/IEkgaGF2ZSB0byBnbyBiYWNrIGFuZCBjaGVjay4gSXQmIzM5O3MgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBwdXp6bGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24gSU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xubmV0L3NtYy9LY29uZmlnLTUtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTgzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRlY29kaW5nIHRoZSBBY3JvbnltOiBESUJTKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuICpESUJTKj8gVGhhdCB0ZXJtIGZlZWxzIGEgbGl0dGxlIG91dCBvZiBwbGFjZSwgb3IgYXQgbGVhc3QgdW5mYW1pbGlhciBpbiB0aGlzIGNvbnRleHQuIEJlZm9yZSBJIGNvbnRpbnVlIGFuYWx5emluZyB3aGF0ZXZlciYjMzk7cyBpbiBmcm9udCBvZiBtZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNwZWNpZmljIGFjcm9ueW0gKkRJQlMqIG1lYW5zLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpdHMgZGVmaW5pdGlvbiB0byBlbnN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gR290dGEgZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFuZCBtYWludGFpbiB0aGF0IGNsYXJpdHkgb2YgZm9jdXMuIExldCBtZSBxdWlja2x5IGxvb2sgaXQgdXAgYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayBiZWZvcmUgZGl2aW5nIGRlZXBlci4gSSBjYW4mIzM5O3QgYWZmb3JkIGFueSBtaXNpbnRlcnByZXRhdGlvbnMsIGVzcGVjaWFsbHkgaWYgdGhlIHN1YnNlcXVlbnQgbWF0ZXJpYWwgaGluZ2VzIG9uIGEgc3BlY2lmaWMgbWVhbmluZyBmb3IgKkRJQlMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRElCUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cbmRyaXZlcnMvZGlicy9LY29uZmlnLTE1LVx0Ym9vbCBcJiMzNDtJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MTEKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVjaXNpb25zIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBzb2NrZXQgcmVmZXJlbmNlIGxlYWsgaW4gdGhlIGBTTUNgIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYHNtY19zd2l0Y2hfY29ubnNgLiBSaWdodCwgYERJQlNgIGlzIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZy4gR290IGl0LiBTbyBJIG5lZWQgdG8gc2V0IHVwIHRoZSBjb25maWd1cmF0aW9ucyBwcm9wZXJseSB0byBoaXQgdGhpcy4gVGhlIHBhdGNoIG1lbnRpb25zIGBTTUNgLCBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYC4gYElORVRgIGlzIGFsd2F5cyB0aGVyZSwgbm8gcHJvYmxlbS4gSSYjMzk7bGwgZGVmaW5pdGVseSBlbmFibGUgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYC4gQnV0IHdhaXQsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBgU01DYCBhbmQgYElORklOSUJBTkRgIGFyZSBib3RoIGVuYWJsZWQuIEFoLCB5ZXMsIGBTTUNgIGRvZXMgZGVwZW5kIG9uIGBJTkZJTklCQU5EYC4gR29vZCwgZ29vZC4gU28gdGhlIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFsmIzM0O1NNQyYjMzQ7LCAmIzM0O0lORklOSUJBTkQmIzM0OywgJiMzNDtESUJTJiMzNDtdYC4gSnVzdCB0byBiZSBzYWZlLCBJJiMzOTtsbCBpbmNsdWRlIGBESUJTYC4gSXQgbWlnaHQgYmUgYSBjdXN0b20gY29uZmlnIGluIHRoaXMgcGFydGljdWxhciBrZXJuZWwgdHJlZSwgc28gbGV0JiMzOTtzIGtlZXAgaXQgaW4gdGhlcmUuCgpTbywgbGV0JiMzOTtzIHN1bW1hcml6ZSB3aGF0IEkmIzM5O3ZlIGdvdDoKCmBXb3J0aEZ1enppbmc6IHRydWVgIC0gYmVjYXVzZSB0aGlzIGlzIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIHdpdGggYSBrbm93biBsZWFrLgpgUmVhc29uaW5nOiBUaGUgcGF0Y2ggZml4ZXMgYSBzb2NrZXQgcmVmZXJlbmNlIGxlYWsgaW4gdGhlIFNNQyBjb3JlIG5ldHdvcmtpbmcgY29kZSAoc21jX3N3aXRjaF9jb25ucykgd2hlbiBzbWNfY2RjX2dldF9mcmVlX3Nsb3QgZmFpbHMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIHRoZSBTTUMgcHJvdG9jb2wgZmFtaWx5LmAgLSBUaGF0IGlzIHRoZSBjb3JlIGxvZ2ljIGFuZCBleHBsYWlucyB3aHkgaXQmIzM5O3Mgd29ydGggZnV6emluZy4KYEZvY3VzU3ltYm9sczogc21jX3N3aXRjaF9jb25ucywgc21jcl9saW5rX2Rvd25fY29uZCwgc21jcl9saW5rX2Rvd25fY29uZF9zY2hlZGAgLSBPa2F5LCB0aG9zZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gd2F0Y2guCmBFbmFibGVDb25maWdzOiBTTUMsIElORklOSUJBTkQsIERJQlNgIC0gVGhhdCB3aWxsIGdldCB1cyB0aGVyZS4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgc21jX3N3aXRjaF9jb25uc2AgaXMgdGhlIG1haW4gdGFyZ2V0LiBZZXAsIGxvb2tzIGdvb2QuIEFscmlnaHQsIHRpbWUgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19zd2l0Y2hfY29ubnMmIzM0OywKICAgICYjMzQ7c21jcl9saW5rX2Rvd25fY29uZCYjMzQ7LAogICAgJiMzNDtzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBTTUMgY29yZSBuZXR3b3JraW5nIGNvZGUgKHNtY19zd2l0Y2hfY29ubnMpIHdoZW4gc21jX2NkY19nZXRfZnJlZV9zbG90IGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciB0aGUgU01DIHByb3RvY29sIGZhbWlseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19zd2l0Y2hfY29ubnMmIzM0OywKICAgICYjMzQ7c21jcl9saW5rX2Rvd25fY29uZCYjMzQ7LAogICAgJiMzNDtzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBTTUMgY29yZSBuZXR3b3JraW5nIGNvZGUgKHNtY19zd2l0Y2hfY29ubnMpIHdoZW4gc21jX2NkY19nZXRfZnJlZV9zbG90IGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciB0aGUgU01DIHByb3RvY29sIGZhbWlseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgYHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2VzaylgIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCgpYCBmYWlscy4gVGhpcyByZXNvbHZlcyBhIHJlZmVyZW5jZSBjb3VudCBsZWFrIChtZW1vcnkgbGVhaykgZm9yIHRoZSBzb2NrZXQgc3RydWN0dXJlLiBUaGUgdmFyaWFibGVzIHBvcHVsYXRlZCBieSBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIChgd3JfYnVmYCBhbmQgYHBlbmRgKSBhcmUgY29ycmVjdGx5IGd1YXJkZWQgYnkgdGhlIGBpZiAoIXJjKWAgY2hlY2ssIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHVzZWQuIE1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IGttZW1sZWFrLCBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyBhcmUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDJiNDFjZDQwMjAwMmU5MDMyYzRhMjlmYTNlMzc1NmZmYjE0NjQwOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDE1OjQwOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jCmluZGV4IGI0MjA4Y2IxODZjNWUuLjJmN2Y5ZDQ2OTI3MjAgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19jb3JlLmMKQEAgLTExNDgsMTMgJiM0MzsxMTQ4LDEzIEBAIHN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwKIAkJcmVhZF91bmxvY2tfYmgoJmFtcDtsZ3ItJmd0O2Nvbm5zX2xvY2spOwogCQkvKiBwcmUtZmV0Y2ggYnVmZmVyIG91dHNpZGUgb2Ygc2VuZF9sb2NrLCBtaWdodCBzbGVlcCAqLwogCQlyYyA9IHNtY19jZGNfZ2V0X2ZyZWVfc2xvdChjb25uLCB0b19sbmssICZhbXA7d3JfYnVmLCBOVUxMLCAmYW1wO3BlbmQpOwotCQlpZiAocmMpCi0JCQlnb3RvIGVycl9vdXQ7Ci0JCS8qIGF2b2lkIHJhY2Ugd2l0aCBzbWNyX3R4X3NuZGJ1Zl9ub25lbXB0eSgpICovCi0JCXNwaW5fbG9ja19iaCgmYW1wO2Nvbm4tJmd0O3NlbmRfbG9jayk7Ci0JCXNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoY29ubiwgdG9fbG5rKTsKLQkJcmMgPSBzbWNfc3dpdGNoX2N1cnNvcihzbWMsIHBlbmQsIHdyX2J1Zik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y29ubi0mZ3Q7c2VuZF9sb2NrKTsKJiM0MzsJCWlmICghcmMpIHsKJiM0MzsJCQkvKiBhdm9pZCByYWNlIHdpdGggc21jcl90eF9zbmRidWZfbm9uZW1wdHkoKSAqLwomIzQzOwkJCXNwaW5fbG9ja19iaCgmYW1wO2Nvbm4tJmd0O3NlbmRfbG9jayk7CiYjNDM7CQkJc21jX3N3aXRjaF9saW5rX2FuZF9jb3VudChjb25uLCB0b19sbmspOwomIzQzOwkJCXJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpOwomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y29ubi0mZ3Q7c2VuZF9sb2NrKTsKJiM0MzsJCX0KIAkJc29ja19wdXQoJmFtcDtzbWMtJmd0O3NrKTsKIAkJaWYgKHJjKQogCQkJZ290byBlcnJfb3V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBQYXRjaCBpbiBTTUMgQ29yZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHNtY19zd2l0Y2hfY29ubnNgIGluIGBuZXQvc21jL3NtY19jb3JlLmNgLiBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgaW1wb3J0YW50LiBUaGV5JiMzOTt2ZSBzaGlmdGVkIHRoZSBlcnJvciBoYW5kbGluZyBmb3IgYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdGAuIFByZXZpb3VzbHksIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJuZWQgYW4gZXJyb3IgKGByYyAhPSAwYCksIHRoZSBjb2RlIHdvdWxkIGp1bXAgdG8gYGVycl9vdXRgICpiZWZvcmUqIGRlY3JlbWVudGluZyB0aGUgc29ja2V0JiMzOTtzIHJlZmVyZW5jZSBjb3VudCB3aXRoIGBzb2NrX3B1dCgmYW1wO3NtYy0mZ3Q7c2spYC4gTm93LCB0aGUgYHNvY2tfcHV0YCBpcyBhbHdheXMgY2FsbGVkLCByZWdhcmRsZXNzIG9mIHRoZSBgc21jX2NkY19nZXRfZnJlZV9zbG90YCByZXR1cm4gdmFsdWUuCgpFc3NlbnRpYWxseSwgdGhleSYjMzk7cmUgZml4aW5nIGEgcmVmZXJlbmNlIGxlYWshIFdpdGhvdXQgdGhlIGBzb2NrX3B1dGAsIHRoZSByZWZlcmVuY2UgY291bnQgd291bGRuJiMzOTt0IGJlIGRlY3JlbWVudGVkLCBhbmQgdGhlIHNvY2tldCB3b3VsZG4mIzM5O3QgYmUgcmVsZWFzZWQsIGxlYWRpbmcgdG8gYSBtZW1vcnkgbGVhay4gVGhpcyBpcyB0aGUga2luZCBvZiB0aGluZyB0aGF0IGttZW1sZWFrIHdvdWxkIHBpY2sgdXAsIG5vdCBuZWNlc3NhcmlseSBLTVNBTiwgYXMgdGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgaGVyZS4gYHdyX2J1ZmAgYW5kIGBwZW5kYCBtaWdodCBiZSB1bmluaXRpYWxpemVkIGlmIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgIGZhaWxzLCBidXQgdGhleSYjMzk7cmUgbmV2ZXIgdXNlZCBpZiBgcmNgIGlzIG5vbi16ZXJvLCBzbyB0aGVyZSYjMzk7cyBubyByaXNrIG9mIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkgd2VyZSBza2lwcGluZyBhIGNyaXRpY2FsIGBzb2NrX3B1dGAgY2FsbC4KClRoaXMgaXMgYSBnb29kIGNhdGNoLiBBbHdheXMgaW1wb3J0YW50IHRvIGRvdWJsZS1jaGVjayByZWZlcmVuY2UgY291bnRpbmcsIGVzcGVjaWFsbHkgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIHNpZGUgZWZmZWN0cyBidXQgbG9va3MgZ29vZCBzbyBmYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19zd2l0Y2hfY29ubnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTA5NC1cbm5ldC9zbWMvc21jX2NvcmUuYzoxMDk1OnN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDk2LVx0XHRcdFx0ICBzdHJ1Y3Qgc21jX2xpbmsgKmZyb21fbG5rLCBib29sIGlzX2Rldl9lcnIpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE3OTQtXG5uZXQvc21jL3NtY19jb3JlLmM6MTc5NTpcdHRvX2xuayA9IHNtY19zd2l0Y2hfY29ubnMobGdyLCBsbmssIHRydWUpO1xubmV0L3NtYy9zbWNfY29yZS5jLTE3OTYtXHRpZiAoIXRvX2xuaykgeyAvKiBubyBiYWNrdXAgbGluayBhdmFpbGFibGUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUxMwoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqUGF0Y2ggQW5hbHlzaXMgYW5kIE1lbW9yeSBTYWZldHkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeC4gU2VlbXMgbGlrZSBhIG1pc3NpbmcgYHNvY2tfcHV0YCBvbiBhbiBlcnJvciBwYXRoLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIHBvdGVudGlhbCByZWZlcmVuY2UgbGVhay4gR29vZCBjYXRjaC4gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdCBmdXJ0aGVyLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSByaXNrcy4gS01TQU4gaXMgbXkgcHJpbWFyeSBjb25jZXJuIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gS0FTQU4gaXMgdGhlcmUgdG8gZGV0ZWN0IHRoZSBuYXN0aWVyIHN0dWZmIOKAkyBvdXQtb2YtYm91bmRzIGFjY2VzcywgdXNlLWFmdGVyLWZyZWUsIHRoaW5ncyBsaWtlIHRoYXQuIFRoZW4sIG9mIGNvdXJzZSwga21lbWxlYWsgaXMgYWx3YXlzIHdhdGNoaW5nIG91dCBmb3IgcGVyc2lzdGVudCBtZW1vcnkgbGVha3MuCgpTaW5jZSB0aGlzIGZpeGVzIGEgbGVhaywgYW5kIGRvZXNuJiMzOTt0IHNlZW0gdG8gdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB0aGUgcmlzayBvZiBLTVNBTiBmaW5kaW5nIGFueXRoaW5nIGlzIG5lZ2xpZ2libGUuIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpbiBzYXlpbmcgKipOZWVkc0tNU0FOIGlzIGZhbHNlKiogZm9yIHRoaXMgb25lLiBUaGlzIGlzIGEgc29saWQsIGNsZWFuIGJ1ZyBmaXggdGhhdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBvbiBpdHMgb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgYHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2VzaylgIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCgpYCBmYWlscy4gVGhpcyByZXNvbHZlcyBhIHJlZmVyZW5jZSBjb3VudCBsZWFrIChtZW1vcnkgbGVhaykgZm9yIHRoZSBzb2NrZXQgc3RydWN0dXJlLiBUaGUgdmFyaWFibGVzIHBvcHVsYXRlZCBieSBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIChgd3JfYnVmYCBhbmQgYHBlbmRgKSBhcmUgY29ycmVjdGx5IGd1YXJkZWQgYnkgdGhlIGBpZiAoIXJjKWAgY2hlY2ssIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHVzZWQuIE1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IGttZW1sZWFrLCBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyBhcmUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgc29ja19wdXQoXHUwMDI2c21jLVx1MDAzZXNrKWAgb24gdGhlIGVycm9yIHBhdGggd2hlbiBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIGZhaWxzLiBUaGlzIHJlc29sdmVzIGEgcmVmZXJlbmNlIGNvdW50IGxlYWsgKG1lbW9yeSBsZWFrKSBmb3IgdGhlIHNvY2tldCBzdHJ1Y3R1cmUuIFRoZSB2YXJpYWJsZXMgcG9wdWxhdGVkIGJ5IGBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoKWAgKGB3cl9idWZgIGFuZCBgcGVuZGApIGFyZSBjb3JyZWN0bHkgZ3VhcmRlZCBieSB0aGUgYGlmICghcmMpYCBjaGVjaywgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdXNlZC4gTWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWssIGFuZCByZWZlcmVuY2UgY291bnQgaXNzdWVzIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MDoyOC40MzE2ODQ1MTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5MDQ1NTEwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3N3aXRjaF9jb25uc1wiLFxuICAgIFwic21jcl9saW5rX2Rvd25fY29uZFwiLFxuICAgIFwic21jcl9saW5rX2Rvd25fY29uZF9zY2hlZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGBzb2NrX3B1dChcXHUwMDI2c21jLVxcdTAwM2VzaylgIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCgpYCBmYWlscy4gVGhpcyByZXNvbHZlcyBhIHJlZmVyZW5jZSBjb3VudCBsZWFrIChtZW1vcnkgbGVhaykgZm9yIHRoZSBzb2NrZXQgc3RydWN0dXJlLiBUaGUgdmFyaWFibGVzIHBvcHVsYXRlZCBieSBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIChgd3JfYnVmYCBhbmQgYHBlbmRgKSBhcmUgY29ycmVjdGx5IGd1YXJkZWQgYnkgdGhlIGBpZiAoIXJjKWAgY2hlY2ssIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHVzZWQuIE1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IGttZW1sZWFrLCBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyBhcmUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNvY2tldCByZWZlcmVuY2UgbGVhayBpbiB0aGUgU01DIGNvcmUgbmV0d29ya2luZyBjb2RlIChzbWNfc3dpdGNoX2Nvbm5zKSB3aGVuIHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCBmYWlscy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBmb3IgdGhlIFNNQyBwcm90b2NvbCBmYW1pbHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQwOjI4LjQzMTY4OTYwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NzI5MDkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQyYjQxY2Q0MDIwMDJlOTAzMmM0YTI5ZmEzZTM3NTZmZmIxNDY0MDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6NDA6MjYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXFxuaW5kZXggYjQyMDhjYjE4NmM1ZS4uMmY3ZjlkNDY5MjcyMCAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmNcXG5AQCAtMTE0OCwxMyArMTE0OCwxMyBAQCBzdHJ1Y3Qgc21jX2xpbmsgKnNtY19zd2l0Y2hfY29ubnMoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXFxuIFxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZsZ3ItXFx1MDAzZWNvbm5zX2xvY2spO1xcbiBcXHRcXHQvKiBwcmUtZmV0Y2ggYnVmZmVyIG91dHNpZGUgb2Ygc2VuZF9sb2NrLCBtaWdodCBzbGVlcCAqL1xcbiBcXHRcXHRyYyA9IHNtY19jZGNfZ2V0X2ZyZWVfc2xvdChjb25uLCB0b19sbmssIFxcdTAwMjZ3cl9idWYsIE5VTEwsIFxcdTAwMjZwZW5kKTtcXG4tXFx0XFx0aWYgKHJjKVxcbi1cXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuLVxcdFxcdC8qIGF2b2lkIHJhY2Ugd2l0aCBzbWNyX3R4X3NuZGJ1Zl9ub25lbXB0eSgpICovXFxuLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2Y29ubi1cXHUwMDNlc2VuZF9sb2NrKTtcXG4tXFx0XFx0c21jX3N3aXRjaF9saW5rX2FuZF9jb3VudChjb25uLCB0b19sbmspO1xcbi1cXHRcXHRyYyA9IHNtY19zd2l0Y2hfY3Vyc29yKHNtYywgcGVuZCwgd3JfYnVmKTtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNvbm4tXFx1MDAzZXNlbmRfbG9jayk7XFxuK1xcdFxcdGlmICghcmMpIHtcXG4rXFx0XFx0XFx0LyogYXZvaWQgcmFjZSB3aXRoIHNtY3JfdHhfc25kYnVmX25vbmVtcHR5KCkgKi9cXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjb25uLVxcdTAwM2VzZW5kX2xvY2spO1xcbitcXHRcXHRcXHRzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KGNvbm4sIHRvX2xuayk7XFxuK1xcdFxcdFxcdHJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpO1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y29ubi1cXHUwMDNlc2VuZF9sb2NrKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRzb2NrX3B1dChcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxuIFxcdFxcdGlmIChyYylcXG4gXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MDoyOS43Nzk5NDE1MDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDI2MzQwNDQzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3N3aXRjaF9jb25uc1wiLFxuICAgIFwic21jcl9saW5rX2Rvd25fY29uZFwiLFxuICAgIFwic21jcl9saW5rX2Rvd25fY29uZF9zY2hlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBTTUMgY29yZSBuZXR3b3JraW5nIGNvZGUgKHNtY19zd2l0Y2hfY29ubnMpIHdoZW4gc21jX2NkY19nZXRfZnJlZV9zbG90IGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciB0aGUgU01DIHByb3RvY29sIGZhbWlseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDJiNDFjZDQwMjAwMmU5MDMyYzRhMjlmYTNlMzc1NmZmYjE0NjQwOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDE1OjQwOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5pbmRleCBiNDIwOGNiMTg2YzVlLi4yZjdmOWQ0NjkyNzIwIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmNcbkBAIC0xMTQ4LDEzICsxMTQ4LDEzIEBAIHN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbiBcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuIFx0XHQvKiBwcmUtZmV0Y2ggYnVmZmVyIG91dHNpZGUgb2Ygc2VuZF9sb2NrLCBtaWdodCBzbGVlcCAqL1xuIFx0XHRyYyA9IHNtY19jZGNfZ2V0X2ZyZWVfc2xvdChjb25uLCB0b19sbmssIFx1MDAyNndyX2J1ZiwgTlVMTCwgXHUwMDI2cGVuZCk7XG4tXHRcdGlmIChyYylcbi1cdFx0XHRnb3RvIGVycl9vdXQ7XG4tXHRcdC8qIGF2b2lkIHJhY2Ugd2l0aCBzbWNyX3R4X3NuZGJ1Zl9ub25lbXB0eSgpICovXG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4tXHRcdHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoY29ubiwgdG9fbG5rKTtcbi1cdFx0cmMgPSBzbWNfc3dpdGNoX2N1cnNvcihzbWMsIHBlbmQsIHdyX2J1Zik7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbitcdFx0aWYgKCFyYykge1xuK1x0XHRcdC8qIGF2b2lkIHJhY2Ugd2l0aCBzbWNyX3R4X3NuZGJ1Zl9ub25lbXB0eSgpICovXG4rXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbitcdFx0XHRzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KGNvbm4sIHRvX2xuayk7XG4rXHRcdFx0cmMgPSBzbWNfc3dpdGNoX2N1cnNvcihzbWMsIHBlbmQsIHdyX2J1Zik7XG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2VzZW5kX2xvY2spO1xuK1x0XHR9XG4gXHRcdHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4gXHRcdGlmIChyYylcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MDoyOS43Nzk5NDM4ODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzQwNTM2NDk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRXJyb3IgSGFuZGxpbmcgaW4gU01DIENvbm5lY3Rpb24gU3dpdGNoaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYHNtY19zd2l0Y2hfY29ubnNgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3NtYy9zbWNfY29yZS5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIGZvY3VzZXMgb24gaG93IGVycm9yIGhhbmRsaW5nIGlzIG1hbmFnZWQgYXJvdW5kIHRoZSBgc21jX2NkY19nZXRfZnJlZV9zbG90YCBjYWxsLiBUaGUgb3JpZ2luYWwgY29kZSdzIGxvZ2ljIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0IGFjcXVpcmVzIGEgc2xvdCwgYW5kIGlmIHRoYXQgY2FsbCBmYWlscywgaXQganVtcHMgdG8gYGVycl9vdXRgLiBCdXQgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgaGVyZSwgYW5kIGl04oCZcyBhIHN0YW5kYXJkIGlzc3VlIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLlxuXG5UaGUgcmV2aXNlZCBjb2RlIG1vdmVzIHRoZSBgc29ja19wdXQoXHUwMDI2c21jLVx1MDAzZXNrKWAgY2FsbCBvdXRzaWRlIHRoZSBgaWYgKHJjKWAgYmxvY2suIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSwgaW4gdGhlICdiZWZvcmUnIHZlcnNpb24sIGlmIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgIHJldHVybmVkIGFuIGVycm9yIChgcmNgIG5vbi16ZXJvKSwgd2UnZCBpbW1lZGlhdGVseSBqdW1wIHRvIGBlcnJfb3V0YCwgc2tpcHBpbmcgdGhlIGBzb2NrX3B1dGAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgYHNvY2tfaG9sZChcdTAwMjZzbWMtXHUwMDNlc2spYCB3YXMgKnByb2JhYmx5KiBjYWxsZWQgcHJldmlvdXNseSwgYmVmb3JlIHRoZSBlcnJvciBwYXRoLiBJZiBzbywgdGhlbiB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBzdWJ0bGUgcmVmZXJlbmNlIGxlYWsgaW4gdGhlIGVycm9yIHBhdGguXG5cblRvIGJlIGNlcnRhaW4sIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBob3cgYHNtY19zd2l0Y2hfY29ubnNgIHVzZXMgYHNvY2tfaG9sZGAgYW5kIGBzb2NrX3B1dGAgYXJvdW5kIHRoaXMgcG9pbnQuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGBzb2NrX2hvbGRgIGlzIGluZGVlZCBjYWxsZWQgYmVmb3JlIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgLCB3aGljaCB3b3VsZCBtYWtlIHRoZSBjdXJyZW50IHBhdGNoIGEgY2xlYXIgaW1wcm92ZW1lbnQsIGZpeGluZyB0aGUgcG90ZW50aWFsIGxlYWsgYnkgYWx3YXlzIHJlbGVhc2luZyB0aGUgc29ja2V0IHJlZmVyZW5jZSByZWdhcmRsZXNzIG9mIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3Rg4oCZcyByZXR1cm4uIFRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IGNvbW1vbiBpc3N1ZSB0byBmaW5kIGluIGNvbXBsZXggbmV0d29ya2luZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDA6NTMuMTg1MzExNDIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODcyMzc2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfc3dpdGNoX2Nvbm5zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jb3JlLmM9MTA4Mz12b2lkIHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTEwOTQtXFxubmV0L3NtYy9zbWNfY29yZS5jOjEwOTU6c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDk2LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19saW5rICpmcm9tX2xuaywgYm9vbCBpc19kZXZfZXJyKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTc5NC1cXG5uZXQvc21jL3NtY19jb3JlLmM6MTc5NTpcXHR0b19sbmsgPSBzbWNfc3dpdGNoX2Nvbm5zKGxnciwgbG5rLCB0cnVlKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc5Ni1cXHRpZiAoIXRvX2xuaykgeyAvKiBubyBiYWNrdXAgbGluayBhdmFpbGFibGUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDA6NTMuODI0MDQzMTkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ1NDkwODUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzbWNfc3dpdGNoX2Nvbm5zYCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYHNtY19zd2l0Y2hfY29ubnNgLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhpcyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgaXQncyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGl0IHJlcXVpcmVzIGFuZCBpZGVudGlmeSBhbnkgbGlrZWx5IGFyZWFzIG9mIGludGVyZXN0aW5nIGlucHV0LCBzcGVjaWZpY2FsbHkgYW55dGhpbmcgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdnVsbmVyYWJpbGl0aWVzLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIHBvdGVudGlhbGx5IG1pc2hhbmRsZWQgZXJyb3IgY29uZGl0aW9ucywgb3IgYW55IGxvZ2ljIHBhdGhzIHRoYXQgY291bGQgYmUgbWFuaXB1bGF0ZWQgdGhyb3VnaCBzcGVjaWZpY2FsbHkgY3JhZnRlZCBpbnB1dHMuIElzIHRoZXJlIGFueSBvYnZpb3VzIGxvdy1oYW5naW5nIGZydWl0PyBMZXQncyBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjAwLjI3ODk1NDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwOTUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDk1OlxcdHN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcXG4xMDk2OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19saW5rICpmcm9tX2xuaywgYm9vbCBpc19kZXZfZXJyKVxcbjEwOTc6XFx0e1xcbjEwOTg6XFx0XFx0c3RydWN0IHNtY19saW5rICp0b19sbmsgPSBOVUxMO1xcbjEwOTk6XFx0XFx0c3RydWN0IHNtY19jZGNfdHhfcGVuZCAqcGVuZDtcXG4xMTAwOlxcdFxcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubjtcXG4xMTAxOlxcdFxcdHN0cnVjdCBzbWNfd3JfYnVmICp3cl9idWY7XFxuMTEwMjpcXHRcXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYztcXG4xMTAzOlxcdFxcdHN0cnVjdCByYl9ub2RlICpub2RlO1xcbjExMDQ6XFx0XFx0aW50IGksIHJjID0gMDtcXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0LyogbGluayBpcyBpbmFjdGl2ZSwgd2FrZSB1cCB0eCB3YWl0ZXJzICovXFxuMTEwNzpcXHRcXHRzbWNfd3Jfd2FrZXVwX3R4X3dhaXQoZnJvbV9sbmspO1xcbjExMDg6XFx0XFxuMTEwOTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgU01DX0xJTktTX1BFUl9MR1JfTUFYOyBpKyspIHtcXG4xMTEwOlxcdFxcdFxcdGlmICghc21jX2xpbmtfYWN0aXZlKFxcdTAwMjZsZ3ItXFx1MDAzZWxua1tpXSkgfHwgaSA9PSBmcm9tX2xuay1cXHUwMDNlbGlua19pZHgpXFxuMTExMTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTEyOlxcdFxcdFxcdGlmIChpc19kZXZfZXJyIFxcdTAwMjZcXHUwMDI2IGZyb21fbG5rLVxcdTAwM2VzbWNpYmRldiA9PSBsZ3ItXFx1MDAzZWxua1tpXS5zbWNpYmRldiBcXHUwMDI2XFx1MDAyNlxcbjExMTM6XFx0XFx0XFx0ICAgIGZyb21fbG5rLVxcdTAwM2VpYnBvcnQgPT0gbGdyLVxcdTAwM2VsbmtbaV0uaWJwb3J0KSB7XFxuMTExNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTE1OlxcdFxcdFxcdH1cXG4xMTE2OlxcdFxcdFxcdHRvX2xuayA9IFxcdTAwMjZsZ3ItXFx1MDAzZWxua1tpXTtcXG4xMTE3OlxcdFxcdFxcdGJyZWFrO1xcbjExMTg6XFx0XFx0fVxcbjExMTk6XFx0XFx0aWYgKCF0b19sbmsgfHwgIXNtY193cl90eF9saW5rX2hvbGQodG9fbG5rKSkge1xcbjExMjA6XFx0XFx0XFx0c21jX2xncl90ZXJtaW5hdGVfc2NoZWQobGdyKTtcXG4xMTIxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExMjI6XFx0XFx0fVxcbjExMjM6XFx0YWdhaW46XFxuMTEyNDpcXHRcXHRyZWFkX2xvY2tfYmgoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfbG9jayk7XFxuMTEyNTpcXHRcXHRmb3IgKG5vZGUgPSByYl9maXJzdChcXHUwMDI2bGdyLVxcdTAwM2Vjb25uc19hbGwpOyBub2RlOyBub2RlID0gcmJfbmV4dChub2RlKSkge1xcbjExMjY6XFx0XFx0XFx0Y29ubiA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBzbWNfY29ubmVjdGlvbiwgYWxlcnRfbm9kZSk7XFxuMTEyNzpcXHRcXHRcXHRpZiAoY29ubi1cXHUwMDNlbG5rICE9IGZyb21fbG5rKVxcbjExMjg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTEyOTpcXHRcXHRcXHRzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcXG4xMTMwOlxcdFxcdFxcdC8qIGNvbm4tXFx1MDAzZWxuayBub3QgeWV0IHNldCBpbiBTTUNfSU5JVCBzdGF0ZSAqL1xcbjExMzE6XFx0XFx0XFx0aWYgKHNtYy1cXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX0lOSVQpXFxuMTEzMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTMzOlxcdFxcdFxcdGlmIChzbWMtXFx1MDAzZXNrLnNrX3N0YXRlID09IFNNQ19DTE9TRUQgfHxcXG4xMTM0OlxcdFxcdFxcdCAgICBzbWMtXFx1MDAzZXNrLnNrX3N0YXRlID09IFNNQ19QRUVSQ0xPU0VXQUlUMSB8fFxcbjExMzU6XFx0XFx0XFx0ICAgIHNtYy1cXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX1BFRVJDTE9TRVdBSVQyIHx8XFxuMTEzNjpcXHRcXHRcXHQgICAgc21jLVxcdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfQVBQRklOQ0xPU0VXQUlUIHx8XFxuMTEzNzpcXHRcXHRcXHQgICAgc21jLVxcdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfQVBQQ0xPU0VXQUlUMSB8fFxcbjExMzg6XFx0XFx0XFx0ICAgIHNtYy1cXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX0FQUENMT1NFV0FJVDIgfHxcXG4xMTM5OlxcdFxcdFxcdCAgICBzbWMtXFx1MDAzZXNrLnNrX3N0YXRlID09IFNNQ19QRUVSRklOQ0xPU0VXQUlUIHx8XFxuMTE0MDpcXHRcXHRcXHQgICAgc21jLVxcdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfUEVFUkFCT1JUV0FJVCB8fFxcbjExNDE6XFx0XFx0XFx0ICAgIHNtYy1cXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX1BST0NFU1NBQk9SVCkge1xcbjExNDI6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjb25uLVxcdTAwM2VzZW5kX2xvY2spO1xcbjExNDM6XFx0XFx0XFx0XFx0c21jX3N3aXRjaF9saW5rX2FuZF9jb3VudChjb25uLCB0b19sbmspO1xcbjExNDQ6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNvbm4tXFx1MDAzZXNlbmRfbG9jayk7XFxuMTE0NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTQ2OlxcdFxcdFxcdH1cXG4xMTQ3OlxcdFxcdFxcdHNvY2tfaG9sZChcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxuMTE0ODpcXHRcXHRcXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bGdyLVxcdTAwM2Vjb25uc19sb2NrKTtcXG4xMTQ5OlxcdFxcdFxcdC8qIHByZS1mZXRjaCBidWZmZXIgb3V0c2lkZSBvZiBzZW5kX2xvY2ssIG1pZ2h0IHNsZWVwICovXFxuMTE1MDpcXHRcXHRcXHRyYyA9IHNtY19jZGNfZ2V0X2ZyZWVfc2xvdChjb25uLCB0b19sbmssIFxcdTAwMjZ3cl9idWYsIE5VTEwsIFxcdTAwMjZwZW5kKTtcXG4xMTUxOlxcdFxcdFxcdGlmICghcmMpIHtcXG4xMTUyOlxcdFxcdFxcdFxcdC8qIGF2b2lkIHJhY2Ugd2l0aCBzbWNyX3R4X3NuZGJ1Zl9ub25lbXB0eSgpICovXFxuMTE1MzpcXHRcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNvbm4tXFx1MDAzZXNlbmRfbG9jayk7XFxuMTE1NDpcXHRcXHRcXHRcXHRzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KGNvbm4sIHRvX2xuayk7XFxuMTE1NTpcXHRcXHRcXHRcXHRyYyA9IHNtY19zd2l0Y2hfY3Vyc29yKHNtYywgcGVuZCwgd3JfYnVmKTtcXG4xMTU2OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjb25uLVxcdTAwM2VzZW5kX2xvY2spO1xcbjExNTc6XFx0XFx0XFx0fVxcbjExNTg6XFx0XFx0XFx0c29ja19wdXQoXFx1MDAyNnNtYy1cXHUwMDNlc2spO1xcbjExNTk6XFx0XFx0XFx0aWYgKHJjKVxcbjExNjA6XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbjExNjE6XFx0XFx0XFx0Z290byBhZ2FpbjtcXG4xMTYyOlxcdFxcdH1cXG4xMTYzOlxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZsZ3ItXFx1MDAzZWNvbm5zX2xvY2spO1xcbjExNjQ6XFx0XFx0c21jX3dyX3R4X2xpbmtfcHV0KHRvX2xuayk7XFxuMTE2NTpcXHRcXHRyZXR1cm4gdG9fbG5rO1xcbjExNjY6XFx0XFxuMTE2NzpcXHRlcnJfb3V0OlxcbjExNjg6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZCh0b19sbmspO1xcbjExNjk6XFx0XFx0c21jX3dyX3R4X2xpbmtfcHV0KHRvX2xuayk7XFxuMTE3MDpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMTcxOlxcdH1cXG4xMTcyOlxcdFxcbjExNzM6XFx0c3RhdGljIHZvaWQgc21jcl9idWZfdW51c2Uoc3RydWN0IHNtY19idWZfZGVzYyAqYnVmX2Rlc2MsIGJvb2wgaXNfcm1iLFxcbjExNzQ6XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuMTE3NTpcXHR7XFxuMTE3NjpcXHRcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlICpsb2NrO1xcdC8qIGxvY2sgYnVmZmVyIGxpc3QgKi9cXG4xMTc3OlxcdFxcdGludCByYztcXG4xMTc4OlxcdFxcbjExNzk6XFx0XFx0aWYgKGlzX3JtYiBcXHUwMDI2XFx1MDAyNiBidWZfZGVzYy1cXHUwMDNlaXNfY29uZl9ya2V5IFxcdTAwMjZcXHUwMDI2ICFsaXN0X2VtcHR5KFxcdTAwMjZsZ3ItXFx1MDAzZWxpc3QpKSB7XFxuMTE4MDpcXHRcXHRcXHQvKiB1bnJlZ2lzdGVyIHJtYiB3aXRoIHBlZXIgKi9cXG4xMTgxOlxcdFxcdFxcdHJjID0gc21jX2xsY19mbG93X2luaXRpYXRlKGxnciwgU01DX0xMQ19GTE9XX1JLRVkpO1xcbjExODI6XFx0XFx0XFx0aWYgKCFyYykge1xcbjExODM6XFx0XFx0XFx0XFx0LyogcHJvdGVjdCBhZ2FpbnN0IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2UoKSAqL1xcbjExODQ6XFx0XFx0XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZsZ3ItXFx1MDAzZWxsY19jb25mX211dGV4KTtcXG4xMTg1OlxcdFxcdFxcdFxcdHNtY19sbGNfZG9fZGVsZXRlX3JrZXkobGdyLCBidWZfZGVzYyk7XFxuMTE4NjpcXHRcXHRcXHRcXHRidWZfZGVzYy1cXHUwMDNlaXNfY29uZl9ya2V5ID0gZmFsc2U7XFxuMTE4NzpcXHRcXHRcXHRcXHR1cF9yZWFkKFxcdTAwMjZsZ3ItXFx1MDAzZWxsY19jb25mX211dGV4KTtcXG4xMTg4OlxcdFxcdFxcdFxcdHNtY19sbGNfZmxvd19zdG9wKGxnciwgXFx1MDAyNmxnci1cXHUwMDNlbGxjX2Zsb3dfbGNsKTtcXG4xMTg5OlxcdFxcdFxcdH1cXG4xMTkwOlxcdFxcdH1cXG4xMTkxOlxcdFxcbjExOTI6XFx0XFx0aWYgKGJ1Zl9kZXNjLVxcdTAwM2Vpc19yZWdfZXJyKSB7XFxuMTE5MzpcXHRcXHRcXHQvKiBidWYgcmVnaXN0cmF0aW9uIGZhaWxlZCwgcmV1c2Ugbm90IHBvc3NpYmxlICovXFxuMTE5NDpcXHRcXHRcXHRsb2NrID0gaXNfcm1iID8gXFx1MDAyNmxnci1cXHUwMDNlcm1ic19sb2NrIDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDE6MDAuMjc5MTcwNzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODg5MzM0NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgU01DIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIGNoYW5nZSB0YWNrbGVzIGEgcHJldHR5IG5hc3R5IGJ1ZyB3aXRoaW4gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgbmV0d29ya2luZyBjb2RlLiBJdCBsb29rcyBsaWtlIGBzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spYCB3YXMgYmVpbmcgc2tpcHBlZCB1bmRlciBjZXJ0YWluIGVycm9yIGNvbmRpdGlvbnMgd2hlbiBgc21jX2NkY19nZXRfZnJlZV9zbG90YCBmYWlsZWQuIFRoYXQgbWVhbnMgd2Ugd2VyZSBsZWFraW5nIHNvY2tldCByZWZlcmVuY2VzLCB3aGljaCBpcyBhIGJpZyBuby1uby4gV2UgY2FuJ3QgaGF2ZSB0aG9zZSBsaW5nZXJpbmcgYXJvdW5kLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgaW1wYWN0aW5nIHRoZSBjb3JlIFNNQyBsb2dpYywgYW5kIGNvbnNpZGVyaW5nIFNNQydzIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBkdWUgdG8gaXRzIEFGX1NNQyBzb2NrZXQgZmFtaWx5LCB0aGlzIGlzIHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGNoZWNrIHdoZXRoZXIgU01DLCBpbiBnZW5lcmFsLCByZXF1aXJlcyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3Igb3BlcmF0aW9uLiBUaGUgZmFjdCB0aGF0IHRoZSBgc21jX3N3aXRjaF9jb25uc2AgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYHNtY3JfbGlua19kb3duYCBwcm92aWRlcyBhIGxpdHRsZSBtb3JlIGNvbnRleHQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGF0IHNwZWNpZmljIHBhdGggdG8gc2VlIHdoYXQgaW50ZXJhY3Rpb25zIGFyZSB0YWtpbmcgcGxhY2UgdGhlcmUuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSBob3cgdGhpcyBpbXBhY3RzIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQwNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjA2LjE2ODUwODIxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc3NjcwNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNNQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MTowNi4zMTYyNzk1NTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjg2MDkzNTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgd29ya2luZyB0aHJvdWdoIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTmVlZCBmb3IgU01DIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIGZsYWcgdXAgdGhhdCBJIG5lZWQgdG8gY29uZmlndXJlIHRoZSBgU01DYCBtb2R1bGUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIEluc3RlYWQgb2YganVzdCBkaXZpbmcgaW4sIEkgbmVlZCB0byBzZWUgd2hhdCdzIGFjdHVhbGx5ICp1c2luZyogdGhpcyBgU01DYCBjb25maWd1cmF0aW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIGBzbWNfc3dpdGNoX2Nvbm5zYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBpcyBiZWluZyBsZXZlcmFnZWQgYW5kIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGl0cyB1c2FnZS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgd2hhdCBpdHMgaW1wYWN0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTU0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDE6MTEuNjAyMzc1OTg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE4NTczODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX3N3aXRjaF9jb25uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jb3JlLmM9MTA4Mz12b2lkIHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTEwOTQtXFxubmV0L3NtYy9zbWNfY29yZS5jOjEwOTU6c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDk2LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19saW5rICpmcm9tX2xuaywgYm9vbCBpc19kZXZfZXJyKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTc5NC1cXG5uZXQvc21jL3NtY19jb3JlLmM6MTc5NTpcXHR0b19sbmsgPSBzbWNfc3dpdGNoX2Nvbm5zKGxnciwgbG5rLCB0cnVlKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc5Ni1cXHRpZiAoIXRvX2xuaykgeyAvKiBubyBiYWNrdXAgbGluayBhdmFpbGFibGUgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaD02MTU9aW50IHNtY3JfbGlua19yZWdfYnVmKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY19idWZfZGVzYyAqcm1iX2Rlc2MpO1xcbm5ldC9zbWMvc21jX2NvcmUuaDo2MTY6c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbm5ldC9zbWMvc21jX2NvcmUuaC02MTctXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc21jX2xpbmsgKmZyb21fbG5rLCBib29sIGlzX2Rldl9lcnIpO1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MTI4OD1zdGF0aWMgdm9pZCBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMjk4LVxcdFxcdHJldHVybjtcXG5uZXQvc21jL3NtY19sbGMuYzoxMjk5OlxcdGxua19uZXcgPSBzbWNfc3dpdGNoX2Nvbm5zKGxnciwgbG5rX2FzeW0sIGZhbHNlKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xMzAwLVxcdHNtY193cl90eF93YWl0X25vX3BlbmRpbmdfc2VuZHMobG5rX2FzeW0pO1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MTU5ND1zdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtMTYzMC1cXHRpZiAoc21jX2xpbmtfZG93bmluZyhcXHUwMDI2bG5rX2RlbC1cXHUwMDNlc3RhdGUpKVxcbm5ldC9zbWMvc21jX2xsYy5jOjE2MzE6XFx0XFx0c21jX3N3aXRjaF9jb25ucyhsZ3IsIGxua19kZWwsIGZhbHNlKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xNjMyLVxcdHNtY3JfbGlua19jbGVhcihsbmtfZGVsLCB0cnVlKTtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE2NzI9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX3Nydl9kZWxldGVfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE3MDMtXFx0aWYgKHNtY19saW5rX2Rvd25pbmcoXFx1MDAyNmxua19kZWwtXFx1MDAzZXN0YXRlKSkge1xcbm5ldC9zbWMvc21jX2xsYy5jOjE3MDQ6XFx0XFx0aWYgKHNtY19zd2l0Y2hfY29ubnMobGdyLCBsbmtfZGVsLCBmYWxzZSkpXFxubmV0L3NtYy9zbWNfbGxjLmMtMTcwNS1cXHRcXHRcXHRzbWNfd3JfdHhfd2FpdF9ub19wZW5kaW5nX3NlbmRzKGxua19kZWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MToxMS43MTQyNDUzNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTM5NDQ1MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ2FsbHMgdG8gYHNtY19zd2l0Y2hfY29ubnNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBzbWNfc3dpdGNoX2Nvbm5zYCBpcyB1c2VkIHdpdGhpbiB0aGlzIFNNQyBjb2RlYmFzZS4gSSd2ZSBub3RlZCB0aGF0IGl0J3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnM6IGBzbWNyX2xpbmtfZG93bmAsIGBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmtgLCBgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGlua2AsIGFuZCBgc21jX2xsY19wcm9jZXNzX3Nydl9kZWxldGVfbGlua2AuIEkgc2VlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZW4ndCBhbGwgbmVjZXNzYXJpbHkgc3RhdGljLCBvciB0aGV5ICpjb3VsZCogYmUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIFNNQyBtb2R1bGUuXG5cbk5vdywgSSB3YW50IHRvIGRlbHZlIGEgbGl0dGxlIGRlZXBlci4gR2l2ZW4gdGhlIGNvbnRleHRzIGxpc3RlZCBoZXJlLCBpdCdzIGltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCBgc21jcl9saW5rX2Rvd25gIGlzIHdvcnRoIGEgY2xvc2VyIGxvb2suIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgc21jcl9saW5rX2Rvd25gIGFuZCBzZWUgdGhlIHdpZGVyIGNhbGwgY29udGV4dCwgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjE3LjY1MzY5MzU2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwMTAwODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jcl9saW5rX2Rvd25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY29yZS5jPTEwOTU9c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTExNjctZXJyX291dDpcXG5uZXQvc21jL3NtY19jb3JlLmM6MTE2ODpcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHRvX2xuayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTExNjktXFx0c21jX3dyX3R4X2xpbmtfcHV0KHRvX2xuayk7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTY2Mz12b2lkIHNtY19zbWNyX3Rlcm1pbmF0ZV9hbGwoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2KVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE2NzctXFx0XFx0XFx0XFx0aWYgKGxnci1cXHUwMDNlbG5rW2ldLnNtY2liZGV2ID09IHNtY2liZGV2KVxcbm5ldC9zbWMvc21jX2NvcmUuYzoxNjc4OlxcdFxcdFxcdFxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQoXFx1MDAyNmxnci1cXHUwMDNlbG5rW2ldKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTY3OS1cXHRcXHRcXHR9XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTc1Nz12b2lkIHNtY3JfcG9ydF9hZGQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTc4NS0gKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTc4NjpzdGF0aWMgdm9pZCBzbWNyX2xpbmtfZG93bihzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc4Ny17XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTgyNi0vKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBsZ3ItXFx1MDAzZWxsY19jb25mX211dGV4IGxvY2sgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTgyNzp2b2lkIHNtY3JfbGlua19kb3duX2NvbmQoc3RydWN0IHNtY19saW5rICpsbmspXFxubmV0L3NtYy9zbWNfY29yZS5jLTE4Mjgte1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xODI5LVxcdGlmIChzbWNfbGlua19kb3duaW5nKFxcdTAwMjZsbmstXFx1MDAzZXN0YXRlKSkge1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxODMwOlxcdFxcdHRyYWNlX3NtY3JfbGlua19kb3duKGxuaywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTgzMTpcXHRcXHRzbWNyX2xpbmtfZG93bihsbmspO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xODMyLVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xODM1LS8qIHdpbGwgZ2V0IHRoZSBsZ3ItXFx1MDAzZWxsY19jb25mX211dGV4IGxvY2sgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTgzNjp2b2lkIHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQoc3RydWN0IHNtY19saW5rICpsbmspXFxubmV0L3NtYy9zbWNfY29yZS5jLTE4Mzcte1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xODM4LVxcdGlmIChzbWNfbGlua19kb3duaW5nKFxcdTAwMjZsbmstXFx1MDAzZXN0YXRlKSkge1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxODM5OlxcdFxcdHRyYWNlX3NtY3JfbGlua19kb3duKGxuaywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTg0MC1cXHRcXHRzbWNyX2xpbmtfaG9sZChsbmspOyAvKiBzbWNyX2xpbmtfcHV0IGluIGxpbmtfZG93bl93cmsgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xODQ2PXZvaWQgc21jcl9wb3J0X2VycihzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGlicG9ydClcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xODYxLVxcdFxcdFxcdCAgICBsbmstXFx1MDAzZXNtY2liZGV2ID09IHNtY2liZGV2IFxcdTAwMjZcXHUwMDI2IGxuay1cXHUwMDNlaWJwb3J0ID09IGlicG9ydClcXG5uZXQvc21jL3NtY19jb3JlLmM6MTg2MjpcXHRcXHRcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxuayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTE4NjMtXFx0XFx0fVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE4Njc9c3RhdGljIHZvaWQgc21jX2xpbmtfZG93bl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xODc2LVxcdGRvd25fd3JpdGUoXFx1MDAyNmxnci1cXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxODc3OlxcdHNtY3JfbGlua19kb3duKGxpbmspO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xODc4LVxcdHVwX3dyaXRlKFxcdTAwMjZsZ3ItXFx1MDAzZWxsY19jb25mX211dGV4KTtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaD02MTY9c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbm5ldC9zbWMvc21jX2NvcmUuaC02MTctXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc21jX2xpbmsgKmZyb21fbG5rLCBib29sIGlzX2Rldl9lcnIpO1xcbm5ldC9zbWMvc21jX2NvcmUuaDo2MTg6dm9pZCBzbWNyX2xpbmtfZG93bl9jb25kKHN0cnVjdCBzbWNfbGluayAqbG5rKTtcXG5uZXQvc21jL3NtY19jb3JlLmg6NjE5OnZvaWQgc21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChzdHJ1Y3Qgc21jX2xpbmsgKmxuayk7XFxubmV0L3NtYy9zbWNfY29yZS5oLTYyMC1pbnQgc21jX25sX2dldF9zeXNfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MTI4OD1zdGF0aWMgdm9pZCBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMzA3LVxcdGlmIChyYykge1xcbm5ldC9zbWMvc21jX2xsYy5jOjEzMDg6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZChsbmtfbmV3KTtcXG5uZXQvc21jL3NtY19sbGMuYy0xMzA5LVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMzEzLVxcdGlmICghcWVudHJ5KSB7XFxubmV0L3NtYy9zbWNfbGxjLmM6MTMxNDpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kKGxua19uZXcpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTEzMTUtXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTIxMTU9c3RhdGljIHZvaWQgc21jX2xsY190ZXN0bGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTIxMzgtXFx0aWYgKHJjIFxcdTAwM2M9IDApIHtcXG5uZXQvc21jL3NtY19sbGMuYzoyMTM5OlxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XFxubmV0L3NtYy9zbWNfbGxjLmMtMjE0MC1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvc21jL3NtY190cmFjZXBvaW50LmM9OD1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woc21jX3J4X3JlY3Ztc2cpO1xcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuYzo5OkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChzbWNyX2xpbmtfZG93bik7XFxuLS1cXG5uZXQvc21jL3NtY190cmFjZXBvaW50Lmg9Nzg9REVGSU5FX0VWRU5UKHNtY19tc2dfZXZlbnQsIHNtY19yeF9yZWN2bXNnLFxcbi0tXFxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5oLTg0LVxcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuaDo4NTpUUkFDRV9FVkVOVChzbWNyX2xpbmtfZG93bixcXG5uZXQvc21jL3NtY190cmFjZXBvaW50LmgtODYtXFxuLS1cXG5uZXQvc21jL3NtY190eC5jPTMxNz1zdGF0aWMgaW50IHNtY190eF9yZG1hX3dyaXRlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiwgaW50IHBlZXJfcm1iZV9vZmZzZXQsXFxuLS1cXG5uZXQvc21jL3NtY190eC5jLTMzNC1cXHRpZiAocmMpXFxubmV0L3NtYy9zbWNfdHguYzozMzU6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG5uZXQvc21jL3NtY190eC5jLTMzNi1cXHRyZXR1cm4gcmM7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTc3PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfd3JfdHhfcHJvY2Vzc19jcWUoc3RydWN0IGliX3djICp3YylcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMTI4LVxcdFxcdC8qIHRlcm1pbmF0ZSBsaW5rICovXFxubmV0L3NtYy9zbWNfd3IuYzoxMjk6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG5uZXQvc21jL3NtY193ci5jLTEzMC1cXHR9XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTE5NT1pbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0yMjItXFx0XFx0XFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXFxubmV0L3NtYy9zbWNfd3IuYzoyMjM6XFx0XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG5uZXQvc21jL3NtY193ci5jLTIyNC1cXHRcXHRcXHRyZXR1cm4gLUVQSVBFO1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz0zMDQ9aW50IHNtY193cl90eF9zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnByaXYpXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTMxNC1cXHRcXHRzbWNfd3JfdHhfcHV0X3Nsb3QobGluaywgcHJpdik7XFxubmV0L3NtYy9zbWNfd3IuYzozMTU6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG5uZXQvc21jL3NtY193ci5jLTMxNi1cXHR9XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTMyMD1pbnQgc21jX3dyX3R4X3YyX3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdixcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMzMwLVxcdFxcdHNtY193cl90eF9wdXRfc2xvdChsaW5rLCBwcml2KTtcXG5uZXQvc21jL3NtY193ci5jOjMzMTpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3dyLmMtMzMyLVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9MzY2PWludCBzbWNfd3JfcmVnX3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3QgaWJfbXIgKm1yKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0zODYtXFx0XFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXFxubmV0L3NtYy9zbWNfd3IuYzozODc6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG5uZXQvc21jL3NtY193ci5jLTM4OC1cXHRcXHRyZXR1cm4gLUVQSVBFO1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz00NDk9c3RhdGljIGlubGluZSB2b2lkIHNtY193cl9yeF9wcm9jZXNzX2NxZXMoc3RydWN0IGliX3djIHdjW10sIGludCBudW0pXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTQ2Ni1cXHRcXHRcXHRjYXNlIElCX1dDX1dSX0ZMVVNIX0VSUjpcXG5uZXQvc21jL3NtY193ci5jOjQ2NzpcXHRcXHRcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3dyLmMtNDY4LVxcdFxcdFxcdFxcdGlmIChsaW5rLVxcdTAwM2V3cl9yeF9pZF9jb21wbCA9PSBsaW5rLVxcdTAwM2V3cl9yeF9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDE6MTcuNzI1NzA3OTEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MzM3NzU5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU01DIENvbm5lY3Rpb24gU3dpdGNoaW5nIExvZ2ljKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIGEgcHJvbWlzaW5nIGFyZWEgZm9yIGludmVzdGlnYXRpb24uIFRoaXMgYHNtY19zd2l0Y2hfY29ubnNgIGZ1bmN0aW9uIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyDigJMgaXQncyBub24tc3RhdGljLCB3aGljaCBtZWFucyBpdCBoYXMgYnJvYWRlciBhY2Nlc3NpYmlsaXR5IHdpdGhpbiB0aGUgY29kZS4gSSBjYW4gc2VlIGl0J3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBsb2NhdGlvbnM6IGBzbWNyX2xpbmtfZG93bmAsIGBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmtgLCBgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGlua2AsIGFuZCBgc21jX2xsY19wcm9jZXNzX3Nydl9kZWxldGVfbGlua2AuIFRoaXMgZGVmaW5pdGVseSBvcGVucyB1cCBzb21lIGF2ZW51ZXMgZm9yIGV4cGxvaXRpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuQmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gVGhlIGZhY3QgdGhhdCBgU01DYCByZWxhdGVzIHRvIGEgc29ja2V0IHByb3RvY29sIGZhbWlseSBpcyBhbHNvIHdvcnRoIG5vdGluZzsgdGhhdCBjb250ZXh0IGNvdWxkIGluZmx1ZW5jZSB0aGUgdHlwZXMgb2YgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gSSdsbCBtYWtlIGEgbm90ZSBvZiB0aGF0LiBBbmQsIG9mIGNvdXJzZSwgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkxldCdzIGlkZW50aWZ5IHRoZSBmb2NhbCBzeW1ib2xzOiBgc21jX3N3aXRjaF9jb25uc2AsIGBzbWNyX2xpbmtfZG93bmAsIGBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmtgLCBgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGlua2AsIGFuZCBgc21jX2xsY19wcm9jZXNzX3Nydl9kZWxldGVfbGlua2AuXG5cbkhvbGQgb24gYSBtaW51dGUsIEkgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgc3RhdGljL25vbi1zdGF0aWMgc3RhdHVzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gTG9va3MgbGlrZSBgc21jcl9saW5rX2Rvd25gIGFuZCBgc21jX2xsY19kZWxldGVfYXN5bV9saW5rYCBhcmUgc3RhdGljLCB3aGljaCBsaW1pdHMgdGhlaXIgZGlyZWN0IGV4cG9zdXJlLiBUaGlzIG1ha2VzIGBzbWNfc3dpdGNoX2Nvbm5zYCBldmVuIG1vcmUgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgd2lsbCBiZSBtb3JlIGFjY2Vzc2libGUuIE5vdywgSSBuZWVkIHRvIGV4YW1pbmUgYHNtY19sbGNfcHJvY2Vzc19jbGlfZGVsZXRlX2xpbmtgIGFuZCBgc21jX2xsY19wcm9jZXNzX3Nydl9kZWxldGVfbGlua2AuIExldCdzIHNlZSB3aGF0J3MgdXAgd2l0aCB0aG9zZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDU4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjI0LjQ1OTQ4NjY0NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0NTA5MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19sbGNfcHJvY2Vzc19jbGlfZGVsZXRlX2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfbGxjLmM9MTU4Mj12b2lkIHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggZGVsX2xpbmtfaWQpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xNTkzLVxcbm5ldC9zbWMvc21jX2xsYy5jOjE1OTQ6c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG5uZXQvc21jL3NtY19sbGMuYy0xNTk1LXtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE3NDA9c3RhdGljIHZvaWQgc21jX2xsY19kZWxldGVfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE3NTEtXFx0aWYgKGxnci1cXHUwMDNlcm9sZSA9PSBTTUNfQ0xOVClcXG5uZXQvc21jL3NtY19sbGMuYzoxNzUyOlxcdFxcdHNtY19sbGNfcHJvY2Vzc19jbGlfZGVsZXRlX2xpbmsobGdyKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xNzUzLVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDE6MjUuMjIzOTk5MzkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjA5OTIyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNNQyBDb25uZWN0aW9uIFN3aXRjaGluZyoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgdGhlIGluaXRpYWwgY29udGV4dCBzZWVtcyBzdGF0aWMsIHdoaWNoIGlzbid0IGdpdmluZyBtZSBtdWNoIHRvIHdvcmsgd2l0aC4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuIE15IGZvY3VzIGltbWVkaWF0ZWx5IHNoaWZ0cyB0byBgc21jX3N3aXRjaF9jb25uc2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIE5vdywgbGV0J3MgZXhwbG9yZSBgbmV0L3NtYy9zbWNfY29yZS5jYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSB0aGF0IGFjdHVhbGx5IGNhbGwgYHNtY19zd2l0Y2hfY29ubnNgLiBBaGEhIEkgc2VlIGBzbWNyX2xpbmtfZG93bl9jb25kYCBhbmQgYHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWRgLiBUaGVzZSBhcmVuJ3Qgc3RhdGljLCBhbmQgdGhleSdyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSBjYWxsIGBzbWNyX2xpbmtfZG93bmAsIHdoaWNoIGluIHR1cm4sIGNhbGxzIGBzbWNfc3dpdGNoX2Nvbm5zYC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGF2ZW51ZSBvZiBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MTozMS4zNDQ5OTQxNjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMjk4NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY3JfbGlua19kb3duX2NvbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY29yZS5jPTEwOTU9c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTExNjctZXJyX291dDpcXG5uZXQvc21jL3NtY19jb3JlLmM6MTE2ODpcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHRvX2xuayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTExNjktXFx0c21jX3dyX3R4X2xpbmtfcHV0KHRvX2xuayk7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTY2Mz12b2lkIHNtY19zbWNyX3Rlcm1pbmF0ZV9hbGwoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2KVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE2NzctXFx0XFx0XFx0XFx0aWYgKGxnci1cXHUwMDNlbG5rW2ldLnNtY2liZGV2ID09IHNtY2liZGV2KVxcbm5ldC9zbWMvc21jX2NvcmUuYzoxNjc4OlxcdFxcdFxcdFxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQoXFx1MDAyNmxnci1cXHUwMDNlbG5rW2ldKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTY3OS1cXHRcXHRcXHR9XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTc4Nj1zdGF0aWMgdm9pZCBzbWNyX2xpbmtfZG93bihzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xODI2LS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGxnci1cXHUwMDNlbGxjX2NvbmZfbXV0ZXggbG9jayAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxODI3OnZvaWQgc21jcl9saW5rX2Rvd25fY29uZChzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcXG5uZXQvc21jL3NtY19jb3JlLmMtMTgyOC17XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTgzNS0vKiB3aWxsIGdldCB0aGUgbGdyLVxcdTAwM2VsbGNfY29uZl9tdXRleCBsb2NrICovXFxubmV0L3NtYy9zbWNfY29yZS5jOjE4MzY6dm9pZCBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHN0cnVjdCBzbWNfbGluayAqbG5rKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xODM3LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xODQ2PXZvaWQgc21jcl9wb3J0X2VycihzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGlicG9ydClcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xODYxLVxcdFxcdFxcdCAgICBsbmstXFx1MDAzZXNtY2liZGV2ID09IHNtY2liZGV2IFxcdTAwMjZcXHUwMDI2IGxuay1cXHUwMDNlaWJwb3J0ID09IGlicG9ydClcXG5uZXQvc21jL3NtY19jb3JlLmM6MTg2MjpcXHRcXHRcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxuayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTE4NjMtXFx0XFx0fVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oPTYxNj1zdHJ1Y3Qgc21jX2xpbmsgKnNtY19zd2l0Y2hfY29ubnMoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXFxubmV0L3NtYy9zbWNfY29yZS5oLTYxNy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBzbWNfbGluayAqZnJvbV9sbmssIGJvb2wgaXNfZGV2X2Vycik7XFxubmV0L3NtYy9zbWNfY29yZS5oOjYxODp2b2lkIHNtY3JfbGlua19kb3duX2NvbmQoc3RydWN0IHNtY19saW5rICpsbmspO1xcbm5ldC9zbWMvc21jX2NvcmUuaDo2MTk6dm9pZCBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHN0cnVjdCBzbWNfbGluayAqbG5rKTtcXG5uZXQvc21jL3NtY19jb3JlLmgtNjIwLWludCBzbWNfbmxfZ2V0X3N5c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xMjg4PXN0YXRpYyB2b2lkIHNtY19sbGNfZGVsZXRlX2FzeW1fbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTEzMDctXFx0aWYgKHJjKSB7XFxubmV0L3NtYy9zbWNfbGxjLmM6MTMwODpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kKGxua19uZXcpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTEzMDktXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTEzMTMtXFx0aWYgKCFxZW50cnkpIHtcXG5uZXQvc21jL3NtY19sbGMuYzoxMzE0OlxcdFxcdHNtY3JfbGlua19kb3duX2NvbmQobG5rX25ldyk7XFxubmV0L3NtYy9zbWNfbGxjLmMtMTMxNS1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MjExNT1zdGF0aWMgdm9pZCBzbWNfbGxjX3Rlc3RsaW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtMjEzOC1cXHRpZiAocmMgXFx1MDAzYz0gMCkge1xcbm5ldC9zbWMvc21jX2xsYy5jOjIxMzk6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG5uZXQvc21jL3NtY19sbGMuYy0yMTQwLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9zbWMvc21jX3R4LmM9MzE3PXN0YXRpYyBpbnQgc21jX3R4X3JkbWFfd3JpdGUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLCBpbnQgcGVlcl9ybWJlX29mZnNldCxcXG4tLVxcbm5ldC9zbWMvc21jX3R4LmMtMzM0LVxcdGlmIChyYylcXG5uZXQvc21jL3NtY190eC5jOjMzNTpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3R4LmMtMzM2LVxcdHJldHVybiByYztcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9Nzc9c3RhdGljIGlubGluZSB2b2lkIHNtY193cl90eF9wcm9jZXNzX2NxZShzdHJ1Y3QgaWJfd2MgKndjKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0xMjgtXFx0XFx0LyogdGVybWluYXRlIGxpbmsgKi9cXG5uZXQvc21jL3NtY193ci5jOjEyOTpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3dyLmMtMTMwLVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9MTk1PWludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTIyMi1cXHRcXHRcXHQvKiB0aW1lb3V0IC0gdGVybWluYXRlIGxpbmsgKi9cXG5uZXQvc21jL3NtY193ci5jOjIyMzpcXHRcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3dyLmMtMjI0LVxcdFxcdFxcdHJldHVybiAtRVBJUEU7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTMwND1pbnQgc21jX3dyX3R4X3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdilcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMzE0LVxcdFxcdHNtY193cl90eF9wdXRfc2xvdChsaW5rLCBwcml2KTtcXG5uZXQvc21jL3NtY193ci5jOjMxNTpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3dyLmMtMzE2LVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9MzIwPWludCBzbWNfd3JfdHhfdjJfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwcml2LFxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0zMzAtXFx0XFx0c21jX3dyX3R4X3B1dF9zbG90KGxpbmssIHByaXYpO1xcbm5ldC9zbWMvc21jX3dyLmM6MzMxOlxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XFxubmV0L3NtYy9zbWNfd3IuYy0zMzItXFx0fVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz0zNjY9aW50IHNtY193cl9yZWdfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBpYl9tciAqbXIpXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTM4Ni1cXHRcXHQvKiB0aW1lb3V0IC0gdGVybWluYXRlIGxpbmsgKi9cXG5uZXQvc21jL3NtY193ci5jOjM4NzpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3dyLmMtMzg4LVxcdFxcdHJldHVybiAtRVBJUEU7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTQ0OT1zdGF0aWMgaW5saW5lIHZvaWQgc21jX3dyX3J4X3Byb2Nlc3NfY3FlcyhzdHJ1Y3QgaWJfd2Mgd2NbXSwgaW50IG51bSlcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNDY2LVxcdFxcdFxcdGNhc2UgSUJfV0NfV1JfRkxVU0hfRVJSOlxcbm5ldC9zbWMvc21jX3dyLmM6NDY3OlxcdFxcdFxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XFxubmV0L3NtYy9zbWNfd3IuYy00NjgtXFx0XFx0XFx0XFx0aWYgKGxpbmstXFx1MDAzZXdyX3J4X2lkX2NvbXBsID09IGxpbmstXFx1MDAzZXdyX3J4X2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MTozMS40MjcyOTY3NjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc2MDUxNjE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEZvY3VzOiBTTUMgYW5kIExpbmsgRG93biBDb25kaXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBgc21jcl9saW5rX2Rvd25fY29uZGAgYW5kIGBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkYC4gVGhleSdyZSBub24tc3RhdGljLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB0aGV5IGFyZSBlbnRyeSBwb2ludHMuIEFuZCB0aGV5J3JlIGVzc2VudGlhbGx5IHRoZSBnYXRla2VlcGVycyB0byBib3RoIGBzbWNyX2xpbmtfZG93bmAgYW5kIGBzbWNfc3dpdGNoX2Nvbm5zYC4gTWFrZXMgc2Vuc2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjb250cm9sIGZ1bmN0aW9ucyB3b3JrIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgdGhlIGdyZWF0ZXIgc3lzdGVtIGJlaGF2aW9yLlxuXG5UaGVyZWZvcmUsIEknbGwgaW5jbHVkZSBgc21jX3N3aXRjaF9jb25uc2AsIGBzbWNyX2xpbmtfZG93bl9jb25kYCwgYW5kIGBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkYCBpbiBgRm9jdXNTeW1ib2xzYC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcuXG5cbk5vdywgYmFzZWQgb24gd2hhdCBJIHNlZSBoZXJlLCBpdCBzZWVtcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBgU01DYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiB0aGlzIGNvbnRleHQuIEJ1dCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcsIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0IG1lIHRha2UgYSBsb29rLi4uIGxldCdzIGNoZWNrIHRvIHNlZSBpZiBgU01DYCBpdHNlbGYgZGVwZW5kcyBvbiBhbnl0aGluZyBlbHNlLiBUaGlzIG1pZ2h0IG9wZW4gdXAgYSBicm9hZGVyIHZpZXcgb2YgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDY4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjM4LjE4NzgxNTczNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxMzcyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3NtYy9LY29uZmlnOjE2OlxcdGRlcGVuZHMgb24gU01DXFxubmV0L3NtYy9LY29uZmlnLTE3LVxcdGhlbHBcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZz0yMz1jb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxubmV0L3NtYy9LY29uZmlnOjI1OlxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG5uZXQvc21jL0tjb25maWctMjYtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjM4LjI0Mjk1OTY4MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjA2NDU1NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgQ2xhcmlmaWNhdGlvbioqXG5cblJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGBTTUNgIHN5c3RlbSwgYW5kIGl0J3MgbWFraW5nIGEgc3RhdGVtZW50IGFib3V0IGl0cyBkZXBlbmRlbmNpZXMuIE9rYXksIGl0ICpkZXBlbmRzKiBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kLi4uIGhhbmcgb24sIGlzIHRoYXQgcmlnaHQ/IGBESUJTYD8gVGhhdCBmZWVscyBhIGJpdCBvZmYuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0LiBObywgd2FpdCwgaXQgZGVmaW5pdGVseSBzYWlkIHRoYXQgaXQgZGVwZW5kcyBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2AuIEkgbmVlZCB0byByZXJlYWQgdGhpcy4uLiBva2F5LCBqdXN0IHdhbnQgdG8gZW5zdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBkZXBlbmRlbmN5IGdyYXBoIGlzIGFjY3VyYXRlLiBJdCdzIGEga2V5IGNvbXBvbmVudCwgc28gSSdsbCByZXZpZXcgdGhlIGZpbGUgbm93IHRvIGNsYXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTMyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDE6NDUuNDQ5NDE5NTU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNNQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgRElCU1xcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBTTUMtUiBwcm92aWRlcyBhIFxcXCJzb2NrZXRzIG92ZXIgUkRNQVxcXCIgc29sdXRpb24gbWFraW5nIHVzZSBvZlxcbiAgIDc6XFx0XFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcXG4gICA4OlxcdFxcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cXG4gICA5OlxcdFxcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xcbiAgMTA6XFx0XFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFNNQ19ESUFHXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFNNQ1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xcbiAgMTk6XFx0XFx0ICBzbWNzcy5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MTo0NS40NDk1MTQ1ODVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIzMDI5Njg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmRpdGlvbiwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRoaW5rLCBcIkFoYSEgYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2BcIi4gQnV0IHRoZW4sIHRoZSBgRElCU2AganVtcHMgb3V0IGF0IG1lLiBJcyB0aGF0IGV2ZW4gYSAqcmVhbCogY29uZmlnIG9wdGlvbj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBIYW5nIG9uLCBwZXJoYXBzIGl0J3MgcmVsYXRlZCB0byBgSVBWNmA/IEdvdHRhIGNoZWNrIHRoYXQgdG9vLiBSaWdodCwgbGV0IG1lIGdvIGRpZ2dpbmcgaW4gYG5ldC9zbWMvS2NvbmZpZ2AgdG8gc2VlIGlmIGBESUJTYCBpcyBkZWZpbmVkIGluIHJlbGF0aW9uIHRvIHRoZSByZWxldmFudCBpbnRlcmZhY2VzLiBBY3R1YWxseSwgdGhlIEtjb25maWcgY29uZmlybXMgaXQgKmRvZXMqIGRlcGVuZCBvbiBgRElCU2AuIEhvbGQgb24sIG1heWJlIEknbSBtaXNyZWFkaW5nIHRoaXMuIERvZXMgaXQgaGF2ZSBzb21ldGhpbmcgdG8gZG8gd2l0aCBgSVBWNmA/IExldCBtZSByZXZpc2l0IGBuZXQvc21jL0tjb25maWdgLiBBaCwgYERJQlNgIGlzbid0IGEgc3RhbmRhcmQgY29uZmlnIGVudHJ5IC0gaG1tLCBjb3VsZCBpdCBiZSByZWxhdGVkIHRvIGBDUllQVE9gIGluc3RlYWQ/IEJhY2sgdG8gYG5ldC9zbWMvS2NvbmZpZ2AgaW4gdXBzdHJlYW0gZm9yIHRoZSBkZWZpbml0aXZlIGFuc3dlci4gV2FpdCwgd2h5IGlzIGBESUJTYCBpbiB0aGlzIGNvbnRleHQ/IE5vLCB3YWl0LCBjb3VsZCB0aGlzIGJlIGFib3V0IGBJUFY2YD8gSSBoYXZlIHRvIGdvIGJhY2sgYW5kIGNoZWNrLiBJdCdzIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gcHV6emxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYzMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjUzLjY3OTgxNDAyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQyNzcyNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24gSU5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MTo1NC4zMjI1OTM4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzQ3OTgzNjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgeW91ciBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGVjb2RpbmcgdGhlIEFjcm9ueW06IERJQlMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiAqRElCUyo/IFRoYXQgdGVybSBmZWVscyBhIGxpdHRsZSBvdXQgb2YgcGxhY2UsIG9yIGF0IGxlYXN0IHVuZmFtaWxpYXIgaW4gdGhpcyBjb250ZXh0LiBCZWZvcmUgSSBjb250aW51ZSBhbmFseXppbmcgd2hhdGV2ZXIncyBpbiBmcm9udCBvZiBtZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNwZWNpZmljIGFjcm9ueW0gKkRJQlMqIG1lYW5zLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpdHMgZGVmaW5pdGlvbiB0byBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBHb3R0YSBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYW5kIG1haW50YWluIHRoYXQgY2xhcml0eSBvZiBmb2N1cy4gTGV0IG1lIHF1aWNrbHkgbG9vayBpdCB1cCBhbmQgbWFrZSBzdXJlIEknbSBvbiB0aGUgcmlnaHQgdHJhY2sgYmVmb3JlIGRpdmluZyBkZWVwZXIuIEkgY2FuJ3QgYWZmb3JkIGFueSBtaXNpbnRlcnByZXRhdGlvbnMsIGVzcGVjaWFsbHkgaWYgdGhlIHN1YnNlcXVlbnQgbWF0ZXJpYWwgaGluZ2VzIG9uIGEgc3BlY2lmaWMgbWVhbmluZyBmb3IgKkRJQlMqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE4MywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjU5LjY3MDU4MDc5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MTM4MjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRElCU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQyOjAxLjk1MTk3MTQxN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDMwNjcyNDk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIERlY2lzaW9ucyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBgU01DYCBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGluIGBzbWNfc3dpdGNoX2Nvbm5zYC4gUmlnaHQsIGBESUJTYCBpcyBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcuIEdvdCBpdC4gU28gSSBuZWVkIHRvIHNldCB1cCB0aGUgY29uZmlndXJhdGlvbnMgcHJvcGVybHkgdG8gaGl0IHRoaXMuIFRoZSBwYXRjaCBtZW50aW9ucyBgU01DYCwgYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuIGBJTkVUYCBpcyBhbHdheXMgdGhlcmUsIG5vIHByb2JsZW0uIEknbGwgZGVmaW5pdGVseSBlbmFibGUgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYC4gQnV0IHdhaXQsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBgU01DYCBhbmQgYElORklOSUJBTkRgIGFyZSBib3RoIGVuYWJsZWQuIEFoLCB5ZXMsIGBTTUNgIGRvZXMgZGVwZW5kIG9uIGBJTkZJTklCQU5EYC4gR29vZCwgZ29vZC4gU28gdGhlIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFtcIlNNQ1wiLCBcIklORklOSUJBTkRcIiwgXCJESUJTXCJdYC4gSnVzdCB0byBiZSBzYWZlLCBJJ2xsIGluY2x1ZGUgYERJQlNgLiBJdCBtaWdodCBiZSBhIGN1c3RvbSBjb25maWcgaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCB0cmVlLCBzbyBsZXQncyBrZWVwIGl0IGluIHRoZXJlLlxuXG5TbywgbGV0J3Mgc3VtbWFyaXplIHdoYXQgSSd2ZSBnb3Q6XG5cbmBXb3J0aEZ1enppbmc6IHRydWVgIC0gYmVjYXVzZSB0aGlzIGlzIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIHdpdGggYSBrbm93biBsZWFrLlxuYFJlYXNvbmluZzogVGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBTTUMgY29yZSBuZXR3b3JraW5nIGNvZGUgKHNtY19zd2l0Y2hfY29ubnMpIHdoZW4gc21jX2NkY19nZXRfZnJlZV9zbG90IGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciB0aGUgU01DIHByb3RvY29sIGZhbWlseS5gIC0gVGhhdCBpcyB0aGUgY29yZSBsb2dpYyBhbmQgZXhwbGFpbnMgd2h5IGl0J3Mgd29ydGggZnV6emluZy5cbmBGb2N1c1N5bWJvbHM6IHNtY19zd2l0Y2hfY29ubnMsIHNtY3JfbGlua19kb3duX2NvbmQsIHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWRgIC0gT2theSwgdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHdhdGNoLlxuYEVuYWJsZUNvbmZpZ3M6IFNNQywgSU5GSU5JQkFORCwgRElCU2AgLSBUaGF0IHdpbGwgZ2V0IHVzIHRoZXJlLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYHNtY19zd2l0Y2hfY29ubnNgIGlzIHRoZSBtYWluIHRhcmdldC4gWWVwLCBsb29rcyBnb29kLiBBbHJpZ2h0LCB0aW1lIHRvIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MTEsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQyOjEyLjI1ODY5OTgwM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTI4MTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3N3aXRjaF9jb25uc1wiLFxuICAgIFwic21jcl9saW5rX2Rvd25fY29uZFwiLFxuICAgIFwic21jcl9saW5rX2Rvd25fY29uZF9zY2hlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBTTUMgY29yZSBuZXR3b3JraW5nIGNvZGUgKHNtY19zd2l0Y2hfY29ubnMpIHdoZW4gc21jX2NkY19nZXRfZnJlZV9zbG90IGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciB0aGUgU01DIHByb3RvY29sIGZhbWlseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIkRJQlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfc3dpdGNoX2Nvbm5zXCIsXG4gICAgXCJzbWNyX2xpbmtfZG93bl9jb25kXCIsXG4gICAgXCJzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzb2NrZXQgcmVmZXJlbmNlIGxlYWsgaW4gdGhlIFNNQyBjb3JlIG5ldHdvcmtpbmcgY29kZSAoc21jX3N3aXRjaF9jb25ucykgd2hlbiBzbWNfY2RjX2dldF9mcmVlX3Nsb3QgZmFpbHMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIHRoZSBTTUMgcHJvdG9jb2wgZmFtaWx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MjoxMi40MTM5OTE1NDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTIyMjM1MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDI6MTIuNDE0NzAwOTUzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0OTIxNTIxODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgYHNvY2tfcHV0KFxcdTAwMjZzbWMtXFx1MDAzZXNrKWAgb24gdGhlIGVycm9yIHBhdGggd2hlbiBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIGZhaWxzLiBUaGlzIHJlc29sdmVzIGEgcmVmZXJlbmNlIGNvdW50IGxlYWsgKG1lbW9yeSBsZWFrKSBmb3IgdGhlIHNvY2tldCBzdHJ1Y3R1cmUuIFRoZSB2YXJpYWJsZXMgcG9wdWxhdGVkIGJ5IGBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoKWAgKGB3cl9idWZgIGFuZCBgcGVuZGApIGFyZSBjb3JyZWN0bHkgZ3VhcmRlZCBieSB0aGUgYGlmICghcmMpYCBjaGVjaywgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdXNlZC4gTWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWssIGFuZCByZWZlcmVuY2UgY291bnQgaXNzdWVzIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQyYjQxY2Q0MDIwMDJlOTAzMmM0YTI5ZmEzZTM3NTZmZmIxNDY0MDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxNTo0MDoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuYyBiL25ldC9zbWMvc21jX2NvcmUuY1xuaW5kZXggYjQyMDhjYjE4NmM1ZS4uMmY3ZjlkNDY5MjcyMCAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuY1xuKysrIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5AQCAtMTE0OCwxMyArMTE0OCwxMyBAQCBzdHJ1Y3Qgc21jX2xpbmsgKnNtY19zd2l0Y2hfY29ubnMoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4gXHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNmxnci1cdTAwM2Vjb25uc19sb2NrKTtcbiBcdFx0LyogcHJlLWZldGNoIGJ1ZmZlciBvdXRzaWRlIG9mIHNlbmRfbG9jaywgbWlnaHQgc2xlZXAgKi9cbiBcdFx0cmMgPSBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoY29ubiwgdG9fbG5rLCBcdTAwMjZ3cl9idWYsIE5VTEwsIFx1MDAyNnBlbmQpO1xuLVx0XHRpZiAocmMpXG4tXHRcdFx0Z290byBlcnJfb3V0O1xuLVx0XHQvKiBhdm9pZCByYWNlIHdpdGggc21jcl90eF9zbmRidWZfbm9uZW1wdHkoKSAqL1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2VzZW5kX2xvY2spO1xuLVx0XHRzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KGNvbm4sIHRvX2xuayk7XG4tXHRcdHJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4rXHRcdGlmICghcmMpIHtcbitcdFx0XHQvKiBhdm9pZCByYWNlIHdpdGggc21jcl90eF9zbmRidWZfbm9uZW1wdHkoKSAqL1xuK1x0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4rXHRcdFx0c21jX3N3aXRjaF9saW5rX2FuZF9jb3VudChjb25uLCB0b19sbmspO1xuK1x0XHRcdHJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbitcdFx0fVxuIFx0XHRzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spO1xuIFx0XHRpZiAocmMpXG4gXHRcdFx0Z290byBlcnJfb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDI6MTIuNDE0NzAzOTEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzOTM2MjU5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgUGF0Y2ggaW4gU01DIENvcmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgc21jX3N3aXRjaF9jb25uc2AgaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGltcG9ydGFudC4gVGhleSd2ZSBzaGlmdGVkIHRoZSBlcnJvciBoYW5kbGluZyBmb3IgYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdGAuIFByZXZpb3VzbHksIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJuZWQgYW4gZXJyb3IgKGByYyAhPSAwYCksIHRoZSBjb2RlIHdvdWxkIGp1bXAgdG8gYGVycl9vdXRgICpiZWZvcmUqIGRlY3JlbWVudGluZyB0aGUgc29ja2V0J3MgcmVmZXJlbmNlIGNvdW50IHdpdGggYHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2VzaylgLiBOb3csIHRoZSBgc29ja19wdXRgIGlzIGFsd2F5cyBjYWxsZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgIHJldHVybiB2YWx1ZS5cblxuRXNzZW50aWFsbHksIHRoZXkncmUgZml4aW5nIGEgcmVmZXJlbmNlIGxlYWshIFdpdGhvdXQgdGhlIGBzb2NrX3B1dGAsIHRoZSByZWZlcmVuY2UgY291bnQgd291bGRuJ3QgYmUgZGVjcmVtZW50ZWQsIGFuZCB0aGUgc29ja2V0IHdvdWxkbid0IGJlIHJlbGVhc2VkLCBsZWFkaW5nIHRvIGEgbWVtb3J5IGxlYWsuIFRoaXMgaXMgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBrbWVtbGVhayB3b3VsZCBwaWNrIHVwLCBub3QgbmVjZXNzYXJpbHkgS01TQU4sIGFzIHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgaGVyZS4gYHdyX2J1ZmAgYW5kIGBwZW5kYCBtaWdodCBiZSB1bmluaXRpYWxpemVkIGlmIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgIGZhaWxzLCBidXQgdGhleSdyZSBuZXZlciB1c2VkIGlmIGByY2AgaXMgbm9uLXplcm8sIHNvIHRoZXJlJ3Mgbm8gcmlzayBvZiBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5IHdlcmUgc2tpcHBpbmcgYSBjcml0aWNhbCBgc29ja19wdXRgIGNhbGwuXG5cblRoaXMgaXMgYSBnb29kIGNhdGNoLiBBbHdheXMgaW1wb3J0YW50IHRvIGRvdWJsZS1jaGVjayByZWZlcmVuY2UgY291bnRpbmcsIGVzcGVjaWFsbHkgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIHNpZGUgZWZmZWN0cyBidXQgbG9va3MgZ29vZCBzbyBmYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MjoyMS44MDgzMzI4MzJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjg4NjY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfc3dpdGNoX2Nvbm5zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jb3JlLmM9MTA4Mz12b2lkIHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTEwOTQtXFxubmV0L3NtYy9zbWNfY29yZS5jOjEwOTU6c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDk2LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19saW5rICpmcm9tX2xuaywgYm9vbCBpc19kZXZfZXJyKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTc5NC1cXG5uZXQvc21jL3NtY19jb3JlLmM6MTc5NTpcXHR0b19sbmsgPSBzbWNfc3dpdGNoX2Nvbm5zKGxnciwgbG5rLCB0cnVlKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc5Ni1cXHRpZiAoIXRvX2xuaykgeyAvKiBubyBiYWNrdXAgbGluayBhdmFpbGFibGUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDI6MjEuOTMxMjI1MzU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDQ5Nzg4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipQYXRjaCBBbmFseXNpcyBhbmQgTWVtb3J5IFNhZmV0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZml4LiBTZWVtcyBsaWtlIGEgbWlzc2luZyBgc29ja19wdXRgIG9uIGFuIGVycm9yIHBhdGgsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgcG90ZW50aWFsIHJlZmVyZW5jZSBsZWFrLiBHb29kIGNhdGNoLiBMZXQncyBkaWcgaW4gYSBiaXQgZnVydGhlci5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IHJpc2tzLiBLTVNBTiBpcyBteSBwcmltYXJ5IGNvbmNlcm4gZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBLQVNBTiBpcyB0aGVyZSB0byBkZXRlY3QgdGhlIG5hc3RpZXIgc3R1ZmYg4oCTIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgdGhpbmdzIGxpa2UgdGhhdC4gVGhlbiwgb2YgY291cnNlLCBrbWVtbGVhayBpcyBhbHdheXMgd2F0Y2hpbmcgb3V0IGZvciBwZXJzaXN0ZW50IG1lbW9yeSBsZWFrcy5cblxuU2luY2UgdGhpcyBmaXhlcyBhIGxlYWssIGFuZCBkb2Vzbid0IHNlZW0gdG8gdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB0aGUgcmlzayBvZiBLTVNBTiBmaW5kaW5nIGFueXRoaW5nIGlzIG5lZ2xpZ2libGUuIEknbSBwcmV0dHkgY29uZmlkZW50IGluIHNheWluZyAqKk5lZWRzS01TQU4gaXMgZmFsc2UqKiBmb3IgdGhpcyBvbmUuIFRoaXMgaXMgYSBzb2xpZCwgY2xlYW4gYnVnIGZpeCB0aGF0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgb24gaXRzIG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxMywiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MjoyNy4zMzYyMDY4MzNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgc29ja19wdXQoXFx1MDAyNnNtYy1cXHUwMDNlc2spYCBvbiB0aGUgZXJyb3IgcGF0aCB3aGVuIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoKWAgZmFpbHMuIFRoaXMgcmVzb2x2ZXMgYSByZWZlcmVuY2UgY291bnQgbGVhayAobWVtb3J5IGxlYWspIGZvciB0aGUgc29ja2V0IHN0cnVjdHVyZS4gVGhlIHZhcmlhYmxlcyBwb3B1bGF0ZWQgYnkgYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCgpYCAoYHdyX2J1ZmAgYW5kIGBwZW5kYCkgYXJlIGNvcnJlY3RseSBndWFyZGVkIGJ5IHRoZSBgaWYgKCFyYylgIGNoZWNrLCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB1c2VkLiBNZW1vcnkgbGVha3MgYXJlIHR5cGljYWxseSBkZXRlY3RlZCBieSBrbWVtbGVhaywgYW5kIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMgYXJlIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGBzb2NrX3B1dChcXHUwMDI2c21jLVxcdTAwM2VzaylgIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCgpYCBmYWlscy4gVGhpcyByZXNvbHZlcyBhIHJlZmVyZW5jZSBjb3VudCBsZWFrIChtZW1vcnkgbGVhaykgZm9yIHRoZSBzb2NrZXQgc3RydWN0dXJlLiBUaGUgdmFyaWFibGVzIHBvcHVsYXRlZCBieSBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIChgd3JfYnVmYCBhbmQgYHBlbmRgKSBhcmUgY29ycmVjdGx5IGd1YXJkZWQgYnkgdGhlIGBpZiAoIXJjKWAgY2hlY2ssIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHVzZWQuIE1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IGttZW1sZWFrLCBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyBhcmUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowblrnd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 14:56:57 +0000 UTC FinishedAt: 2026-08-20 15:42:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3aa1dcaa4f6f5ae08936491e08bd456f331f2d40", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3aa1dcaa4f6f5ae08936491e08bd456f331f2d40", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "INFINIBAND", "DIBS" ], "series_id": "acc6cc60-cb21-45a9-b2eb-1015595ead51" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_switch_conns", "smcr_link_down_cond", "smcr_link_down_cond_sched" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfc3dpdGNoX2Nvbm5zJiMzNDssCiAgICAmIzM0O3NtY3JfbGlua19kb3duX2NvbmQmIzM0OywKICAgICYjMzQ7c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgc29ja19wdXQoXHUwMDI2c21jLVx1MDAzZXNrKWAgb24gdGhlIGVycm9yIHBhdGggd2hlbiBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIGZhaWxzLiBUaGlzIHJlc29sdmVzIGEgcmVmZXJlbmNlIGNvdW50IGxlYWsgKG1lbW9yeSBsZWFrKSBmb3IgdGhlIHNvY2tldCBzdHJ1Y3R1cmUuIFRoZSB2YXJpYWJsZXMgcG9wdWxhdGVkIGJ5IGBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoKWAgKGB3cl9idWZgIGFuZCBgcGVuZGApIGFyZSBjb3JyZWN0bHkgZ3VhcmRlZCBieSB0aGUgYGlmICghcmMpYCBjaGVjaywgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdXNlZC4gTWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWssIGFuZCByZWZlcmVuY2UgY291bnQgaXNzdWVzIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNvY2tldCByZWZlcmVuY2UgbGVhayBpbiB0aGUgU01DIGNvcmUgbmV0d29ya2luZyBjb2RlIChzbWNfc3dpdGNoX2Nvbm5zKSB3aGVuIHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCBmYWlscy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBmb3IgdGhlIFNNQyBwcm90b2NvbCBmYW1pbHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MmI0MWNkNDAyMDAyZTkwMzJjNGEyOWZhM2UzNzU2ZmZiMTQ2NDA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6NDA6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5pbmRleCBiNDIwOGNiMTg2YzVlLi4yZjdmOWQ0NjkyNzIwIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19jb3JlLmNcbkBAIC0xMTQ4LDEzICYjNDM7MTE0OCwxMyBAQCBzdHJ1Y3Qgc21jX2xpbmsgKnNtY19zd2l0Y2hfY29ubnMoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4gXHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNmxnci1cdTAwM2Vjb25uc19sb2NrKTtcbiBcdFx0LyogcHJlLWZldGNoIGJ1ZmZlciBvdXRzaWRlIG9mIHNlbmRfbG9jaywgbWlnaHQgc2xlZXAgKi9cbiBcdFx0cmMgPSBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoY29ubiwgdG9fbG5rLCBcdTAwMjZ3cl9idWYsIE5VTEwsIFx1MDAyNnBlbmQpO1xuLVx0XHRpZiAocmMpXG4tXHRcdFx0Z290byBlcnJfb3V0O1xuLVx0XHQvKiBhdm9pZCByYWNlIHdpdGggc21jcl90eF9zbmRidWZfbm9uZW1wdHkoKSAqL1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2VzZW5kX2xvY2spO1xuLVx0XHRzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KGNvbm4sIHRvX2xuayk7XG4tXHRcdHJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4mIzQzO1x0XHRpZiAoIXJjKSB7XG4mIzQzO1x0XHRcdC8qIGF2b2lkIHJhY2Ugd2l0aCBzbWNyX3R4X3NuZGJ1Zl9ub25lbXB0eSgpICovXG4mIzQzO1x0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4mIzQzO1x0XHRcdHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoY29ubiwgdG9fbG5rKTtcbiYjNDM7XHRcdFx0cmMgPSBzbWNfc3dpdGNoX2N1cnNvcihzbWMsIHBlbmQsIHdyX2J1Zik7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbiYjNDM7XHRcdH1cbiBcdFx0c29ja19wdXQoXHUwMDI2c21jLVx1MDAzZXNrKTtcbiBcdFx0aWYgKHJjKVxuIFx0XHRcdGdvdG8gZXJyX291dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19zd2l0Y2hfY29ubnMmIzM0OywKICAgICYjMzQ7c21jcl9saW5rX2Rvd25fY29uZCYjMzQ7LAogICAgJiMzNDtzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBTTUMgY29yZSBuZXR3b3JraW5nIGNvZGUgKHNtY19zd2l0Y2hfY29ubnMpIHdoZW4gc21jX2NkY19nZXRfZnJlZV9zbG90IGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciB0aGUgU01DIHByb3RvY29sIGZhbWlseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQyYjQxY2Q0MDIwMDJlOTAzMmM0YTI5ZmEzZTM3NTZmZmIxNDY0MDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAxNTo0MDoyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuYyBiL25ldC9zbWMvc21jX2NvcmUuYwppbmRleCBiNDIwOGNiMTg2YzVlLi4yZjdmOWQ0NjkyNzIwIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfY29yZS5jCkBAIC0xMTQ4LDEzICYjNDM7MTE0OCwxMyBAQCBzdHJ1Y3Qgc21jX2xpbmsgKnNtY19zd2l0Y2hfY29ubnMoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsCiAJCXJlYWRfdW5sb2NrX2JoKCZhbXA7bGdyLSZndDtjb25uc19sb2NrKTsKIAkJLyogcHJlLWZldGNoIGJ1ZmZlciBvdXRzaWRlIG9mIHNlbmRfbG9jaywgbWlnaHQgc2xlZXAgKi8KIAkJcmMgPSBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoY29ubiwgdG9fbG5rLCAmYW1wO3dyX2J1ZiwgTlVMTCwgJmFtcDtwZW5kKTsKLQkJaWYgKHJjKQotCQkJZ290byBlcnJfb3V0OwotCQkvKiBhdm9pZCByYWNlIHdpdGggc21jcl90eF9zbmRidWZfbm9uZW1wdHkoKSAqLwotCQlzcGluX2xvY2tfYmgoJmFtcDtjb25uLSZndDtzZW5kX2xvY2spOwotCQlzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KGNvbm4sIHRvX2xuayk7Ci0JCXJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpOwotCQlzcGluX3VubG9ja19iaCgmYW1wO2Nvbm4tJmd0O3NlbmRfbG9jayk7CiYjNDM7CQlpZiAoIXJjKSB7CiYjNDM7CQkJLyogYXZvaWQgcmFjZSB3aXRoIHNtY3JfdHhfc25kYnVmX25vbmVtcHR5KCkgKi8KJiM0MzsJCQlzcGluX2xvY2tfYmgoJmFtcDtjb25uLSZndDtzZW5kX2xvY2spOwomIzQzOwkJCXNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoY29ubiwgdG9fbG5rKTsKJiM0MzsJCQlyYyA9IHNtY19zd2l0Y2hfY3Vyc29yKHNtYywgcGVuZCwgd3JfYnVmKTsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO2Nvbm4tJmd0O3NlbmRfbG9jayk7CiYjNDM7CQl9CiAJCXNvY2tfcHV0KCZhbXA7c21jLSZndDtzayk7CiAJCWlmIChyYykKIAkJCWdvdG8gZXJyX291dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRXJyb3IgSGFuZGxpbmcgaW4gU01DIENvbm5lY3Rpb24gU3dpdGNoaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgc21jX3N3aXRjaF9jb25uc2AgZnVuY3Rpb24gd2l0aGluIGBuZXQvc21jL3NtY19jb3JlLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2UgZm9jdXNlcyBvbiBob3cgZXJyb3IgaGFuZGxpbmcgaXMgbWFuYWdlZCBhcm91bmQgdGhlIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgIGNhbGwuIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGxvZ2ljIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0IGFjcXVpcmVzIGEgc2xvdCwgYW5kIGlmIHRoYXQgY2FsbCBmYWlscywgaXQganVtcHMgdG8gYGVycl9vdXRgLiBCdXQgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgaGVyZSwgYW5kIGl04oCZcyBhIHN0YW5kYXJkIGlzc3VlIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLgoKVGhlIHJldmlzZWQgY29kZSBtb3ZlcyB0aGUgYHNvY2tfcHV0KCZhbXA7c21jLSZndDtzaylgIGNhbGwgb3V0c2lkZSB0aGUgYGlmIChyYylgIGJsb2NrLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UsIGluIHRoZSAmIzM5O2JlZm9yZSYjMzk7IHZlcnNpb24sIGlmIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgIHJldHVybmVkIGFuIGVycm9yIChgcmNgIG5vbi16ZXJvKSwgd2UmIzM5O2QgaW1tZWRpYXRlbHkganVtcCB0byBgZXJyX291dGAsIHNraXBwaW5nIHRoZSBgc29ja19wdXRgLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGBzb2NrX2hvbGQoJmFtcDtzbWMtJmd0O3NrKWAgd2FzICpwcm9iYWJseSogY2FsbGVkIHByZXZpb3VzbHksIGJlZm9yZSB0aGUgZXJyb3IgcGF0aC4gSWYgc28sIHRoZW4gdGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgc3VidGxlIHJlZmVyZW5jZSBsZWFrIGluIHRoZSBlcnJvciBwYXRoLgoKVG8gYmUgY2VydGFpbiwgSSBzaG91bGQgZG91YmxlLWNoZWNrIGhvdyBgc21jX3N3aXRjaF9jb25uc2AgdXNlcyBgc29ja19ob2xkYCBhbmQgYHNvY2tfcHV0YCBhcm91bmQgdGhpcyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGBzb2NrX2hvbGRgIGlzIGluZGVlZCBjYWxsZWQgYmVmb3JlIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgLCB3aGljaCB3b3VsZCBtYWtlIHRoZSBjdXJyZW50IHBhdGNoIGEgY2xlYXIgaW1wcm92ZW1lbnQsIGZpeGluZyB0aGUgcG90ZW50aWFsIGxlYWsgYnkgYWx3YXlzIHJlbGVhc2luZyB0aGUgc29ja2V0IHJlZmVyZW5jZSByZWdhcmRsZXNzIG9mIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3Rg4oCZcyByZXR1cm4uIFRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IGNvbW1vbiBpc3N1ZSB0byBmaW5kIGluIGNvbXBsZXggbmV0d29ya2luZyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19zd2l0Y2hfY29ubnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTA5NC1cbm5ldC9zbWMvc21jX2NvcmUuYzoxMDk1OnN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDk2LVx0XHRcdFx0ICBzdHJ1Y3Qgc21jX2xpbmsgKmZyb21fbG5rLCBib29sIGlzX2Rldl9lcnIpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE3OTQtXG5uZXQvc21jL3NtY19jb3JlLmM6MTc5NTpcdHRvX2xuayA9IHNtY19zd2l0Y2hfY29ubnMobGdyLCBsbmssIHRydWUpO1xubmV0L3NtYy9zbWNfY29yZS5jLTE3OTYtXHRpZiAoIXRvX2xuaykgeyAvKiBubyBiYWNrdXAgbGluayBhdmFpbGFibGUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzUxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBzbWNfc3dpdGNoX2Nvbm5zYCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgc21jX3N3aXRjaF9jb25uc2AuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGl0IHJlcXVpcmVzIGFuZCBpZGVudGlmeSBhbnkgbGlrZWx5IGFyZWFzIG9mIGludGVyZXN0aW5nIGlucHV0LCBzcGVjaWZpY2FsbHkgYW55dGhpbmcgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBwb3RlbnRpYWxseSBtaXNoYW5kbGVkIGVycm9yIGNvbmRpdGlvbnMsIG9yIGFueSBsb2dpYyBwYXRocyB0aGF0IGNvdWxkIGJlIG1hbmlwdWxhdGVkIHRocm91Z2ggc3BlY2lmaWNhbGx5IGNyYWZ0ZWQgaW5wdXRzLiBJcyB0aGVyZSBhbnkgb2J2aW91cyBsb3ctaGFuZ2luZyBmcnVpdD8gTGV0JiMzOTtzIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5NTpcdHN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbjEwOTY6XHRcdFx0XHRcdCAgc3RydWN0IHNtY19saW5rICpmcm9tX2xuaywgYm9vbCBpc19kZXZfZXJyKVxuMTA5NzpcdHtcbjEwOTg6XHRcdHN0cnVjdCBzbWNfbGluayAqdG9fbG5rID0gTlVMTDtcbjEwOTk6XHRcdHN0cnVjdCBzbWNfY2RjX3R4X3BlbmQgKnBlbmQ7XG4xMTAwOlx0XHRzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm47XG4xMTAxOlx0XHRzdHJ1Y3Qgc21jX3dyX2J1ZiAqd3JfYnVmO1xuMTEwMjpcdFx0c3RydWN0IHNtY19zb2NrICpzbWM7XG4xMTAzOlx0XHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZTtcbjExMDQ6XHRcdGludCBpLCByYyA9IDA7XG4xMTA1Olx0XG4xMTA2Olx0XHQvKiBsaW5rIGlzIGluYWN0aXZlLCB3YWtlIHVwIHR4IHdhaXRlcnMgKi9cbjExMDc6XHRcdHNtY193cl93YWtldXBfdHhfd2FpdChmcm9tX2xuayk7XG4xMTA4Olx0XG4xMTA5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTTUNfTElOS1NfUEVSX0xHUl9NQVg7IGkmIzQzOyYjNDM7KSB7XG4xMTEwOlx0XHRcdGlmICghc21jX2xpbmtfYWN0aXZlKFx1MDAyNmxnci1cdTAwM2VsbmtbaV0pIHx8IGkgPT0gZnJvbV9sbmstXHUwMDNlbGlua19pZHgpXG4xMTExOlx0XHRcdFx0Y29udGludWU7XG4xMTEyOlx0XHRcdGlmIChpc19kZXZfZXJyIFx1MDAyNlx1MDAyNiBmcm9tX2xuay1cdTAwM2VzbWNpYmRldiA9PSBsZ3ItXHUwMDNlbG5rW2ldLnNtY2liZGV2IFx1MDAyNlx1MDAyNlxuMTExMzpcdFx0XHQgICAgZnJvbV9sbmstXHUwMDNlaWJwb3J0ID09IGxnci1cdTAwM2VsbmtbaV0uaWJwb3J0KSB7XG4xMTE0Olx0XHRcdFx0Y29udGludWU7XG4xMTE1Olx0XHRcdH1cbjExMTY6XHRcdFx0dG9fbG5rID0gXHUwMDI2bGdyLVx1MDAzZWxua1tpXTtcbjExMTc6XHRcdFx0YnJlYWs7XG4xMTE4Olx0XHR9XG4xMTE5Olx0XHRpZiAoIXRvX2xuayB8fCAhc21jX3dyX3R4X2xpbmtfaG9sZCh0b19sbmspKSB7XG4xMTIwOlx0XHRcdHNtY19sZ3JfdGVybWluYXRlX3NjaGVkKGxncik7XG4xMTIxOlx0XHRcdHJldHVybiBOVUxMO1xuMTEyMjpcdFx0fVxuMTEyMzpcdGFnYWluOlxuMTEyNDpcdFx0cmVhZF9sb2NrX2JoKFx1MDAyNmxnci1cdTAwM2Vjb25uc19sb2NrKTtcbjExMjU6XHRcdGZvciAobm9kZSA9IHJiX2ZpcnN0KFx1MDAyNmxnci1cdTAwM2Vjb25uc19hbGwpOyBub2RlOyBub2RlID0gcmJfbmV4dChub2RlKSkge1xuMTEyNjpcdFx0XHRjb25uID0gcmJfZW50cnkobm9kZSwgc3RydWN0IHNtY19jb25uZWN0aW9uLCBhbGVydF9ub2RlKTtcbjExMjc6XHRcdFx0aWYgKGNvbm4tXHUwMDNlbG5rICE9IGZyb21fbG5rKVxuMTEyODpcdFx0XHRcdGNvbnRpbnVlO1xuMTEyOTpcdFx0XHRzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcbjExMzA6XHRcdFx0LyogY29ubi1cdTAwM2Vsbmsgbm90IHlldCBzZXQgaW4gU01DX0lOSVQgc3RhdGUgKi9cbjExMzE6XHRcdFx0aWYgKHNtYy1cdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfSU5JVClcbjExMzI6XHRcdFx0XHRjb250aW51ZTtcbjExMzM6XHRcdFx0aWYgKHNtYy1cdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfQ0xPU0VEIHx8XG4xMTM0Olx0XHRcdCAgICBzbWMtXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX1BFRVJDTE9TRVdBSVQxIHx8XG4xMTM1Olx0XHRcdCAgICBzbWMtXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX1BFRVJDTE9TRVdBSVQyIHx8XG4xMTM2Olx0XHRcdCAgICBzbWMtXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX0FQUEZJTkNMT1NFV0FJVCB8fFxuMTEzNzpcdFx0XHQgICAgc21jLVx1MDAzZXNrLnNrX3N0YXRlID09IFNNQ19BUFBDTE9TRVdBSVQxIHx8XG4xMTM4Olx0XHRcdCAgICBzbWMtXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX0FQUENMT1NFV0FJVDIgfHxcbjExMzk6XHRcdFx0ICAgIHNtYy1cdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfUEVFUkZJTkNMT1NFV0FJVCB8fFxuMTE0MDpcdFx0XHQgICAgc21jLVx1MDAzZXNrLnNrX3N0YXRlID09IFNNQ19QRUVSQUJPUlRXQUlUIHx8XG4xMTQxOlx0XHRcdCAgICBzbWMtXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX1BST0NFU1NBQk9SVCkge1xuMTE0MjpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4xMTQzOlx0XHRcdFx0c21jX3N3aXRjaF9saW5rX2FuZF9jb3VudChjb25uLCB0b19sbmspO1xuMTE0NDpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbjExNDU6XHRcdFx0XHRjb250aW51ZTtcbjExNDY6XHRcdFx0fVxuMTE0NzpcdFx0XHRzb2NrX2hvbGQoXHUwMDI2c21jLVx1MDAzZXNrKTtcbjExNDg6XHRcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuMTE0OTpcdFx0XHQvKiBwcmUtZmV0Y2ggYnVmZmVyIG91dHNpZGUgb2Ygc2VuZF9sb2NrLCBtaWdodCBzbGVlcCAqL1xuMTE1MDpcdFx0XHRyYyA9IHNtY19jZGNfZ2V0X2ZyZWVfc2xvdChjb25uLCB0b19sbmssIFx1MDAyNndyX2J1ZiwgTlVMTCwgXHUwMDI2cGVuZCk7XG4xMTUxOlx0XHRcdGlmICghcmMpIHtcbjExNTI6XHRcdFx0XHQvKiBhdm9pZCByYWNlIHdpdGggc21jcl90eF9zbmRidWZfbm9uZW1wdHkoKSAqL1xuMTE1MzpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4xMTU0Olx0XHRcdFx0c21jX3N3aXRjaF9saW5rX2FuZF9jb3VudChjb25uLCB0b19sbmspO1xuMTE1NTpcdFx0XHRcdHJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpO1xuMTE1NjpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbjExNTc6XHRcdFx0fVxuMTE1ODpcdFx0XHRzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spO1xuMTE1OTpcdFx0XHRpZiAocmMpXG4xMTYwOlx0XHRcdFx0Z290byBlcnJfb3V0O1xuMTE2MTpcdFx0XHRnb3RvIGFnYWluO1xuMTE2MjpcdFx0fVxuMTE2MzpcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuMTE2NDpcdFx0c21jX3dyX3R4X2xpbmtfcHV0KHRvX2xuayk7XG4xMTY1Olx0XHRyZXR1cm4gdG9fbG5rO1xuMTE2NjpcdFxuMTE2NzpcdGVycl9vdXQ6XG4xMTY4Olx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHRvX2xuayk7XG4xMTY5Olx0XHRzbWNfd3JfdHhfbGlua19wdXQodG9fbG5rKTtcbjExNzA6XHRcdHJldHVybiBOVUxMO1xuMTE3MTpcdH1cbjExNzI6XHRcbjExNzM6XHRzdGF0aWMgdm9pZCBzbWNyX2J1Zl91bnVzZShzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpidWZfZGVzYywgYm9vbCBpc19ybWIsXG4xMTc0Olx0XHRcdFx0ICAgc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4xMTc1Olx0e1xuMTE3NjpcdFx0c3RydWN0IHJ3X3NlbWFwaG9yZSAqbG9jaztcdC8qIGxvY2sgYnVmZmVyIGxpc3QgKi9cbjExNzc6XHRcdGludCByYztcbjExNzg6XHRcbjExNzk6XHRcdGlmIChpc19ybWIgXHUwMDI2XHUwMDI2IGJ1Zl9kZXNjLVx1MDAzZWlzX2NvbmZfcmtleSBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2bGdyLVx1MDAzZWxpc3QpKSB7XG4xMTgwOlx0XHRcdC8qIHVucmVnaXN0ZXIgcm1iIHdpdGggcGVlciAqL1xuMTE4MTpcdFx0XHRyYyA9IHNtY19sbGNfZmxvd19pbml0aWF0ZShsZ3IsIFNNQ19MTENfRkxPV19SS0VZKTtcbjExODI6XHRcdFx0aWYgKCFyYykge1xuMTE4MzpcdFx0XHRcdC8qIHByb3RlY3QgYWdhaW5zdCBzbWNfbGxjX2NsaV9ya2V5X2V4Y2hhbmdlKCkgKi9cbjExODQ6XHRcdFx0XHRkb3duX3JlYWQoXHUwMDI2bGdyLVx1MDAzZWxsY19jb25mX211dGV4KTtcbjExODU6XHRcdFx0XHRzbWNfbGxjX2RvX2RlbGV0ZV9ya2V5KGxnciwgYnVmX2Rlc2MpO1xuMTE4NjpcdFx0XHRcdGJ1Zl9kZXNjLVx1MDAzZWlzX2NvbmZfcmtleSA9IGZhbHNlO1xuMTE4NzpcdFx0XHRcdHVwX3JlYWQoXHUwMDI2bGdyLVx1MDAzZWxsY19jb25mX211dGV4KTtcbjExODg6XHRcdFx0XHRzbWNfbGxjX2Zsb3dfc3RvcChsZ3IsIFx1MDAyNmxnci1cdTAwM2VsbGNfZmxvd19sY2wpO1xuMTE4OTpcdFx0XHR9XG4xMTkwOlx0XHR9XG4xMTkxOlx0XG4xMTkyOlx0XHRpZiAoYnVmX2Rlc2MtXHUwMDNlaXNfcmVnX2Vycikge1xuMTE5MzpcdFx0XHQvKiBidWYgcmVnaXN0cmF0aW9uIGZhaWxlZCwgcmV1c2Ugbm90IHBvc3NpYmxlICovXG4xMTk0Olx0XHRcdGxvY2sgPSBpc19ybWIgPyBcdTAwMjZsZ3ItXHUwMDNlcm1ic19sb2NrIDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDA0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgU01DIEJ1ZyBGaXgqKgoKT2theSwgc28gdGhpcyBjaGFuZ2UgdGFja2xlcyBhIHByZXR0eSBuYXN0eSBidWcgd2l0aGluIHRoZSBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zIChTTUMpIG5ldHdvcmtpbmcgY29kZS4gSXQgbG9va3MgbGlrZSBgc29ja19wdXQoJmFtcDtzbWMtJmd0O3NrKWAgd2FzIGJlaW5nIHNraXBwZWQgdW5kZXIgY2VydGFpbiBlcnJvciBjb25kaXRpb25zIHdoZW4gYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdGAgZmFpbGVkLiBUaGF0IG1lYW5zIHdlIHdlcmUgbGVha2luZyBzb2NrZXQgcmVmZXJlbmNlcywgd2hpY2ggaXMgYSBiaWcgbm8tbm8uIFdlIGNhbiYjMzk7dCBoYXZlIHRob3NlIGxpbmdlcmluZyBhcm91bmQuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgaW1wYWN0aW5nIHRoZSBjb3JlIFNNQyBsb2dpYywgYW5kIGNvbnNpZGVyaW5nIFNNQyYjMzk7cyByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgZHVlIHRvIGl0cyBBRl9TTUMgc29ja2V0IGZhbWlseSwgdGhpcyBpcyBzb21ldGhpbmcgd2UgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBjaGVjayB3aGV0aGVyIFNNQywgaW4gZ2VuZXJhbCwgcmVxdWlyZXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIG9wZXJhdGlvbi4gVGhlIGZhY3QgdGhhdCB0aGUgYHNtY19zd2l0Y2hfY29ubnNgIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBzbWNyX2xpbmtfZG93bmAgcHJvdmlkZXMgYSBsaXR0bGUgbW9yZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgc3BlY2lmaWMgcGF0aCB0byBzZWUgd2hhdCBpbnRlcmFjdGlvbnMgYXJlIHRha2luZyBwbGFjZSB0aGVyZS4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGhvdyB0aGlzIGltcGFjdHMgdGhpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTTUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTEzLVxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMjItXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk1NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHdvcmtpbmcgdGhyb3VnaCB0aGlzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBOZWVkIGZvciBTTUMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBmbGFnIHVwIHRoYXQgSSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgYFNNQ2AgbW9kdWxlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBJbnN0ZWFkIG9mIGp1c3QgZGl2aW5nIGluLCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgKnVzaW5nKiB0aGlzIGBTTUNgIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIGBzbWNfc3dpdGNoX2Nvbm5zYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBpcyBiZWluZyBsZXZlcmFnZWQgYW5kIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGl0cyB1c2FnZS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgd2hhdCBpdHMgaW1wYWN0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfc3dpdGNoX2Nvbm5zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTA5NC1cbm5ldC9zbWMvc21jX2NvcmUuYzoxMDk1OnN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDk2LVx0XHRcdFx0ICBzdHJ1Y3Qgc21jX2xpbmsgKmZyb21fbG5rLCBib29sIGlzX2Rldl9lcnIpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE3OTQtXG5uZXQvc21jL3NtY19jb3JlLmM6MTc5NTpcdHRvX2xuayA9IHNtY19zd2l0Y2hfY29ubnMobGdyLCBsbmssIHRydWUpO1xubmV0L3NtYy9zbWNfY29yZS5jLTE3OTYtXHRpZiAoIXRvX2xuaykgeyAvKiBubyBiYWNrdXAgbGluayBhdmFpbGFibGUgKi9cbi0tXG5uZXQvc21jL3NtY19jb3JlLmg9NjE1PWludCBzbWNyX2xpbmtfcmVnX2J1ZihzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfYnVmX2Rlc2MgKnJtYl9kZXNjKTtcbm5ldC9zbWMvc21jX2NvcmUuaDo2MTY6c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxubmV0L3NtYy9zbWNfY29yZS5oLTYxNy1cdFx0XHRcdCAgc3RydWN0IHNtY19saW5rICpmcm9tX2xuaywgYm9vbCBpc19kZXZfZXJyKTtcbi0tXG5uZXQvc21jL3NtY19sbGMuYz0xMjg4PXN0YXRpYyB2b2lkIHNtY19sbGNfZGVsZXRlX2FzeW1fbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xMjk4LVx0XHRyZXR1cm47XG5uZXQvc21jL3NtY19sbGMuYzoxMjk5Olx0bG5rX25ldyA9IHNtY19zd2l0Y2hfY29ubnMobGdyLCBsbmtfYXN5bSwgZmFsc2UpO1xubmV0L3NtYy9zbWNfbGxjLmMtMTMwMC1cdHNtY193cl90eF93YWl0X25vX3BlbmRpbmdfc2VuZHMobG5rX2FzeW0pO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTE1OTQ9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNjMwLVx0aWYgKHNtY19saW5rX2Rvd25pbmcoXHUwMDI2bG5rX2RlbC1cdTAwM2VzdGF0ZSkpXG5uZXQvc21jL3NtY19sbGMuYzoxNjMxOlx0XHRzbWNfc3dpdGNoX2Nvbm5zKGxnciwgbG5rX2RlbCwgZmFsc2UpO1xubmV0L3NtYy9zbWNfbGxjLmMtMTYzMi1cdHNtY3JfbGlua19jbGVhcihsbmtfZGVsLCB0cnVlKTtcbi0tXG5uZXQvc21jL3NtY19sbGMuYz0xNjcyPXN0YXRpYyB2b2lkIHNtY19sbGNfcHJvY2Vzc19zcnZfZGVsZXRlX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTcwMy1cdGlmIChzbWNfbGlua19kb3duaW5nKFx1MDAyNmxua19kZWwtXHUwMDNlc3RhdGUpKSB7XG5uZXQvc21jL3NtY19sbGMuYzoxNzA0Olx0XHRpZiAoc21jX3N3aXRjaF9jb25ucyhsZ3IsIGxua19kZWwsIGZhbHNlKSlcbm5ldC9zbWMvc21jX2xsYy5jLTE3MDUtXHRcdFx0c21jX3dyX3R4X3dhaXRfbm9fcGVuZGluZ19zZW5kcyhsbmtfZGVsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAyNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2FsbHMgdG8gYHNtY19zd2l0Y2hfY29ubnNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYHNtY19zd2l0Y2hfY29ubnNgIGlzIHVzZWQgd2l0aGluIHRoaXMgU01DIGNvZGViYXNlLiBJJiMzOTt2ZSBub3RlZCB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zOiBgc21jcl9saW5rX2Rvd25gLCBgc21jX2xsY19kZWxldGVfYXN5bV9saW5rYCwgYHNtY19sbGNfcHJvY2Vzc19jbGlfZGVsZXRlX2xpbmtgLCBhbmQgYHNtY19sbGNfcHJvY2Vzc19zcnZfZGVsZXRlX2xpbmtgLiBJIHNlZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IGFsbCBuZWNlc3NhcmlseSBzdGF0aWMsIG9yIHRoZXkgKmNvdWxkKiBiZSBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgU01DIG1vZHVsZS4KCk5vdywgSSB3YW50IHRvIGRlbHZlIGEgbGl0dGxlIGRlZXBlci4gR2l2ZW4gdGhlIGNvbnRleHRzIGxpc3RlZCBoZXJlLCBpdCYjMzk7cyBpbW1lZGlhdGVseSBvYnZpb3VzIHRoYXQgYHNtY3JfbGlua19kb3duYCBpcyB3b3J0aCBhIGNsb3NlciBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBzbWNyX2xpbmtfZG93bmAgYW5kIHNlZSB0aGUgd2lkZXIgY2FsbCBjb250ZXh0LCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNyX2xpbmtfZG93biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuYz0xMDk1PXN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTE2Ny1lcnJfb3V0OlxubmV0L3NtYy9zbWNfY29yZS5jOjExNjg6XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHRvX2xuayk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTE2OS1cdHNtY193cl90eF9saW5rX3B1dCh0b19sbmspO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xNjYzPXZvaWQgc21jX3NtY3JfdGVybWluYXRlX2FsbChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE2NzctXHRcdFx0XHRpZiAobGdyLVx1MDAzZWxua1tpXS5zbWNpYmRldiA9PSBzbWNpYmRldilcbm5ldC9zbWMvc21jX2NvcmUuYzoxNjc4Olx0XHRcdFx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKFx1MDAyNmxnci1cdTAwM2VsbmtbaV0pO1xubmV0L3NtYy9zbWNfY29yZS5jLTE2NzktXHRcdFx0fVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xNzU3PXZvaWQgc21jcl9wb3J0X2FkZChzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGlicG9ydClcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTc4NS0gKi9cbm5ldC9zbWMvc21jX2NvcmUuYzoxNzg2OnN0YXRpYyB2b2lkIHNtY3JfbGlua19kb3duKHN0cnVjdCBzbWNfbGluayAqbG5rKVxubmV0L3NtYy9zbWNfY29yZS5jLTE3ODcte1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xODI2LS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGxnci1cdTAwM2VsbGNfY29uZl9tdXRleCBsb2NrICovXG5uZXQvc21jL3NtY19jb3JlLmM6MTgyNzp2b2lkIHNtY3JfbGlua19kb3duX2NvbmQoc3RydWN0IHNtY19saW5rICpsbmspXG5uZXQvc21jL3NtY19jb3JlLmMtMTgyOC17XG5uZXQvc21jL3NtY19jb3JlLmMtMTgyOS1cdGlmIChzbWNfbGlua19kb3duaW5nKFx1MDAyNmxuay1cdTAwM2VzdGF0ZSkpIHtcbm5ldC9zbWMvc21jX2NvcmUuYzoxODMwOlx0XHR0cmFjZV9zbWNyX2xpbmtfZG93bihsbmssIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG5uZXQvc21jL3NtY19jb3JlLmM6MTgzMTpcdFx0c21jcl9saW5rX2Rvd24obG5rKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xODMyLVx0fVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xODM1LS8qIHdpbGwgZ2V0IHRoZSBsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXggbG9jayAqL1xubmV0L3NtYy9zbWNfY29yZS5jOjE4MzY6dm9pZCBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHN0cnVjdCBzbWNfbGluayAqbG5rKVxubmV0L3NtYy9zbWNfY29yZS5jLTE4Mzcte1xubmV0L3NtYy9zbWNfY29yZS5jLTE4MzgtXHRpZiAoc21jX2xpbmtfZG93bmluZyhcdTAwMjZsbmstXHUwMDNlc3RhdGUpKSB7XG5uZXQvc21jL3NtY19jb3JlLmM6MTgzOTpcdFx0dHJhY2Vfc21jcl9saW5rX2Rvd24obG5rLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xubmV0L3NtYy9zbWNfY29yZS5jLTE4NDAtXHRcdHNtY3JfbGlua19ob2xkKGxuayk7IC8qIHNtY3JfbGlua19wdXQgaW4gbGlua19kb3duX3dyayAqL1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuYz0xODQ2PXZvaWQgc21jcl9wb3J0X2VycihzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGlicG9ydClcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTg2MS1cdFx0XHQgICAgbG5rLVx1MDAzZXNtY2liZGV2ID09IHNtY2liZGV2IFx1MDAyNlx1MDAyNiBsbmstXHUwMDNlaWJwb3J0ID09IGlicG9ydClcbm5ldC9zbWMvc21jX2NvcmUuYzoxODYyOlx0XHRcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsbmspO1xubmV0L3NtYy9zbWNfY29yZS5jLTE4NjMtXHRcdH1cbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTg2Nz1zdGF0aWMgdm9pZCBzbWNfbGlua19kb3duX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xODc2LVx0ZG93bl93cml0ZShcdTAwMjZsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xubmV0L3NtYy9zbWNfY29yZS5jOjE4Nzc6XHRzbWNyX2xpbmtfZG93bihsaW5rKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xODc4LVx0dXBfd3JpdGUoXHUwMDI2bGdyLVx1MDAzZWxsY19jb25mX211dGV4KTtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmg9NjE2PXN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbm5ldC9zbWMvc21jX2NvcmUuaC02MTctXHRcdFx0XHQgIHN0cnVjdCBzbWNfbGluayAqZnJvbV9sbmssIGJvb2wgaXNfZGV2X2Vycik7XG5uZXQvc21jL3NtY19jb3JlLmg6NjE4OnZvaWQgc21jcl9saW5rX2Rvd25fY29uZChzdHJ1Y3Qgc21jX2xpbmsgKmxuayk7XG5uZXQvc21jL3NtY19jb3JlLmg6NjE5OnZvaWQgc21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChzdHJ1Y3Qgc21jX2xpbmsgKmxuayk7XG5uZXQvc21jL3NtY19jb3JlLmgtNjIwLWludCBzbWNfbmxfZ2V0X3N5c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTI4OD1zdGF0aWMgdm9pZCBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTMwNy1cdGlmIChyYykge1xubmV0L3NtYy9zbWNfbGxjLmM6MTMwODpcdFx0c21jcl9saW5rX2Rvd25fY29uZChsbmtfbmV3KTtcbm5ldC9zbWMvc21jX2xsYy5jLTEzMDktXHRcdGdvdG8gb3V0X2ZyZWU7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTMxMy1cdGlmICghcWVudHJ5KSB7XG5uZXQvc21jL3NtY19sbGMuYzoxMzE0Olx0XHRzbWNyX2xpbmtfZG93bl9jb25kKGxua19uZXcpO1xubmV0L3NtYy9zbWNfbGxjLmMtMTMxNS1cdFx0Z290byBvdXRfZnJlZTtcbi0tXG5uZXQvc21jL3NtY19sbGMuYz0yMTE1PXN0YXRpYyB2b2lkIHNtY19sbGNfdGVzdGxpbmtfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMjEzOC1cdGlmIChyYyBcdTAwM2M9IDApIHtcbm5ldC9zbWMvc21jX2xsYy5jOjIxMzk6XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG5uZXQvc21jL3NtY19sbGMuYy0yMTQwLVx0XHRyZXR1cm47XG4tLVxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5jPTg9RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKHNtY19yeF9yZWN2bXNnKTtcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuYzo5OkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChzbWNyX2xpbmtfZG93bik7XG4tLVxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5oPTc4PURFRklORV9FVkVOVChzbWNfbXNnX2V2ZW50LCBzbWNfcnhfcmVjdm1zZyxcbi0tXG5uZXQvc21jL3NtY190cmFjZXBvaW50LmgtODQtXG5uZXQvc21jL3NtY190cmFjZXBvaW50Lmg6ODU6VFJBQ0VfRVZFTlQoc21jcl9saW5rX2Rvd24sXG5uZXQvc21jL3NtY190cmFjZXBvaW50LmgtODYtXG4tLVxubmV0L3NtYy9zbWNfdHguYz0zMTc9c3RhdGljIGludCBzbWNfdHhfcmRtYV93cml0ZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4sIGludCBwZWVyX3JtYmVfb2Zmc2V0LFxuLS1cbm5ldC9zbWMvc21jX3R4LmMtMzM0LVx0aWYgKHJjKVxubmV0L3NtYy9zbWNfdHguYzozMzU6XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG5uZXQvc21jL3NtY190eC5jLTMzNi1cdHJldHVybiByYztcbi0tXG5uZXQvc21jL3NtY193ci5jPTc3PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfd3JfdHhfcHJvY2Vzc19jcWUoc3RydWN0IGliX3djICp3Yylcbi0tXG5uZXQvc21jL3NtY193ci5jLTEyOC1cdFx0LyogdGVybWluYXRlIGxpbmsgKi9cbm5ldC9zbWMvc21jX3dyLmM6MTI5Olx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xubmV0L3NtYy9zbWNfd3IuYy0xMzAtXHR9XG4tLVxubmV0L3NtYy9zbWNfd3IuYz0xOTU9aW50IHNtY193cl90eF9nZXRfZnJlZV9zbG90KHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY193ci5jLTIyMi1cdFx0XHQvKiB0aW1lb3V0IC0gdGVybWluYXRlIGxpbmsgKi9cbm5ldC9zbWMvc21jX3dyLmM6MjIzOlx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG5uZXQvc21jL3NtY193ci5jLTIyNC1cdFx0XHRyZXR1cm4gLUVQSVBFO1xuLS1cbm5ldC9zbWMvc21jX3dyLmM9MzA0PWludCBzbWNfd3JfdHhfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwcml2KVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMzE0LVx0XHRzbWNfd3JfdHhfcHV0X3Nsb3QobGluaywgcHJpdik7XG5uZXQvc21jL3NtY193ci5jOjMxNTpcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcbm5ldC9zbWMvc21jX3dyLmMtMzE2LVx0fVxuLS1cbm5ldC9zbWMvc21jX3dyLmM9MzIwPWludCBzbWNfd3JfdHhfdjJfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwcml2LFxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMzMwLVx0XHRzbWNfd3JfdHhfcHV0X3Nsb3QobGluaywgcHJpdik7XG5uZXQvc21jL3NtY193ci5jOjMzMTpcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcbm5ldC9zbWMvc21jX3dyLmMtMzMyLVx0fVxuLS1cbm5ldC9zbWMvc21jX3dyLmM9MzY2PWludCBzbWNfd3JfcmVnX3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3QgaWJfbXIgKm1yKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtMzg2LVx0XHQvKiB0aW1lb3V0IC0gdGVybWluYXRlIGxpbmsgKi9cbm5ldC9zbWMvc21jX3dyLmM6Mzg3Olx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xubmV0L3NtYy9zbWNfd3IuYy0zODgtXHRcdHJldHVybiAtRVBJUEU7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz00NDk9c3RhdGljIGlubGluZSB2b2lkIHNtY193cl9yeF9wcm9jZXNzX2NxZXMoc3RydWN0IGliX3djIHdjW10sIGludCBudW0pXG4tLVxubmV0L3NtYy9zbWNfd3IuYy00NjYtXHRcdFx0Y2FzZSBJQl9XQ19XUl9GTFVTSF9FUlI6XG5uZXQvc21jL3NtY193ci5jOjQ2NzpcdFx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG5uZXQvc21jL3NtY193ci5jLTQ2OC1cdFx0XHRcdGlmIChsaW5rLVx1MDAzZXdyX3J4X2lkX2NvbXBsID09IGxpbmstXHUwMDNld3JfcnhfaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDU4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNNQyBDb25uZWN0aW9uIFN3aXRjaGluZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIGEgcHJvbWlzaW5nIGFyZWEgZm9yIGludmVzdGlnYXRpb24uIFRoaXMgYHNtY19zd2l0Y2hfY29ubnNgIGZ1bmN0aW9uIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyDigJMgaXQmIzM5O3Mgbm9uLXN0YXRpYywgd2hpY2ggbWVhbnMgaXQgaGFzIGJyb2FkZXIgYWNjZXNzaWJpbGl0eSB3aXRoaW4gdGhlIGNvZGUuIEkgY2FuIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBzZXZlcmFsIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGxvY2F0aW9uczogYHNtY3JfbGlua19kb3duYCwgYHNtY19sbGNfZGVsZXRlX2FzeW1fbGlua2AsIGBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rYCwgYW5kIGBzbWNfbGxjX3Byb2Nlc3Nfc3J2X2RlbGV0ZV9saW5rYC4gVGhpcyBkZWZpbml0ZWx5IG9wZW5zIHVwIHNvbWUgYXZlbnVlcyBmb3IgZXhwbG9pdGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKQmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gVGhlIGZhY3QgdGhhdCBgU01DYCByZWxhdGVzIHRvIGEgc29ja2V0IHByb3RvY29sIGZhbWlseSBpcyBhbHNvIHdvcnRoIG5vdGluZzsgdGhhdCBjb250ZXh0IGNvdWxkIGluZmx1ZW5jZSB0aGUgdHlwZXMgb2YgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gSSYjMzk7bGwgbWFrZSBhIG5vdGUgb2YgdGhhdC4gQW5kLCBvZiBjb3Vyc2UsIEkgc2hvdWxkIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBmb2NhbCBzeW1ib2xzOiBgc21jX3N3aXRjaF9jb25uc2AsIGBzbWNyX2xpbmtfZG93bmAsIGBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmtgLCBgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGlua2AsIGFuZCBgc21jX2xsY19wcm9jZXNzX3Nydl9kZWxldGVfbGlua2AuCgpIb2xkIG9uIGEgbWludXRlLCBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIHN0YXRpYy9ub24tc3RhdGljIHN0YXR1cyBvZiB0aGVzZSBmdW5jdGlvbnMuIExvb2tzIGxpa2UgYHNtY3JfbGlua19kb3duYCBhbmQgYHNtY19sbGNfZGVsZXRlX2FzeW1fbGlua2AgYXJlIHN0YXRpYywgd2hpY2ggbGltaXRzIHRoZWlyIGRpcmVjdCBleHBvc3VyZS4gVGhpcyBtYWtlcyBgc21jX3N3aXRjaF9jb25uc2AgZXZlbiBtb3JlIGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IHdpbGwgYmUgbW9yZSBhY2Nlc3NpYmxlLiBOb3csIEkgbmVlZCB0byBleGFtaW5lIGBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rYCBhbmQgYHNtY19sbGNfcHJvY2Vzc19zcnZfZGVsZXRlX2xpbmtgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdXAgd2l0aCB0aG9zZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19sbGNfcHJvY2Vzc19jbGlfZGVsZXRlX2xpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYz0xNTgyPXZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZClcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNTkzLVxubmV0L3NtYy9zbWNfbGxjLmM6MTU5NDpzdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxubmV0L3NtYy9zbWNfbGxjLmMtMTU5NS17XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTc0MD1zdGF0aWMgdm9pZCBzbWNfbGxjX2RlbGV0ZV9saW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTE3NTEtXHRpZiAobGdyLVx1MDAzZXJvbGUgPT0gU01DX0NMTlQpXG5uZXQvc21jL3NtY19sbGMuYzoxNzUyOlx0XHRzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKGxncik7XG5uZXQvc21jL3NtY19sbGMuYy0xNzUzLVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU01DIENvbm5lY3Rpb24gU3dpdGNoaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBpbml0aWFsIGNvbnRleHQgc2VlbXMgc3RhdGljLCB3aGljaCBpc24mIzM5O3QgZ2l2aW5nIG1lIG11Y2ggdG8gd29yayB3aXRoLiBUaW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gTXkgZm9jdXMgaW1tZWRpYXRlbHkgc2hpZnRzIHRvIGBzbWNfc3dpdGNoX2Nvbm5zYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIE5vdywgbGV0JiMzOTtzIGV4cGxvcmUgYG5ldC9zbWMvc21jX2NvcmUuY2AgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUgdGhhdCBhY3R1YWxseSBjYWxsIGBzbWNfc3dpdGNoX2Nvbm5zYC4gQWhhISBJIHNlZSBgc21jcl9saW5rX2Rvd25fY29uZGAgYW5kIGBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkYC4gVGhlc2UgYXJlbiYjMzk7dCBzdGF0aWMsIGFuZCB0aGV5JiMzOTtyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSBjYWxsIGBzbWNyX2xpbmtfZG93bmAsIHdoaWNoIGluIHR1cm4sIGNhbGxzIGBzbWNfc3dpdGNoX2Nvbm5zYC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGF2ZW51ZSBvZiBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNyX2xpbmtfZG93bl9jb25kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jPTEwOTU9c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMTY3LWVycl9vdXQ6XG5uZXQvc21jL3NtY19jb3JlLmM6MTE2ODpcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQodG9fbG5rKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xMTY5LVx0c21jX3dyX3R4X2xpbmtfcHV0KHRvX2xuayk7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE2NjM9dm9pZCBzbWNfc21jcl90ZXJtaW5hdGVfYWxsKHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldilcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTY3Ny1cdFx0XHRcdGlmIChsZ3ItXHUwMDNlbG5rW2ldLnNtY2liZGV2ID09IHNtY2liZGV2KVxubmV0L3NtYy9zbWNfY29yZS5jOjE2Nzg6XHRcdFx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQoXHUwMDI2bGdyLVx1MDAzZWxua1tpXSk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTY3OS1cdFx0XHR9XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE4MjYtLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgbGdyLVx1MDAzZWxsY19jb25mX211dGV4IGxvY2sgKi9cbm5ldC9zbWMvc21jX2NvcmUuYzoxODI3OnZvaWQgc21jcl9saW5rX2Rvd25fY29uZChzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbm5ldC9zbWMvc21jX2NvcmUuYy0xODI4LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTgzNS0vKiB3aWxsIGdldCB0aGUgbGdyLVx1MDAzZWxsY19jb25mX211dGV4IGxvY2sgKi9cbm5ldC9zbWMvc21jX2NvcmUuYzoxODM2OnZvaWQgc21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbm5ldC9zbWMvc21jX2NvcmUuYy0xODM3LXtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmM9MTg0Nj12b2lkIHNtY3JfcG9ydF9lcnIoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE4NjEtXHRcdFx0ICAgIGxuay1cdTAwM2VzbWNpYmRldiA9PSBzbWNpYmRldiBcdTAwMjZcdTAwMjYgbG5rLVx1MDAzZWlicG9ydCA9PSBpYnBvcnQpXG5uZXQvc21jL3NtY19jb3JlLmM6MTg2MjpcdFx0XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobG5rKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0xODYzLVx0XHR9XG4tLVxubmV0L3NtYy9zbWNfY29yZS5oPTYxNj1zdHJ1Y3Qgc21jX2xpbmsgKnNtY19zd2l0Y2hfY29ubnMoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG5uZXQvc21jL3NtY19jb3JlLmgtNjE3LVx0XHRcdFx0ICBzdHJ1Y3Qgc21jX2xpbmsgKmZyb21fbG5rLCBib29sIGlzX2Rldl9lcnIpO1xubmV0L3NtYy9zbWNfY29yZS5oOjYxODp2b2lkIHNtY3JfbGlua19kb3duX2NvbmQoc3RydWN0IHNtY19saW5rICpsbmspO1xubmV0L3NtYy9zbWNfY29yZS5oOjYxOTp2b2lkIHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQoc3RydWN0IHNtY19saW5rICpsbmspO1xubmV0L3NtYy9zbWNfY29yZS5oLTYyMC1pbnQgc21jX25sX2dldF9zeXNfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTEyODg9c3RhdGljIHZvaWQgc21jX2xsY19kZWxldGVfYXN5bV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTEzMDctXHRpZiAocmMpIHtcbm5ldC9zbWMvc21jX2xsYy5jOjEzMDg6XHRcdHNtY3JfbGlua19kb3duX2NvbmQobG5rX25ldyk7XG5uZXQvc21jL3NtY19sbGMuYy0xMzA5LVx0XHRnb3RvIG91dF9mcmVlO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTEzMTMtXHRpZiAoIXFlbnRyeSkge1xubmV0L3NtYy9zbWNfbGxjLmM6MTMxNDpcdFx0c21jcl9saW5rX2Rvd25fY29uZChsbmtfbmV3KTtcbm5ldC9zbWMvc21jX2xsYy5jLTEzMTUtXHRcdGdvdG8gb3V0X2ZyZWU7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MjExNT1zdGF0aWMgdm9pZCBzbWNfbGxjX3Rlc3RsaW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTIxMzgtXHRpZiAocmMgXHUwMDNjPSAwKSB7XG5uZXQvc21jL3NtY19sbGMuYzoyMTM5Olx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xubmV0L3NtYy9zbWNfbGxjLmMtMjE0MC1cdFx0cmV0dXJuO1xuLS1cbm5ldC9zbWMvc21jX3R4LmM9MzE3PXN0YXRpYyBpbnQgc21jX3R4X3JkbWFfd3JpdGUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLCBpbnQgcGVlcl9ybWJlX29mZnNldCxcbi0tXG5uZXQvc21jL3NtY190eC5jLTMzNC1cdGlmIChyYylcbm5ldC9zbWMvc21jX3R4LmM6MzM1Olx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xubmV0L3NtYy9zbWNfdHguYy0zMzYtXHRyZXR1cm4gcmM7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz03Nz1zdGF0aWMgaW5saW5lIHZvaWQgc21jX3dyX3R4X3Byb2Nlc3NfY3FlKHN0cnVjdCBpYl93YyAqd2MpXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0xMjgtXHRcdC8qIHRlcm1pbmF0ZSBsaW5rICovXG5uZXQvc21jL3NtY193ci5jOjEyOTpcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcbm5ldC9zbWMvc21jX3dyLmMtMTMwLVx0fVxuLS1cbm5ldC9zbWMvc21jX3dyLmM9MTk1PWludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4tLVxubmV0L3NtYy9zbWNfd3IuYy0yMjItXHRcdFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXG5uZXQvc21jL3NtY193ci5jOjIyMzpcdFx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xubmV0L3NtYy9zbWNfd3IuYy0yMjQtXHRcdFx0cmV0dXJuIC1FUElQRTtcbi0tXG5uZXQvc21jL3NtY193ci5jPTMwND1pbnQgc21jX3dyX3R4X3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdilcbi0tXG5uZXQvc21jL3NtY193ci5jLTMxNC1cdFx0c21jX3dyX3R4X3B1dF9zbG90KGxpbmssIHByaXYpO1xubmV0L3NtYy9zbWNfd3IuYzozMTU6XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG5uZXQvc21jL3NtY193ci5jLTMxNi1cdH1cbi0tXG5uZXQvc21jL3NtY193ci5jPTMyMD1pbnQgc21jX3dyX3R4X3YyX3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdixcbi0tXG5uZXQvc21jL3NtY193ci5jLTMzMC1cdFx0c21jX3dyX3R4X3B1dF9zbG90KGxpbmssIHByaXYpO1xubmV0L3NtYy9zbWNfd3IuYzozMzE6XHRcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XG5uZXQvc21jL3NtY193ci5jLTMzMi1cdH1cbi0tXG5uZXQvc21jL3NtY193ci5jPTM2Nj1pbnQgc21jX3dyX3JlZ19zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IGliX21yICptcilcbi0tXG5uZXQvc21jL3NtY193ci5jLTM4Ni1cdFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXG5uZXQvc21jL3NtY193ci5jOjM4NzpcdFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcbm5ldC9zbWMvc21jX3dyLmMtMzg4LVx0XHRyZXR1cm4gLUVQSVBFO1xuLS1cbm5ldC9zbWMvc21jX3dyLmM9NDQ5PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfd3JfcnhfcHJvY2Vzc19jcWVzKHN0cnVjdCBpYl93YyB3Y1tdLCBpbnQgbnVtKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtNDY2LVx0XHRcdGNhc2UgSUJfV0NfV1JfRkxVU0hfRVJSOlxubmV0L3NtYy9zbWNfd3IuYzo0Njc6XHRcdFx0XHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xubmV0L3NtYy9zbWNfd3IuYy00NjgtXHRcdFx0XHRpZiAobGluay1cdTAwM2V3cl9yeF9pZF9jb21wbCA9PSBsaW5rLVx1MDAzZXdyX3J4X2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEZvY3VzOiBTTUMgYW5kIExpbmsgRG93biBDb25kaXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGBzbWNyX2xpbmtfZG93bl9jb25kYCBhbmQgYHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWRgLiBUaGV5JiMzOTtyZSBub24tc3RhdGljLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB0aGV5IGFyZSBlbnRyeSBwb2ludHMuIEFuZCB0aGV5JiMzOTtyZSBlc3NlbnRpYWxseSB0aGUgZ2F0ZWtlZXBlcnMgdG8gYm90aCBgc21jcl9saW5rX2Rvd25gIGFuZCBgc21jX3N3aXRjaF9jb25uc2AuIE1ha2VzIHNlbnNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29udHJvbCBmdW5jdGlvbnMgd29yayBpbiBvcmRlciB0byB1bmRlcnN0YW5kIHRoZSBncmVhdGVyIHN5c3RlbSBiZWhhdmlvci4KClRoZXJlZm9yZSwgSSYjMzk7bGwgaW5jbHVkZSBgc21jX3N3aXRjaF9jb25uc2AsIGBzbWNyX2xpbmtfZG93bl9jb25kYCwgYW5kIGBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkYCBpbiBgRm9jdXNTeW1ib2xzYC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcuCgpOb3csIGJhc2VkIG9uIHdoYXQgSSBzZWUgaGVyZSwgaXQgc2VlbXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUgaXMgYFNNQ2AuIFRoYXQgbWFrZXMgc2Vuc2UgaW4gdGhpcyBjb250ZXh0LiBCdXQsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXMgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWcgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IExldCBtZSB0YWtlIGEgbG9vay4uLiBsZXQmIzM5O3MgY2hlY2sgdG8gc2VlIGlmIGBTTUNgIGl0c2VsZiBkZXBlbmRzIG9uIGFueXRoaW5nIGVsc2UuIFRoaXMgbWlnaHQgb3BlbiB1cCBhIGJyb2FkZXIgdmlldyBvZiByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xubmV0L3NtYy9LY29uZmlnLTUtXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gU01DXG5uZXQvc21jL0tjb25maWctMTctXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTIzPWNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xubmV0L3NtYy9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBTTUMgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMXG5uZXQvc21jL0tjb25maWctMjYtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqRGVwZW5kZW5jaWVzIGFuZCBDbGFyaWZpY2F0aW9uKioKClJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgU01DYCBzeXN0ZW0sIGFuZCBpdCYjMzk7cyBtYWtpbmcgYSBzdGF0ZW1lbnQgYWJvdXQgaXRzIGRlcGVuZGVuY2llcy4gT2theSwgaXQgKmRlcGVuZHMqIG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQuLi4gaGFuZyBvbiwgaXMgdGhhdCByaWdodD8gYERJQlNgPyBUaGF0IGZlZWxzIGEgYml0IG9mZi4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQuIE5vLCB3YWl0LCBpdCBkZWZpbml0ZWx5IHNhaWQgdGhhdCBpdCBkZXBlbmRzIG9uIGBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgLiBJIG5lZWQgdG8gcmVyZWFkIHRoaXMuLi4gb2theSwganVzdCB3YW50IHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZGVwZW5kZW5jeSBncmFwaCBpcyBhY2N1cmF0ZS4gSXQmIzM5O3MgYSBrZXkgY29tcG9uZW50LCBzbyBJJiMzOTtsbCByZXZpZXcgdGhlIGZpbGUgbm93IHRvIGNsYXJpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNNQ1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBTTUMtUiBwcm92aWRlcyBhIFwmIzM0O3NvY2tldHMgb3ZlciBSRE1BXCYjMzQ7IHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcbiAgIDc6XHRcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXG4gICA4Olx0XHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXG4gICA5Olx0XHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcbiAgMTA6XHRcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBTTUNfRElBR1xuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gU01DXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXG4gIDE5Olx0XHQgIHNtY3NzLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYzMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZGl0aW9uLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhpbmssICYjMzQ7QWhhISBgZGVwZW5kcyBvbiBJTkVUICZhbXA7JmFtcDsgSU5GSU5JQkFORCAmYW1wOyZhbXA7IERJQlNgJiMzNDsuIEJ1dCB0aGVuLCB0aGUgYERJQlNgIGp1bXBzIG91dCBhdCBtZS4gSXMgdGhhdCBldmVuIGEgKnJlYWwqIGNvbmZpZyBvcHRpb24/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSGFuZyBvbiwgcGVyaGFwcyBpdCYjMzk7cyByZWxhdGVkIHRvIGBJUFY2YD8gR290dGEgY2hlY2sgdGhhdCB0b28uIFJpZ2h0LCBsZXQgbWUgZ28gZGlnZ2luZyBpbiBgbmV0L3NtYy9LY29uZmlnYCB0byBzZWUgaWYgYERJQlNgIGlzIGRlZmluZWQgaW4gcmVsYXRpb24gdG8gdGhlIHJlbGV2YW50IGludGVyZmFjZXMuIEFjdHVhbGx5LCB0aGUgS2NvbmZpZyBjb25maXJtcyBpdCAqZG9lcyogZGVwZW5kIG9uIGBESUJTYC4gSG9sZCBvbiwgbWF5YmUgSSYjMzk7bSBtaXNyZWFkaW5nIHRoaXMuIERvZXMgaXQgaGF2ZSBzb21ldGhpbmcgdG8gZG8gd2l0aCBgSVBWNmA/IExldCBtZSByZXZpc2l0IGBuZXQvc21jL0tjb25maWdgLiBBaCwgYERJQlNgIGlzbiYjMzk7dCBhIHN0YW5kYXJkIGNvbmZpZyBlbnRyeSAtIGhtbSwgY291bGQgaXQgYmUgcmVsYXRlZCB0byBgQ1JZUFRPYCBpbnN0ZWFkPyBCYWNrIHRvIGBuZXQvc21jL0tjb25maWdgIGluIHVwc3RyZWFtIGZvciB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIFdhaXQsIHdoeSBpcyBgRElCU2AgaW4gdGhpcyBjb250ZXh0PyBObywgd2FpdCwgY291bGQgdGhpcyBiZSBhYm91dCBgSVBWNmA/IEkgaGF2ZSB0byBnbyBiYWNrIGFuZCBjaGVjay4gSXQmIzM5O3MgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBwdXp6bGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24gSU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xubmV0L3NtYy9LY29uZmlnLTUtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTgzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgeW91ciBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRlY29kaW5nIHRoZSBBY3JvbnltOiBESUJTKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuICpESUJTKj8gVGhhdCB0ZXJtIGZlZWxzIGEgbGl0dGxlIG91dCBvZiBwbGFjZSwgb3IgYXQgbGVhc3QgdW5mYW1pbGlhciBpbiB0aGlzIGNvbnRleHQuIEJlZm9yZSBJIGNvbnRpbnVlIGFuYWx5emluZyB3aGF0ZXZlciYjMzk7cyBpbiBmcm9udCBvZiBtZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNwZWNpZmljIGFjcm9ueW0gKkRJQlMqIG1lYW5zLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpdHMgZGVmaW5pdGlvbiB0byBlbnN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gR290dGEgZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFuZCBtYWludGFpbiB0aGF0IGNsYXJpdHkgb2YgZm9jdXMuIExldCBtZSBxdWlja2x5IGxvb2sgaXQgdXAgYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG9uIHRoZSByaWdodCB0cmFjayBiZWZvcmUgZGl2aW5nIGRlZXBlci4gSSBjYW4mIzM5O3QgYWZmb3JkIGFueSBtaXNpbnRlcnByZXRhdGlvbnMsIGVzcGVjaWFsbHkgaWYgdGhlIHN1YnNlcXVlbnQgbWF0ZXJpYWwgaGluZ2VzIG9uIGEgc3BlY2lmaWMgbWVhbmluZyBmb3IgKkRJQlMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRElCUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cbmRyaXZlcnMvZGlicy9LY29uZmlnLTE1LVx0Ym9vbCBcJiMzNDtJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MTEKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVjaXNpb25zIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBzb2NrZXQgcmVmZXJlbmNlIGxlYWsgaW4gdGhlIGBTTUNgIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYHNtY19zd2l0Y2hfY29ubnNgLiBSaWdodCwgYERJQlNgIGlzIERpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZy4gR290IGl0LiBTbyBJIG5lZWQgdG8gc2V0IHVwIHRoZSBjb25maWd1cmF0aW9ucyBwcm9wZXJseSB0byBoaXQgdGhpcy4gVGhlIHBhdGNoIG1lbnRpb25zIGBTTUNgLCBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYC4gYElORVRgIGlzIGFsd2F5cyB0aGVyZSwgbm8gcHJvYmxlbS4gSSYjMzk7bGwgZGVmaW5pdGVseSBlbmFibGUgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYC4gQnV0IHdhaXQsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBgU01DYCBhbmQgYElORklOSUJBTkRgIGFyZSBib3RoIGVuYWJsZWQuIEFoLCB5ZXMsIGBTTUNgIGRvZXMgZGVwZW5kIG9uIGBJTkZJTklCQU5EYC4gR29vZCwgZ29vZC4gU28gdGhlIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFsmIzM0O1NNQyYjMzQ7LCAmIzM0O0lORklOSUJBTkQmIzM0OywgJiMzNDtESUJTJiMzNDtdYC4gSnVzdCB0byBiZSBzYWZlLCBJJiMzOTtsbCBpbmNsdWRlIGBESUJTYC4gSXQgbWlnaHQgYmUgYSBjdXN0b20gY29uZmlnIGluIHRoaXMgcGFydGljdWxhciBrZXJuZWwgdHJlZSwgc28gbGV0JiMzOTtzIGtlZXAgaXQgaW4gdGhlcmUuCgpTbywgbGV0JiMzOTtzIHN1bW1hcml6ZSB3aGF0IEkmIzM5O3ZlIGdvdDoKCmBXb3J0aEZ1enppbmc6IHRydWVgIC0gYmVjYXVzZSB0aGlzIGlzIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIHdpdGggYSBrbm93biBsZWFrLgpgUmVhc29uaW5nOiBUaGUgcGF0Y2ggZml4ZXMgYSBzb2NrZXQgcmVmZXJlbmNlIGxlYWsgaW4gdGhlIFNNQyBjb3JlIG5ldHdvcmtpbmcgY29kZSAoc21jX3N3aXRjaF9jb25ucykgd2hlbiBzbWNfY2RjX2dldF9mcmVlX3Nsb3QgZmFpbHMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIHRoZSBTTUMgcHJvdG9jb2wgZmFtaWx5LmAgLSBUaGF0IGlzIHRoZSBjb3JlIGxvZ2ljIGFuZCBleHBsYWlucyB3aHkgaXQmIzM5O3Mgd29ydGggZnV6emluZy4KYEZvY3VzU3ltYm9sczogc21jX3N3aXRjaF9jb25ucywgc21jcl9saW5rX2Rvd25fY29uZCwgc21jcl9saW5rX2Rvd25fY29uZF9zY2hlZGAgLSBPa2F5LCB0aG9zZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gd2F0Y2guCmBFbmFibGVDb25maWdzOiBTTUMsIElORklOSUJBTkQsIERJQlNgIC0gVGhhdCB3aWxsIGdldCB1cyB0aGVyZS4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgc21jX3N3aXRjaF9jb25uc2AgaXMgdGhlIG1haW4gdGFyZ2V0LiBZZXAsIGxvb2tzIGdvb2QuIEFscmlnaHQsIHRpbWUgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19zd2l0Y2hfY29ubnMmIzM0OywKICAgICYjMzQ7c21jcl9saW5rX2Rvd25fY29uZCYjMzQ7LAogICAgJiMzNDtzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBTTUMgY29yZSBuZXR3b3JraW5nIGNvZGUgKHNtY19zd2l0Y2hfY29ubnMpIHdoZW4gc21jX2NkY19nZXRfZnJlZV9zbG90IGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciB0aGUgU01DIHByb3RvY29sIGZhbWlseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19zd2l0Y2hfY29ubnMmIzM0OywKICAgICYjMzQ7c21jcl9saW5rX2Rvd25fY29uZCYjMzQ7LAogICAgJiMzNDtzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBTTUMgY29yZSBuZXR3b3JraW5nIGNvZGUgKHNtY19zd2l0Y2hfY29ubnMpIHdoZW4gc21jX2NkY19nZXRfZnJlZV9zbG90IGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciB0aGUgU01DIHByb3RvY29sIGZhbWlseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgYHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2VzaylgIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCgpYCBmYWlscy4gVGhpcyByZXNvbHZlcyBhIHJlZmVyZW5jZSBjb3VudCBsZWFrIChtZW1vcnkgbGVhaykgZm9yIHRoZSBzb2NrZXQgc3RydWN0dXJlLiBUaGUgdmFyaWFibGVzIHBvcHVsYXRlZCBieSBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIChgd3JfYnVmYCBhbmQgYHBlbmRgKSBhcmUgY29ycmVjdGx5IGd1YXJkZWQgYnkgdGhlIGBpZiAoIXJjKWAgY2hlY2ssIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHVzZWQuIE1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IGttZW1sZWFrLCBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyBhcmUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDJiNDFjZDQwMjAwMmU5MDMyYzRhMjlmYTNlMzc1NmZmYjE0NjQwOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDE1OjQwOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jCmluZGV4IGI0MjA4Y2IxODZjNWUuLjJmN2Y5ZDQ2OTI3MjAgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19jb3JlLmMKQEAgLTExNDgsMTMgJiM0MzsxMTQ4LDEzIEBAIHN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwKIAkJcmVhZF91bmxvY2tfYmgoJmFtcDtsZ3ItJmd0O2Nvbm5zX2xvY2spOwogCQkvKiBwcmUtZmV0Y2ggYnVmZmVyIG91dHNpZGUgb2Ygc2VuZF9sb2NrLCBtaWdodCBzbGVlcCAqLwogCQlyYyA9IHNtY19jZGNfZ2V0X2ZyZWVfc2xvdChjb25uLCB0b19sbmssICZhbXA7d3JfYnVmLCBOVUxMLCAmYW1wO3BlbmQpOwotCQlpZiAocmMpCi0JCQlnb3RvIGVycl9vdXQ7Ci0JCS8qIGF2b2lkIHJhY2Ugd2l0aCBzbWNyX3R4X3NuZGJ1Zl9ub25lbXB0eSgpICovCi0JCXNwaW5fbG9ja19iaCgmYW1wO2Nvbm4tJmd0O3NlbmRfbG9jayk7Ci0JCXNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoY29ubiwgdG9fbG5rKTsKLQkJcmMgPSBzbWNfc3dpdGNoX2N1cnNvcihzbWMsIHBlbmQsIHdyX2J1Zik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y29ubi0mZ3Q7c2VuZF9sb2NrKTsKJiM0MzsJCWlmICghcmMpIHsKJiM0MzsJCQkvKiBhdm9pZCByYWNlIHdpdGggc21jcl90eF9zbmRidWZfbm9uZW1wdHkoKSAqLwomIzQzOwkJCXNwaW5fbG9ja19iaCgmYW1wO2Nvbm4tJmd0O3NlbmRfbG9jayk7CiYjNDM7CQkJc21jX3N3aXRjaF9saW5rX2FuZF9jb3VudChjb25uLCB0b19sbmspOwomIzQzOwkJCXJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpOwomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y29ubi0mZ3Q7c2VuZF9sb2NrKTsKJiM0MzsJCX0KIAkJc29ja19wdXQoJmFtcDtzbWMtJmd0O3NrKTsKIAkJaWYgKHJjKQogCQkJZ290byBlcnJfb3V0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBQYXRjaCBpbiBTTUMgQ29yZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHNtY19zd2l0Y2hfY29ubnNgIGluIGBuZXQvc21jL3NtY19jb3JlLmNgLiBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLCBidXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgaW1wb3J0YW50LiBUaGV5JiMzOTt2ZSBzaGlmdGVkIHRoZSBlcnJvciBoYW5kbGluZyBmb3IgYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdGAuIFByZXZpb3VzbHksIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJuZWQgYW4gZXJyb3IgKGByYyAhPSAwYCksIHRoZSBjb2RlIHdvdWxkIGp1bXAgdG8gYGVycl9vdXRgICpiZWZvcmUqIGRlY3JlbWVudGluZyB0aGUgc29ja2V0JiMzOTtzIHJlZmVyZW5jZSBjb3VudCB3aXRoIGBzb2NrX3B1dCgmYW1wO3NtYy0mZ3Q7c2spYC4gTm93LCB0aGUgYHNvY2tfcHV0YCBpcyBhbHdheXMgY2FsbGVkLCByZWdhcmRsZXNzIG9mIHRoZSBgc21jX2NkY19nZXRfZnJlZV9zbG90YCByZXR1cm4gdmFsdWUuCgpFc3NlbnRpYWxseSwgdGhleSYjMzk7cmUgZml4aW5nIGEgcmVmZXJlbmNlIGxlYWshIFdpdGhvdXQgdGhlIGBzb2NrX3B1dGAsIHRoZSByZWZlcmVuY2UgY291bnQgd291bGRuJiMzOTt0IGJlIGRlY3JlbWVudGVkLCBhbmQgdGhlIHNvY2tldCB3b3VsZG4mIzM5O3QgYmUgcmVsZWFzZWQsIGxlYWRpbmcgdG8gYSBtZW1vcnkgbGVhay4gVGhpcyBpcyB0aGUga2luZCBvZiB0aGluZyB0aGF0IGttZW1sZWFrIHdvdWxkIHBpY2sgdXAsIG5vdCBuZWNlc3NhcmlseSBLTVNBTiwgYXMgdGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgaGVyZS4gYHdyX2J1ZmAgYW5kIGBwZW5kYCBtaWdodCBiZSB1bmluaXRpYWxpemVkIGlmIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgIGZhaWxzLCBidXQgdGhleSYjMzk7cmUgbmV2ZXIgdXNlZCBpZiBgcmNgIGlzIG5vbi16ZXJvLCBzbyB0aGVyZSYjMzk7cyBubyByaXNrIG9mIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkgd2VyZSBza2lwcGluZyBhIGNyaXRpY2FsIGBzb2NrX3B1dGAgY2FsbC4KClRoaXMgaXMgYSBnb29kIGNhdGNoLiBBbHdheXMgaW1wb3J0YW50IHRvIGRvdWJsZS1jaGVjayByZWZlcmVuY2UgY291bnRpbmcsIGVzcGVjaWFsbHkgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIHNpZGUgZWZmZWN0cyBidXQgbG9va3MgZ29vZCBzbyBmYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19zd2l0Y2hfY29ubnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jPTEwODM9dm9pZCBzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubixcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTA5NC1cbm5ldC9zbWMvc21jX2NvcmUuYzoxMDk1OnN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDk2LVx0XHRcdFx0ICBzdHJ1Y3Qgc21jX2xpbmsgKmZyb21fbG5rLCBib29sIGlzX2Rldl9lcnIpXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTE3OTQtXG5uZXQvc21jL3NtY19jb3JlLmM6MTc5NTpcdHRvX2xuayA9IHNtY19zd2l0Y2hfY29ubnMobGdyLCBsbmssIHRydWUpO1xubmV0L3NtYy9zbWNfY29yZS5jLTE3OTYtXHRpZiAoIXRvX2xuaykgeyAvKiBubyBiYWNrdXAgbGluayBhdmFpbGFibGUgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUxMwoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqUGF0Y2ggQW5hbHlzaXMgYW5kIE1lbW9yeSBTYWZldHkgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeC4gU2VlbXMgbGlrZSBhIG1pc3NpbmcgYHNvY2tfcHV0YCBvbiBhbiBlcnJvciBwYXRoLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIHBvdGVudGlhbCByZWZlcmVuY2UgbGVhay4gR29vZCBjYXRjaC4gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdCBmdXJ0aGVyLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSByaXNrcy4gS01TQU4gaXMgbXkgcHJpbWFyeSBjb25jZXJuIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gS0FTQU4gaXMgdGhlcmUgdG8gZGV0ZWN0IHRoZSBuYXN0aWVyIHN0dWZmIOKAkyBvdXQtb2YtYm91bmRzIGFjY2VzcywgdXNlLWFmdGVyLWZyZWUsIHRoaW5ncyBsaWtlIHRoYXQuIFRoZW4sIG9mIGNvdXJzZSwga21lbWxlYWsgaXMgYWx3YXlzIHdhdGNoaW5nIG91dCBmb3IgcGVyc2lzdGVudCBtZW1vcnkgbGVha3MuCgpTaW5jZSB0aGlzIGZpeGVzIGEgbGVhaywgYW5kIGRvZXNuJiMzOTt0IHNlZW0gdG8gdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB0aGUgcmlzayBvZiBLTVNBTiBmaW5kaW5nIGFueXRoaW5nIGlzIG5lZ2xpZ2libGUuIEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpbiBzYXlpbmcgKipOZWVkc0tNU0FOIGlzIGZhbHNlKiogZm9yIHRoaXMgb25lLiBUaGlzIGlzIGEgc29saWQsIGNsZWFuIGJ1ZyBmaXggdGhhdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBvbiBpdHMgb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgYHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2VzaylgIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCgpYCBmYWlscy4gVGhpcyByZXNvbHZlcyBhIHJlZmVyZW5jZSBjb3VudCBsZWFrIChtZW1vcnkgbGVhaykgZm9yIHRoZSBzb2NrZXQgc3RydWN0dXJlLiBUaGUgdmFyaWFibGVzIHBvcHVsYXRlZCBieSBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIChgd3JfYnVmYCBhbmQgYHBlbmRgKSBhcmUgY29ycmVjdGx5IGd1YXJkZWQgYnkgdGhlIGBpZiAoIXJjKWAgY2hlY2ssIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHVzZWQuIE1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IGttZW1sZWFrLCBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyBhcmUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgc29ja19wdXQoXHUwMDI2c21jLVx1MDAzZXNrKWAgb24gdGhlIGVycm9yIHBhdGggd2hlbiBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIGZhaWxzLiBUaGlzIHJlc29sdmVzIGEgcmVmZXJlbmNlIGNvdW50IGxlYWsgKG1lbW9yeSBsZWFrKSBmb3IgdGhlIHNvY2tldCBzdHJ1Y3R1cmUuIFRoZSB2YXJpYWJsZXMgcG9wdWxhdGVkIGJ5IGBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoKWAgKGB3cl9idWZgIGFuZCBgcGVuZGApIGFyZSBjb3JyZWN0bHkgZ3VhcmRlZCBieSB0aGUgYGlmICghcmMpYCBjaGVjaywgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdXNlZC4gTWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWssIGFuZCByZWZlcmVuY2UgY291bnQgaXNzdWVzIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MDoyOC40MzE2ODQ1MTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5MDQ1NTEwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3N3aXRjaF9jb25uc1wiLFxuICAgIFwic21jcl9saW5rX2Rvd25fY29uZFwiLFxuICAgIFwic21jcl9saW5rX2Rvd25fY29uZF9zY2hlZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGBzb2NrX3B1dChcXHUwMDI2c21jLVxcdTAwM2VzaylgIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCgpYCBmYWlscy4gVGhpcyByZXNvbHZlcyBhIHJlZmVyZW5jZSBjb3VudCBsZWFrIChtZW1vcnkgbGVhaykgZm9yIHRoZSBzb2NrZXQgc3RydWN0dXJlLiBUaGUgdmFyaWFibGVzIHBvcHVsYXRlZCBieSBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIChgd3JfYnVmYCBhbmQgYHBlbmRgKSBhcmUgY29ycmVjdGx5IGd1YXJkZWQgYnkgdGhlIGBpZiAoIXJjKWAgY2hlY2ssIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHVzZWQuIE1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IGttZW1sZWFrLCBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyBhcmUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNvY2tldCByZWZlcmVuY2UgbGVhayBpbiB0aGUgU01DIGNvcmUgbmV0d29ya2luZyBjb2RlIChzbWNfc3dpdGNoX2Nvbm5zKSB3aGVuIHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCBmYWlscy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBmb3IgdGhlIFNNQyBwcm90b2NvbCBmYW1pbHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQwOjI4LjQzMTY4OTYwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NzI5MDkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQyYjQxY2Q0MDIwMDJlOTAzMmM0YTI5ZmEzZTM3NTZmZmIxNDY0MDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6NDA6MjYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXFxuaW5kZXggYjQyMDhjYjE4NmM1ZS4uMmY3ZjlkNDY5MjcyMCAxMDA2NDRcXG4tLS0gYS9uZXQvc21jL3NtY19jb3JlLmNcXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmNcXG5AQCAtMTE0OCwxMyArMTE0OCwxMyBAQCBzdHJ1Y3Qgc21jX2xpbmsgKnNtY19zd2l0Y2hfY29ubnMoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXFxuIFxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZsZ3ItXFx1MDAzZWNvbm5zX2xvY2spO1xcbiBcXHRcXHQvKiBwcmUtZmV0Y2ggYnVmZmVyIG91dHNpZGUgb2Ygc2VuZF9sb2NrLCBtaWdodCBzbGVlcCAqL1xcbiBcXHRcXHRyYyA9IHNtY19jZGNfZ2V0X2ZyZWVfc2xvdChjb25uLCB0b19sbmssIFxcdTAwMjZ3cl9idWYsIE5VTEwsIFxcdTAwMjZwZW5kKTtcXG4tXFx0XFx0aWYgKHJjKVxcbi1cXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuLVxcdFxcdC8qIGF2b2lkIHJhY2Ugd2l0aCBzbWNyX3R4X3NuZGJ1Zl9ub25lbXB0eSgpICovXFxuLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2Y29ubi1cXHUwMDNlc2VuZF9sb2NrKTtcXG4tXFx0XFx0c21jX3N3aXRjaF9saW5rX2FuZF9jb3VudChjb25uLCB0b19sbmspO1xcbi1cXHRcXHRyYyA9IHNtY19zd2l0Y2hfY3Vyc29yKHNtYywgcGVuZCwgd3JfYnVmKTtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNvbm4tXFx1MDAzZXNlbmRfbG9jayk7XFxuK1xcdFxcdGlmICghcmMpIHtcXG4rXFx0XFx0XFx0LyogYXZvaWQgcmFjZSB3aXRoIHNtY3JfdHhfc25kYnVmX25vbmVtcHR5KCkgKi9cXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjb25uLVxcdTAwM2VzZW5kX2xvY2spO1xcbitcXHRcXHRcXHRzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KGNvbm4sIHRvX2xuayk7XFxuK1xcdFxcdFxcdHJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpO1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y29ubi1cXHUwMDNlc2VuZF9sb2NrKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRzb2NrX3B1dChcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxuIFxcdFxcdGlmIChyYylcXG4gXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MDoyOS43Nzk5NDE1MDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDI2MzQwNDQzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3N3aXRjaF9jb25uc1wiLFxuICAgIFwic21jcl9saW5rX2Rvd25fY29uZFwiLFxuICAgIFwic21jcl9saW5rX2Rvd25fY29uZF9zY2hlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBTTUMgY29yZSBuZXR3b3JraW5nIGNvZGUgKHNtY19zd2l0Y2hfY29ubnMpIHdoZW4gc21jX2NkY19nZXRfZnJlZV9zbG90IGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciB0aGUgU01DIHByb3RvY29sIGZhbWlseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDJiNDFjZDQwMjAwMmU5MDMyYzRhMjlmYTNlMzc1NmZmYjE0NjQwOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDE1OjQwOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfY29yZS5jIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5pbmRleCBiNDIwOGNiMTg2YzVlLi4yZjdmOWQ0NjkyNzIwIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfY29yZS5jXG4rKysgYi9uZXQvc21jL3NtY19jb3JlLmNcbkBAIC0xMTQ4LDEzICsxMTQ4LDEzIEBAIHN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcbiBcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGdyLVx1MDAzZWNvbm5zX2xvY2spO1xuIFx0XHQvKiBwcmUtZmV0Y2ggYnVmZmVyIG91dHNpZGUgb2Ygc2VuZF9sb2NrLCBtaWdodCBzbGVlcCAqL1xuIFx0XHRyYyA9IHNtY19jZGNfZ2V0X2ZyZWVfc2xvdChjb25uLCB0b19sbmssIFx1MDAyNndyX2J1ZiwgTlVMTCwgXHUwMDI2cGVuZCk7XG4tXHRcdGlmIChyYylcbi1cdFx0XHRnb3RvIGVycl9vdXQ7XG4tXHRcdC8qIGF2b2lkIHJhY2Ugd2l0aCBzbWNyX3R4X3NuZGJ1Zl9ub25lbXB0eSgpICovXG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4tXHRcdHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoY29ubiwgdG9fbG5rKTtcbi1cdFx0cmMgPSBzbWNfc3dpdGNoX2N1cnNvcihzbWMsIHBlbmQsIHdyX2J1Zik7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbitcdFx0aWYgKCFyYykge1xuK1x0XHRcdC8qIGF2b2lkIHJhY2Ugd2l0aCBzbWNyX3R4X3NuZGJ1Zl9ub25lbXB0eSgpICovXG4rXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbitcdFx0XHRzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KGNvbm4sIHRvX2xuayk7XG4rXHRcdFx0cmMgPSBzbWNfc3dpdGNoX2N1cnNvcihzbWMsIHBlbmQsIHdyX2J1Zik7XG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2VzZW5kX2xvY2spO1xuK1x0XHR9XG4gXHRcdHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2Vzayk7XG4gXHRcdGlmIChyYylcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MDoyOS43Nzk5NDM4ODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzQwNTM2NDk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRXJyb3IgSGFuZGxpbmcgaW4gU01DIENvbm5lY3Rpb24gU3dpdGNoaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYHNtY19zd2l0Y2hfY29ubnNgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L3NtYy9zbWNfY29yZS5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIGZvY3VzZXMgb24gaG93IGVycm9yIGhhbmRsaW5nIGlzIG1hbmFnZWQgYXJvdW5kIHRoZSBgc21jX2NkY19nZXRfZnJlZV9zbG90YCBjYWxsLiBUaGUgb3JpZ2luYWwgY29kZSdzIGxvZ2ljIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGl0IGFjcXVpcmVzIGEgc2xvdCwgYW5kIGlmIHRoYXQgY2FsbCBmYWlscywgaXQganVtcHMgdG8gYGVycl9vdXRgLiBCdXQgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgaGVyZSwgYW5kIGl04oCZcyBhIHN0YW5kYXJkIGlzc3VlIHdpdGggcmVmZXJlbmNlIGNvdW50aW5nLlxuXG5UaGUgcmV2aXNlZCBjb2RlIG1vdmVzIHRoZSBgc29ja19wdXQoXHUwMDI2c21jLVx1MDAzZXNrKWAgY2FsbCBvdXRzaWRlIHRoZSBgaWYgKHJjKWAgYmxvY2suIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSwgaW4gdGhlICdiZWZvcmUnIHZlcnNpb24sIGlmIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgIHJldHVybmVkIGFuIGVycm9yIChgcmNgIG5vbi16ZXJvKSwgd2UnZCBpbW1lZGlhdGVseSBqdW1wIHRvIGBlcnJfb3V0YCwgc2tpcHBpbmcgdGhlIGBzb2NrX3B1dGAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgYHNvY2tfaG9sZChcdTAwMjZzbWMtXHUwMDNlc2spYCB3YXMgKnByb2JhYmx5KiBjYWxsZWQgcHJldmlvdXNseSwgYmVmb3JlIHRoZSBlcnJvciBwYXRoLiBJZiBzbywgdGhlbiB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBzdWJ0bGUgcmVmZXJlbmNlIGxlYWsgaW4gdGhlIGVycm9yIHBhdGguXG5cblRvIGJlIGNlcnRhaW4sIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBob3cgYHNtY19zd2l0Y2hfY29ubnNgIHVzZXMgYHNvY2tfaG9sZGAgYW5kIGBzb2NrX3B1dGAgYXJvdW5kIHRoaXMgcG9pbnQuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGBzb2NrX2hvbGRgIGlzIGluZGVlZCBjYWxsZWQgYmVmb3JlIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgLCB3aGljaCB3b3VsZCBtYWtlIHRoZSBjdXJyZW50IHBhdGNoIGEgY2xlYXIgaW1wcm92ZW1lbnQsIGZpeGluZyB0aGUgcG90ZW50aWFsIGxlYWsgYnkgYWx3YXlzIHJlbGVhc2luZyB0aGUgc29ja2V0IHJlZmVyZW5jZSByZWdhcmRsZXNzIG9mIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3Rg4oCZcyByZXR1cm4uIFRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IGNvbW1vbiBpc3N1ZSB0byBmaW5kIGluIGNvbXBsZXggbmV0d29ya2luZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDA6NTMuMTg1MzExNDIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODcyMzc2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfc3dpdGNoX2Nvbm5zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jb3JlLmM9MTA4Mz12b2lkIHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTEwOTQtXFxubmV0L3NtYy9zbWNfY29yZS5jOjEwOTU6c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDk2LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19saW5rICpmcm9tX2xuaywgYm9vbCBpc19kZXZfZXJyKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTc5NC1cXG5uZXQvc21jL3NtY19jb3JlLmM6MTc5NTpcXHR0b19sbmsgPSBzbWNfc3dpdGNoX2Nvbm5zKGxnciwgbG5rLCB0cnVlKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc5Ni1cXHRpZiAoIXRvX2xuaykgeyAvKiBubyBiYWNrdXAgbGluayBhdmFpbGFibGUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDA6NTMuODI0MDQzMTkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ1NDkwODUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzbWNfc3dpdGNoX2Nvbm5zYCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYHNtY19zd2l0Y2hfY29ubnNgLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhpcyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgaXQncyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGl0IHJlcXVpcmVzIGFuZCBpZGVudGlmeSBhbnkgbGlrZWx5IGFyZWFzIG9mIGludGVyZXN0aW5nIGlucHV0LCBzcGVjaWZpY2FsbHkgYW55dGhpbmcgdGhhdCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgdnVsbmVyYWJpbGl0aWVzLiBJJ20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIHBvdGVudGlhbGx5IG1pc2hhbmRsZWQgZXJyb3IgY29uZGl0aW9ucywgb3IgYW55IGxvZ2ljIHBhdGhzIHRoYXQgY291bGQgYmUgbWFuaXB1bGF0ZWQgdGhyb3VnaCBzcGVjaWZpY2FsbHkgY3JhZnRlZCBpbnB1dHMuIElzIHRoZXJlIGFueSBvYnZpb3VzIGxvdy1oYW5naW5nIGZydWl0PyBMZXQncyBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjAwLjI3ODk1NDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwOTUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDk1OlxcdHN0cnVjdCBzbWNfbGluayAqc21jX3N3aXRjaF9jb25ucyhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncixcXG4xMDk2OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19saW5rICpmcm9tX2xuaywgYm9vbCBpc19kZXZfZXJyKVxcbjEwOTc6XFx0e1xcbjEwOTg6XFx0XFx0c3RydWN0IHNtY19saW5rICp0b19sbmsgPSBOVUxMO1xcbjEwOTk6XFx0XFx0c3RydWN0IHNtY19jZGNfdHhfcGVuZCAqcGVuZDtcXG4xMTAwOlxcdFxcdHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubjtcXG4xMTAxOlxcdFxcdHN0cnVjdCBzbWNfd3JfYnVmICp3cl9idWY7XFxuMTEwMjpcXHRcXHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYztcXG4xMTAzOlxcdFxcdHN0cnVjdCByYl9ub2RlICpub2RlO1xcbjExMDQ6XFx0XFx0aW50IGksIHJjID0gMDtcXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0LyogbGluayBpcyBpbmFjdGl2ZSwgd2FrZSB1cCB0eCB3YWl0ZXJzICovXFxuMTEwNzpcXHRcXHRzbWNfd3Jfd2FrZXVwX3R4X3dhaXQoZnJvbV9sbmspO1xcbjExMDg6XFx0XFxuMTEwOTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgU01DX0xJTktTX1BFUl9MR1JfTUFYOyBpKyspIHtcXG4xMTEwOlxcdFxcdFxcdGlmICghc21jX2xpbmtfYWN0aXZlKFxcdTAwMjZsZ3ItXFx1MDAzZWxua1tpXSkgfHwgaSA9PSBmcm9tX2xuay1cXHUwMDNlbGlua19pZHgpXFxuMTExMTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTEyOlxcdFxcdFxcdGlmIChpc19kZXZfZXJyIFxcdTAwMjZcXHUwMDI2IGZyb21fbG5rLVxcdTAwM2VzbWNpYmRldiA9PSBsZ3ItXFx1MDAzZWxua1tpXS5zbWNpYmRldiBcXHUwMDI2XFx1MDAyNlxcbjExMTM6XFx0XFx0XFx0ICAgIGZyb21fbG5rLVxcdTAwM2VpYnBvcnQgPT0gbGdyLVxcdTAwM2VsbmtbaV0uaWJwb3J0KSB7XFxuMTExNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTE1OlxcdFxcdFxcdH1cXG4xMTE2OlxcdFxcdFxcdHRvX2xuayA9IFxcdTAwMjZsZ3ItXFx1MDAzZWxua1tpXTtcXG4xMTE3OlxcdFxcdFxcdGJyZWFrO1xcbjExMTg6XFx0XFx0fVxcbjExMTk6XFx0XFx0aWYgKCF0b19sbmsgfHwgIXNtY193cl90eF9saW5rX2hvbGQodG9fbG5rKSkge1xcbjExMjA6XFx0XFx0XFx0c21jX2xncl90ZXJtaW5hdGVfc2NoZWQobGdyKTtcXG4xMTIxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExMjI6XFx0XFx0fVxcbjExMjM6XFx0YWdhaW46XFxuMTEyNDpcXHRcXHRyZWFkX2xvY2tfYmgoXFx1MDAyNmxnci1cXHUwMDNlY29ubnNfbG9jayk7XFxuMTEyNTpcXHRcXHRmb3IgKG5vZGUgPSByYl9maXJzdChcXHUwMDI2bGdyLVxcdTAwM2Vjb25uc19hbGwpOyBub2RlOyBub2RlID0gcmJfbmV4dChub2RlKSkge1xcbjExMjY6XFx0XFx0XFx0Y29ubiA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBzbWNfY29ubmVjdGlvbiwgYWxlcnRfbm9kZSk7XFxuMTEyNzpcXHRcXHRcXHRpZiAoY29ubi1cXHUwMDNlbG5rICE9IGZyb21fbG5rKVxcbjExMjg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTEyOTpcXHRcXHRcXHRzbWMgPSBjb250YWluZXJfb2YoY29ubiwgc3RydWN0IHNtY19zb2NrLCBjb25uKTtcXG4xMTMwOlxcdFxcdFxcdC8qIGNvbm4tXFx1MDAzZWxuayBub3QgeWV0IHNldCBpbiBTTUNfSU5JVCBzdGF0ZSAqL1xcbjExMzE6XFx0XFx0XFx0aWYgKHNtYy1cXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX0lOSVQpXFxuMTEzMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTMzOlxcdFxcdFxcdGlmIChzbWMtXFx1MDAzZXNrLnNrX3N0YXRlID09IFNNQ19DTE9TRUQgfHxcXG4xMTM0OlxcdFxcdFxcdCAgICBzbWMtXFx1MDAzZXNrLnNrX3N0YXRlID09IFNNQ19QRUVSQ0xPU0VXQUlUMSB8fFxcbjExMzU6XFx0XFx0XFx0ICAgIHNtYy1cXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX1BFRVJDTE9TRVdBSVQyIHx8XFxuMTEzNjpcXHRcXHRcXHQgICAgc21jLVxcdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfQVBQRklOQ0xPU0VXQUlUIHx8XFxuMTEzNzpcXHRcXHRcXHQgICAgc21jLVxcdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfQVBQQ0xPU0VXQUlUMSB8fFxcbjExMzg6XFx0XFx0XFx0ICAgIHNtYy1cXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX0FQUENMT1NFV0FJVDIgfHxcXG4xMTM5OlxcdFxcdFxcdCAgICBzbWMtXFx1MDAzZXNrLnNrX3N0YXRlID09IFNNQ19QRUVSRklOQ0xPU0VXQUlUIHx8XFxuMTE0MDpcXHRcXHRcXHQgICAgc21jLVxcdTAwM2Vzay5za19zdGF0ZSA9PSBTTUNfUEVFUkFCT1JUV0FJVCB8fFxcbjExNDE6XFx0XFx0XFx0ICAgIHNtYy1cXHUwMDNlc2suc2tfc3RhdGUgPT0gU01DX1BST0NFU1NBQk9SVCkge1xcbjExNDI6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjb25uLVxcdTAwM2VzZW5kX2xvY2spO1xcbjExNDM6XFx0XFx0XFx0XFx0c21jX3N3aXRjaF9saW5rX2FuZF9jb3VudChjb25uLCB0b19sbmspO1xcbjExNDQ6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNvbm4tXFx1MDAzZXNlbmRfbG9jayk7XFxuMTE0NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTQ2OlxcdFxcdFxcdH1cXG4xMTQ3OlxcdFxcdFxcdHNvY2tfaG9sZChcXHUwMDI2c21jLVxcdTAwM2Vzayk7XFxuMTE0ODpcXHRcXHRcXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bGdyLVxcdTAwM2Vjb25uc19sb2NrKTtcXG4xMTQ5OlxcdFxcdFxcdC8qIHByZS1mZXRjaCBidWZmZXIgb3V0c2lkZSBvZiBzZW5kX2xvY2ssIG1pZ2h0IHNsZWVwICovXFxuMTE1MDpcXHRcXHRcXHRyYyA9IHNtY19jZGNfZ2V0X2ZyZWVfc2xvdChjb25uLCB0b19sbmssIFxcdTAwMjZ3cl9idWYsIE5VTEwsIFxcdTAwMjZwZW5kKTtcXG4xMTUxOlxcdFxcdFxcdGlmICghcmMpIHtcXG4xMTUyOlxcdFxcdFxcdFxcdC8qIGF2b2lkIHJhY2Ugd2l0aCBzbWNyX3R4X3NuZGJ1Zl9ub25lbXB0eSgpICovXFxuMTE1MzpcXHRcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNvbm4tXFx1MDAzZXNlbmRfbG9jayk7XFxuMTE1NDpcXHRcXHRcXHRcXHRzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KGNvbm4sIHRvX2xuayk7XFxuMTE1NTpcXHRcXHRcXHRcXHRyYyA9IHNtY19zd2l0Y2hfY3Vyc29yKHNtYywgcGVuZCwgd3JfYnVmKTtcXG4xMTU2OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjb25uLVxcdTAwM2VzZW5kX2xvY2spO1xcbjExNTc6XFx0XFx0XFx0fVxcbjExNTg6XFx0XFx0XFx0c29ja19wdXQoXFx1MDAyNnNtYy1cXHUwMDNlc2spO1xcbjExNTk6XFx0XFx0XFx0aWYgKHJjKVxcbjExNjA6XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbjExNjE6XFx0XFx0XFx0Z290byBhZ2FpbjtcXG4xMTYyOlxcdFxcdH1cXG4xMTYzOlxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZsZ3ItXFx1MDAzZWNvbm5zX2xvY2spO1xcbjExNjQ6XFx0XFx0c21jX3dyX3R4X2xpbmtfcHV0KHRvX2xuayk7XFxuMTE2NTpcXHRcXHRyZXR1cm4gdG9fbG5rO1xcbjExNjY6XFx0XFxuMTE2NzpcXHRlcnJfb3V0OlxcbjExNjg6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZCh0b19sbmspO1xcbjExNjk6XFx0XFx0c21jX3dyX3R4X2xpbmtfcHV0KHRvX2xuayk7XFxuMTE3MDpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMTcxOlxcdH1cXG4xMTcyOlxcdFxcbjExNzM6XFx0c3RhdGljIHZvaWQgc21jcl9idWZfdW51c2Uoc3RydWN0IHNtY19idWZfZGVzYyAqYnVmX2Rlc2MsIGJvb2wgaXNfcm1iLFxcbjExNzQ6XFx0XFx0XFx0XFx0ICAgc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuMTE3NTpcXHR7XFxuMTE3NjpcXHRcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlICpsb2NrO1xcdC8qIGxvY2sgYnVmZmVyIGxpc3QgKi9cXG4xMTc3OlxcdFxcdGludCByYztcXG4xMTc4OlxcdFxcbjExNzk6XFx0XFx0aWYgKGlzX3JtYiBcXHUwMDI2XFx1MDAyNiBidWZfZGVzYy1cXHUwMDNlaXNfY29uZl9ya2V5IFxcdTAwMjZcXHUwMDI2ICFsaXN0X2VtcHR5KFxcdTAwMjZsZ3ItXFx1MDAzZWxpc3QpKSB7XFxuMTE4MDpcXHRcXHRcXHQvKiB1bnJlZ2lzdGVyIHJtYiB3aXRoIHBlZXIgKi9cXG4xMTgxOlxcdFxcdFxcdHJjID0gc21jX2xsY19mbG93X2luaXRpYXRlKGxnciwgU01DX0xMQ19GTE9XX1JLRVkpO1xcbjExODI6XFx0XFx0XFx0aWYgKCFyYykge1xcbjExODM6XFx0XFx0XFx0XFx0LyogcHJvdGVjdCBhZ2FpbnN0IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2UoKSAqL1xcbjExODQ6XFx0XFx0XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZsZ3ItXFx1MDAzZWxsY19jb25mX211dGV4KTtcXG4xMTg1OlxcdFxcdFxcdFxcdHNtY19sbGNfZG9fZGVsZXRlX3JrZXkobGdyLCBidWZfZGVzYyk7XFxuMTE4NjpcXHRcXHRcXHRcXHRidWZfZGVzYy1cXHUwMDNlaXNfY29uZl9ya2V5ID0gZmFsc2U7XFxuMTE4NzpcXHRcXHRcXHRcXHR1cF9yZWFkKFxcdTAwMjZsZ3ItXFx1MDAzZWxsY19jb25mX211dGV4KTtcXG4xMTg4OlxcdFxcdFxcdFxcdHNtY19sbGNfZmxvd19zdG9wKGxnciwgXFx1MDAyNmxnci1cXHUwMDNlbGxjX2Zsb3dfbGNsKTtcXG4xMTg5OlxcdFxcdFxcdH1cXG4xMTkwOlxcdFxcdH1cXG4xMTkxOlxcdFxcbjExOTI6XFx0XFx0aWYgKGJ1Zl9kZXNjLVxcdTAwM2Vpc19yZWdfZXJyKSB7XFxuMTE5MzpcXHRcXHRcXHQvKiBidWYgcmVnaXN0cmF0aW9uIGZhaWxlZCwgcmV1c2Ugbm90IHBvc3NpYmxlICovXFxuMTE5NDpcXHRcXHRcXHRsb2NrID0gaXNfcm1iID8gXFx1MDAyNmxnci1cXHUwMDNlcm1ic19sb2NrIDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDE6MDAuMjc5MTcwNzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODg5MzM0NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgU01DIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIGNoYW5nZSB0YWNrbGVzIGEgcHJldHR5IG5hc3R5IGJ1ZyB3aXRoaW4gdGhlIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMgKFNNQykgbmV0d29ya2luZyBjb2RlLiBJdCBsb29rcyBsaWtlIGBzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spYCB3YXMgYmVpbmcgc2tpcHBlZCB1bmRlciBjZXJ0YWluIGVycm9yIGNvbmRpdGlvbnMgd2hlbiBgc21jX2NkY19nZXRfZnJlZV9zbG90YCBmYWlsZWQuIFRoYXQgbWVhbnMgd2Ugd2VyZSBsZWFraW5nIHNvY2tldCByZWZlcmVuY2VzLCB3aGljaCBpcyBhIGJpZyBuby1uby4gV2UgY2FuJ3QgaGF2ZSB0aG9zZSBsaW5nZXJpbmcgYXJvdW5kLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgaW1wYWN0aW5nIHRoZSBjb3JlIFNNQyBsb2dpYywgYW5kIGNvbnNpZGVyaW5nIFNNQydzIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBkdWUgdG8gaXRzIEFGX1NNQyBzb2NrZXQgZmFtaWx5LCB0aGlzIGlzIHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGNoZWNrIHdoZXRoZXIgU01DLCBpbiBnZW5lcmFsLCByZXF1aXJlcyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3Igb3BlcmF0aW9uLiBUaGUgZmFjdCB0aGF0IHRoZSBgc21jX3N3aXRjaF9jb25uc2AgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYHNtY3JfbGlua19kb3duYCBwcm92aWRlcyBhIGxpdHRsZSBtb3JlIGNvbnRleHQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGF0IHNwZWNpZmljIHBhdGggdG8gc2VlIHdoYXQgaW50ZXJhY3Rpb25zIGFyZSB0YWtpbmcgcGxhY2UgdGhlcmUuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSBob3cgdGhpcyBpbXBhY3RzIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQwNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjA2LjE2ODUwODIxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc3NjcwNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNNQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MTowNi4zMTYyNzk1NTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjg2MDkzNTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgd29ya2luZyB0aHJvdWdoIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTmVlZCBmb3IgU01DIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIGZsYWcgdXAgdGhhdCBJIG5lZWQgdG8gY29uZmlndXJlIHRoZSBgU01DYCBtb2R1bGUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIEluc3RlYWQgb2YganVzdCBkaXZpbmcgaW4sIEkgbmVlZCB0byBzZWUgd2hhdCdzIGFjdHVhbGx5ICp1c2luZyogdGhpcyBgU01DYCBjb25maWd1cmF0aW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIGBzbWNfc3dpdGNoX2Nvbm5zYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBpcyBiZWluZyBsZXZlcmFnZWQgYW5kIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGl0cyB1c2FnZS4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgd2hhdCBpdHMgaW1wYWN0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTU0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDE6MTEuNjAyMzc1OTg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE4NTczODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX3N3aXRjaF9jb25uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jb3JlLmM9MTA4Mz12b2lkIHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTEwOTQtXFxubmV0L3NtYy9zbWNfY29yZS5jOjEwOTU6c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDk2LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19saW5rICpmcm9tX2xuaywgYm9vbCBpc19kZXZfZXJyKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTc5NC1cXG5uZXQvc21jL3NtY19jb3JlLmM6MTc5NTpcXHR0b19sbmsgPSBzbWNfc3dpdGNoX2Nvbm5zKGxnciwgbG5rLCB0cnVlKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc5Ni1cXHRpZiAoIXRvX2xuaykgeyAvKiBubyBiYWNrdXAgbGluayBhdmFpbGFibGUgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaD02MTU9aW50IHNtY3JfbGlua19yZWdfYnVmKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY19idWZfZGVzYyAqcm1iX2Rlc2MpO1xcbm5ldC9zbWMvc21jX2NvcmUuaDo2MTY6c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbm5ldC9zbWMvc21jX2NvcmUuaC02MTctXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc21jX2xpbmsgKmZyb21fbG5rLCBib29sIGlzX2Rldl9lcnIpO1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MTI4OD1zdGF0aWMgdm9pZCBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMjk4LVxcdFxcdHJldHVybjtcXG5uZXQvc21jL3NtY19sbGMuYzoxMjk5OlxcdGxua19uZXcgPSBzbWNfc3dpdGNoX2Nvbm5zKGxnciwgbG5rX2FzeW0sIGZhbHNlKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xMzAwLVxcdHNtY193cl90eF93YWl0X25vX3BlbmRpbmdfc2VuZHMobG5rX2FzeW0pO1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MTU5ND1zdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtMTYzMC1cXHRpZiAoc21jX2xpbmtfZG93bmluZyhcXHUwMDI2bG5rX2RlbC1cXHUwMDNlc3RhdGUpKVxcbm5ldC9zbWMvc21jX2xsYy5jOjE2MzE6XFx0XFx0c21jX3N3aXRjaF9jb25ucyhsZ3IsIGxua19kZWwsIGZhbHNlKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xNjMyLVxcdHNtY3JfbGlua19jbGVhcihsbmtfZGVsLCB0cnVlKTtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE2NzI9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX3Nydl9kZWxldGVfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE3MDMtXFx0aWYgKHNtY19saW5rX2Rvd25pbmcoXFx1MDAyNmxua19kZWwtXFx1MDAzZXN0YXRlKSkge1xcbm5ldC9zbWMvc21jX2xsYy5jOjE3MDQ6XFx0XFx0aWYgKHNtY19zd2l0Y2hfY29ubnMobGdyLCBsbmtfZGVsLCBmYWxzZSkpXFxubmV0L3NtYy9zbWNfbGxjLmMtMTcwNS1cXHRcXHRcXHRzbWNfd3JfdHhfd2FpdF9ub19wZW5kaW5nX3NlbmRzKGxua19kZWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MToxMS43MTQyNDUzNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTM5NDQ1MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ2FsbHMgdG8gYHNtY19zd2l0Y2hfY29ubnNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBzbWNfc3dpdGNoX2Nvbm5zYCBpcyB1c2VkIHdpdGhpbiB0aGlzIFNNQyBjb2RlYmFzZS4gSSd2ZSBub3RlZCB0aGF0IGl0J3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnM6IGBzbWNyX2xpbmtfZG93bmAsIGBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmtgLCBgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGlua2AsIGFuZCBgc21jX2xsY19wcm9jZXNzX3Nydl9kZWxldGVfbGlua2AuIEkgc2VlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZW4ndCBhbGwgbmVjZXNzYXJpbHkgc3RhdGljLCBvciB0aGV5ICpjb3VsZCogYmUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIFNNQyBtb2R1bGUuXG5cbk5vdywgSSB3YW50IHRvIGRlbHZlIGEgbGl0dGxlIGRlZXBlci4gR2l2ZW4gdGhlIGNvbnRleHRzIGxpc3RlZCBoZXJlLCBpdCdzIGltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCBgc21jcl9saW5rX2Rvd25gIGlzIHdvcnRoIGEgY2xvc2VyIGxvb2suIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgc21jcl9saW5rX2Rvd25gIGFuZCBzZWUgdGhlIHdpZGVyIGNhbGwgY29udGV4dCwgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjE3LjY1MzY5MzU2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIwMTAwODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jcl9saW5rX2Rvd25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY29yZS5jPTEwOTU9c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTExNjctZXJyX291dDpcXG5uZXQvc21jL3NtY19jb3JlLmM6MTE2ODpcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHRvX2xuayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTExNjktXFx0c21jX3dyX3R4X2xpbmtfcHV0KHRvX2xuayk7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTY2Mz12b2lkIHNtY19zbWNyX3Rlcm1pbmF0ZV9hbGwoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2KVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE2NzctXFx0XFx0XFx0XFx0aWYgKGxnci1cXHUwMDNlbG5rW2ldLnNtY2liZGV2ID09IHNtY2liZGV2KVxcbm5ldC9zbWMvc21jX2NvcmUuYzoxNjc4OlxcdFxcdFxcdFxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQoXFx1MDAyNmxnci1cXHUwMDNlbG5rW2ldKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTY3OS1cXHRcXHRcXHR9XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTc1Nz12b2lkIHNtY3JfcG9ydF9hZGQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTc4NS0gKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTc4NjpzdGF0aWMgdm9pZCBzbWNyX2xpbmtfZG93bihzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc4Ny17XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTgyNi0vKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBsZ3ItXFx1MDAzZWxsY19jb25mX211dGV4IGxvY2sgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTgyNzp2b2lkIHNtY3JfbGlua19kb3duX2NvbmQoc3RydWN0IHNtY19saW5rICpsbmspXFxubmV0L3NtYy9zbWNfY29yZS5jLTE4Mjgte1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xODI5LVxcdGlmIChzbWNfbGlua19kb3duaW5nKFxcdTAwMjZsbmstXFx1MDAzZXN0YXRlKSkge1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxODMwOlxcdFxcdHRyYWNlX3NtY3JfbGlua19kb3duKGxuaywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcXG5uZXQvc21jL3NtY19jb3JlLmM6MTgzMTpcXHRcXHRzbWNyX2xpbmtfZG93bihsbmspO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xODMyLVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xODM1LS8qIHdpbGwgZ2V0IHRoZSBsZ3ItXFx1MDAzZWxsY19jb25mX211dGV4IGxvY2sgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MTgzNjp2b2lkIHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQoc3RydWN0IHNtY19saW5rICpsbmspXFxubmV0L3NtYy9zbWNfY29yZS5jLTE4Mzcte1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xODM4LVxcdGlmIChzbWNfbGlua19kb3duaW5nKFxcdTAwMjZsbmstXFx1MDAzZXN0YXRlKSkge1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxODM5OlxcdFxcdHRyYWNlX3NtY3JfbGlua19kb3duKGxuaywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTg0MC1cXHRcXHRzbWNyX2xpbmtfaG9sZChsbmspOyAvKiBzbWNyX2xpbmtfcHV0IGluIGxpbmtfZG93bl93cmsgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xODQ2PXZvaWQgc21jcl9wb3J0X2VycihzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGlicG9ydClcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xODYxLVxcdFxcdFxcdCAgICBsbmstXFx1MDAzZXNtY2liZGV2ID09IHNtY2liZGV2IFxcdTAwMjZcXHUwMDI2IGxuay1cXHUwMDNlaWJwb3J0ID09IGlicG9ydClcXG5uZXQvc21jL3NtY19jb3JlLmM6MTg2MjpcXHRcXHRcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxuayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTE4NjMtXFx0XFx0fVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE4Njc9c3RhdGljIHZvaWQgc21jX2xpbmtfZG93bl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xODc2LVxcdGRvd25fd3JpdGUoXFx1MDAyNmxnci1cXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxODc3OlxcdHNtY3JfbGlua19kb3duKGxpbmspO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xODc4LVxcdHVwX3dyaXRlKFxcdTAwMjZsZ3ItXFx1MDAzZWxsY19jb25mX211dGV4KTtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaD02MTY9c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbm5ldC9zbWMvc21jX2NvcmUuaC02MTctXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc21jX2xpbmsgKmZyb21fbG5rLCBib29sIGlzX2Rldl9lcnIpO1xcbm5ldC9zbWMvc21jX2NvcmUuaDo2MTg6dm9pZCBzbWNyX2xpbmtfZG93bl9jb25kKHN0cnVjdCBzbWNfbGluayAqbG5rKTtcXG5uZXQvc21jL3NtY19jb3JlLmg6NjE5OnZvaWQgc21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChzdHJ1Y3Qgc21jX2xpbmsgKmxuayk7XFxubmV0L3NtYy9zbWNfY29yZS5oLTYyMC1pbnQgc21jX25sX2dldF9zeXNfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MTI4OD1zdGF0aWMgdm9pZCBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMzA3LVxcdGlmIChyYykge1xcbm5ldC9zbWMvc21jX2xsYy5jOjEzMDg6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZChsbmtfbmV3KTtcXG5uZXQvc21jL3NtY19sbGMuYy0xMzA5LVxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMzEzLVxcdGlmICghcWVudHJ5KSB7XFxubmV0L3NtYy9zbWNfbGxjLmM6MTMxNDpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kKGxua19uZXcpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTEzMTUtXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTIxMTU9c3RhdGljIHZvaWQgc21jX2xsY190ZXN0bGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTIxMzgtXFx0aWYgKHJjIFxcdTAwM2M9IDApIHtcXG5uZXQvc21jL3NtY19sbGMuYzoyMTM5OlxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XFxubmV0L3NtYy9zbWNfbGxjLmMtMjE0MC1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvc21jL3NtY190cmFjZXBvaW50LmM9OD1FWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woc21jX3J4X3JlY3Ztc2cpO1xcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuYzo5OkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChzbWNyX2xpbmtfZG93bik7XFxuLS1cXG5uZXQvc21jL3NtY190cmFjZXBvaW50Lmg9Nzg9REVGSU5FX0VWRU5UKHNtY19tc2dfZXZlbnQsIHNtY19yeF9yZWN2bXNnLFxcbi0tXFxubmV0L3NtYy9zbWNfdHJhY2Vwb2ludC5oLTg0LVxcbm5ldC9zbWMvc21jX3RyYWNlcG9pbnQuaDo4NTpUUkFDRV9FVkVOVChzbWNyX2xpbmtfZG93bixcXG5uZXQvc21jL3NtY190cmFjZXBvaW50LmgtODYtXFxuLS1cXG5uZXQvc21jL3NtY190eC5jPTMxNz1zdGF0aWMgaW50IHNtY190eF9yZG1hX3dyaXRlKHN0cnVjdCBzbWNfY29ubmVjdGlvbiAqY29ubiwgaW50IHBlZXJfcm1iZV9vZmZzZXQsXFxuLS1cXG5uZXQvc21jL3NtY190eC5jLTMzNC1cXHRpZiAocmMpXFxubmV0L3NtYy9zbWNfdHguYzozMzU6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG5uZXQvc21jL3NtY190eC5jLTMzNi1cXHRyZXR1cm4gcmM7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTc3PXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfd3JfdHhfcHJvY2Vzc19jcWUoc3RydWN0IGliX3djICp3YylcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMTI4LVxcdFxcdC8qIHRlcm1pbmF0ZSBsaW5rICovXFxubmV0L3NtYy9zbWNfd3IuYzoxMjk6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG5uZXQvc21jL3NtY193ci5jLTEzMC1cXHR9XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTE5NT1pbnQgc21jX3dyX3R4X2dldF9mcmVlX3Nsb3Qoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0yMjItXFx0XFx0XFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXFxubmV0L3NtYy9zbWNfd3IuYzoyMjM6XFx0XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG5uZXQvc21jL3NtY193ci5jLTIyNC1cXHRcXHRcXHRyZXR1cm4gLUVQSVBFO1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz0zMDQ9aW50IHNtY193cl90eF9zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY193cl90eF9wZW5kX3ByaXYgKnByaXYpXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTMxNC1cXHRcXHRzbWNfd3JfdHhfcHV0X3Nsb3QobGluaywgcHJpdik7XFxubmV0L3NtYy9zbWNfd3IuYzozMTU6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG5uZXQvc21jL3NtY193ci5jLTMxNi1cXHR9XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTMyMD1pbnQgc21jX3dyX3R4X3YyX3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdixcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMzMwLVxcdFxcdHNtY193cl90eF9wdXRfc2xvdChsaW5rLCBwcml2KTtcXG5uZXQvc21jL3NtY193ci5jOjMzMTpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3dyLmMtMzMyLVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9MzY2PWludCBzbWNfd3JfcmVnX3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3QgaWJfbXIgKm1yKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0zODYtXFx0XFx0LyogdGltZW91dCAtIHRlcm1pbmF0ZSBsaW5rICovXFxubmV0L3NtYy9zbWNfd3IuYzozODc6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG5uZXQvc21jL3NtY193ci5jLTM4OC1cXHRcXHRyZXR1cm4gLUVQSVBFO1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz00NDk9c3RhdGljIGlubGluZSB2b2lkIHNtY193cl9yeF9wcm9jZXNzX2NxZXMoc3RydWN0IGliX3djIHdjW10sIGludCBudW0pXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTQ2Ni1cXHRcXHRcXHRjYXNlIElCX1dDX1dSX0ZMVVNIX0VSUjpcXG5uZXQvc21jL3NtY193ci5jOjQ2NzpcXHRcXHRcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3dyLmMtNDY4LVxcdFxcdFxcdFxcdGlmIChsaW5rLVxcdTAwM2V3cl9yeF9pZF9jb21wbCA9PSBsaW5rLVxcdTAwM2V3cl9yeF9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDE6MTcuNzI1NzA3OTEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MzM3NzU5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU01DIENvbm5lY3Rpb24gU3dpdGNoaW5nIExvZ2ljKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIGEgcHJvbWlzaW5nIGFyZWEgZm9yIGludmVzdGlnYXRpb24uIFRoaXMgYHNtY19zd2l0Y2hfY29ubnNgIGZ1bmN0aW9uIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyDigJMgaXQncyBub24tc3RhdGljLCB3aGljaCBtZWFucyBpdCBoYXMgYnJvYWRlciBhY2Nlc3NpYmlsaXR5IHdpdGhpbiB0aGUgY29kZS4gSSBjYW4gc2VlIGl0J3MgY2FsbGVkIGZyb20gc2V2ZXJhbCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBsb2NhdGlvbnM6IGBzbWNyX2xpbmtfZG93bmAsIGBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmtgLCBgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGlua2AsIGFuZCBgc21jX2xsY19wcm9jZXNzX3Nydl9kZWxldGVfbGlua2AuIFRoaXMgZGVmaW5pdGVseSBvcGVucyB1cCBzb21lIGF2ZW51ZXMgZm9yIGV4cGxvaXRpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuQmVmb3JlIEkgY29tbWl0IHRvIHRoaXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gVGhlIGZhY3QgdGhhdCBgU01DYCByZWxhdGVzIHRvIGEgc29ja2V0IHByb3RvY29sIGZhbWlseSBpcyBhbHNvIHdvcnRoIG5vdGluZzsgdGhhdCBjb250ZXh0IGNvdWxkIGluZmx1ZW5jZSB0aGUgdHlwZXMgb2YgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gSSdsbCBtYWtlIGEgbm90ZSBvZiB0aGF0LiBBbmQsIG9mIGNvdXJzZSwgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkxldCdzIGlkZW50aWZ5IHRoZSBmb2NhbCBzeW1ib2xzOiBgc21jX3N3aXRjaF9jb25uc2AsIGBzbWNyX2xpbmtfZG93bmAsIGBzbWNfbGxjX2RlbGV0ZV9hc3ltX2xpbmtgLCBgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGlua2AsIGFuZCBgc21jX2xsY19wcm9jZXNzX3Nydl9kZWxldGVfbGlua2AuXG5cbkhvbGQgb24gYSBtaW51dGUsIEkgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgc3RhdGljL25vbi1zdGF0aWMgc3RhdHVzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gTG9va3MgbGlrZSBgc21jcl9saW5rX2Rvd25gIGFuZCBgc21jX2xsY19kZWxldGVfYXN5bV9saW5rYCBhcmUgc3RhdGljLCB3aGljaCBsaW1pdHMgdGhlaXIgZGlyZWN0IGV4cG9zdXJlLiBUaGlzIG1ha2VzIGBzbWNfc3dpdGNoX2Nvbm5zYCBldmVuIG1vcmUgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgd2lsbCBiZSBtb3JlIGFjY2Vzc2libGUuIE5vdywgSSBuZWVkIHRvIGV4YW1pbmUgYHNtY19sbGNfcHJvY2Vzc19jbGlfZGVsZXRlX2xpbmtgIGFuZCBgc21jX2xsY19wcm9jZXNzX3Nydl9kZWxldGVfbGlua2AuIExldCdzIHNlZSB3aGF0J3MgdXAgd2l0aCB0aG9zZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDU4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjI0LjQ1OTQ4NjY0NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0NTA5MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19sbGNfcHJvY2Vzc19jbGlfZGVsZXRlX2xpbmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfbGxjLmM9MTU4Mj12b2lkIHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggZGVsX2xpbmtfaWQpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xNTkzLVxcbm5ldC9zbWMvc21jX2xsYy5jOjE1OTQ6c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG5uZXQvc21jL3NtY19sbGMuYy0xNTk1LXtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE3NDA9c3RhdGljIHZvaWQgc21jX2xsY19kZWxldGVfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE3NTEtXFx0aWYgKGxnci1cXHUwMDNlcm9sZSA9PSBTTUNfQ0xOVClcXG5uZXQvc21jL3NtY19sbGMuYzoxNzUyOlxcdFxcdHNtY19sbGNfcHJvY2Vzc19jbGlfZGVsZXRlX2xpbmsobGdyKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xNzUzLVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDE6MjUuMjIzOTk5MzkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjA5OTIyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNNQyBDb25uZWN0aW9uIFN3aXRjaGluZyoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYSBzaXR1YXRpb24gd2hlcmUgdGhlIGluaXRpYWwgY29udGV4dCBzZWVtcyBzdGF0aWMsIHdoaWNoIGlzbid0IGdpdmluZyBtZSBtdWNoIHRvIHdvcmsgd2l0aC4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuIE15IGZvY3VzIGltbWVkaWF0ZWx5IHNoaWZ0cyB0byBgc21jX3N3aXRjaF9jb25uc2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIE5vdywgbGV0J3MgZXhwbG9yZSBgbmV0L3NtYy9zbWNfY29yZS5jYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSB0aGF0IGFjdHVhbGx5IGNhbGwgYHNtY19zd2l0Y2hfY29ubnNgLiBBaGEhIEkgc2VlIGBzbWNyX2xpbmtfZG93bl9jb25kYCBhbmQgYHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWRgLiBUaGVzZSBhcmVuJ3Qgc3RhdGljLCBhbmQgdGhleSdyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSBjYWxsIGBzbWNyX2xpbmtfZG93bmAsIHdoaWNoIGluIHR1cm4sIGNhbGxzIGBzbWNfc3dpdGNoX2Nvbm5zYC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIGF2ZW51ZSBvZiBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MTozMS4zNDQ5OTQxNjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMjk4NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY3JfbGlua19kb3duX2NvbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY29yZS5jPTEwOTU9c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTExNjctZXJyX291dDpcXG5uZXQvc21jL3NtY19jb3JlLmM6MTE2ODpcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHRvX2xuayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTExNjktXFx0c21jX3dyX3R4X2xpbmtfcHV0KHRvX2xuayk7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTY2Mz12b2lkIHNtY19zbWNyX3Rlcm1pbmF0ZV9hbGwoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2KVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE2NzctXFx0XFx0XFx0XFx0aWYgKGxnci1cXHUwMDNlbG5rW2ldLnNtY2liZGV2ID09IHNtY2liZGV2KVxcbm5ldC9zbWMvc21jX2NvcmUuYzoxNjc4OlxcdFxcdFxcdFxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQoXFx1MDAyNmxnci1cXHUwMDNlbG5rW2ldKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTY3OS1cXHRcXHRcXHR9XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmM9MTc4Nj1zdGF0aWMgdm9pZCBzbWNyX2xpbmtfZG93bihzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xODI2LS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGxnci1cXHUwMDNlbGxjX2NvbmZfbXV0ZXggbG9jayAqL1xcbm5ldC9zbWMvc21jX2NvcmUuYzoxODI3OnZvaWQgc21jcl9saW5rX2Rvd25fY29uZChzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcXG5uZXQvc21jL3NtY19jb3JlLmMtMTgyOC17XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTgzNS0vKiB3aWxsIGdldCB0aGUgbGdyLVxcdTAwM2VsbGNfY29uZl9tdXRleCBsb2NrICovXFxubmV0L3NtYy9zbWNfY29yZS5jOjE4MzY6dm9pZCBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHN0cnVjdCBzbWNfbGluayAqbG5rKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xODM3LXtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0xODQ2PXZvaWQgc21jcl9wb3J0X2VycihzdHJ1Y3Qgc21jX2liX2RldmljZSAqc21jaWJkZXYsIHU4IGlicG9ydClcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYy0xODYxLVxcdFxcdFxcdCAgICBsbmstXFx1MDAzZXNtY2liZGV2ID09IHNtY2liZGV2IFxcdTAwMjZcXHUwMDI2IGxuay1cXHUwMDNlaWJwb3J0ID09IGlicG9ydClcXG5uZXQvc21jL3NtY19jb3JlLmM6MTg2MjpcXHRcXHRcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxuayk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTE4NjMtXFx0XFx0fVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oPTYxNj1zdHJ1Y3Qgc21jX2xpbmsgKnNtY19zd2l0Y2hfY29ubnMoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXFxubmV0L3NtYy9zbWNfY29yZS5oLTYxNy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBzbWNfbGluayAqZnJvbV9sbmssIGJvb2wgaXNfZGV2X2Vycik7XFxubmV0L3NtYy9zbWNfY29yZS5oOjYxODp2b2lkIHNtY3JfbGlua19kb3duX2NvbmQoc3RydWN0IHNtY19saW5rICpsbmspO1xcbm5ldC9zbWMvc21jX2NvcmUuaDo2MTk6dm9pZCBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKHN0cnVjdCBzbWNfbGluayAqbG5rKTtcXG5uZXQvc21jL3NtY19jb3JlLmgtNjIwLWludCBzbWNfbmxfZ2V0X3N5c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xMjg4PXN0YXRpYyB2b2lkIHNtY19sbGNfZGVsZXRlX2FzeW1fbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTEzMDctXFx0aWYgKHJjKSB7XFxubmV0L3NtYy9zbWNfbGxjLmM6MTMwODpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kKGxua19uZXcpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTEzMDktXFx0XFx0Z290byBvdXRfZnJlZTtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTEzMTMtXFx0aWYgKCFxZW50cnkpIHtcXG5uZXQvc21jL3NtY19sbGMuYzoxMzE0OlxcdFxcdHNtY3JfbGlua19kb3duX2NvbmQobG5rX25ldyk7XFxubmV0L3NtYy9zbWNfbGxjLmMtMTMxNS1cXHRcXHRnb3RvIG91dF9mcmVlO1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MjExNT1zdGF0aWMgdm9pZCBzbWNfbGxjX3Rlc3RsaW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtMjEzOC1cXHRpZiAocmMgXFx1MDAzYz0gMCkge1xcbm5ldC9zbWMvc21jX2xsYy5jOjIxMzk6XFx0XFx0c21jcl9saW5rX2Rvd25fY29uZF9zY2hlZChsaW5rKTtcXG5uZXQvc21jL3NtY19sbGMuYy0yMTQwLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9zbWMvc21jX3R4LmM9MzE3PXN0YXRpYyBpbnQgc21jX3R4X3JkbWFfd3JpdGUoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLCBpbnQgcGVlcl9ybWJlX29mZnNldCxcXG4tLVxcbm5ldC9zbWMvc21jX3R4LmMtMzM0LVxcdGlmIChyYylcXG5uZXQvc21jL3NtY190eC5jOjMzNTpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3R4LmMtMzM2LVxcdHJldHVybiByYztcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9Nzc9c3RhdGljIGlubGluZSB2b2lkIHNtY193cl90eF9wcm9jZXNzX2NxZShzdHJ1Y3QgaWJfd2MgKndjKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0xMjgtXFx0XFx0LyogdGVybWluYXRlIGxpbmsgKi9cXG5uZXQvc21jL3NtY193ci5jOjEyOTpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3dyLmMtMTMwLVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9MTk1PWludCBzbWNfd3JfdHhfZ2V0X2ZyZWVfc2xvdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTIyMi1cXHRcXHRcXHQvKiB0aW1lb3V0IC0gdGVybWluYXRlIGxpbmsgKi9cXG5uZXQvc21jL3NtY193ci5jOjIyMzpcXHRcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3dyLmMtMjI0LVxcdFxcdFxcdHJldHVybiAtRVBJUEU7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTMwND1pbnQgc21jX3dyX3R4X3NlbmQoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcHJpdilcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtMzE0LVxcdFxcdHNtY193cl90eF9wdXRfc2xvdChsaW5rLCBwcml2KTtcXG5uZXQvc21jL3NtY193ci5jOjMxNTpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3dyLmMtMzE2LVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9MzIwPWludCBzbWNfd3JfdHhfdjJfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwcml2LFxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy0zMzAtXFx0XFx0c21jX3dyX3R4X3B1dF9zbG90KGxpbmssIHByaXYpO1xcbm5ldC9zbWMvc21jX3dyLmM6MzMxOlxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XFxubmV0L3NtYy9zbWNfd3IuYy0zMzItXFx0fVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz0zNjY9aW50IHNtY193cl9yZWdfc2VuZChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBpYl9tciAqbXIpXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTM4Ni1cXHRcXHQvKiB0aW1lb3V0IC0gdGVybWluYXRlIGxpbmsgKi9cXG5uZXQvc21jL3NtY193ci5jOjM4NzpcXHRcXHRzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkKGxpbmspO1xcbm5ldC9zbWMvc21jX3dyLmMtMzg4LVxcdFxcdHJldHVybiAtRVBJUEU7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTQ0OT1zdGF0aWMgaW5saW5lIHZvaWQgc21jX3dyX3J4X3Byb2Nlc3NfY3FlcyhzdHJ1Y3QgaWJfd2Mgd2NbXSwgaW50IG51bSlcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNDY2LVxcdFxcdFxcdGNhc2UgSUJfV0NfV1JfRkxVU0hfRVJSOlxcbm5ldC9zbWMvc21jX3dyLmM6NDY3OlxcdFxcdFxcdFxcdHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWQobGluayk7XFxubmV0L3NtYy9zbWNfd3IuYy00NjgtXFx0XFx0XFx0XFx0aWYgKGxpbmstXFx1MDAzZXdyX3J4X2lkX2NvbXBsID09IGxpbmstXFx1MDAzZXdyX3J4X2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MTozMS40MjcyOTY3NjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc2MDUxNjE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEZvY3VzOiBTTUMgYW5kIExpbmsgRG93biBDb25kaXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBgc21jcl9saW5rX2Rvd25fY29uZGAgYW5kIGBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkYC4gVGhleSdyZSBub24tc3RhdGljLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB0aGV5IGFyZSBlbnRyeSBwb2ludHMuIEFuZCB0aGV5J3JlIGVzc2VudGlhbGx5IHRoZSBnYXRla2VlcGVycyB0byBib3RoIGBzbWNyX2xpbmtfZG93bmAgYW5kIGBzbWNfc3dpdGNoX2Nvbm5zYC4gTWFrZXMgc2Vuc2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjb250cm9sIGZ1bmN0aW9ucyB3b3JrIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgdGhlIGdyZWF0ZXIgc3lzdGVtIGJlaGF2aW9yLlxuXG5UaGVyZWZvcmUsIEknbGwgaW5jbHVkZSBgc21jX3N3aXRjaF9jb25uc2AsIGBzbWNyX2xpbmtfZG93bl9jb25kYCwgYW5kIGBzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkYCBpbiBgRm9jdXNTeW1ib2xzYC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcuXG5cbk5vdywgYmFzZWQgb24gd2hhdCBJIHNlZSBoZXJlLCBpdCBzZWVtcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBgU01DYC4gVGhhdCBtYWtlcyBzZW5zZSBpbiB0aGlzIGNvbnRleHQuIEJ1dCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcsIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0IG1lIHRha2UgYSBsb29rLi4uIGxldCdzIGNoZWNrIHRvIHNlZSBpZiBgU01DYCBpdHNlbGYgZGVwZW5kcyBvbiBhbnl0aGluZyBlbHNlLiBUaGlzIG1pZ2h0IG9wZW4gdXAgYSBicm9hZGVyIHZpZXcgb2YgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDY4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjM4LjE4NzgxNTczNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxMzcyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3NtYy9LY29uZmlnOjE2OlxcdGRlcGVuZHMgb24gU01DXFxubmV0L3NtYy9LY29uZmlnLTE3LVxcdGhlbHBcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZz0yMz1jb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxubmV0L3NtYy9LY29uZmlnOjI1OlxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG5uZXQvc21jL0tjb25maWctMjYtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjM4LjI0Mjk1OTY4MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjA2NDU1NzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgQ2xhcmlmaWNhdGlvbioqXG5cblJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGBTTUNgIHN5c3RlbSwgYW5kIGl0J3MgbWFraW5nIGEgc3RhdGVtZW50IGFib3V0IGl0cyBkZXBlbmRlbmNpZXMuIE9rYXksIGl0ICpkZXBlbmRzKiBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5kLi4uIGhhbmcgb24sIGlzIHRoYXQgcmlnaHQ/IGBESUJTYD8gVGhhdCBmZWVscyBhIGJpdCBvZmYuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0LiBObywgd2FpdCwgaXQgZGVmaW5pdGVseSBzYWlkIHRoYXQgaXQgZGVwZW5kcyBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2AuIEkgbmVlZCB0byByZXJlYWQgdGhpcy4uLiBva2F5LCBqdXN0IHdhbnQgdG8gZW5zdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBkZXBlbmRlbmN5IGdyYXBoIGlzIGFjY3VyYXRlLiBJdCdzIGEga2V5IGNvbXBvbmVudCwgc28gSSdsbCByZXZpZXcgdGhlIGZpbGUgbm93IHRvIGNsYXJpZnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTMyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDE6NDUuNDQ5NDE5NTU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNNQ1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgRElCU1xcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBTTUMtUiBwcm92aWRlcyBhIFxcXCJzb2NrZXRzIG92ZXIgUkRNQVxcXCIgc29sdXRpb24gbWFraW5nIHVzZSBvZlxcbiAgIDc6XFx0XFx0ICBSRE1BIG92ZXIgQ29udmVyZ2VkIEV0aGVybmV0IChSb0NFKSB0ZWNobm9sb2d5IHRvIHVwZ3JhZGVcXG4gICA4OlxcdFxcdCAgQUZfSU5FVCBUQ1AgY29ubmVjdGlvbnMgdHJhbnNwYXJlbnRseS5cXG4gICA5OlxcdFxcdCAgVGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTTUMtUiBzb2x1dGlvbiBpcyBkZXNpZ25lZCBhc1xcbiAgMTA6XFx0XFx0ICBhIHNlcGFyYXRlIHNvY2tldCBmYW1pbHkgU01DLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFNNQ19ESUFHXFxuICAxNTpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFNNQ1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xcbiAgMTk6XFx0XFx0ICBzbWNzcy5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MTo0NS40NDk1MTQ1ODVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIzMDI5Njg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmRpdGlvbiwgYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRoaW5rLCBcIkFoYSEgYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2BcIi4gQnV0IHRoZW4sIHRoZSBgRElCU2AganVtcHMgb3V0IGF0IG1lLiBJcyB0aGF0IGV2ZW4gYSAqcmVhbCogY29uZmlnIG9wdGlvbj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBIYW5nIG9uLCBwZXJoYXBzIGl0J3MgcmVsYXRlZCB0byBgSVBWNmA/IEdvdHRhIGNoZWNrIHRoYXQgdG9vLiBSaWdodCwgbGV0IG1lIGdvIGRpZ2dpbmcgaW4gYG5ldC9zbWMvS2NvbmZpZ2AgdG8gc2VlIGlmIGBESUJTYCBpcyBkZWZpbmVkIGluIHJlbGF0aW9uIHRvIHRoZSByZWxldmFudCBpbnRlcmZhY2VzLiBBY3R1YWxseSwgdGhlIEtjb25maWcgY29uZmlybXMgaXQgKmRvZXMqIGRlcGVuZCBvbiBgRElCU2AuIEhvbGQgb24sIG1heWJlIEknbSBtaXNyZWFkaW5nIHRoaXMuIERvZXMgaXQgaGF2ZSBzb21ldGhpbmcgdG8gZG8gd2l0aCBgSVBWNmA/IExldCBtZSByZXZpc2l0IGBuZXQvc21jL0tjb25maWdgLiBBaCwgYERJQlNgIGlzbid0IGEgc3RhbmRhcmQgY29uZmlnIGVudHJ5IC0gaG1tLCBjb3VsZCBpdCBiZSByZWxhdGVkIHRvIGBDUllQVE9gIGluc3RlYWQ/IEJhY2sgdG8gYG5ldC9zbWMvS2NvbmZpZ2AgaW4gdXBzdHJlYW0gZm9yIHRoZSBkZWZpbml0aXZlIGFuc3dlci4gV2FpdCwgd2h5IGlzIGBESUJTYCBpbiB0aGlzIGNvbnRleHQ/IE5vLCB3YWl0LCBjb3VsZCB0aGlzIGJlIGFib3V0IGBJUFY2YD8gSSBoYXZlIHRvIGdvIGJhY2sgYW5kIGNoZWNrLiBJdCdzIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gcHV6emxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYzMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjUzLjY3OTgxNDAyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQyNzcyNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24gSU5FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MTo1NC4zMjI1OTM4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzQ3OTgzNjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgeW91ciBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGVjb2RpbmcgdGhlIEFjcm9ueW06IERJQlMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiAqRElCUyo/IFRoYXQgdGVybSBmZWVscyBhIGxpdHRsZSBvdXQgb2YgcGxhY2UsIG9yIGF0IGxlYXN0IHVuZmFtaWxpYXIgaW4gdGhpcyBjb250ZXh0LiBCZWZvcmUgSSBjb250aW51ZSBhbmFseXppbmcgd2hhdGV2ZXIncyBpbiBmcm9udCBvZiBtZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNwZWNpZmljIGFjcm9ueW0gKkRJQlMqIG1lYW5zLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpdHMgZGVmaW5pdGlvbiB0byBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBHb3R0YSBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYW5kIG1haW50YWluIHRoYXQgY2xhcml0eSBvZiBmb2N1cy4gTGV0IG1lIHF1aWNrbHkgbG9vayBpdCB1cCBhbmQgbWFrZSBzdXJlIEknbSBvbiB0aGUgcmlnaHQgdHJhY2sgYmVmb3JlIGRpdmluZyBkZWVwZXIuIEkgY2FuJ3QgYWZmb3JkIGFueSBtaXNpbnRlcnByZXRhdGlvbnMsIGVzcGVjaWFsbHkgaWYgdGhlIHN1YnNlcXVlbnQgbWF0ZXJpYWwgaGluZ2VzIG9uIGEgc3BlY2lmaWMgbWVhbmluZyBmb3IgKkRJQlMqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE4MywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQxOjU5LjY3MDU4MDc5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MTM4MjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRElCU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQyOjAxLjk1MTk3MTQxN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDMwNjcyNDk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIERlY2lzaW9ucyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBgU01DYCBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGluIGBzbWNfc3dpdGNoX2Nvbm5zYC4gUmlnaHQsIGBESUJTYCBpcyBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcuIEdvdCBpdC4gU28gSSBuZWVkIHRvIHNldCB1cCB0aGUgY29uZmlndXJhdGlvbnMgcHJvcGVybHkgdG8gaGl0IHRoaXMuIFRoZSBwYXRjaCBtZW50aW9ucyBgU01DYCwgYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuIGBJTkVUYCBpcyBhbHdheXMgdGhlcmUsIG5vIHByb2JsZW0uIEknbGwgZGVmaW5pdGVseSBlbmFibGUgYFNNQ2AsIGBJTkZJTklCQU5EYCwgYW5kIGBESUJTYC4gQnV0IHdhaXQsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBgU01DYCBhbmQgYElORklOSUJBTkRgIGFyZSBib3RoIGVuYWJsZWQuIEFoLCB5ZXMsIGBTTUNgIGRvZXMgZGVwZW5kIG9uIGBJTkZJTklCQU5EYC4gR29vZCwgZ29vZC4gU28gdGhlIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFtcIlNNQ1wiLCBcIklORklOSUJBTkRcIiwgXCJESUJTXCJdYC4gSnVzdCB0byBiZSBzYWZlLCBJJ2xsIGluY2x1ZGUgYERJQlNgLiBJdCBtaWdodCBiZSBhIGN1c3RvbSBjb25maWcgaW4gdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCB0cmVlLCBzbyBsZXQncyBrZWVwIGl0IGluIHRoZXJlLlxuXG5TbywgbGV0J3Mgc3VtbWFyaXplIHdoYXQgSSd2ZSBnb3Q6XG5cbmBXb3J0aEZ1enppbmc6IHRydWVgIC0gYmVjYXVzZSB0aGlzIGlzIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIHdpdGggYSBrbm93biBsZWFrLlxuYFJlYXNvbmluZzogVGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBTTUMgY29yZSBuZXR3b3JraW5nIGNvZGUgKHNtY19zd2l0Y2hfY29ubnMpIHdoZW4gc21jX2NkY19nZXRfZnJlZV9zbG90IGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciB0aGUgU01DIHByb3RvY29sIGZhbWlseS5gIC0gVGhhdCBpcyB0aGUgY29yZSBsb2dpYyBhbmQgZXhwbGFpbnMgd2h5IGl0J3Mgd29ydGggZnV6emluZy5cbmBGb2N1c1N5bWJvbHM6IHNtY19zd2l0Y2hfY29ubnMsIHNtY3JfbGlua19kb3duX2NvbmQsIHNtY3JfbGlua19kb3duX2NvbmRfc2NoZWRgIC0gT2theSwgdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHdhdGNoLlxuYEVuYWJsZUNvbmZpZ3M6IFNNQywgSU5GSU5JQkFORCwgRElCU2AgLSBUaGF0IHdpbGwgZ2V0IHVzIHRoZXJlLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYHNtY19zd2l0Y2hfY29ubnNgIGlzIHRoZSBtYWluIHRhcmdldC4gWWVwLCBsb29rcyBnb29kLiBBbHJpZ2h0LCB0aW1lIHRvIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MTEsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjQyOjEyLjI1ODY5OTgwM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTI4MTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJESUJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic21jX3N3aXRjaF9jb25uc1wiLFxuICAgIFwic21jcl9saW5rX2Rvd25fY29uZFwiLFxuICAgIFwic21jcl9saW5rX2Rvd25fY29uZF9zY2hlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc29ja2V0IHJlZmVyZW5jZSBsZWFrIGluIHRoZSBTTUMgY29yZSBuZXR3b3JraW5nIGNvZGUgKHNtY19zd2l0Y2hfY29ubnMpIHdoZW4gc21jX2NkY19nZXRfZnJlZV9zbG90IGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGZvciB0aGUgU01DIHByb3RvY29sIGZhbWlseS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIkRJQlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfc3dpdGNoX2Nvbm5zXCIsXG4gICAgXCJzbWNyX2xpbmtfZG93bl9jb25kXCIsXG4gICAgXCJzbWNyX2xpbmtfZG93bl9jb25kX3NjaGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzb2NrZXQgcmVmZXJlbmNlIGxlYWsgaW4gdGhlIFNNQyBjb3JlIG5ldHdvcmtpbmcgY29kZSAoc21jX3N3aXRjaF9jb25ucykgd2hlbiBzbWNfY2RjX2dldF9mcmVlX3Nsb3QgZmFpbHMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgZm9yIHRoZSBTTUMgcHJvdG9jb2wgZmFtaWx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MjoxMi40MTM5OTE1NDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTIyMjM1MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDI6MTIuNDE0NzAwOTUzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0OTIxNTIxODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgYHNvY2tfcHV0KFxcdTAwMjZzbWMtXFx1MDAzZXNrKWAgb24gdGhlIGVycm9yIHBhdGggd2hlbiBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIGZhaWxzLiBUaGlzIHJlc29sdmVzIGEgcmVmZXJlbmNlIGNvdW50IGxlYWsgKG1lbW9yeSBsZWFrKSBmb3IgdGhlIHNvY2tldCBzdHJ1Y3R1cmUuIFRoZSB2YXJpYWJsZXMgcG9wdWxhdGVkIGJ5IGBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoKWAgKGB3cl9idWZgIGFuZCBgcGVuZGApIGFyZSBjb3JyZWN0bHkgZ3VhcmRlZCBieSB0aGUgYGlmICghcmMpYCBjaGVjaywgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdXNlZC4gTWVtb3J5IGxlYWtzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgYnkga21lbWxlYWssIGFuZCByZWZlcmVuY2UgY291bnQgaXNzdWVzIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQyYjQxY2Q0MDIwMDJlOTAzMmM0YTI5ZmEzZTM3NTZmZmIxNDY0MDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxNTo0MDoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2NvcmUuYyBiL25ldC9zbWMvc21jX2NvcmUuY1xuaW5kZXggYjQyMDhjYjE4NmM1ZS4uMmY3ZjlkNDY5MjcyMCAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2NvcmUuY1xuKysrIGIvbmV0L3NtYy9zbWNfY29yZS5jXG5AQCAtMTE0OCwxMyArMTE0OCwxMyBAQCBzdHJ1Y3Qgc21jX2xpbmsgKnNtY19zd2l0Y2hfY29ubnMoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4gXHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNmxnci1cdTAwM2Vjb25uc19sb2NrKTtcbiBcdFx0LyogcHJlLWZldGNoIGJ1ZmZlciBvdXRzaWRlIG9mIHNlbmRfbG9jaywgbWlnaHQgc2xlZXAgKi9cbiBcdFx0cmMgPSBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoY29ubiwgdG9fbG5rLCBcdTAwMjZ3cl9idWYsIE5VTEwsIFx1MDAyNnBlbmQpO1xuLVx0XHRpZiAocmMpXG4tXHRcdFx0Z290byBlcnJfb3V0O1xuLVx0XHQvKiBhdm9pZCByYWNlIHdpdGggc21jcl90eF9zbmRidWZfbm9uZW1wdHkoKSAqL1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y29ubi1cdTAwM2VzZW5kX2xvY2spO1xuLVx0XHRzbWNfc3dpdGNoX2xpbmtfYW5kX2NvdW50KGNvbm4sIHRvX2xuayk7XG4tXHRcdHJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4rXHRcdGlmICghcmMpIHtcbitcdFx0XHQvKiBhdm9pZCByYWNlIHdpdGggc21jcl90eF9zbmRidWZfbm9uZW1wdHkoKSAqL1xuK1x0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb25uLVx1MDAzZXNlbmRfbG9jayk7XG4rXHRcdFx0c21jX3N3aXRjaF9saW5rX2FuZF9jb3VudChjb25uLCB0b19sbmspO1xuK1x0XHRcdHJjID0gc21jX3N3aXRjaF9jdXJzb3Ioc21jLCBwZW5kLCB3cl9idWYpO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbm4tXHUwMDNlc2VuZF9sb2NrKTtcbitcdFx0fVxuIFx0XHRzb2NrX3B1dChcdTAwMjZzbWMtXHUwMDNlc2spO1xuIFx0XHRpZiAocmMpXG4gXHRcdFx0Z290byBlcnJfb3V0O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDI6MTIuNDE0NzAzOTEzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzOTM2MjU5ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgUGF0Y2ggaW4gU01DIENvcmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgc21jX3N3aXRjaF9jb25uc2AgaW4gYG5ldC9zbWMvc21jX2NvcmUuY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwgYnV0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGltcG9ydGFudC4gVGhleSd2ZSBzaGlmdGVkIHRoZSBlcnJvciBoYW5kbGluZyBmb3IgYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdGAuIFByZXZpb3VzbHksIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJuZWQgYW4gZXJyb3IgKGByYyAhPSAwYCksIHRoZSBjb2RlIHdvdWxkIGp1bXAgdG8gYGVycl9vdXRgICpiZWZvcmUqIGRlY3JlbWVudGluZyB0aGUgc29ja2V0J3MgcmVmZXJlbmNlIGNvdW50IHdpdGggYHNvY2tfcHV0KFx1MDAyNnNtYy1cdTAwM2VzaylgLiBOb3csIHRoZSBgc29ja19wdXRgIGlzIGFsd2F5cyBjYWxsZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgIHJldHVybiB2YWx1ZS5cblxuRXNzZW50aWFsbHksIHRoZXkncmUgZml4aW5nIGEgcmVmZXJlbmNlIGxlYWshIFdpdGhvdXQgdGhlIGBzb2NrX3B1dGAsIHRoZSByZWZlcmVuY2UgY291bnQgd291bGRuJ3QgYmUgZGVjcmVtZW50ZWQsIGFuZCB0aGUgc29ja2V0IHdvdWxkbid0IGJlIHJlbGVhc2VkLCBsZWFkaW5nIHRvIGEgbWVtb3J5IGxlYWsuIFRoaXMgaXMgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBrbWVtbGVhayB3b3VsZCBwaWNrIHVwLCBub3QgbmVjZXNzYXJpbHkgS01TQU4sIGFzIHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgaGVyZS4gYHdyX2J1ZmAgYW5kIGBwZW5kYCBtaWdodCBiZSB1bmluaXRpYWxpemVkIGlmIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3RgIGZhaWxzLCBidXQgdGhleSdyZSBuZXZlciB1c2VkIGlmIGByY2AgaXMgbm9uLXplcm8sIHNvIHRoZXJlJ3Mgbm8gcmlzayBvZiBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5IHdlcmUgc2tpcHBpbmcgYSBjcml0aWNhbCBgc29ja19wdXRgIGNhbGwuXG5cblRoaXMgaXMgYSBnb29kIGNhdGNoLiBBbHdheXMgaW1wb3J0YW50IHRvIGRvdWJsZS1jaGVjayByZWZlcmVuY2UgY291bnRpbmcsIGVzcGVjaWFsbHkgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIHNpZGUgZWZmZWN0cyBidXQgbG9va3MgZ29vZCBzbyBmYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MjoyMS44MDgzMzI4MzJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjg4NjY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfc3dpdGNoX2Nvbm5zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jb3JlLmM9MTA4Mz12b2lkIHNtY19zd2l0Y2hfbGlua19hbmRfY291bnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTEwOTQtXFxubmV0L3NtYy9zbWNfY29yZS5jOjEwOTU6c3RydWN0IHNtY19saW5rICpzbWNfc3dpdGNoX2Nvbm5zKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbm5ldC9zbWMvc21jX2NvcmUuYy0xMDk2LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNtY19saW5rICpmcm9tX2xuaywgYm9vbCBpc19kZXZfZXJyKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jPTE3ODY9c3RhdGljIHZvaWQgc21jcl9saW5rX2Rvd24oc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTc5NC1cXG5uZXQvc21jL3NtY19jb3JlLmM6MTc5NTpcXHR0b19sbmsgPSBzbWNfc3dpdGNoX2Nvbm5zKGxnciwgbG5rLCB0cnVlKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTc5Ni1cXHRpZiAoIXRvX2xuaykgeyAvKiBubyBiYWNrdXAgbGluayBhdmFpbGFibGUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6NDI6MjEuOTMxMjI1MzU4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDQ5Nzg4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipQYXRjaCBBbmFseXNpcyBhbmQgTWVtb3J5IFNhZmV0eSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZml4LiBTZWVtcyBsaWtlIGEgbWlzc2luZyBgc29ja19wdXRgIG9uIGFuIGVycm9yIHBhdGgsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgcG90ZW50aWFsIHJlZmVyZW5jZSBsZWFrLiBHb29kIGNhdGNoLiBMZXQncyBkaWcgaW4gYSBiaXQgZnVydGhlci5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IHJpc2tzLiBLTVNBTiBpcyBteSBwcmltYXJ5IGNvbmNlcm4gZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBLQVNBTiBpcyB0aGVyZSB0byBkZXRlY3QgdGhlIG5hc3RpZXIgc3R1ZmYg4oCTIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgdGhpbmdzIGxpa2UgdGhhdC4gVGhlbiwgb2YgY291cnNlLCBrbWVtbGVhayBpcyBhbHdheXMgd2F0Y2hpbmcgb3V0IGZvciBwZXJzaXN0ZW50IG1lbW9yeSBsZWFrcy5cblxuU2luY2UgdGhpcyBmaXhlcyBhIGxlYWssIGFuZCBkb2Vzbid0IHNlZW0gdG8gdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB0aGUgcmlzayBvZiBLTVNBTiBmaW5kaW5nIGFueXRoaW5nIGlzIG5lZ2xpZ2libGUuIEknbSBwcmV0dHkgY29uZmlkZW50IGluIHNheWluZyAqKk5lZWRzS01TQU4gaXMgZmFsc2UqKiBmb3IgdGhpcyBvbmUuIFRoaXMgaXMgYSBzb2xpZCwgY2xlYW4gYnVnIGZpeCB0aGF0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgb24gaXRzIG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxMywiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNTo0MjoyNy4zMzYyMDY4MzNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBgc29ja19wdXQoXFx1MDAyNnNtYy1cXHUwMDNlc2spYCBvbiB0aGUgZXJyb3IgcGF0aCB3aGVuIGBzbWNfY2RjX2dldF9mcmVlX3Nsb3QoKWAgZmFpbHMuIFRoaXMgcmVzb2x2ZXMgYSByZWZlcmVuY2UgY291bnQgbGVhayAobWVtb3J5IGxlYWspIGZvciB0aGUgc29ja2V0IHN0cnVjdHVyZS4gVGhlIHZhcmlhYmxlcyBwb3B1bGF0ZWQgYnkgYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCgpYCAoYHdyX2J1ZmAgYW5kIGBwZW5kYCkgYXJlIGNvcnJlY3RseSBndWFyZGVkIGJ5IHRoZSBgaWYgKCFyYylgIGNoZWNrLCBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB1c2VkLiBNZW1vcnkgbGVha3MgYXJlIHR5cGljYWxseSBkZXRlY3RlZCBieSBrbWVtbGVhaywgYW5kIHJlZmVyZW5jZSBjb3VudCBpc3N1ZXMgYXJlIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGBzb2NrX3B1dChcXHUwMDI2c21jLVxcdTAwM2VzaylgIG9uIHRoZSBlcnJvciBwYXRoIHdoZW4gYHNtY19jZGNfZ2V0X2ZyZWVfc2xvdCgpYCBmYWlscy4gVGhpcyByZXNvbHZlcyBhIHJlZmVyZW5jZSBjb3VudCBsZWFrIChtZW1vcnkgbGVhaykgZm9yIHRoZSBzb2NrZXQgc3RydWN0dXJlLiBUaGUgdmFyaWFibGVzIHBvcHVsYXRlZCBieSBgc21jX2NkY19nZXRfZnJlZV9zbG90KClgIChgd3JfYnVmYCBhbmQgYHBlbmRgKSBhcmUgY29ycmVjdGx5IGd1YXJkZWQgYnkgdGhlIGBpZiAoIXJjKWAgY2hlY2ssIGVuc3VyaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHVzZWQuIE1lbW9yeSBsZWFrcyBhcmUgdHlwaWNhbGx5IGRldGVjdGVkIGJ5IGttZW1sZWFrLCBhbmQgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyBhcmUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowblrnd[1] Phase: Succeeded StartedAt: 2026-08-20 15:42:39 +0000 UTC FinishedAt: 2026-08-20 15:42:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 15:42:39 +0000 UTC FinishedAt: 2026-08-20 15:42:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2] Phase: Succeeded StartedAt: 2026-08-20 15:42:39 +0000 UTC FinishedAt: 2026-08-20 19:26:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-20 15:42:39 +0000 UTC FinishedAt: 2026-08-20 19:26:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-20 15:42:39 +0000 UTC FinishedAt: 2026-08-20 15:42:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-20 15:42:39 +0000 UTC FinishedAt: 2026-08-20 15:42:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblrnd/series-workflowblrnd-convert-artifact-2507585634/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-20 15:42:49 +0000 UTC FinishedAt: 2026-08-20 16:00:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-20 15:42:49 +0000 UTC FinishedAt: 2026-08-20 16:00:35 +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:*7efc89af-b101-41f7-8cfa-8ff21dbdec83,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-workflowblrnd/series-workflowblrnd-convert-artifact-2507585634/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": "4dbafa59-177b-4136-9edb-40761fa51728", "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-workflowblrnd/series-workflowblrnd-build-action-2766278688/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-20 15:42:49 +0000 UTC FinishedAt: 2026-08-20 16:00:25 +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:*7efc89af-b101-41f7-8cfa-8ff21dbdec83,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-workflowblrnd/series-workflowblrnd-convert-artifact-2507585634/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": "4dbafa59-177b-4136-9edb-40761fa51728", "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-workflowblrnd/series-workflowblrnd-build-action-2766278688/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-20 16:00:35 +0000 UTC FinishedAt: 2026-08-20 16:00:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-20 16:00:35 +0000 UTC FinishedAt: 2026-08-20 16:00:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-20 16:00:35 +0000 UTC FinishedAt: 2026-08-20 16:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-20 16:00:35 +0000 UTC FinishedAt: 2026-08-20 16:00:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblrnd/series-workflowblrnd-convert-artifact-3452668093/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-20 16:00:46 +0000 UTC FinishedAt: 2026-08-20 16:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-20 16:00:46 +0000 UTC FinishedAt: 2026-08-20 16:02:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4dbafa59-177b-4136-9edb-40761fa51728,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-workflowblrnd/series-workflowblrnd-build-action-2766278688/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-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-20 16:02:45 +0000 UTC FinishedAt: 2026-08-20 16:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-20 16:02:45 +0000 UTC FinishedAt: 2026-08-20 16:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-20 16:02:45 +0000 UTC FinishedAt: 2026-08-20 16:23:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-20 16:02:45 +0000 UTC FinishedAt: 2026-08-20 16:23:05 +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:*7efc89af-b101-41f7-8cfa-8ff21dbdec83,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-workflowblrnd/series-workflowblrnd-convert-artifact-3452668093/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": "0915a435-b1ad-48f0-9be8-1feb1966a44f", "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-workflowblrnd/series-workflowblrnd-build-action-580528153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-20 16:02:45 +0000 UTC FinishedAt: 2026-08-20 16:22:55 +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:*7efc89af-b101-41f7-8cfa-8ff21dbdec83,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-workflowblrnd/series-workflowblrnd-convert-artifact-3452668093/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": "0915a435-b1ad-48f0-9be8-1feb1966a44f", "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-workflowblrnd/series-workflowblrnd-build-action-580528153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-20 16:23:05 +0000 UTC FinishedAt: 2026-08-20 16:23:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-20 16:23:05 +0000 UTC FinishedAt: 2026-08-20 16:23:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-20 16:23:05 +0000 UTC FinishedAt: 2026-08-20 16:24:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-20 16:23:05 +0000 UTC FinishedAt: 2026-08-20 16:24:33 +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:*0915a435-b1ad-48f0-9be8-1feb1966a44f,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-workflowblrnd/series-workflowblrnd-build-action-580528153/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-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-20 16:24:43 +0000 UTC FinishedAt: 2026-08-20 19:26:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-20 16:24:43 +0000 UTC FinishedAt: 2026-08-20 19:26:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"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:*4dbafa59-177b-4136-9edb-40761fa51728,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0915a435-b1ad-48f0-9be8-1feb1966a44f,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-workflowblrnd/series-workflowblrnd-build-action-2766278688/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-workflowblrnd/series-workflowblrnd-build-action-580528153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-20 16:24:43 +0000 UTC FinishedAt: 2026-08-20 16:25:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-20 16:24:43 +0000 UTC FinishedAt: 2026-08-20 16:24:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"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-workflowblrnd/series-workflowblrnd-convert-artifact-2642414402/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-20 16:24:43 +0000 UTC FinishedAt: 2026-08-20 16:24:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-20 16:24:43 +0000 UTC FinishedAt: 2026-08-20 16:24:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-20 16:24:43 +0000 UTC FinishedAt: 2026-08-20 16:24:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-20 16:25:04 +0000 UTC FinishedAt: 2026-08-20 19:26:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblrnd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_switch_conns","smcr_link_down_cond","smcr_link_down_cond_sched"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3aa1dcaa4f6f5ae08936491e08bd456f331f2d40","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","INFINIBAND","DIBS"],"series_id":"acc6cc60-cb21-45a9-b2eb-1015595ead51","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-20 16:25:04 +0000 UTC FinishedAt: 2026-08-20 19:26:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4dbafa59-177b-4136-9edb-40761fa51728,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0915a435-b1ad-48f0-9be8-1feb1966a44f,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-workflowblrnd/series-workflowblrnd-build-action-2766278688/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-workflowblrnd/series-workflowblrnd-build-action-580528153/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-workflowblrnd/series-workflowblrnd-convert-artifact-2642414402/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,}