Name: series-workflowm2lfh Phase: Succeeded StartedAt: 2026-09-08 21:41:58 +0000 UTC FinishedAt: 2026-09-08 23:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[0] Phase: Succeeded StartedAt: 2026-09-08 21:41:58 +0000 UTC FinishedAt: 2026-09-08 21:44:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 21:41:58 +0000 UTC FinishedAt: 2026-09-08 21:44:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1d8e73163ef933624341075f576e2f36ef9133f7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH9K_COMMON_SPECTRAL", "ATH9K_HTC", "ATH9K_HTC_DEBUGFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1d8e73163ef933624341075f576e2f36ef9133f7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH9K_COMMON_SPECTRAL", "ATH9K_HTC", "ATH9K_HTC_DEBUGFS" ], "series_id": "75a74993-46bb-41fe-a3e4-9c96c463edc4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "write_file_spec_scan_ctl", "ath9k_cmn_spectral_scan_config", "ath9k_cmn_spectral_scan_trigger" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDlLX0NPTU1PTl9TUEVDVFJBTCYjMzQ7LAogICAgJiMzNDtBVEg5S19IVEMmIzM0OywKICAgICYjMzQ7QVRIOUtfSFRDX0RFQlVHRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwmIzM0OywKICAgICYjMzQ7YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnJiMzNDssCiAgICAmIzM0O2F0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc3RhdGUgY2hlY2sgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcdTAwMjZjb21tb24tXHUwMDNlb3BfZmxhZ3MpKSBpbiB0aGUgZGVidWdmcyB3cml0ZSBoYW5kbGVyIHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCgpIHRvIHByZXZlbnQgc3BlY3RyYWwgc2NhbiBjb21tYW5kcyBmcm9tIGRyaXZpbmcgUEhZIHJlZ2lzdGVyIHdyaXRlcyB3aGVuIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciB0aGUgQVRIX09QX0lOVkFMSUQgZmxhZyBpbiB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB3aXRoaW4gdGhlIGF0aDlrIHNwZWN0cmFsIHNjYW4gZGVidWdmcyBpbnRlcmZhY2UgdG8gcmVqZWN0IFBIWSByZWdpc3RlciB3cml0ZSBjb21tYW5kcyB3aGlsZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gb2YgdGhlIGF0aDlrX2h0YyBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNmQ5NmJkMTBkZjc3NTM3Yzk0MDNlYjg5MDU2ODlmMDAzZmUxMzZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMTo0Mzo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcbmluZGV4IGNhMDFhMDdmNjYzMGMuLjBiYmJlZjllM2I5YzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1xuQEAgLTgwNSw2ICYjNDM7ODA1LDE0IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcbiBcdGJ1ZltsZW5dID0gJiMzOTtcXDAmIzM5OztcbiBcbiYjNDM7XHQvKiBFdmVyeSBjb21tYW5kIGJlbG93IGRyaXZlcyBQSFkgcmVnaXN0ZXIgd3JpdGVzLiBSZWZ1c2UgdGhlbSB3aGlsZVxuJiM0MztcdCAqIHRoZSBoYXJkd2FyZSBpcyBkaXNhYmxlZCAodGhlIGludGVyZmFjZSBpcyBkb3duKTogb24gdGhlIEFSOTI3MVxuJiM0MztcdCAqIHRoYXQgdHJhZmZpYyBoYW5ncyB0aGUgZmlybXdhcmUgdW50aWwgdGhlIGRldmljZSBpcyByZS1lbnVtZXJhdGVkLlxuJiM0MztcdCAqIFRoZSByZXNldCBjb250cm9sIHJlZnVzZXMgb24gdGhlIHNhbWUgZmxhZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFx1MDAyNmNvbW1vbi1cdTAwM2VvcF9mbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiBcdGlmIChzdHJuY21wKFwmIzM0O3RyaWdnZXJcJiMzNDssIGJ1ZiwgNykgPT0gMCkge1xuIFx0XHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGNvbW1vbiwgc3BlY19wcml2KTtcbiBcdH0gZWxzZSBpZiAoc3RybmNtcChcJiMzNDtiYWNrZ3JvdW5kXCYjMzQ7LCBidWYsIDEwKSA9PSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRIOUtfQ09NTU9OX1NQRUNUUkFMJiMzNDssCiAgICAmIzM0O0FUSDlLX0hUQyYjMzQ7LAogICAgJiMzNDtBVEg5S19IVENfREVCVUdGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCYjMzQ7LAogICAgJiMzNDthdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcmIzM0OywKICAgICYjMzQ7YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgZm9yIHRoZSBBVEhfT1BfSU5WQUxJRCBmbGFnIGluIHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCgpIHdpdGhpbiB0aGUgYXRoOWsgc3BlY3RyYWwgc2NhbiBkZWJ1Z2ZzIGludGVyZmFjZSB0byByZWplY3QgUEhZIHJlZ2lzdGVyIHdyaXRlIGNvbW1hbmRzIHdoaWxlIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgZG93bi4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiBvZiB0aGUgYXRoOWtfaHRjIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI2ZDk2YmQxMGRmNzc1MzdjOTQwM2ViODkwNTY4OWYwMDNmZTEzNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIxOjQzOjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jCmluZGV4IGNhMDFhMDdmNjYzMGMuLjBiYmJlZjllM2I5YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMKQEAgLTgwNSw2ICYjNDM7ODA1LDE0IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAogCWJ1ZltsZW5dID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7CS8qIEV2ZXJ5IGNvbW1hbmQgYmVsb3cgZHJpdmVzIFBIWSByZWdpc3RlciB3cml0ZXMuIFJlZnVzZSB0aGVtIHdoaWxlCiYjNDM7CSAqIHRoZSBoYXJkd2FyZSBpcyBkaXNhYmxlZCAodGhlIGludGVyZmFjZSBpcyBkb3duKTogb24gdGhlIEFSOTI3MQomIzQzOwkgKiB0aGF0IHRyYWZmaWMgaGFuZ3MgdGhlIGZpcm13YXJlIHVudGlsIHRoZSBkZXZpY2UgaXMgcmUtZW51bWVyYXRlZC4KJiM0MzsJICogVGhlIHJlc2V0IGNvbnRyb2wgcmVmdXNlcyBvbiB0aGUgc2FtZSBmbGFnLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCAmYW1wO2NvbW1vbi0mZ3Q7b3BfZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAlpZiAoc3RybmNtcCgmIzM0O3RyaWdnZXImIzM0OywgYnVmLCA3KSA9PSAwKSB7CiAJCWF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpOwogCX0gZWxzZSBpZiAoc3RybmNtcCgmIzM0O2JhY2tncm91bmQmIzM0OywgYnVmLCAxMCkgPT0gMCkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdpcmVsZXNzIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCBhZmZlY3RzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNgLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGxpY2F0aW9ucy4gT2theSwgc28gaXQgbG9va3MgbGlrZSBgYXRoOWtgIGlzIHRoZSBmb2N1cywgYW5kIGl0JiMzOTtzIGluIHRoZSB3aXJlbGVzcyBkcml2ZXIgc3BhY2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoaXMgcmVsYXRlIHRvIHRoZSBsYXJnZXIgc3lzdGVtPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGF0aDlrYCBhbmQgYGF0aDlrX2h0Y2AuIFdhaXQsIGlzbiYjMzk7dCBgYXRoOWtgIFBDSS9BSEIgYW5kIGBhdGg5a19odGNgIFVTQj8KClRoaXMgYWRkcyBzb21lIGNvbXBsZXhpdHkgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHRlc3RpbmcgYW5kIHZlcmlmaWNhdGlvbi4gQXJlIHRoZXkgYWN0dWFsbHkgdXNpbmcgdGhpcyBjb21tb24gZmlsZSBkaXJlY3RseSwgb3IgaXMgaXQgcG90ZW50aWFsbHkgZW11bGF0ZWQgdmlhIFVTQiBSYXcgR2FkZ2V0IGluIHNvbWV0aGluZyBsaWtlIHN5emthbGxlcj8gVGhhdCYjMzk7cyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBjb21tb24tc3BlY3RyYWwuY2AgaXMgYWN0dWFsbHkgdXRpbGl6ZWQgaW4gZWFjaCBlbnZpcm9ubWVudC4gQWxyaWdodCwgbGV0JiMzOTtzIHRyYWNrIGRvd24gd2hlcmUgYGNvbW1vbi1zcGVjdHJhbC5jYCBpcyB1c2VkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBzZWFyY2ggZm9yIHRoZSBmaWxlIGFuZCBpdHMgYXNzb2NpYXRlZCBLY29uZmlnIGFuZCBNYWtlZmlsZSBlbnRyaWVzLiBLbm93aW5nIHdoZXJlIHRoZSBzb3VyY2UgaXMgYnVpbHQgYW5kIHVzZWQgaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdCBmcm9tIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tbW9uLXNwZWN0cmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZT02NT1hdGg5a19jb21tb24tJChDT05GSUdfQVRIOUtfQ09NTU9OX0RFQlVHKSAmIzQzOz0gY29tbW9uLWRlYnVnLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZTo2NjphdGg5a19jb21tb24tJChDT05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMKSAmIzQzOz0gY29tbW9uLXNwZWN0cmFsLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS02Ny1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtMjYtI2luY2x1ZGUgXCYjMzQ7Y29tbW9uLWRlYnVnLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaDoyNzojaW5jbHVkZSBcJiMzNDtjb21tb24tc3BlY3RyYWwuaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oLTI4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipLY29uZmlnIERpdmUgZm9yIGF0aDlrICZhbXA7IFNwZWN0cmFsIFN1cHBvcnQqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlIGBhdGg5a2AgZHJpdmVyLCBpdHMgY29tbW9uIGNvbXBvbmVudHMgKGBhdGg5a19jb21tb25gKSwgYW5kIHRoZSBIVEMgdmFyaWFudCAoYGF0aDlrX2h0Y2ApIGFyZSBjb25maWd1cmVkLCBhbmQgd2hldGhlciBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCBpcyBhcHByb3ByaWF0ZWx5IGhhbmRsZWQuIFRoaXMgaXMgbGlrZWx5IHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50LCBhcyBpdCBkZWZpbmVzIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBzcGVjdHJhbCBhbmFseXNpcyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgdW5kZXJzdGFuZCB1bmRlciB3aGljaCBjb25kaXRpb25zIHRoZXNlIG9wdGlvbnMgYmVjb21lIHZpc2libGUuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGVsZW1lbnRzIHJlbGF0ZSB0byBlYWNoIG90aGVyIGluIHRlcm1zIG9mIGJ1aWxkIG9wdGlvbnMuIEFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgYXJlIGdvaW5nIHRvIG5lZWQgYSBjbG9zZSBsb29rLiBUaGlzIGlzIHRoZSBiZWRyb2NrIG9mIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBleHBvc2VkIGFuZCBpbmNvcnBvcmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVRIOUtfQ09NTU9OX1NQRUNUUkFMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTE5NT1jb25maWcgQVRIOUtfSFdSTkdcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0yMDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoyMDY6Y29uZmlnIEFUSDlLX0NPTU1PTl9TUEVDVFJBTFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjA3LVx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrL2F0aDlrX2h0YyBzcGVjdHJhbCBzY2FuIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU9NjU9YXRoOWtfY29tbW9uLSQoQ09ORklHX0FUSDlLX0NPTU1PTl9ERUJVRykgJiM0Mzs9IGNvbW1vbi1kZWJ1Zy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6NjY6YXRoOWtfY29tbW9uLSQoQ09ORklHX0FUSDlLX0NPTU1PTl9TUEVDVFJBTCkgJiM0Mzs9IGNvbW1vbi1zcGVjdHJhbC5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtNjctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oPTE2Nj1zdGF0aWMgaW5saW5lIHU4IHNwZWN0cmFsX2JpdG1hcF93ZWlnaHQodTggKmJpbnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE3MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzE6I2lmZGVmIENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzItdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTk3PXN0YXRpYyBpbmxpbmUgaW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yMDItfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjIwMzojZW5kaWYgLyogQ09ORklHX0FUSDlLX0NPTU1PTl9TUEVDVFJBTCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTIwNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDQ4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBBVEg5S19DT01NT05fU1BFQ1RSQUwgaW4gS2NvbmZpZyBmb3IgYXRoOWsgYW5kIGF0aDlrX2h0YyBSZWxhdGlvbnNoaXAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGBBVEg5S19DT01NT05fU1BFQ1RSQUxgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiB0aWVzIHRvZ2V0aGVyIHRoZSBgYXRoOWtgIGFuZCBgYXRoOWtfaHRjYCBkcml2ZXJzLiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIHNvbWUgY29tbW9uIGZ1bmN0aW9uYWxpdHksIGxpa2VseSBzcGVjdHJhbCBhbmFseXNpcyBvciByZWxhdGVkIGZlYXR1cmVzLCB0aGF0JiMzOTtzIHNoYXJlZCBvciBhdCBsZWFzdCBjb25kaXRpb25hbGx5IHVzZWQgYmV0d2VlbiB0aGUgdHdvLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSB0aGUga2V5IHRvIHVubG9ja2luZyB0aGlzIGRlcGVuZGVuY3kgYW5kIHVuZGVyc3RhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIChlLmcuLCBkcml2ZXIgc2VsZWN0aW9uLCBoYXJkd2FyZSBzdXBwb3J0KSBpdCYjMzk7cyBlbmFibGVkLiBJIG5lZWQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIGRlZmluZWQgdGhyb3VnaCBgc2VsZWN0YCBvciBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGNvZGUsIGFuZCBob3cgdGhlc2Ugc2VwYXJhdGUgZGV2aWNlcyB3b3JrIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdFx0c2VsZWN0IEFUSDlLX0NPTU1PTl9ERUJVR1xuIDE5MTpcdFx0aGVscFxuIDE5MjpcdFx0ICBTYXkgWSwgaWYgeW91IG5lZWQgYWNjZXNzIHRvIGF0aDlrX2h0YyYjMzk7cyBzdGF0aXN0aWNzLlxuIDE5MzpcdFx0ICBBcyB3ZWxsIGFzIGFjY2VzcyB0byB0aGUgRkZUL3NwZWN0cmFsIGRhdGEuXG4gMTk0Olx0XG4gMTk1Olx0Y29uZmlnIEFUSDlLX0hXUk5HXG4gMTk2Olx0XHRib29sIFwmIzM0O1JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHN1cHBvcnRcJiMzNDtcbiAxOTc6XHRcdGRlcGVuZHMgb24gQVRIOUsgXHUwMDI2XHUwMDI2IChIV19SQU5ET00gPSB5IHx8IEhXX1JBTkRPTSA9IEFUSDlLKVxuIDE5ODpcdFx0ZGVmYXVsdCBuXG4gMTk5Olx0XHRoZWxwXG4gMjAwOlx0XHQgIFRoaXMgb3B0aW9uIGluY29ycG9yYXRlcyB0aGUgQURDIHJlZ2lzdGVyIG91dHB1dCBhcyBhIHNvdXJjZSBvZlxuIDIwMTpcdFx0ICByYW5kb21uZXNzIGludG8gTGludXggZW50cm9weSBwb29sICgvZGV2L3VyYW5kb20gYW5kIC9kZXYvcmFuZG9tKVxuIDIwMjpcdFxuIDIwMzpcdFx0ICBTYXkgWSwgZmVlZHMgdGhlIGVudHJvcHkgZGlyZWN0bHkgZnJvbSB0aGUgV2lGaSBkcml2ZXIgdG8gdGhlIGlucHV0XG4gMjA0Olx0XHQgIHBvb2wuXG4gMjA1Olx0XG4gMjA2Olx0Y29uZmlnIEFUSDlLX0NPTU1PTl9TUEVDVFJBTFxuIDIwNzpcdFx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrL2F0aDlrX2h0YyBzcGVjdHJhbCBzY2FuIHN1cHBvcnRcJiMzNDtcbiAyMDg6XHRcdGRlcGVuZHMgb24gQVRIOUtfREVCVUdGUyB8fCBBVEg5S19IVENfREVCVUdGU1xuIDIwOTpcdFx0c2VsZWN0IFJFTEFZXG4gMjEwOlx0XHRkZWZhdWx0IG5cbiAyMTE6XHRcdGhlbHBcbiAyMTI6XHRcdCAgU2F5IFkgdG8gZW5hYmxlIGFjY2VzcyB0byB0aGUgRkZUL3NwZWN0cmFsIGRhdGEgdmlhIGRlYnVnZnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTExNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEFUSDlLX0hUQyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhdGg5a19odGNgLiBSaWdodCwgaXQmIzM5O3MgYSBVU0IgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYW4gYEFUSDlLX0hUQ2Agb25lLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBhbmQgd2hlcmUgdGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUSDlLX0hUQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZz0xNTY9Y29uZmlnIEFUSDlLX1BDSV9OT19FRVBST01cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNzI6Y29uZmlnIEFUSDlLX0hUQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTczLVx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBIVEMgYmFzZWQgd2lyZWxlc3MgY2FyZHMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE4Nzpjb25maWcgQVRIOUtfSFRDX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5a19odGMgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkludmVzdGlnYXRpbmcgdGhlIGF0aDlrLWh0YyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhdGg5ay1odGMgZHJpdmVyIGhhbmRsZXMgaXRzIGluaXRpYWxpemF0aW9uLiAgU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGhvdyBpdCByZWdpc3RlcnMgdGhlIFVTQiBkZXZpY2UsIGFuZCwgb2YgY291cnNlLCBob3cgaXQgc2V0cyB1cCBmZWF0dXJlcyBsaWtlIHNwZWN0cmFsIHNjYW4gYW5kIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZS4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgaXRzZWxmLiBHaXZlbiB0aGF0LCBJJiMzOTttIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZpcnN0IHN0b3AgaXMgcHJvYmFibHkgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuY2AsIG9yIHNvbWV0aGluZyBjbG9zZWx5IGFuYWxvZ291cyBpbiB0aGUgYXRoOWstaHRjIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkZXZpY2Ugc2V0dXAgbG9naWMgbGl2ZXMuIEkmIzM5O2xsIG5lZWQgdG8gcG9yZSBvdmVyIHRoYXQgZmlsZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhlIFVTQiBkZXZpY2UgaXMgcHJvYmVkIGFuZCBib3VuZCwgYW5kIHRoZW4gdHJhY2UgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgc3BlY3RyYWwgc2NhbiBjYXBhYmlsaXRpZXMgYW5kIHRoZSBkZWJ1Z2ZzIGVudHJpZXMuIEhvcGVmdWxseSwgaXTigJlzIGFsbCBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGFuZCB3ZWxsLWNvbW1lbnRlZC4gSWYgbm90LCBJJiMzOTtsbCBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCByZWxhdGVkIGZ1bmN0aW9uIGNhbGxzIGFuZCBsb29rIGZvciB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi4gSG9wZWZ1bGx5IHRoaXMgaXMgd2hlcmUgSSB3aWxsIGZpbmQgd2hhdCBJIGFtIGxvb2tpbmcgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGg5a19jbW5fc3BlY3RyYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NoYW5uZWwuYz0yMz1zdGF0aWMgaW50IGF0aF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX3NvZnRjICpzYylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2hhbm5lbC5jLTk2LVx0XHRcdHNjLVx1MDAzZXNwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0NIQU5TQ0FOKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NoYW5uZWwuYzo5NzpcdFx0XHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGNvbW1vbiwgXHUwMDI2c2MtXHUwMDNlc3BlY19wcml2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jaGFubmVsLmMtOTgtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jPTY5MD1zdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy03MTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6NzE1OnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcihzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTcxNi1cdFx0XHRcdCBzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTc0Mi1cdCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjc0MzpcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgc3BlY19wcml2LVx1MDAzZXNwZWN0cmFsX21vZGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTc0NC1cdGF0aDlrX2h3X29wcyhhaCktXHUwMDNlc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGFoKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzQ2LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzo3NDc6RVhQT1JUX1NZTUJPTChhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy03NDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6NzQ5OmludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy03NTAtXHRcdFx0ICAgICAgIHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzg3LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzo3ODg6RVhQT1JUX1NZTUJPTChhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTc4OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYz03OTA9c3RhdGljIHNzaXplX3Qgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy04MTYtXHRpZiAoc3RybmNtcChcJiMzNDt0cmlnZ2VyXCYjMzQ7LCBidWYsIDcpID09IDApIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzo4MTc6XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgxOC1cdH0gZWxzZSBpZiAoc3RybmNtcChcJiMzNDtiYWNrZ3JvdW5kXCYjMzQ7LCBidWYsIDEwKSA9PSAwKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6ODE5Olx0XHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoY29tbW9uLCBzcGVjX3ByaXYsIFNQRUNUUkFMX0JBQ0tHUk9VTkQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgyMC1cdFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXCYjMzQ7c3BlY3RyYWwgc2NhbjogYmFja2dyb3VuZCBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgyMS1cdH0gZWxzZSBpZiAoc3RybmNtcChcJiMzNDtjaGFuc2NhblwmIzM0OywgYnVmLCA4KSA9PSAwKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6ODIyOlx0XHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoY29tbW9uLCBzcGVjX3ByaXYsIFNQRUNUUkFMX0NIQU5TQ0FOKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy04MjMtXHRcdGF0aF9kYmcoY29tbW9uLCBDT05GSUcsIFwmIzM0O3NwZWN0cmFsIHNjYW46IGNoYW5uZWwgc2NhbiBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgyNC1cdH0gZWxzZSBpZiAoc3RybmNtcChcJiMzNDttYW51YWxcJiMzNDssIGJ1ZiwgNikgPT0gMCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjgyNTpcdFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9NQU5VQUwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgyNi1cdFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXCYjMzQ7c3BlY3RyYWwgc2NhbjogbWFudWFsIG1vZGUgZW5hYmxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtODI3LVx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O2Rpc2FibGVcJiMzNDssIGJ1ZiwgNykgPT0gMCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjgyODpcdFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9ESVNBQkxFRCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtODI5LVx0XHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcJiMzNDtzcGVjdHJhbCBzY2FuOiBkaXNhYmxlZFxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jPTEwNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCByY2hhbl9jYWxsYmFja3MgcmZzX3NwZWNfc2Nhbl9jYiA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtMTA1Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzoxMDUzOnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtMTA1NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTEwNTktfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjEwNjA6RVhQT1JUX1NZTUJPTChhdGg5a19jbW5fc3BlY3RyYWxfZGVpbml0X2RlYnVnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy0xMDYxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjEwNjI6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtMTA2My1cdFx0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy0xMDkyLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzoxMDkzOkVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaD0xNjY9c3RhdGljIGlubGluZSB1OCBzcGVjdHJhbF9iaXRtYXBfd2VpZ2h0KHU4ICpiaW5zKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzEtI2lmZGVmIENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzI6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzM6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE3NTp2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzYtXHRcdFx0XHQgc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzc6aW50IGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE3OC1cdFx0XHQgICAgICAgc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaD0xODA9aW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODItI2Vsc2VcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxODM6c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9pbml0X2RlYnVnKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODQtXHRcdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTg4OnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTkyOnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTkzLVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYz0xMzcyPXZvaWQgYXRoOWtfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMtMTM3My17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYzoxMzc0Olx0YXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhcdTAwMjZzYy1cdTAwM2VzcGVjX3ByaXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMtMTM3NS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmM9MTM3Nz1pbnQgYXRoOWtfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYy0xMzkxLVx0YXRoOWtfdHg5OV9pbml0X2RlYnVnKHNjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jOjEzOTI6XHRhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhcdTAwMjZzYy1cdTAwM2VzcGVjX3ByaXYsIHNjLVx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jLTEzOTMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYz00Nzc9dm9pZCBhdGg5a19odGNfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDc4LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM6NDc5Olx0YXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQ4MC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYz00ODI9aW50IGF0aDlrX2h0Y19pbml0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDg5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYzo0OTA6XHRhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdiwgcHJpdi1cdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQ5MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM9MjQwPXN0YXRpYyBpbnQgYXRoOWtfaHRjX3NldF9jaGFubmVsKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzE2LVx0XHQgICAgIHByaXYtXHUwMDNlc3BlY19wcml2LnNwZWN0cmFsX21vZGUgPT0gU1BFQ1RSQUxfQ0hBTlNDQU4pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6MzE3Olx0XHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGNvbW1vbiwgXHUwMDI2cHJpdi1cdTAwM2VzcGVjX3ByaXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTMxOC1lcnI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGF0aDlrX2h0YyBEcml2ZXIgZm9yIEZ1enppbmcqKgoKT2theSwgc28gYXRoOWtfaHRjIGlzIGEgVVNCIGRldmljZSBkcml2ZXIg4oCTIHRoYXQmIzM5O3MgdGhlIGtleS4gQW5kIGlmIGl0JiMzOTtzIFVTQiwgdGhlbiBpdCYjMzk7cyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGVtdWxhdGlvbiB0aHJvdWdoIFVTQiBSYXcgR2FkZ2V0IGFuZCBzdWJzZXF1ZW50IGZ1enppbmcgd2l0aCB0b29scyBsaWtlIHN5emthbGxlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgc3l6a2FsbGVyIGNhbiBldmVuICp0YXJnZXQqIHRoaXMgZHJpdmVyLiBHb29kIG5ld3Mg4oCTIGl0IGNhbiEgVGhlIFVTQiBJRHMgYXJlIHByZXNlbnQsIG1lYW5pbmcgc3l6a2FsbGVyIGNhbiBwcm9iZSBmb3IgYXRoOWtfaHRjIGRldmljZXMuCgpOb3csIGxldCYjMzk7cyBkaWcgZGVlcGVyLiBXaGVyZSBhcmUgdGhlIGp1aWN5IHRhcmdldHM/IFdlIG5lZWQgdG8gbG9vayBmb3IgaW50ZXJlc3RpbmcgZW50cnkgcG9pbnRzLCBwZXJoYXBzIHRocm91Z2ggZGVidWdmcyBhY2Nlc3Mgb3Igc29tZSBvdGhlciBwcml2aWxlZ2VkIGludGVyYWN0aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCBpcyBhY3R1YWxseSByZWFjaGVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSBpdHMgZGVmaW5pdGlvbiwgc28gSSYjMzk7bGwgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGV4YW1pbmUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY2AgYXJvdW5kIGxpbmUgODA1LiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQgYW5kIGlkZW50aWZ5IHRoZSBhdHRhY2sgc3VyZmFjZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5MDpcdHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiA3OTE6XHRcdFx0XHRcdFx0Y29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuIDc5MjpcdFx0XHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiA3OTM6XHR7XG4gNzk0Olx0XHRzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA3OTU6XHRcdHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc3BlY19wcml2LVx1MDAzZWFoKTtcbiA3OTY6XHRcdGNoYXIgYnVmWzMyXTtcbiA3OTc6XHRcdHNzaXplX3QgbGVuO1xuIDc5ODpcdFxuIDc5OTpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FUSDlLX1RYOTkpKVxuIDgwMDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gODAxOlx0XG4gODAyOlx0XHRsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7XG4gODAzOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSlcbiA4MDQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gODA1Olx0XG4gODA2Olx0XHRidWZbbGVuXSA9ICYjMzk7XFwwJiMzOTs7XG4gODA3Olx0XG4gODA4Olx0XHQvKiBFdmVyeSBjb21tYW5kIGJlbG93IGRyaXZlcyBQSFkgcmVnaXN0ZXIgd3JpdGVzLiBSZWZ1c2UgdGhlbSB3aGlsZVxuIDgwOTpcdFx0ICogdGhlIGhhcmR3YXJlIGlzIGRpc2FibGVkICh0aGUgaW50ZXJmYWNlIGlzIGRvd24pOiBvbiB0aGUgQVI5MjcxXG4gODEwOlx0XHQgKiB0aGF0IHRyYWZmaWMgaGFuZ3MgdGhlIGZpcm13YXJlIHVudGlsIHRoZSBkZXZpY2UgaXMgcmUtZW51bWVyYXRlZC5cbiA4MTE6XHRcdCAqIFRoZSByZXNldCBjb250cm9sIHJlZnVzZXMgb24gdGhlIHNhbWUgZmxhZy5cbiA4MTI6XHRcdCAqL1xuIDgxMzpcdFx0aWYgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcdTAwMjZjb21tb24tXHUwMDNlb3BfZmxhZ3MpKVxuIDgxNDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDgxNTpcdFxuIDgxNjpcdFx0aWYgKHN0cm5jbXAoXCYjMzQ7dHJpZ2dlclwmIzM0OywgYnVmLCA3KSA9PSAwKSB7XG4gODE3Olx0XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpO1xuIDgxODpcdFx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O2JhY2tncm91bmRcJiMzNDssIGJ1ZiwgMTApID09IDApIHtcbiA4MTk6XHRcdFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9CQUNLR1JPVU5EKTtcbiA4MjA6XHRcdFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXCYjMzQ7c3BlY3RyYWwgc2NhbjogYmFja2dyb3VuZCBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuIDgyMTpcdFx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O2NoYW5zY2FuXCYjMzQ7LCBidWYsIDgpID09IDApIHtcbiA4MjI6XHRcdFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9DSEFOU0NBTik7XG4gODIzOlx0XHRcdGF0aF9kYmcoY29tbW9uLCBDT05GSUcsIFwmIzM0O3NwZWN0cmFsIHNjYW46IGNoYW5uZWwgc2NhbiBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuIDgyNDpcdFx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O21hbnVhbFwmIzM0OywgYnVmLCA2KSA9PSAwKSB7XG4gODI1Olx0XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfTUFOVUFMKTtcbiA4MjY6XHRcdFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXCYjMzQ7c3BlY3RyYWwgc2NhbjogbWFudWFsIG1vZGUgZW5hYmxlZFxcblwmIzM0Oyk7XG4gODI3Olx0XHR9IGVsc2UgaWYgKHN0cm5jbXAoXCYjMzQ7ZGlzYWJsZVwmIzM0OywgYnVmLCA3KSA9PSAwKSB7XG4gODI4Olx0XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfRElTQUJMRUQpO1xuIDgyOTpcdFx0XHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcJiMzNDtzcGVjdHJhbCBzY2FuOiBkaXNhYmxlZFxcblwmIzM0Oyk7XG4gODMwOlx0XHR9IGVsc2Uge1xuIDgzMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4MzI6XHRcdH1cbiA4MzM6XHRcbiA4MzQ6XHRcdHJldHVybiBjb3VudDtcbiA4MzU6XHR9XG4gODM2Olx0XG4gODM3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19zcGVjX3NjYW5fY3RsID0ge1xuIDgzODpcdFx0LnJlYWQgPSByZWFkX2ZpbGVfc3BlY19zY2FuX2N0bCxcbiA4Mzk6XHRcdC53cml0ZSA9IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCxcbiA4NDA6XHRcdC5vcGVuID0gc2ltcGxlX29wZW4sXG4gODQxOlx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiA4NDI6XHRcdC5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlayxcbiA4NDM6XHR9O1xuIDg0NDpcdFxuIDg0NTpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqL1xuIDg0NjpcdC8qIHNwZWN0cmFsX3Nob3J0X3JlcGVhdCAqL1xuIDg0NzpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqL1xuIDg0ODpcdFxuIDg0OTpcdHN0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV9zcGVjdHJhbF9zaG9ydF9yZXBlYXQoc3RydWN0IGZpbGUgKmZpbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjE5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgRGVidWdmcyBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAuIFRoaXMgaXMgYSBkZWJ1Z2ZzIGZpbGUgd3JpdGUgY2FsbGJhY2ssIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgY29ubmVjdGVkLiBGaXJzdCwgSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgcmVnaXN0ZXJlZC4gTGV0JiMzOTtzIHNlZS4uLiBBaGEhIGBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1Z2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoZSBgc3BlY3RyYWxfc2Nhbl9jdGxgIGRlYnVnZnMgZmlsZS4gVGhpcyBpcyBnb29kIGluZm9ybWF0aW9uLiBOb3csIEkgbmVlZCB0byBnbyBkZWVwZXIgaW50byBgYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWdgIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIGZpbGUgYW5kIGl0cyBjYWxsYmFjayBhcmUgcGx1bWJlZCBpbnRvIHRoZSBkZWJ1Z2ZzIHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCBpcyBhY3R1YWxseSBkb2luZyBpbiB0aGUgZ3JlYXRlciBzY2hlbWUgb2YgdGhpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2MDpcdEVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1Zyk7XG4xMDYxOlx0XG4xMDYyOlx0dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXG4xMDYzOlx0XHRcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeSlcbjEwNjQ6XHR7XG4xMDY1Olx0XHRzcGVjX3ByaXYtXHUwMDNlcmZzX2NoYW5fc3BlY19zY2FuID0gcmVsYXlfb3BlbihcJiMzNDtzcGVjdHJhbF9zY2FuXCYjMzQ7LFxuMTA2NjpcdFx0XHRcdFx0XHQgICAgZGVidWdmc19waHksXG4xMDY3Olx0XHRcdFx0XHRcdCAgICAxMDI0LCAyNTYsIFx1MDAyNnJmc19zcGVjX3NjYW5fY2IsXG4xMDY4Olx0XHRcdFx0XHRcdCAgICBOVUxMKTtcbjEwNjk6XHRcdGlmICghc3BlY19wcml2LVx1MDAzZXJmc19jaGFuX3NwZWNfc2NhbilcbjEwNzA6XHRcdFx0cmV0dXJuO1xuMTA3MTpcdFxuMTA3MjpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzcGVjdHJhbF9zY2FuX2N0bFwmIzM0OyxcbjEwNzM6XHRcdFx0XHQgICAgMDYwMCxcbjEwNzQ6XHRcdFx0XHQgICAgZGVidWdmc19waHksIHNwZWNfcHJpdixcbjEwNzU6XHRcdFx0XHQgICAgXHUwMDI2Zm9wc19zcGVjX3NjYW5fY3RsKTtcbjEwNzY6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c3BlY3RyYWxfc2hvcnRfcmVwZWF0XCYjMzQ7LFxuMTA3NzpcdFx0XHRcdCAgICAwNjAwLFxuMTA3ODpcdFx0XHRcdCAgICBkZWJ1Z2ZzX3BoeSwgc3BlY19wcml2LFxuMTA3OTpcdFx0XHRcdCAgICBcdTAwMjZmb3BzX3NwZWN0cmFsX3Nob3J0X3JlcGVhdCk7XG4xMDgwOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3NwZWN0cmFsX2NvdW50XCYjMzQ7LFxuMTA4MTpcdFx0XHRcdCAgICAwNjAwLFxuMTA4MjpcdFx0XHRcdCAgICBkZWJ1Z2ZzX3BoeSwgc3BlY19wcml2LFxuMTA4MzpcdFx0XHRcdCAgICBcdTAwMjZmb3BzX3NwZWN0cmFsX2NvdW50KTtcbjEwODQ6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c3BlY3RyYWxfcGVyaW9kXCYjMzQ7LFxuMTA4NTpcdFx0XHRcdCAgICAwNjAwLFxuMTA4NjpcdFx0XHRcdCAgICBkZWJ1Z2ZzX3BoeSwgc3BlY19wcml2LFxuMTA4NzpcdFx0XHRcdCAgICBcdTAwMjZmb3BzX3NwZWN0cmFsX3BlcmlvZCk7XG4xMDg4Olx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3NwZWN0cmFsX2ZmdF9wZXJpb2RcJiMzNDssXG4xMDg5Olx0XHRcdFx0ICAgIDA2MDAsXG4xMDkwOlx0XHRcdFx0ICAgIGRlYnVnZnNfcGh5LCBzcGVjX3ByaXYsXG4xMDkxOlx0XHRcdFx0ICAgIFx1MDAyNmZvcHNfc3BlY3RyYWxfZmZ0X3BlcmlvZCk7XG4xMDkyOlx0fVxuMTA5MzpcdEVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUyOAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDlrX2h0Y2AgZHJpdmVyIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGl0cyBkZWJ1Z2ZzIGludGVncmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZGVidWdnaW5nIGludGVyZmFjZXMgYXJlIHNldCB1cCBhbmQgaG93IGFjY2Vzc2libGUgdGhleSByZWFsbHkgYXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmcm9tIHRoZSBwb2ludCB3aGVyZSBhIFVTQiBkZXZpY2UgaXMgcHJvYmVkLgoKU28sIHdoZW4gYGF0aDlrX2h0Y2AgZGV0ZWN0cyBhbmQgcHJvYmVzIGEgVVNCIGRldmljZSwgYGF0aDlrX2h0Y19pbml0X2RlYnVnYCBzaG91bGQgYmUgdGhlIGtleSBmdW5jdGlvbiB0byBpbnNwZWN0LiBJdCYjMzk7cyB0aW1lIHRvIG5hdmlnYXRlIHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jYCB0byBleGFtaW5lIHRoZSBpbnRlcm5hbCBsb2dpYyBvZiBgYXRoOWtfaHRjX2luaXRfZGVidWdgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHJvdXRpbmUgYWN0dWFsbHkgcmVnaXN0ZXJzIHRoZXNlIGRlYnVnZnMgZW50cmllcyBhbmQsIGNydWNpYWxseSwgdmVyaWZ5IHRoYXQgdGhleSBhcmUgcmVhY2hhYmxlIGZyb20gYSB1c2VyIHBlcnNwZWN0aXZlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBpbmZvcm1hdGlvbiB0aGF0JiMzOTtzIHN1cHBvc2VkIHRvIGJlIGV4cG9zZWQgaXMgYWN0dWFsbHkgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0XHRkYXRhW2kmIzQzOyYjNDM7XSA9IFNSWEJBU0UucGh5X2Vycl9zdGF0c1tBVEg5S19QSFlFUlJfUkFEQVJdO1xuIDQ3MTpcdFx0ZGF0YVtpJiM0MzsmIzQzO10gPSBTUlhCQVNFLnBoeV9lcnJfc3RhdHNbQVRIOUtfUEhZRVJSX09GRE1fVElNSU5HXTtcbiA0NzI6XHRcdGRhdGFbaSYjNDM7JiM0MztdID0gU1JYQkFTRS5waHlfZXJyX3N0YXRzW0FUSDlLX1BIWUVSUl9DQ0tfVElNSU5HXTtcbiA0NzM6XHRcbiA0NzQ6XHRcdFdBUk5fT04oaSAhPSBBVEg5S19IVENfU1NUQVRTX0xFTik7XG4gNDc1Olx0fVxuIDQ3NjpcdFxuIDQ3NzpcdHZvaWQgYXRoOWtfaHRjX2RlaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG4gNDc4Olx0e1xuIDQ3OTpcdFx0YXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdik7XG4gNDgwOlx0fVxuIDQ4MTpcdFxuIDQ4MjpcdGludCBhdGg5a19odGNfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaClcbiA0ODM6XHR7XG4gNDg0Olx0XHRzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTtcbiA0ODU6XHRcdHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGNvbW1vbi1cdTAwM2Vwcml2O1xuIDQ4NjpcdFxuIDQ4NzpcdFx0cHJpdi1cdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSxcbiA0ODg6XHRcdFx0XHRcdFx0ICAgICBwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LVx1MDAzZWRlYnVnZnNkaXIpO1xuIDQ4OTpcdFxuIDQ5MDpcdFx0YXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoXHUwMDI2cHJpdi1cdTAwM2VzcGVjX3ByaXYsIHByaXYtXHUwMDNlZGVidWcuZGVidWdmc19waHkpO1xuIDQ5MTpcdFxuIDQ5MjpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDt0Z3RfaW50X3N0YXRzXCYjMzQ7LCAwNDAwLCBwcml2LVx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5LFxuIDQ5MzpcdFx0XHRcdCAgICBwcml2LCBcdTAwMjZmb3BzX3RndF9pbnRfc3RhdHMpO1xuIDQ5NDpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDt0Z3RfdHhfc3RhdHNcJiMzNDssIDA0MDAsIHByaXYtXHUwMDNlZGVidWcuZGVidWdmc19waHksXG4gNDk1Olx0XHRcdFx0ICAgIHByaXYsIFx1MDAyNmZvcHNfdGd0X3R4X3N0YXRzKTtcbiA0OTY6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7dGd0X3J4X3N0YXRzXCYjMzQ7LCAwNDAwLCBwcml2LVx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5LFxuIDQ5NzpcdFx0XHRcdCAgICBwcml2LCBcdTAwMjZmb3BzX3RndF9yeF9zdGF0cyk7XG4gNDk4Olx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3htaXRcJiMzNDssIDA0MDAsIHByaXYtXHUwMDNlZGVidWcuZGVidWdmc19waHksXG4gNDk5Olx0XHRcdFx0ICAgIHByaXYsIFx1MDAyNmZvcHNfeG1pdCk7XG4gNTAwOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3NrYl9yeFwmIzM0OywgMDQwMCwgcHJpdi1cdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSxcbiA1MDE6XHRcdFx0XHQgICAgcHJpdiwgXHUwMDI2Zm9wc19za2JfcngpO1xuIDUwMjpcdFxuIDUwMzpcdFx0YXRoOWtfY21uX2RlYnVnX3JlY3YocHJpdi1cdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSwgXHUwMDI2cHJpdi1cdTAwM2VkZWJ1Zy5yeF9zdGF0cyk7XG4gNTA0Olx0XHRhdGg5a19jbW5fZGVidWdfcGh5X2Vycihwcml2LVx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5LCBcdTAwMjZwcml2LVx1MDAzZWRlYnVnLnJ4X3N0YXRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGF0aDlrX2h0YyBhbmQgVVNCIEdhZGdldCBQcm9iaW5nKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHRpbWluZyBvZiB0aGUgYGF0aDlrX2h0Y2AgZHJpdmVyJiMzOTtzIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hlbiB0aGVzZSBldmVudHMgb2NjdXIgaW4gcmVsYXRpb24gdG8gVVNCIGdhZGdldCBtb2RlLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgd2UgY2FuIHByb2JlIGBhdGg5a19odGNgIGVmZmVjdGl2ZWx5IHVzaW5nIGEgVVNCIGdhZGdldCBzZXR1cCB3aXRoaW4gdGhlIGBzeXprYWxsZXJgIGVudmlyb25tZW50LiBUaGF0IHdpbGwgbGV0IHVzIHRlc3QgdGhlIGRyaXZlciBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIFRvIGdldCBzdGFydGVkLCBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNgLiBUaGlzIGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIFVTQi1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoYXQgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIFVTQiBpbnRlcmZhY2UgYW5kLCBob3BlZnVsbHksIGhvdyB3ZSBjYW4gbWFuaXB1bGF0ZSBpdCBmb3Igb3VyIHByb2JpbmcgbmVlZHMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIHN0YXJ0IGJ1aWxkaW5nIGEgdGVzdCB0byBjaGVjayBpdCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01PRFVMRV9ERVZJQ0VfVEFCTEVcXCh1c2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYz0yMz1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXRoOWtfaGlmX3VzYl9pZHNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTY2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYzo2NzpNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYXRoOWtfaGlmX3VzYl9pZHMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy02OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBhdGg5a19odGMgVVNCIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gYGF0aDlrX2h0Y2AgaXMgYSBVU0IgZHJpdmVyLCBtYWtpbmcgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nIHZpYSBVU0IgcmF3IGdhZGdldCBhbmQgc3l6a2FsbGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSByZWNlbnQgcGF0Y2hlcywgYW5kIHRoaXMgb25lIGNhdWdodCBteSBleWUuIExldCYjMzk7cyBzZWUuLi4gaXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gYWRkcyBhIGNoZWNrIHdpdGhpbiBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYC4gSXQmIzM5O3MgcmVmdXNpbmcgd3JpdGUgY29tbWFuZHMgd2hpbGUgdGhlIGhhcmR3YXJlIGlzIGRpc2FibGVkLCBzcGVjaWZpY2FsbHkgdG8gYXZvaWQgZmlybXdhcmUgaGFuZ3Mgb24gdGhlIEFSOTI3MS4gUmlnaHQsIHN0YW5kYXJkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4KCkhvbGQgb24gYSBzZWNvbmQsIGlzIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgIHN0YXRpYz8gWWVzLCBpdCBpczogYHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCguLi4pYC4gT2theSwgdGhhdCYjMzk7cyBjcnVjaWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBldmVuIGEgdXNlZnVsIHRhcmdldCBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBzdGF0aWMgZnVuY3Rpb25zIGhhdmUgbGltaXRhdGlvbnMgcmVnYXJkaW5nIHN5bWJvbCB2aXNpYmlsaXR5LgoKTGV0IG1lIHJlZnJlc2guLi4gVGhpcyBmdW5jdGlvbiByZXNpZGVzIGluIGBjb21tb24tc3BlY3RyYWwuY2AuIExldCYjMzk7cyBlbnVtZXJhdGUgdGhlIGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGU6IGByZWFkX2ZpbGVfc3BlY19zY2FuX2N0bGAsIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgLCBgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcmAsIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWdgLCBldGMuIE9rYXkuCgpOb3csIHRoaXMgaXMgd2hlcmUgdGhlIGd1aWRlbGluZXMgY29tZSBpbiBoYW5keS4gUnVsZSBudW1iZXIgNCBzYXlzIHRoYXQgc3RhdGljIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyBjYW4gc3RpbGwgaGF2ZSBzeW1ib2xzIGlmIHRoZXkgYXJlIG5vdCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiBTbywgdGhhdCBtZWFucyBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCAqY291bGQqIGJlIGEgdmlhYmxlIHRhcmdldCBkZXNwaXRlIGJlaW5nIHN0YXRpYywgZXNwZWNpYWxseSBhcyBpdCBsb29rcyBsaWtlIGl0IGlzIG5vdCBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gYSBoZWFkZXIuIFBsdXMsIHRoZXJlIGFyZSBhbHNvIHRoZSBub24tc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9ucyBsaWtlIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyYCBhbmQgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ2AuIFRob3NlIGFyZSBkZWZpbml0ZWx5IGludGVyZXN0aW5nLgoKVGhlcmVmb3JlLCBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCBhbmQgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ2Agc2VlbSBsaWtlIGdvb2QgZm9jdXMgc3ltYm9scyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgdHJhY2UgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4gICAyOlx0Y29uZmlnIEFUSDlLX0hXXG4gICAzOlx0XHR0cmlzdGF0ZVxuICAgNDpcdGNvbmZpZyBBVEg5S19DT01NT05cbiAgIDU6XHRcdHRyaXN0YXRlXG4gICA2Olx0XHRzZWxlY3QgQVRIX0NPTU1PTlxuICAgNzpcdGNvbmZpZyBBVEg5S19DT01NT05fREVCVUdcbiAgIDg6XHRcdGJvb2xcbiAgIDk6XHRjb25maWcgQVRIOUtfREZTX0RFQlVHRlNcbiAgMTA6XHRcdGRlZl9ib29sIHlcbiAgMTE6XHRcdGRlcGVuZHMgb24gQVRIOUtfREVCVUdGUyBcdTAwMjZcdTAwMjYgQVRIOUtfREZTX0NFUlRJRklFRFxuICAxMjpcdFxuICAxMzpcdGNvbmZpZyBBVEg5S19CVENPRVhfU1VQUE9SVFxuICAxNDpcdFx0Ym9vbCBcJiMzNDtBdGhlcm9zIGJsdWV0b290aCBjb2V4aXN0ZW5jZSBzdXBwb3J0XCYjMzQ7XG4gIDE1Olx0XHRkZXBlbmRzIG9uIChBVEg5SyB8fCBBVEg5S19IVEMpXG4gIDE2Olx0XHRkZWZhdWx0IHlcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU2F5IFksIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgYXRoOWsvYXRoOWtfaHRjIHJhZGlvcyB0b2dldGhlciB3aXRoXG4gIDE5Olx0XHQgIEJsdWV0b290aCBtb2R1bGVzIGluIHRoZSBzYW1lIHN5c3RlbS5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgQVRIOUtcbiAgMjI6XHRcdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgODAyLjExbiB3aXJlbGVzcyBjYXJkcyBzdXBwb3J0XCYjMzQ7XG4gIDIzOlx0XHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBIQVNfRE1BXG4gIDI0Olx0XHRzZWxlY3QgTUFDODAyMTFfTEVEUyBpZiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxuICAyNTpcdFx0c2VsZWN0IEFUSDlLX0hXXG4gIDI2Olx0XHRzZWxlY3QgQVRIOUtfQ09NTU9OXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb25cbiAgMjk6XHRcdCAgQXRoZXJvcyBJRUVFIDgwMi4xMW4gQVI1MDA4LCBBUjkwMDEgYW5kIEFSOTAwMiBmYW1pbHlcbiAgMzA6XHRcdCAgb2YgY2hpcHNldHMuIEZvciBhIHNwZWNpZmljIGxpc3Qgb2Ygc3VwcG9ydGVkIGV4dGVybmFsXG4gIDMxOlx0XHQgIGNhcmRzLCBsYXB0b3BzIHRoYXQgYWxyZWFkeSBzaGlwIHdpdGggdGhlc2UgY2FyZHMgYW5kXG4gIDMyOlx0XHQgIEFQcyB0aGF0IGNvbWUgd2l0aCB0aGVzZSBjYXJkcyByZWZlciB0byBhdGg5ayB3aWtpXG4gIDMzOlx0XHQgIHByb2R1Y3RzIHBhZ2U6XG4gIDM0Olx0XG4gIDM1Olx0XHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXRoOWsvcHJvZHVjdHNcbiAgMzY6XHRcbiAgMzc6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBhdGg5ay5cbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgQVRIOUtfUENJXG4gIDQwOlx0XHRib29sIFwmIzM0O0F0aGVyb3MgYXRoOWsgUENJL1BDSWUgYnVzIHN1cHBvcnRcJiMzNDtcbiAgNDE6XHRcdGRlZmF1bHQgeVxuICA0MjpcdFx0ZGVwZW5kcyBvbiBBVEg5SyBcdTAwMjZcdTAwMjYgUENJXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBDSSBidXMgc3VwcG9ydCBpbiBhdGg5ay5cbiAgNDU6XHRcbiAgNDY6XHRcdCAgU2F5IFksIGlmIHlvdSBoYXZlIGEgY29tcGF0aWJsZSBQQ0kvUENJZSB3aXJlbGVzcyBjYXJkLlxuICA0NzpcdFxuICA0ODpcdGNvbmZpZyBBVEg5S19BSEJcbiAgNDk6XHRcdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBBSEIgYnVzIHN1cHBvcnRcJiMzNDtcbiAgNTA6XHRcdGRlcGVuZHMgb24gQVRIOUsgXHUwMDI2XHUwMDI2IE9GXG4gIDUxOlx0XHRkZWZhdWx0IG5cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgQUhCIGJ1cyBzdXBwb3J0IGluIGF0aDlrLlxuICA1NDpcdFxuICA1NTpcdFx0ICBTYXkgWSwgaWYgeW91IGhhdmUgYSBTb0Mgd2l0aCBhIGNvbXBhdGlibGUgYnVpbHQtaW5cbiAgNTY6XHRcdCAgd2lyZWxlc3MgTUFDLiBTYXkgTiBpZiB1bnN1cmUuXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEFUSDlLX0RFQlVHRlNcbiAgNTk6XHRcdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBkZWJ1Z2dpbmdcJiMzNDtcbiAgNjA6XHRcdGRlcGVuZHMgb24gQVRIOUsgXHUwMDI2XHUwMDI2IERFQlVHX0ZTIFx1MDAyNlx1MDAyNiBNQUM4MDIxMV9ERUJVR0ZTXG4gIDYxOlx0XHRzZWxlY3QgQVRIOUtfQ09NTU9OX0RFQlVHXG4gIDYyOlx0XHRoZWxwXG4gIDYzOlx0XHQgIFNheSBZLCBpZiB5b3UgbmVlZCBhY2Nlc3MgdG8gYXRoOWsmIzM5O3Mgc3RhdGlzdGljcyBmb3JcbiAgNjQ6XHRcdCAgaW50ZXJydXB0cywgcmF0ZSBjb250cm9sLCBldGMuXG4gIDY1Olx0XG4gIDY2Olx0XHQgIEFsc28gcmVxdWlyZWQgZm9yIGNoYW5naW5nIGRlYnVnIG1lc3NhZ2UgZmxhZ3MgYXQgcnVuIHRpbWUgYW5kIGZvclxuICA2NzpcdFx0ICBUWDk5LlxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBBVEg5S19TVEFUSU9OX1NUQVRJU1RJQ1NcbiAgNzA6XHRcdGJvb2wgXCYjMzQ7RGV0YWlsZWQgc3RhdGlvbiBzdGF0aXN0aWNzXCYjMzQ7XG4gIDcxOlx0XHRkZXBlbmRzIG9uIEFUSDlLIFx1MDAyNlx1MDAyNiBBVEg5S19ERUJVR0ZTIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuICA3MjpcdFx0ZGVmYXVsdCBuXG4gIDczOlx0XHRoZWxwXG4gIDc0Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZGV0YWlsZWQgc3RhdGlzdGljcyBmb3IgYXNzb2NpYXRpb24gc3RhdGlvbnMuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIEFUSDlLX1RYOTlcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBUWDk5IHRlc3Rpbmcgc3VwcG9ydFwmIzM0O1xuICA3ODpcdFx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIFx1MDAyNlx1MDAyNiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbiAgNzk6XHRcdGRlZmF1bHQgblxuICA4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ3OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgYXRoOWsgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgYGF0aDlrYCB3aXJlbGVzcyBkcml2ZXIgY29uZmlndXJhdGlvbi4gUmlnaHQsIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5a2AgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiBsaW5lcyAxNzAgdGhyb3VnaCAyMjAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIG9yIHBlcmhhcHMgZGVwZW5kZW5jaWVzIGFyZSBzZXQuIEhvcGVmdWxseSwgaXQmIzM5O3Mgbm90aGluZyB0b28gb2JzY3VyZTsgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBJIGNhbiBoYW5kbGUgbW9zdCBvZiB3aGF0JiMzOTtzIGluIHRoZXJlLCBldmVuIGlmIGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB0aG9zZSBsaW5lcyBob2xkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcdCAgSWYgdW5zdXJlIHNheSBOLlxuIDE3MTpcdFxuIDE3MjpcdGNvbmZpZyBBVEg5S19IVENcbiAxNzM6XHRcdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgSFRDIGJhc2VkIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcJiMzNDtcbiAxNzQ6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBNQUM4MDIxMVxuIDE3NTpcdFx0c2VsZWN0IE1BQzgwMjExX0xFRFMgaWYgTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcbiAxNzY6XHRcdHNlbGVjdCBBVEg5S19IV1xuIDE3NzpcdFx0c2VsZWN0IEFUSDlLX0NPTU1PTlxuIDE3ODpcdFx0aGVscFxuIDE3OTpcdFx0ICBTdXBwb3J0IGZvciBBdGhlcm9zIEhUQyBiYXNlZCBjYXJkcy5cbiAxODA6XHRcdCAgQ2hpcHNldHMgc3VwcG9ydGVkOiBBUjkyNzFcbiAxODE6XHRcbiAxODI6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb246XG4gMTgzOlx0XHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXRoOWtfaHRjXG4gMTg0Olx0XG4gMTg1Olx0XHQgIFRoZSBidWlsdCBtb2R1bGUgd2lsbCBiZSBhdGg5a19odGMuXG4gMTg2Olx0XG4gMTg3Olx0Y29uZmlnIEFUSDlLX0hUQ19ERUJVR0ZTXG4gMTg4Olx0XHRib29sIFwmIzM0O0F0aGVyb3MgYXRoOWtfaHRjIGRlYnVnZ2luZ1wmIzM0O1xuIDE4OTpcdFx0ZGVwZW5kcyBvbiBBVEg5S19IVEMgXHUwMDI2XHUwMDI2IERFQlVHX0ZTXG4gMTkwOlx0XHRzZWxlY3QgQVRIOUtfQ09NTU9OX0RFQlVHXG4gMTkxOlx0XHRoZWxwXG4gMTkyOlx0XHQgIFNheSBZLCBpZiB5b3UgbmVlZCBhY2Nlc3MgdG8gYXRoOWtfaHRjJiMzOTtzIHN0YXRpc3RpY3MuXG4gMTkzOlx0XHQgIEFzIHdlbGwgYXMgYWNjZXNzIHRvIHRoZSBGRlQvc3BlY3RyYWwgZGF0YS5cbiAxOTQ6XHRcbiAxOTU6XHRjb25maWcgQVRIOUtfSFdSTkdcbiAxOTY6XHRcdGJvb2wgXCYjMzQ7UmFuZG9tIG51bWJlciBnZW5lcmF0b3Igc3VwcG9ydFwmIzM0O1xuIDE5NzpcdFx0ZGVwZW5kcyBvbiBBVEg5SyBcdTAwMjZcdTAwMjYgKEhXX1JBTkRPTSA9IHkgfHwgSFdfUkFORE9NID0gQVRIOUspXG4gMTk4Olx0XHRkZWZhdWx0IG5cbiAxOTk6XHRcdGhlbHBcbiAyMDA6XHRcdCAgVGhpcyBvcHRpb24gaW5jb3Jwb3JhdGVzIHRoZSBBREMgcmVnaXN0ZXIgb3V0cHV0IGFzIGEgc291cmNlIG9mXG4gMjAxOlx0XHQgIHJhbmRvbW5lc3MgaW50byBMaW51eCBlbnRyb3B5IHBvb2wgKC9kZXYvdXJhbmRvbSBhbmQgL2Rldi9yYW5kb20pXG4gMjAyOlx0XG4gMjAzOlx0XHQgIFNheSBZLCBmZWVkcyB0aGUgZW50cm9weSBkaXJlY3RseSBmcm9tIHRoZSBXaUZpIGRyaXZlciB0byB0aGUgaW5wdXRcbiAyMDQ6XHRcdCAgcG9vbC5cbiAyMDU6XHRcbiAyMDY6XHRjb25maWcgQVRIOUtfQ09NTU9OX1NQRUNUUkFMXG4gMjA3Olx0XHRib29sIFwmIzM0O0F0aGVyb3MgYXRoOWsvYXRoOWtfaHRjIHNwZWN0cmFsIHNjYW4gc3VwcG9ydFwmIzM0O1xuIDIwODpcdFx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIHx8IEFUSDlLX0hUQ19ERUJVR0ZTXG4gMjA5Olx0XHRzZWxlY3QgUkVMQVlcbiAyMTA6XHRcdGRlZmF1bHQgblxuIDIxMTpcdFx0aGVscFxuIDIxMjpcdFx0ICBTYXkgWSB0byBlbmFibGUgYWNjZXNzIHRvIHRoZSBGRlQvc3BlY3RyYWwgZGF0YSB2aWEgZGVidWdmcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MDMKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogNTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgYXRoOWtfaHRjYCBTcGVjdHJhbCBTY2FuIERlYnVnZnMgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBtb2RpZmllZCBjb2RlIGlzIGV2ZW4gYWNjZXNzaWJsZSB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgc3BlY2lmaWNhbGx5LCBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuIFRoZSBnb29kIG5ld3MgaXMsIHllcywgdGhlIGBhdGg5a19odGNgIGRyaXZlciwgYmVpbmcgVVNCLWJhc2VkIChhbmQgdXRpbGl6aW5nIHRoZSBBUjkyNzEgY2hpcHNldCksIGlzIGluZGVlZCByZWFjaGFibGUgYW5kIGVhc2lseSBlbXVsYXRlZCB2aWEgdGhlIFVTQiByYXcgZ2FkZ2V0IHdpdGhpbiB0aGF0IGNvbnRleHQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGZpcnN0IHN0ZXAuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzcGVjaWZpY3MuIFdoZW4gd2UgZW5hYmxlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMg4oCTIGBBVEg5S19IVENgLCBgQVRIOUtfSFRDX0RFQlVHRlNgLCBhbmQgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAg4oCTIHRoZSBgYXRoOWtfaHRjYCBkcml2ZXIgZXhwb3NlcyB0aGUgYHNwZWN0cmFsX3NjYW5fY3RsYCBjb250cm9sIHdpdGhpbiBkZWJ1Z2ZzLCBhbmQgaXQmIzM5O3MgbmVhdGx5IHR1Y2tlZCBhd2F5IHVuZGVyIHRoZSB3aXBoeSBkZWJ1Z2ZzIGRpcmVjdG9yeS4gV3JpdGluZyB0byB0aGlzIGNvbnRyb2wgdHJpZ2dlcnMgdGhlIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKWAgZnVuY3Rpb24uCgpUaGUgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYSBjcnVjaWFsIHZhbGlkYXRpb24gd2l0aGluIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKWA6IGEgY2hlY2sgdXNpbmcgYHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCAmYW1wO2NvbW1vbi0mZ3Q7b3BfZmxhZ3MpYC4gVGhpcyBpcyBhIGRpcmVjdCwgZXhlY3V0YWJsZSBjb2RlIHBhdGggdGhhdCBhbHRlcnMgY29udHJvbCBmbG93IHdoZW4gdGhlIGRldmljZSBpbnRlcmZhY2UgaXMgZG93bi4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlOgotICAgYEFUSDlLX0hUQ2AgKG9yIGBBVEg5S2ApCi0gICBgQVRIOUtfSFRDX0RFQlVHRlNgIChvciBgQVRIOUtfREVCVUdGU2ApCi0gICBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYAoKSSBhbHNvIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgaW1wb3J0YW50IHN5bWJvbHMgaW4gdGhlIGNvZGU6Ci0gICBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYAotICAgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXJgCi0gICBgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnYAoKTGV0JiMzOTtzIGRvdWJsZSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgc3ltYm9sczoKLSBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYAotIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWdgCi0gYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXJgCgpUYWtpbmcgYSBzdGVwIGJhY2ssIHRoaXMgbWVhbnMgdGhhdCB0aGUgcGF0Y2ggYWRkcyBhIHNhZmV0eSBjaGVjay4gU3BlY2lmaWNhbGx5LCB0aGUgY2hlY2sgYHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCAmYW1wO2NvbW1vbi0mZ3Q7b3BfZmxhZ3MpYCBhZGRlZCB0byB0aGUgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAgd2l0aGluIGRlYnVnZnMgaGVscHMgcHJldmVudCBwb3RlbnRpYWxseSB1bnNhZmUgUEhZIHJlZ2lzdGVyIHdyaXRlcyB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgZG93bi4gIFRoaXMgY29kZSBpcyBjbGVhcmx5IHJlYWNoYWJsZSB1c2luZyB0aGUgVVNCLWVtdWxhdGVkIGBhdGg5a19odGNgIGRyaXZlciwgZ2l2ZW4gdGhhdCB0aGUgc3BlY3RyYWwgc2NhbiBhbmQgZGVidWdmcyBmZWF0dXJlcyBhcmUgZW5hYmxlZC4KClRoZXJlZm9yZSwgdGhpcyBpcyBzb21ldGhpbmcgSSYjMzk7bSBjYWxsaW5nIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHRob3NlIGNvbmZpZ3VyYXRpb25zOiBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCwgYEFUSDlLX0hUQ2AsIGFuZCBgQVRIOUtfSFRDX0RFQlVHRlNgLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBkZWZpbml0ZWx5OiBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCwgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXJgLCBhbmQgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ2AuIE5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDlLX0NPTU1PTl9TUEVDVFJBTCYjMzQ7LAogICAgJiMzNDtBVEg5S19IVEMmIzM0OywKICAgICYjMzQ7QVRIOUtfSFRDX0RFQlVHRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwmIzM0OywKICAgICYjMzQ7YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnJiMzNDssCiAgICAmIzM0O2F0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciB0aGUgQVRIX09QX0lOVkFMSUQgZmxhZyBpbiB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB3aXRoaW4gdGhlIGF0aDlrIHNwZWN0cmFsIHNjYW4gZGVidWdmcyBpbnRlcmZhY2UgdG8gcmVqZWN0IFBIWSByZWdpc3RlciB3cml0ZSBjb21tYW5kcyB3aGlsZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gb2YgdGhlIGF0aDlrX2h0YyBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDlLX0NPTU1PTl9TUEVDVFJBTCYjMzQ7LAogICAgJiMzNDtBVEg5S19IVEMmIzM0OywKICAgICYjMzQ7QVRIOUtfSFRDX0RFQlVHRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwmIzM0OywKICAgICYjMzQ7YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnJiMzNDssCiAgICAmIzM0O2F0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciB0aGUgQVRIX09QX0lOVkFMSUQgZmxhZyBpbiB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB3aXRoaW4gdGhlIGF0aDlrIHNwZWN0cmFsIHNjYW4gZGVidWdmcyBpbnRlcmZhY2UgdG8gcmVqZWN0IFBIWSByZWdpc3RlciB3cml0ZSBjb21tYW5kcyB3aGlsZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gb2YgdGhlIGF0aDlrX2h0YyBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc3RhdGUgY2hlY2sgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcdTAwMjZjb21tb24tXHUwMDNlb3BfZmxhZ3MpKSBpbiB0aGUgZGVidWdmcyB3cml0ZSBoYW5kbGVyIHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCgpIHRvIHByZXZlbnQgc3BlY3RyYWwgc2NhbiBjb21tYW5kcyBmcm9tIGRyaXZpbmcgUEhZIHJlZ2lzdGVyIHdyaXRlcyB3aGVuIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI2ZDk2YmQxMGRmNzc1MzdjOTQwM2ViODkwNTY4OWYwMDNmZTEzNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIxOjQzOjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jCmluZGV4IGNhMDFhMDdmNjYzMGMuLjBiYmJlZjllM2I5YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMKQEAgLTgwNSw2ICYjNDM7ODA1LDE0IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAogCWJ1ZltsZW5dID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7CS8qIEV2ZXJ5IGNvbW1hbmQgYmVsb3cgZHJpdmVzIFBIWSByZWdpc3RlciB3cml0ZXMuIFJlZnVzZSB0aGVtIHdoaWxlCiYjNDM7CSAqIHRoZSBoYXJkd2FyZSBpcyBkaXNhYmxlZCAodGhlIGludGVyZmFjZSBpcyBkb3duKTogb24gdGhlIEFSOTI3MQomIzQzOwkgKiB0aGF0IHRyYWZmaWMgaGFuZ3MgdGhlIGZpcm13YXJlIHVudGlsIHRoZSBkZXZpY2UgaXMgcmUtZW51bWVyYXRlZC4KJiM0MzsJICogVGhlIHJlc2V0IGNvbnRyb2wgcmVmdXNlcyBvbiB0aGUgc2FtZSBmbGFnLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCAmYW1wO2NvbW1vbi0mZ3Q7b3BfZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAlpZiAoc3RybmNtcCgmIzM0O3RyaWdnZXImIzM0OywgYnVmLCA3KSA9PSAwKSB7CiAJCWF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpOwogCX0gZWxzZSBpZiAoc3RybmNtcCgmIzM0O2JhY2tncm91bmQmIzM0OywgYnVmLCAxMCkgPT0gMCkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwOQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBTcGVjdHJhbCBDb250cm9sKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhpcyBuZXcgcGF0Y2guIFNwZWNpZmljYWxseSwgSSBzZWUgaXQgaW50cm9kdWNlcyBhIGNvbmRpdGlvbmFsIGNoZWNrIHdpdGhpbiBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jYC4gVGhlIGNoZWNrIGl0c2VsZiwgYGlmICh0ZXN0X2JpdChBVEhfT1BfSU5WQUxJRCwgJmFtcDtjb21tb24tJmd0O29wX2ZsYWdzKSkgcmV0dXJuIC1FQlVTWTtgLCBsb29rcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIG9uIHRoZSBzdXJmYWNlIOKAkyBpdCYjMzk7cyBiYXNpY2FsbHkgcHJldmVudGluZyB0aGUgZnVuY3Rpb24gZnJvbSBydW5uaW5nIGlmIGEgc3BlY2lmaWMgb3BlcmF0aW9uYWwgZmxhZywgYEFUSF9PUF9JTlZBTElEYCwgaXMgc2V0LiBNeSBpbnR1aXRpb24gaXMgdGhhdCB0aGlzIGlzIGd1YXJkaW5nIGFnYWluc3Qgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uIG9yIGNvbmZsaWN0LCBwcmV2ZW50aW5nIHNwZWN0cmFsIHNjYW4gY29udHJvbCBmcm9tIGhhcHBlbmluZyB3aGlsZSB0aGUgaGFyZHdhcmUgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS4KClRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYXJvdW5kIGxpbmUgODA1IG9mIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNgLiBJIG5lZWQgdGhhdCBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIG9mIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgIHdpdGggb3RoZXIgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMsIGFuZCB0aGUgZXhhY3QgbWVhbmluZyBvZiBgQVRIX09QX0lOVkFMSURgIHdpdGhpbiB0aGlzIGRyaXZlciB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZmxhZyBpcyBzZXQgYW5kIGNsZWFyZWQsIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAgaXMgYWN0dWFsbHkgY2FsbGVkLiBUaGlzIHdpbGwgbGV0IG1lIGZvcm0gYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyBwb3RlbnRpYWwgcmFtaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc4MDpcdFx0YXRoX3BzX29wcyhjb21tb24pLVx1MDAzZXdha2V1cChjb21tb24pO1xuIDc4MTpcdFx0YXRoOWtfaHdfb3BzKGFoKS1cdTAwM2VzcGVjdHJhbF9zY2FuX2NvbmZpZyhhaCwgXHUwMDI2c3BlY19wcml2LVx1MDAzZXNwZWNfY29uZmlnKTtcbiA3ODI6XHRcdGF0aF9wc19vcHMoY29tbW9uKS1cdTAwM2VyZXN0b3JlKGNvbW1vbik7XG4gNzgzOlx0XG4gNzg0Olx0XHRzcGVjX3ByaXYtXHUwMDNlc3BlY3RyYWxfbW9kZSA9IHNwZWN0cmFsX21vZGU7XG4gNzg1Olx0XG4gNzg2Olx0XHRyZXR1cm4gMDtcbiA3ODc6XHR9XG4gNzg4Olx0RVhQT1JUX1NZTUJPTChhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcpO1xuIDc4OTpcdFxuIDc5MDpcdHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiA3OTE6XHRcdFx0XHRcdFx0Y29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuIDc5MjpcdFx0XHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiA3OTM6XHR7XG4gNzk0Olx0XHRzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA3OTU6XHRcdHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc3BlY19wcml2LVx1MDAzZWFoKTtcbiA3OTY6XHRcdGNoYXIgYnVmWzMyXTtcbiA3OTc6XHRcdHNzaXplX3QgbGVuO1xuIDc5ODpcdFxuIDc5OTpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FUSDlLX1RYOTkpKVxuIDgwMDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gODAxOlx0XG4gODAyOlx0XHRsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7XG4gODAzOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSlcbiA4MDQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gODA1Olx0XG4gODA2Olx0XHRidWZbbGVuXSA9ICYjMzk7XFwwJiMzOTs7XG4gODA3Olx0XG4gODA4Olx0XHQvKiBFdmVyeSBjb21tYW5kIGJlbG93IGRyaXZlcyBQSFkgcmVnaXN0ZXIgd3JpdGVzLiBSZWZ1c2UgdGhlbSB3aGlsZVxuIDgwOTpcdFx0ICogdGhlIGhhcmR3YXJlIGlzIGRpc2FibGVkICh0aGUgaW50ZXJmYWNlIGlzIGRvd24pOiBvbiB0aGUgQVI5MjcxXG4gODEwOlx0XHQgKiB0aGF0IHRyYWZmaWMgaGFuZ3MgdGhlIGZpcm13YXJlIHVudGlsIHRoZSBkZXZpY2UgaXMgcmUtZW51bWVyYXRlZC5cbiA4MTE6XHRcdCAqIFRoZSByZXNldCBjb250cm9sIHJlZnVzZXMgb24gdGhlIHNhbWUgZmxhZy5cbiA4MTI6XHRcdCAqL1xuIDgxMzpcdFx0aWYgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcdTAwMjZjb21tb24tXHUwMDNlb3BfZmxhZ3MpKVxuIDgxNDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDgxNTpcdFxuIDgxNjpcdFx0aWYgKHN0cm5jbXAoXCYjMzQ7dHJpZ2dlclwmIzM0OywgYnVmLCA3KSA9PSAwKSB7XG4gODE3Olx0XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpO1xuIDgxODpcdFx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O2JhY2tncm91bmRcJiMzNDssIGJ1ZiwgMTApID09IDApIHtcbiA4MTk6XHRcdFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9CQUNLR1JPVU5EKTtcbiA4MjA6XHRcdFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXCYjMzQ7c3BlY3RyYWwgc2NhbjogYmFja2dyb3VuZCBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuIDgyMTpcdFx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O2NoYW5zY2FuXCYjMzQ7LCBidWYsIDgpID09IDApIHtcbiA4MjI6XHRcdFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9DSEFOU0NBTik7XG4gODIzOlx0XHRcdGF0aF9kYmcoY29tbW9uLCBDT05GSUcsIFwmIzM0O3NwZWN0cmFsIHNjYW46IGNoYW5uZWwgc2NhbiBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuIDgyNDpcdFx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O21hbnVhbFwmIzM0OywgYnVmLCA2KSA9PSAwKSB7XG4gODI1Olx0XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfTUFOVUFMKTtcbiA4MjY6XHRcdFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXCYjMzQ7c3BlY3RyYWwgc2NhbjogbWFudWFsIG1vZGUgZW5hYmxlZFxcblwmIzM0Oyk7XG4gODI3Olx0XHR9IGVsc2UgaWYgKHN0cm5jbXAoXCYjMzQ7ZGlzYWJsZVwmIzM0OywgYnVmLCA3KSA9PSAwKSB7XG4gODI4Olx0XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfRElTQUJMRUQpO1xuIDgyOTpcdFx0XHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcJiMzNDtzcGVjdHJhbCBzY2FuOiBkaXNhYmxlZFxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDkKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gYSBkZWJ1Z2ZzIHdyaXRlIGhhbmRsZXIsIHNwZWNpZmljYWxseSBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYC4gQmVmb3JlIHRoZSBwYXRjaCwgd3JpdGVzIHRvIGBzcGVjdHJhbF9zY2FuX2N0bGAgd291bGQgdHJpZ2dlciBQSFkgcmVnaXN0ZXIgd3JpdGVzIGV2ZW4gd2hlbiB0aGUgaW50ZXJmYWNlIHdhc24mIzM5O3QgdmFsaWQsIGluZGljYXRlZCBieSBgQVRIX09QX0lOVkFMSURgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBlYXJseSBleGl0IGNvbmRpdGlvbjogYGlmICh0ZXN0X2JpdChBVEhfT1BfSU5WQUxJRCwgJmFtcDtjb21tb24tJmd0O29wX2ZsYWdzKSkgcmV0dXJuIC1FQlVTWTtgLiBTbWFydC4KCk5vdywgbGV0IG1lIHJ1biB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3QgZm9yIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaC4KCjEuICAqKktlcm5lbCBTdHJ1Y3R1cmVzICZhbXA7IFVzZXIgU3BhY2U6KiogRG9lcyB0aGlzIGludHJvZHVjZSBuZXcga2VybmVsIHN0cnVjdHVyZXMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9uZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQ/IE5vLCB0aGUgZnVuY3Rpb24gdXNlcyBgY29weV9mcm9tX3VzZXJgLCBzbyBpdCByZWNlaXZlcyBkYXRhLCBub3Qgc2VuZHMgaXQsIGFuZCByZXR1cm5zIGEgY291bnQgb3IgZXJyb3IgY29kZS4gU2FmZS4KMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZSBMb2dpYzoqKiBEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gYGNvbW1vbi0mZ3Q7b3BfZmxhZ3NgIGlzIGNsZWFybHkgYW4gb3BlcmF0aW9uYWwgZmxhZyBiaXRmaWVsZCBtYW5hZ2VkIGJ5IHRoZSBkcml2ZXIgaXRzZWxmLCBzbyBpdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYXQgc29tZSBwb2ludC4gU2VjdXJlLgozLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIERvZXMgaXQgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOby4gRG9lc24mIzM5O3QgbG9vayBsaWtlIGFueSBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gdGhpcyBhcmVhLiBObyBwcm9ibGVtLgo0LiAgKipCb3VuZHMgQ2hlY2tzICZhbXA7IE1lbW9yeSBBY2Nlc3M6KiogRG9lcyBpdCBtZXNzIHdpdGggYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBzdXJyb3VuZGluZyBjb2RlIGNvdWxkIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzPyBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgbGlrZSB0aGF0IGhlcmUuIFRoaXMgaXMgYSBwcmV0dHkgZm9jdXNlZCBjaGFuZ2UuCgpTbywgaXQmIzM5O3MgcmVhbGx5IGp1c3QgYSBkZXZpY2Ugc3RhdGUgdmFsaWRpdHkgY2hlY2suIFdlJiMzOTtyZSBwcmV2ZW50aW5nIFBIWSByZWdpc3RlciB3cml0ZXMgKGhhcmR3YXJlIGNvbW1hbmRzKSB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQsIHdoaWNoIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGNhdXNlcyBmaXJtd2FyZSBoYW5ncyBvbiBBUjkyNzEuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYSBnb29kIGZpeC4KCk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIEtNU0FOIGRvZXNuJiMzOTt0IHNlZW0gbmVjZXNzYXJ5IGhlcmUuIEkgdGhpbmsgd2UmIzM5O3JlIGdvb2QgdG8gZ28uIExldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIG15IHdvcmsuLi5hbmQgcHJlcGFyZSBteSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHN0YXRlIGNoZWNrICh0ZXN0X2JpdChBVEhfT1BfSU5WQUxJRCwgXHUwMDI2Y29tbW9uLVx1MDAzZW9wX2ZsYWdzKSkgaW4gdGhlIGRlYnVnZnMgd3JpdGUgaGFuZGxlciB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB0byBwcmV2ZW50IHNwZWN0cmFsIHNjYW4gY29tbWFuZHMgZnJvbSBkcml2aW5nIFBIWSByZWdpc3RlciB3cml0ZXMgd2hlbiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRpc2FibGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc3RhdGUgY2hlY2sgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcdTAwMjZjb21tb24tXHUwMDNlb3BfZmxhZ3MpKSBpbiB0aGUgZGVidWdmcyB3cml0ZSBoYW5kbGVyIHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCgpIHRvIHByZXZlbnQgc3BlY3RyYWwgc2NhbiBjb21tYW5kcyBmcm9tIGRyaXZpbmcgUEhZIHJlZ2lzdGVyIHdyaXRlcyB3aGVuIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDM6NDQuNzcwMDcyOTcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3NzcwMTU4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIOUtfQ09NTU9OX1NQRUNUUkFMXCIsXG4gICAgXCJBVEg5S19IVENcIixcbiAgICBcIkFUSDlLX0hUQ19ERUJVR0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsXCIsXG4gICAgXCJhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWdcIixcbiAgICBcImF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzdGF0ZSBjaGVjayAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFxcdTAwMjZjb21tb24tXFx1MDAzZW9wX2ZsYWdzKSkgaW4gdGhlIGRlYnVnZnMgd3JpdGUgaGFuZGxlciB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB0byBwcmV2ZW50IHNwZWN0cmFsIHNjYW4gY29tbWFuZHMgZnJvbSBkcml2aW5nIFBIWSByZWdpc3RlciB3cml0ZXMgd2hlbiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRpc2FibGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciB0aGUgQVRIX09QX0lOVkFMSUQgZmxhZyBpbiB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB3aXRoaW4gdGhlIGF0aDlrIHNwZWN0cmFsIHNjYW4gZGVidWdmcyBpbnRlcmZhY2UgdG8gcmVqZWN0IFBIWSByZWdpc3RlciB3cml0ZSBjb21tYW5kcyB3aGlsZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gb2YgdGhlIGF0aDlrX2h0YyBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQzOjQ0Ljc3MDA3NzE2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1ODAxMzYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI2ZDk2YmQxMGRmNzc1MzdjOTQwM2ViODkwNTY4OWYwMDNmZTEzNmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMTo0Mzo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcXG5pbmRleCBjYTAxYTA3ZjY2MzBjLi4wYmJiZWY5ZTNiOWMxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1xcbkBAIC04MDUsNiArODA1LDE0IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFxuIFxcdGJ1ZltsZW5dID0gJ1xcXFwwJztcXG4gXFxuK1xcdC8qIEV2ZXJ5IGNvbW1hbmQgYmVsb3cgZHJpdmVzIFBIWSByZWdpc3RlciB3cml0ZXMuIFJlZnVzZSB0aGVtIHdoaWxlXFxuK1xcdCAqIHRoZSBoYXJkd2FyZSBpcyBkaXNhYmxlZCAodGhlIGludGVyZmFjZSBpcyBkb3duKTogb24gdGhlIEFSOTI3MVxcbitcXHQgKiB0aGF0IHRyYWZmaWMgaGFuZ3MgdGhlIGZpcm13YXJlIHVudGlsIHRoZSBkZXZpY2UgaXMgcmUtZW51bWVyYXRlZC5cXG4rXFx0ICogVGhlIHJlc2V0IGNvbnRyb2wgcmVmdXNlcyBvbiB0aGUgc2FtZSBmbGFnLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcXHUwMDI2Y29tbW9uLVxcdTAwM2VvcF9mbGFncykpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbiBcXHRpZiAoc3RybmNtcChcXFwidHJpZ2dlclxcXCIsIGJ1ZiwgNykgPT0gMCkge1xcbiBcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGNvbW1vbiwgc3BlY19wcml2KTtcXG4gXFx0fSBlbHNlIGlmIChzdHJuY21wKFxcXCJiYWNrZ3JvdW5kXFxcIiwgYnVmLCAxMCkgPT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0Mzo0Ni4yMjg3Nzk5NDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQwOTQ3OTc1MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDlLX0NPTU1PTl9TUEVDVFJBTFwiLFxuICAgIFwiQVRIOUtfSFRDXCIsXG4gICAgXCJBVEg5S19IVENfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIndyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bFwiLFxuICAgIFwiYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnXCIsXG4gICAgXCJhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciB0aGUgQVRIX09QX0lOVkFMSUQgZmxhZyBpbiB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB3aXRoaW4gdGhlIGF0aDlrIHNwZWN0cmFsIHNjYW4gZGVidWdmcyBpbnRlcmZhY2UgdG8gcmVqZWN0IFBIWSByZWdpc3RlciB3cml0ZSBjb21tYW5kcyB3aGlsZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gb2YgdGhlIGF0aDlrX2h0YyBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjZkOTZiZDEwZGY3NzUzN2M5NDAzZWI4OTA1Njg5ZjAwM2ZlMTM2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMjE6NDM6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcbmluZGV4IGNhMDFhMDdmNjYzMGMuLjBiYmJlZjllM2I5YzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1xuQEAgLTgwNSw2ICs4MDUsMTQgQEAgc3RhdGljIHNzaXplX3Qgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuIFxuIFx0YnVmW2xlbl0gPSAnXFwwJztcbiBcbitcdC8qIEV2ZXJ5IGNvbW1hbmQgYmVsb3cgZHJpdmVzIFBIWSByZWdpc3RlciB3cml0ZXMuIFJlZnVzZSB0aGVtIHdoaWxlXG4rXHQgKiB0aGUgaGFyZHdhcmUgaXMgZGlzYWJsZWQgKHRoZSBpbnRlcmZhY2UgaXMgZG93bik6IG9uIHRoZSBBUjkyNzFcbitcdCAqIHRoYXQgdHJhZmZpYyBoYW5ncyB0aGUgZmlybXdhcmUgdW50aWwgdGhlIGRldmljZSBpcyByZS1lbnVtZXJhdGVkLlxuK1x0ICogVGhlIHJlc2V0IGNvbnRyb2wgcmVmdXNlcyBvbiB0aGUgc2FtZSBmbGFnLlxuK1x0ICovXG4rXHRpZiAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFx1MDAyNmNvbW1vbi1cdTAwM2VvcF9mbGFncykpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4gXHRpZiAoc3RybmNtcChcInRyaWdnZXJcIiwgYnVmLCA3KSA9PSAwKSB7XG4gXHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpO1xuIFx0fSBlbHNlIGlmIChzdHJuY21wKFwiYmFja2dyb3VuZFwiLCBidWYsIDEwKSA9PSAwKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0Mzo0Ni4yMjg3ODExNDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzE3MDk1ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFdpcmVsZXNzIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggYWZmZWN0cyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jYCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGF0aDlrYCBpcyB0aGUgZm9jdXMsIGFuZCBpdCdzIGluIHRoZSB3aXJlbGVzcyBkcml2ZXIgc3BhY2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoaXMgcmVsYXRlIHRvIHRoZSBsYXJnZXIgc3lzdGVtPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGF0aDlrYCBhbmQgYGF0aDlrX2h0Y2AuIFdhaXQsIGlzbid0IGBhdGg5a2AgUENJL0FIQiBhbmQgYGF0aDlrX2h0Y2AgVVNCP1xuXG5UaGlzIGFkZHMgc29tZSBjb21wbGV4aXR5IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciB0ZXN0aW5nIGFuZCB2ZXJpZmljYXRpb24uIEFyZSB0aGV5IGFjdHVhbGx5IHVzaW5nIHRoaXMgY29tbW9uIGZpbGUgZGlyZWN0bHksIG9yIGlzIGl0IHBvdGVudGlhbGx5IGVtdWxhdGVkIHZpYSBVU0IgUmF3IEdhZGdldCBpbiBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXI/IFRoYXQncyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBjb21tb24tc3BlY3RyYWwuY2AgaXMgYWN0dWFsbHkgdXRpbGl6ZWQgaW4gZWFjaCBlbnZpcm9ubWVudC4gQWxyaWdodCwgbGV0J3MgdHJhY2sgZG93biB3aGVyZSBgY29tbW9uLXNwZWN0cmFsLmNgIGlzIHVzZWQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHNlYXJjaCBmb3IgdGhlIGZpbGUgYW5kIGl0cyBhc3NvY2lhdGVkIEtjb25maWcgYW5kIE1ha2VmaWxlIGVudHJpZXMuIEtub3dpbmcgd2hlcmUgdGhlIHNvdXJjZSBpcyBidWlsdCBhbmQgdXNlZCBpcyBrZXkgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGZyb20gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQzOjUwLjU0NTg3OTMyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIxNDM4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21tb24tc3BlY3RyYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZT02NT1hdGg5a19jb21tb24tJChDT05GSUdfQVRIOUtfQ09NTU9OX0RFQlVHKSArPSBjb21tb24tZGVidWcub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZTo2NjphdGg5a19jb21tb24tJChDT05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMKSArPSBjb21tb24tc3BlY3RyYWwub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS02Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaC0yNi0jaW5jbHVkZSBcXFwiY29tbW9uLWRlYnVnLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oOjI3OiNpbmNsdWRlIFxcXCJjb21tb24tc3BlY3RyYWwuaFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtMjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQzOjUwLjU5MTA5OTMyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjQ5MTk4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgYXRoOWsgXHUwMDI2IFNwZWN0cmFsIFN1cHBvcnQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGUgYGF0aDlrYCBkcml2ZXIsIGl0cyBjb21tb24gY29tcG9uZW50cyAoYGF0aDlrX2NvbW1vbmApLCBhbmQgdGhlIEhUQyB2YXJpYW50IChgYXRoOWtfaHRjYCkgYXJlIGNvbmZpZ3VyZWQsIGFuZCB3aGV0aGVyIGBBVEg5S19DT01NT05fU1BFQ1RSQUxgIGlzIGFwcHJvcHJpYXRlbHkgaGFuZGxlZC4gVGhpcyBpcyBsaWtlbHkgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0IGRlZmluZXMgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHNwZWN0cmFsIGFuYWx5c2lzIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCB1bmRlcnN0YW5kIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgdGhlc2Ugb3B0aW9ucyBiZWNvbWUgdmlzaWJsZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZWxlbWVudHMgcmVsYXRlIHRvIGVhY2ggb3RoZXIgaW4gdGVybXMgb2YgYnVpbGQgb3B0aW9ucy4gQW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBhcmUgZ29pbmcgdG8gbmVlZCBhIGNsb3NlIGxvb2suIFRoaXMgaXMgdGhlIGJlZHJvY2sgb2YgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGV4cG9zZWQgYW5kIGluY29ycG9yYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY1NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQzOjUyLjY1NjAyMjEwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE4NzU0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBVEg5S19DT01NT05fU1BFQ1RSQUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTE5NT1jb25maWcgQVRIOUtfSFdSTkdcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTIwNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoyMDY6Y29uZmlnIEFUSDlLX0NPTU1PTl9TUEVDVFJBTFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTIwNy1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrL2F0aDlrX2h0YyBzcGVjdHJhbCBzY2FuIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU9NjU9YXRoOWtfY29tbW9uLSQoQ09ORklHX0FUSDlLX0NPTU1PTl9ERUJVRykgKz0gY29tbW9uLWRlYnVnLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6NjY6YXRoOWtfY29tbW9uLSQoQ09ORklHX0FUSDlLX0NPTU1PTl9TUEVDVFJBTCkgKz0gY29tbW9uLXNwZWN0cmFsLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtNjctXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTY2PXN0YXRpYyBpbmxpbmUgdTggc3BlY3RyYWxfYml0bWFwX3dlaWdodCh1OCAqYmlucylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE3MTojaWZkZWYgQ09ORklHX0FUSDlLX0NPTU1PTl9TUEVDVFJBTFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzItdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaD0xOTc9c3RhdGljIGlubGluZSBpbnQgYXRoX2Ntbl9wcm9jZXNzX2ZmdChzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMjAyLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MjAzOiNlbmRpZiAvKiBDT05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTIwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDM6NTIuNzAzMjE1MDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjY0Mjc2MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBBVEg5S19DT01NT05fU1BFQ1RSQUwgaW4gS2NvbmZpZyBmb3IgYXRoOWsgYW5kIGF0aDlrX2h0YyBSZWxhdGlvbnNoaXAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBLY29uZmlnYCBmaWxlcyBhc3NvY2lhdGVkIHdpdGggYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRpZXMgdG9nZXRoZXIgdGhlIGBhdGg5a2AgYW5kIGBhdGg5a19odGNgIGRyaXZlcnMuIEknbSBhc3N1bWluZyB0aGVyZSdzIHNvbWUgY29tbW9uIGZ1bmN0aW9uYWxpdHksIGxpa2VseSBzcGVjdHJhbCBhbmFseXNpcyBvciByZWxhdGVkIGZlYXR1cmVzLCB0aGF0J3Mgc2hhcmVkIG9yIGF0IGxlYXN0IGNvbmRpdGlvbmFsbHkgdXNlZCBiZXR3ZWVuIHRoZSB0d28uIFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBrZXkgdG8gdW5sb2NraW5nIHRoaXMgZGVwZW5kZW5jeSBhbmQgdW5kZXJzdGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgKGUuZy4sIGRyaXZlciBzZWxlY3Rpb24sIGhhcmR3YXJlIHN1cHBvcnQpIGl0J3MgZW5hYmxlZC4gSSBuZWVkIHRvIGxvb2sgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsYXRpb25zaGlwcyBkZWZpbmVkIHRocm91Z2ggYHNlbGVjdGAgb3IgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBjb2RlLCBhbmQgaG93IHRoZXNlIHNlcGFyYXRlIGRldmljZXMgd29yayB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ0OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQzOjU0Ljk2NzQ5MzQ0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHRzZWxlY3QgQVRIOUtfQ09NTU9OX0RFQlVHXFxuIDE5MTpcXHRcXHRoZWxwXFxuIDE5MjpcXHRcXHQgIFNheSBZLCBpZiB5b3UgbmVlZCBhY2Nlc3MgdG8gYXRoOWtfaHRjJ3Mgc3RhdGlzdGljcy5cXG4gMTkzOlxcdFxcdCAgQXMgd2VsbCBhcyBhY2Nlc3MgdG8gdGhlIEZGVC9zcGVjdHJhbCBkYXRhLlxcbiAxOTQ6XFx0XFxuIDE5NTpcXHRjb25maWcgQVRIOUtfSFdSTkdcXG4gMTk2OlxcdFxcdGJvb2wgXFxcIlJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHN1cHBvcnRcXFwiXFxuIDE5NzpcXHRcXHRkZXBlbmRzIG9uIEFUSDlLIFxcdTAwMjZcXHUwMDI2IChIV19SQU5ET00gPSB5IHx8IEhXX1JBTkRPTSA9IEFUSDlLKVxcbiAxOTg6XFx0XFx0ZGVmYXVsdCBuXFxuIDE5OTpcXHRcXHRoZWxwXFxuIDIwMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGluY29ycG9yYXRlcyB0aGUgQURDIHJlZ2lzdGVyIG91dHB1dCBhcyBhIHNvdXJjZSBvZlxcbiAyMDE6XFx0XFx0ICByYW5kb21uZXNzIGludG8gTGludXggZW50cm9weSBwb29sICgvZGV2L3VyYW5kb20gYW5kIC9kZXYvcmFuZG9tKVxcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHQgIFNheSBZLCBmZWVkcyB0aGUgZW50cm9weSBkaXJlY3RseSBmcm9tIHRoZSBXaUZpIGRyaXZlciB0byB0aGUgaW5wdXRcXG4gMjA0OlxcdFxcdCAgcG9vbC5cXG4gMjA1OlxcdFxcbiAyMDY6XFx0Y29uZmlnIEFUSDlLX0NPTU1PTl9TUEVDVFJBTFxcbiAyMDc6XFx0XFx0Ym9vbCBcXFwiQXRoZXJvcyBhdGg5ay9hdGg5a19odGMgc3BlY3RyYWwgc2NhbiBzdXBwb3J0XFxcIlxcbiAyMDg6XFx0XFx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIHx8IEFUSDlLX0hUQ19ERUJVR0ZTXFxuIDIwOTpcXHRcXHRzZWxlY3QgUkVMQVlcXG4gMjEwOlxcdFxcdGRlZmF1bHQgblxcbiAyMTE6XFx0XFx0aGVscFxcbiAyMTI6XFx0XFx0ICBTYXkgWSB0byBlbmFibGUgYWNjZXNzIHRvIHRoZSBGRlQvc3BlY3RyYWwgZGF0YSB2aWEgZGVidWdmcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDM6NTQuOTY3NTU1NzYzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgzNjUxNjc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBBVEg5S19IVEMgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGF0aDlrX2h0Y2AuIFJpZ2h0LCBpdCdzIGEgVVNCIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFuIGBBVEg5S19IVENgIG9uZS4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBjaGVjayB3aGVyZSBpdCdzIGRlZmluZWQgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBhbmQgd2hlcmUgdGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTE0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0Mzo1OC44MDQwNzQ5OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mzc1MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEg5S19IVENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTE1Nj1jb25maWcgQVRIOUtfUENJX05PX0VFUFJPTVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTcxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE3Mjpjb25maWcgQVRIOUtfSFRDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIEhUQyBiYXNlZCB3aXJlbGVzcyBjYXJkcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTg2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE4Nzpjb25maWcgQVRIOUtfSFRDX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiQXRoZXJvcyBhdGg5a19odGMgZGVidWdnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0Mzo1OC44NTA0NTQ0MTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5MjE2NzA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbi4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGF0aDlrLWh0YyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGF0aDlrLWh0YyBkcml2ZXIgaGFuZGxlcyBpdHMgaW5pdGlhbGl6YXRpb24uICBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IGl0IHJlZ2lzdGVycyB0aGUgVVNCIGRldmljZSwgYW5kLCBvZiBjb3Vyc2UsIGhvdyBpdCBzZXRzIHVwIGZlYXR1cmVzIGxpa2Ugc3BlY3RyYWwgc2NhbiBhbmQgdGhlIGRlYnVnZnMgaW50ZXJmYWNlLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgd2l0aGluIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiByb3V0aW5lIGl0c2VsZi4gR2l2ZW4gdGhhdCwgSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZpcnN0IHN0b3AgaXMgcHJvYmFibHkgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuY2AsIG9yIHNvbWV0aGluZyBjbG9zZWx5IGFuYWxvZ291cyBpbiB0aGUgYXRoOWstaHRjIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRldmljZSBzZXR1cCBsb2dpYyBsaXZlcy4gSSdsbCBuZWVkIHRvIHBvcmUgb3ZlciB0aGF0IGZpbGUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZSBVU0IgZGV2aWNlIGlzIHByb2JlZCBhbmQgYm91bmQsIGFuZCB0aGVuIHRyYWNlIHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIHNwZWN0cmFsIHNjYW4gY2FwYWJpbGl0aWVzIGFuZCB0aGUgZGVidWdmcyBlbnRyaWVzLiBIb3BlZnVsbHksIGl04oCZcyBhbGwgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgd2VsbC1jb21tZW50ZWQuIElmIG5vdCwgSSdsbCBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCByZWxhdGVkIGZ1bmN0aW9uIGNhbGxzIGFuZCBsb29rIGZvciB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi4gSG9wZWZ1bGx5IHRoaXMgaXMgd2hlcmUgSSB3aWxsIGZpbmQgd2hhdCBJIGFtIGxvb2tpbmcgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDQ6MDEuMzQyNjI0MzgzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM4NzE0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGg5a19jbW5fc3BlY3RyYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jaGFubmVsLmM9MjM9c3RhdGljIGludCBhdGhfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2hhbm5lbC5jLTk2LVxcdFxcdFxcdHNjLVxcdTAwM2VzcGVjX3ByaXYuc3BlY3RyYWxfbW9kZSA9PSBTUEVDVFJBTF9DSEFOU0NBTilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2hhbm5lbC5jOjk3OlxcdFxcdFxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBcXHUwMDI2c2MtXFx1MDAzZXNwZWNfcHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NoYW5uZWwuYy05OC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM9NjkwPXN0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV9zcGVjX3NjYW5fY3RsKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzE0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzo3MTU6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTcxNi1cXHRcXHRcXHRcXHQgc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTc0Mi1cXHQgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6NzQzOlxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgc3BlY19wcml2LVxcdTAwM2VzcGVjdHJhbF9tb2RlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzQ0LVxcdGF0aDlrX2h3X29wcyhhaCktXFx1MDAzZXNwZWN0cmFsX3NjYW5fdHJpZ2dlcihhaCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzQ2LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6NzQ3OkVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTc0OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6NzQ5OmludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzUwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzg3LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6Nzg4OkVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzg5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYz03OTA9c3RhdGljIHNzaXplX3Qgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgxNi1cXHRpZiAoc3RybmNtcChcXFwidHJpZ2dlclxcXCIsIGJ1ZiwgNykgPT0gMCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzo4MTc6XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcihjb21tb24sIHNwZWNfcHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgxOC1cXHR9IGVsc2UgaWYgKHN0cm5jbXAoXFxcImJhY2tncm91bmRcXFwiLCBidWYsIDEwKSA9PSAwKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjgxOTpcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoY29tbW9uLCBzcGVjX3ByaXYsIFNQRUNUUkFMX0JBQ0tHUk9VTkQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy04MjAtXFx0XFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXFxcInNwZWN0cmFsIHNjYW46IGJhY2tncm91bmQgbW9kZSBlbmFibGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtODIxLVxcdH0gZWxzZSBpZiAoc3RybmNtcChcXFwiY2hhbnNjYW5cXFwiLCBidWYsIDgpID09IDApIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6ODIyOlxcdFxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfQ0hBTlNDQU4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy04MjMtXFx0XFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXFxcInNwZWN0cmFsIHNjYW46IGNoYW5uZWwgc2NhbiBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy04MjQtXFx0fSBlbHNlIGlmIChzdHJuY21wKFxcXCJtYW51YWxcXFwiLCBidWYsIDYpID09IDApIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6ODI1OlxcdFxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfTUFOVUFMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtODI2LVxcdFxcdGF0aF9kYmcoY29tbW9uLCBDT05GSUcsIFxcXCJzcGVjdHJhbCBzY2FuOiBtYW51YWwgbW9kZSBlbmFibGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtODI3LVxcdH0gZWxzZSBpZiAoc3RybmNtcChcXFwiZGlzYWJsZVxcXCIsIGJ1ZiwgNykgPT0gMCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzo4Mjg6XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9ESVNBQkxFRCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgyOS1cXHRcXHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcXFwic3BlY3RyYWwgc2NhbjogZGlzYWJsZWRcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jPTEwNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCByY2hhbl9jYWxsYmFja3MgcmZzX3NwZWNfc2Nhbl9jYiA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy0xMDUyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzoxMDUzOnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTEwNTQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTEwNTktfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzoxMDYwOkVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1Zyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTEwNjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjEwNjI6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTEwNjMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVidWdmc19waHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtMTA5Mi19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjEwOTM6RVhQT1JUX1NZTUJPTChhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1Zyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTY2PXN0YXRpYyBpbmxpbmUgdTggc3BlY3RyYWxfYml0bWFwX3dlaWdodCh1OCAqYmlucylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzEtI2lmZGVmIENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTcyOnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE3Mzp2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9kZWluaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzU6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE3Ni1cXHRcXHRcXHRcXHQgc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTc3OmludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTgwPWludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODItI2Vsc2VcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTgzOnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE4NC1cXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVidWdmc19waHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTg3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxODg6c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9kZWluaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE5MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTkyOnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE5My1cXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYz0xMzcyPXZvaWQgYXRoOWtfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jLTEzNzMte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jOjEzNzQ6XFx0YXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhcXHUwMDI2c2MtXFx1MDAzZXNwZWNfcHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMtMTM3NS19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYz0xMzc3PWludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMtMTM5MS1cXHRhdGg5a190eDk5X2luaXRfZGVidWcoc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jOjEzOTI6XFx0YXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoXFx1MDAyNnNjLVxcdTAwM2VzcGVjX3ByaXYsIHNjLVxcdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMtMTM5My1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM9NDc3PXZvaWQgYXRoOWtfaHRjX2RlaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYy00Nzgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM6NDc5OlxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9kZWluaXRfZGVidWcoXFx1MDAyNnByaXYtXFx1MDAzZXNwZWNfcHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYy00ODAtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYz00ODI9aW50IGF0aDlrX2h0Y19pbml0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYy00ODktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYzo0OTA6XFx0YXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoXFx1MDAyNnByaXYtXFx1MDAzZXNwZWNfcHJpdiwgcHJpdi1cXHUwMDNlZGVidWcuZGVidWdmc19waHkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDkxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTI0MD1zdGF0aWMgaW50IGF0aDlrX2h0Y19zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzE2LVxcdFxcdCAgICAgcHJpdi1cXHUwMDNlc3BlY19wcml2LnNwZWN0cmFsX21vZGUgPT0gU1BFQ1RSQUxfQ0hBTlNDQU4pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjMxNzpcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGNvbW1vbiwgXFx1MDAyNnByaXYtXFx1MDAzZXNwZWNfcHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTMxOC1lcnI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjAxLjM5MDAxNTAxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjY0Mjg0NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBhdGg5a19odGMgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gYXRoOWtfaHRjIGlzIGEgVVNCIGRldmljZSBkcml2ZXIg4oCTIHRoYXQncyB0aGUga2V5LiBBbmQgaWYgaXQncyBVU0IsIHRoZW4gaXQncyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGVtdWxhdGlvbiB0aHJvdWdoIFVTQiBSYXcgR2FkZ2V0IGFuZCBzdWJzZXF1ZW50IGZ1enppbmcgd2l0aCB0b29scyBsaWtlIHN5emthbGxlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgc3l6a2FsbGVyIGNhbiBldmVuICp0YXJnZXQqIHRoaXMgZHJpdmVyLiBHb29kIG5ld3Mg4oCTIGl0IGNhbiEgVGhlIFVTQiBJRHMgYXJlIHByZXNlbnQsIG1lYW5pbmcgc3l6a2FsbGVyIGNhbiBwcm9iZSBmb3IgYXRoOWtfaHRjIGRldmljZXMuXG5cbk5vdywgbGV0J3MgZGlnIGRlZXBlci4gV2hlcmUgYXJlIHRoZSBqdWljeSB0YXJnZXRzPyBXZSBuZWVkIHRvIGxvb2sgZm9yIGludGVyZXN0aW5nIGVudHJ5IHBvaW50cywgcGVyaGFwcyB0aHJvdWdoIGRlYnVnZnMgYWNjZXNzIG9yIHNvbWUgb3RoZXIgcHJpdmlsZWdlZCBpbnRlcmFjdGlvbi4gTGV0J3Mgc2VlIGhvdyBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCBpcyBhY3R1YWxseSByZWFjaGVkLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIGl0cyBkZWZpbml0aW9uLCBzbyBJJ2xsIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGV4YW1pbmUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY2AgYXJvdW5kIGxpbmUgODA1LiBUaW1lIHRvIHNlZSB3aGF0J3Mgd2hhdCBhbmQgaWRlbnRpZnkgdGhlIGF0dGFjayBzdXJmYWNlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTE0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjA1LjA1NDMwMTY1M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc5MDpcXHRzdGF0aWMgc3NpemVfdCB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXFxuIDc5MTpcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXFxuIDc5MjpcXHRcXHRcXHRcXHRcXHRcXHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gNzkzOlxcdHtcXG4gNzk0OlxcdFxcdHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gNzk1OlxcdFxcdHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc3BlY19wcml2LVxcdTAwM2VhaCk7XFxuIDc5NjpcXHRcXHRjaGFyIGJ1ZlszMl07XFxuIDc5NzpcXHRcXHRzc2l6ZV90IGxlbjtcXG4gNzk4OlxcdFxcbiA3OTk6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FUSDlLX1RYOTkpKVxcbiA4MDA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA4MDE6XFx0XFxuIDgwMjpcXHRcXHRsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7XFxuIDgwMzpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSlcXG4gODA0OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA4MDU6XFx0XFxuIDgwNjpcXHRcXHRidWZbbGVuXSA9ICdcXFxcMCc7XFxuIDgwNzpcXHRcXG4gODA4OlxcdFxcdC8qIEV2ZXJ5IGNvbW1hbmQgYmVsb3cgZHJpdmVzIFBIWSByZWdpc3RlciB3cml0ZXMuIFJlZnVzZSB0aGVtIHdoaWxlXFxuIDgwOTpcXHRcXHQgKiB0aGUgaGFyZHdhcmUgaXMgZGlzYWJsZWQgKHRoZSBpbnRlcmZhY2UgaXMgZG93bik6IG9uIHRoZSBBUjkyNzFcXG4gODEwOlxcdFxcdCAqIHRoYXQgdHJhZmZpYyBoYW5ncyB0aGUgZmlybXdhcmUgdW50aWwgdGhlIGRldmljZSBpcyByZS1lbnVtZXJhdGVkLlxcbiA4MTE6XFx0XFx0ICogVGhlIHJlc2V0IGNvbnRyb2wgcmVmdXNlcyBvbiB0aGUgc2FtZSBmbGFnLlxcbiA4MTI6XFx0XFx0ICovXFxuIDgxMzpcXHRcXHRpZiAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFxcdTAwMjZjb21tb24tXFx1MDAzZW9wX2ZsYWdzKSlcXG4gODE0OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdGlmIChzdHJuY21wKFxcXCJ0cmlnZ2VyXFxcIiwgYnVmLCA3KSA9PSAwKSB7XFxuIDgxNzpcXHRcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGNvbW1vbiwgc3BlY19wcml2KTtcXG4gODE4OlxcdFxcdH0gZWxzZSBpZiAoc3RybmNtcChcXFwiYmFja2dyb3VuZFxcXCIsIGJ1ZiwgMTApID09IDApIHtcXG4gODE5OlxcdFxcdFxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfQkFDS0dST1VORCk7XFxuIDgyMDpcXHRcXHRcXHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcXFwic3BlY3RyYWwgc2NhbjogYmFja2dyb3VuZCBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcbiA4MjE6XFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKFxcXCJjaGFuc2NhblxcXCIsIGJ1ZiwgOCkgPT0gMCkge1xcbiA4MjI6XFx0XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9DSEFOU0NBTik7XFxuIDgyMzpcXHRcXHRcXHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcXFwic3BlY3RyYWwgc2NhbjogY2hhbm5lbCBzY2FuIG1vZGUgZW5hYmxlZFxcXFxuXFxcIik7XFxuIDgyNDpcXHRcXHR9IGVsc2UgaWYgKHN0cm5jbXAoXFxcIm1hbnVhbFxcXCIsIGJ1ZiwgNikgPT0gMCkge1xcbiA4MjU6XFx0XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9NQU5VQUwpO1xcbiA4MjY6XFx0XFx0XFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXFxcInNwZWN0cmFsIHNjYW46IG1hbnVhbCBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcbiA4Mjc6XFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKFxcXCJkaXNhYmxlXFxcIiwgYnVmLCA3KSA9PSAwKSB7XFxuIDgyODpcXHRcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoY29tbW9uLCBzcGVjX3ByaXYsIFNQRUNUUkFMX0RJU0FCTEVEKTtcXG4gODI5OlxcdFxcdFxcdGF0aF9kYmcoY29tbW9uLCBDT05GSUcsIFxcXCJzcGVjdHJhbCBzY2FuOiBkaXNhYmxlZFxcXFxuXFxcIik7XFxuIDgzMDpcXHRcXHR9IGVsc2Uge1xcbiA4MzE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzMjpcXHRcXHR9XFxuIDgzMzpcXHRcXG4gODM0OlxcdFxcdHJldHVybiBjb3VudDtcXG4gODM1OlxcdH1cXG4gODM2OlxcdFxcbiA4Mzc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19zcGVjX3NjYW5fY3RsID0ge1xcbiA4Mzg6XFx0XFx0LnJlYWQgPSByZWFkX2ZpbGVfc3BlY19zY2FuX2N0bCxcXG4gODM5OlxcdFxcdC53cml0ZSA9IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCxcXG4gODQwOlxcdFxcdC5vcGVuID0gc2ltcGxlX29wZW4sXFxuIDg0MTpcXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4gODQyOlxcdFxcdC5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlayxcXG4gODQzOlxcdH07XFxuIDg0NDpcXHRcXG4gODQ1OlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiA4NDY6XFx0Lyogc3BlY3RyYWxfc2hvcnRfcmVwZWF0ICovXFxuIDg0NzpcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4gODQ4OlxcdFxcbiA4NDk6XFx0c3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3NwZWN0cmFsX3Nob3J0X3JlcGVhdChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDQ6MDUuMDU0NDI4NTMzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzk5NjQwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIERlYnVnZnMgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYC4gVGhpcyBpcyBhIGRlYnVnZnMgZmlsZSB3cml0ZSBjYWxsYmFjaywgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBjb25uZWN0ZWQuIEZpcnN0LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIHJlZ2lzdGVyZWQuIExldCdzIHNlZS4uLiBBaGEhIGBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1Z2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIGBzcGVjdHJhbF9zY2FuX2N0bGAgZGVidWdmcyBmaWxlLiBUaGlzIGlzIGdvb2QgaW5mb3JtYXRpb24uIE5vdywgSSBuZWVkIHRvIGdvIGRlZXBlciBpbnRvIGBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1Z2AgdG8gc2VlIGV4YWN0bHkgaG93IHRoaXMgZmlsZSBhbmQgaXRzIGNhbGxiYWNrIGFyZSBwbHVtYmVkIGludG8gdGhlIGRlYnVnZnMgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgIGlzIGFjdHVhbGx5IGRvaW5nIGluIHRoZSBncmVhdGVyIHNjaGVtZSBvZiB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjE5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0NDowNy4zOTQzOTQ5NzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDYwOlxcdEVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1Zyk7XFxuMTA2MTpcXHRcXG4xMDYyOlxcdHZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LFxcbjEwNjM6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVidWdmc19waHkpXFxuMTA2NDpcXHR7XFxuMTA2NTpcXHRcXHRzcGVjX3ByaXYtXFx1MDAzZXJmc19jaGFuX3NwZWNfc2NhbiA9IHJlbGF5X29wZW4oXFxcInNwZWN0cmFsX3NjYW5cXFwiLFxcbjEwNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRlYnVnZnNfcGh5LFxcbjEwNjc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIDEwMjQsIDI1NiwgXFx1MDAyNnJmc19zcGVjX3NjYW5fY2IsXFxuMTA2ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgTlVMTCk7XFxuMTA2OTpcXHRcXHRpZiAoIXNwZWNfcHJpdi1cXHUwMDNlcmZzX2NoYW5fc3BlY19zY2FuKVxcbjEwNzA6XFx0XFx0XFx0cmV0dXJuO1xcbjEwNzE6XFx0XFxuMTA3MjpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzcGVjdHJhbF9zY2FuX2N0bFxcXCIsXFxuMTA3MzpcXHRcXHRcXHRcXHQgICAgMDYwMCxcXG4xMDc0OlxcdFxcdFxcdFxcdCAgICBkZWJ1Z2ZzX3BoeSwgc3BlY19wcml2LFxcbjEwNzU6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZmb3BzX3NwZWNfc2Nhbl9jdGwpO1xcbjEwNzY6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic3BlY3RyYWxfc2hvcnRfcmVwZWF0XFxcIixcXG4xMDc3OlxcdFxcdFxcdFxcdCAgICAwNjAwLFxcbjEwNzg6XFx0XFx0XFx0XFx0ICAgIGRlYnVnZnNfcGh5LCBzcGVjX3ByaXYsXFxuMTA3OTpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZvcHNfc3BlY3RyYWxfc2hvcnRfcmVwZWF0KTtcXG4xMDgwOlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNwZWN0cmFsX2NvdW50XFxcIixcXG4xMDgxOlxcdFxcdFxcdFxcdCAgICAwNjAwLFxcbjEwODI6XFx0XFx0XFx0XFx0ICAgIGRlYnVnZnNfcGh5LCBzcGVjX3ByaXYsXFxuMTA4MzpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZvcHNfc3BlY3RyYWxfY291bnQpO1xcbjEwODQ6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic3BlY3RyYWxfcGVyaW9kXFxcIixcXG4xMDg1OlxcdFxcdFxcdFxcdCAgICAwNjAwLFxcbjEwODY6XFx0XFx0XFx0XFx0ICAgIGRlYnVnZnNfcGh5LCBzcGVjX3ByaXYsXFxuMTA4NzpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZvcHNfc3BlY3RyYWxfcGVyaW9kKTtcXG4xMDg4OlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNwZWN0cmFsX2ZmdF9wZXJpb2RcXFwiLFxcbjEwODk6XFx0XFx0XFx0XFx0ICAgIDA2MDAsXFxuMTA5MDpcXHRcXHRcXHRcXHQgICAgZGVidWdmc19waHksIHNwZWNfcHJpdixcXG4xMDkxOlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Zm9wc19zcGVjdHJhbF9mZnRfcGVyaW9kKTtcXG4xMDkyOlxcdH1cXG4xMDkzOlxcdEVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0NDowNy4zOTQ1ODIwNzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzNzM3NzkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDlrX2h0Y2AgZHJpdmVyIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggaXRzIGRlYnVnZnMgaW50ZWdyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkZWJ1Z2dpbmcgaW50ZXJmYWNlcyBhcmUgc2V0IHVwIGFuZCBob3cgYWNjZXNzaWJsZSB0aGV5IHJlYWxseSBhcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZyb20gdGhlIHBvaW50IHdoZXJlIGEgVVNCIGRldmljZSBpcyBwcm9iZWQuXG5cblNvLCB3aGVuIGBhdGg5a19odGNgIGRldGVjdHMgYW5kIHByb2JlcyBhIFVTQiBkZXZpY2UsIGBhdGg5a19odGNfaW5pdF9kZWJ1Z2Agc2hvdWxkIGJlIHRoZSBrZXkgZnVuY3Rpb24gdG8gaW5zcGVjdC4gSXQncyB0aW1lIHRvIG5hdmlnYXRlIHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jYCB0byBleGFtaW5lIHRoZSBpbnRlcm5hbCBsb2dpYyBvZiBgYXRoOWtfaHRjX2luaXRfZGVidWdgLiBMZXQncyBzZWUgaG93IHRoYXQgcm91dGluZSBhY3R1YWxseSByZWdpc3RlcnMgdGhlc2UgZGVidWdmcyBlbnRyaWVzIGFuZCwgY3J1Y2lhbGx5LCB2ZXJpZnkgdGhhdCB0aGV5IGFyZSByZWFjaGFibGUgZnJvbSBhIHVzZXIgcGVyc3BlY3RpdmUuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGluZm9ybWF0aW9uIHRoYXQncyBzdXBwb3NlZCB0byBiZSBleHBvc2VkIGlzIGFjdHVhbGx5IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUyOCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDQ6MDkuNTMxOTYzNzQ5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDcwOlxcdFxcdGRhdGFbaSsrXSA9IFNSWEJBU0UucGh5X2Vycl9zdGF0c1tBVEg5S19QSFlFUlJfUkFEQVJdO1xcbiA0NzE6XFx0XFx0ZGF0YVtpKytdID0gU1JYQkFTRS5waHlfZXJyX3N0YXRzW0FUSDlLX1BIWUVSUl9PRkRNX1RJTUlOR107XFxuIDQ3MjpcXHRcXHRkYXRhW2krK10gPSBTUlhCQVNFLnBoeV9lcnJfc3RhdHNbQVRIOUtfUEhZRVJSX0NDS19USU1JTkddO1xcbiA0NzM6XFx0XFxuIDQ3NDpcXHRcXHRXQVJOX09OKGkgIT0gQVRIOUtfSFRDX1NTVEFUU19MRU4pO1xcbiA0NzU6XFx0fVxcbiA0NzY6XFx0XFxuIDQ3NzpcXHR2b2lkIGF0aDlrX2h0Y19kZWluaXRfZGVidWcoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbiA0Nzg6XFx0e1xcbiA0Nzk6XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhcXHUwMDI2cHJpdi1cXHUwMDNlc3BlY19wcml2KTtcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0aW50IGF0aDlrX2h0Y19pbml0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKVxcbiA0ODM6XFx0e1xcbiA0ODQ6XFx0XFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7XFxuIDQ4NTpcXHRcXHRzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBjb21tb24tXFx1MDAzZXByaXY7XFxuIDQ4NjpcXHRcXG4gNDg3OlxcdFxcdHByaXYtXFx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5ID0gZGVidWdmc19jcmVhdGVfZGlyKEtCVUlMRF9NT0ROQU1FLFxcbiA0ODg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZWRlYnVnZnNkaXIpO1xcbiA0ODk6XFx0XFxuIDQ5MDpcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhcXHUwMDI2cHJpdi1cXHUwMDNlc3BlY19wcml2LCBwcml2LVxcdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSk7XFxuIDQ5MTpcXHRcXG4gNDkyOlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInRndF9pbnRfc3RhdHNcXFwiLCAwNDAwLCBwcml2LVxcdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSxcXG4gNDkzOlxcdFxcdFxcdFxcdCAgICBwcml2LCBcXHUwMDI2Zm9wc190Z3RfaW50X3N0YXRzKTtcXG4gNDk0OlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInRndF90eF9zdGF0c1xcXCIsIDA0MDAsIHByaXYtXFx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5LFxcbiA0OTU6XFx0XFx0XFx0XFx0ICAgIHByaXYsIFxcdTAwMjZmb3BzX3RndF90eF9zdGF0cyk7XFxuIDQ5NjpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJ0Z3Rfcnhfc3RhdHNcXFwiLCAwNDAwLCBwcml2LVxcdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSxcXG4gNDk3OlxcdFxcdFxcdFxcdCAgICBwcml2LCBcXHUwMDI2Zm9wc190Z3Rfcnhfc3RhdHMpO1xcbiA0OTg6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwieG1pdFxcXCIsIDA0MDAsIHByaXYtXFx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5LFxcbiA0OTk6XFx0XFx0XFx0XFx0ICAgIHByaXYsIFxcdTAwMjZmb3BzX3htaXQpO1xcbiA1MDA6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic2tiX3J4XFxcIiwgMDQwMCwgcHJpdi1cXHUwMDNlZGVidWcuZGVidWdmc19waHksXFxuIDUwMTpcXHRcXHRcXHRcXHQgICAgcHJpdiwgXFx1MDAyNmZvcHNfc2tiX3J4KTtcXG4gNTAyOlxcdFxcbiA1MDM6XFx0XFx0YXRoOWtfY21uX2RlYnVnX3JlY3YocHJpdi1cXHUwMDNlZGVidWcuZGVidWdmc19waHksIFxcdTAwMjZwcml2LVxcdTAwM2VkZWJ1Zy5yeF9zdGF0cyk7XFxuIDUwNDpcXHRcXHRhdGg5a19jbW5fZGVidWdfcGh5X2Vycihwcml2LVxcdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSwgXFx1MDAyNnByaXYtXFx1MDAzZWRlYnVnLnJ4X3N0YXRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDQ6MDkuNTMyMDQ1ODA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTE5MjQ5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBhdGg5a19odGMgYW5kIFVTQiBHYWRnZXQgUHJvYmluZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdGltaW5nIG9mIHRoZSBgYXRoOWtfaHRjYCBkcml2ZXIncyByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoZW4gdGhlc2UgZXZlbnRzIG9jY3VyIGluIHJlbGF0aW9uIHRvIFVTQiBnYWRnZXQgbW9kZS4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBwcm9iZSBgYXRoOWtfaHRjYCBlZmZlY3RpdmVseSB1c2luZyBhIFVTQiBnYWRnZXQgc2V0dXAgd2l0aGluIHRoZSBgc3l6a2FsbGVyYCBlbnZpcm9ubWVudC4gVGhhdCB3aWxsIGxldCB1cyB0ZXN0IHRoZSBkcml2ZXIgaW4gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLiBUbyBnZXQgc3RhcnRlZCwgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNgLiBUaGlzIGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIFVTQi1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoYXQgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIFVTQiBpbnRlcmZhY2UgYW5kLCBob3BlZnVsbHksIGhvdyB3ZSBjYW4gbWFuaXB1bGF0ZSBpdCBmb3Igb3VyIHByb2JpbmcgbmVlZHMuIEZyb20gdGhlcmUsIEknbGwgc3RhcnQgYnVpbGRpbmcgYSB0ZXN0IHRvIGNoZWNrIGl0IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjEyLjAyMzk3NDExN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NzMyNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1PRFVMRV9ERVZJQ0VfVEFCTEVcXFxcKHVzYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYz0yMz1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXRoOWtfaGlmX3VzYl9pZHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMtNjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYzo2NzpNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYXRoOWtfaGlmX3VzYl9pZHMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMtNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjEyLjQ4MzcxNDQxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjgwODcxMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXRoOWtfaHRjIFVTQiBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gYGF0aDlrX2h0Y2AgaXMgYSBVU0IgZHJpdmVyLCBtYWtpbmcgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nIHZpYSBVU0IgcmF3IGdhZGdldCBhbmQgc3l6a2FsbGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSByZWNlbnQgcGF0Y2hlcywgYW5kIHRoaXMgb25lIGNhdWdodCBteSBleWUuIExldCdzIHNlZS4uLiBpdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBhZGRzIGEgY2hlY2sgd2l0aGluIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgLiBJdCdzIHJlZnVzaW5nIHdyaXRlIGNvbW1hbmRzIHdoaWxlIHRoZSBoYXJkd2FyZSBpcyBkaXNhYmxlZCwgc3BlY2lmaWNhbGx5IHRvIGF2b2lkIGZpcm13YXJlIGhhbmdzIG9uIHRoZSBBUjkyNzEuIFJpZ2h0LCBzdGFuZGFyZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuXG5cbkhvbGQgb24gYSBzZWNvbmQsIGlzIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgIHN0YXRpYz8gWWVzLCBpdCBpczogYHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCguLi4pYC4gT2theSwgdGhhdCdzIGNydWNpYWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZXZlbiBhIHVzZWZ1bCB0YXJnZXQgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbWl0YXRpb25zIHJlZ2FyZGluZyBzeW1ib2wgdmlzaWJpbGl0eS5cblxuTGV0IG1lIHJlZnJlc2guLi4gVGhpcyBmdW5jdGlvbiByZXNpZGVzIGluIGBjb21tb24tc3BlY3RyYWwuY2AuIExldCdzIGVudW1lcmF0ZSB0aGUgZnVuY3Rpb25zIGluIHRoYXQgZmlsZTogYHJlYWRfZmlsZV9zcGVjX3NjYW5fY3RsYCwgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAsIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyYCwgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ2AsIGV0Yy4gT2theS5cblxuTm93LCB0aGlzIGlzIHdoZXJlIHRoZSBndWlkZWxpbmVzIGNvbWUgaW4gaGFuZHkuIFJ1bGUgbnVtYmVyIDQgc2F5cyB0aGF0IHN0YXRpYyBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgY2FuIHN0aWxsIGhhdmUgc3ltYm9scyBpZiB0aGV5IGFyZSBub3Qgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycy4gU28sIHRoYXQgbWVhbnMgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAgKmNvdWxkKiBiZSBhIHZpYWJsZSB0YXJnZXQgZGVzcGl0ZSBiZWluZyBzdGF0aWMsIGVzcGVjaWFsbHkgYXMgaXQgbG9va3MgbGlrZSBpdCBpcyBub3QgYW4gaW5saW5lIGZ1bmN0aW9uIGluIGEgaGVhZGVyLiBQbHVzLCB0aGVyZSBhcmUgYWxzbyB0aGUgbm9uLXN0YXRpYyBleHBvcnRlZCBmdW5jdGlvbnMgbGlrZSBgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcmAgYW5kIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWdgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBpbnRlcmVzdGluZy5cblxuVGhlcmVmb3JlLCBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCBhbmQgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ2Agc2VlbSBsaWtlIGdvb2QgZm9jdXMgc3ltYm9scyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBMZXQncyB0cmFjZSB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBBVEg5S19DT01NT05fU1BFQ1RSQUxgIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDg0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjE5LjE2NDU4ODc1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xcbiAgIDI6XFx0Y29uZmlnIEFUSDlLX0hXXFxuICAgMzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDQ6XFx0Y29uZmlnIEFUSDlLX0NPTU1PTlxcbiAgIDU6XFx0XFx0dHJpc3RhdGVcXG4gICA2OlxcdFxcdHNlbGVjdCBBVEhfQ09NTU9OXFxuICAgNzpcXHRjb25maWcgQVRIOUtfQ09NTU9OX0RFQlVHXFxuICAgODpcXHRcXHRib29sXFxuICAgOTpcXHRjb25maWcgQVRIOUtfREZTX0RFQlVHRlNcXG4gIDEwOlxcdFxcdGRlZl9ib29sIHlcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gQVRIOUtfREVCVUdGUyBcXHUwMDI2XFx1MDAyNiBBVEg5S19ERlNfQ0VSVElGSUVEXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBBVEg5S19CVENPRVhfU1VQUE9SVFxcbiAgMTQ6XFx0XFx0Ym9vbCBcXFwiQXRoZXJvcyBibHVldG9vdGggY29leGlzdGVuY2Ugc3VwcG9ydFxcXCJcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gKEFUSDlLIHx8IEFUSDlLX0hUQylcXG4gIDE2OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTYXkgWSwgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBhdGg5ay9hdGg5a19odGMgcmFkaW9zIHRvZ2V0aGVyIHdpdGhcXG4gIDE5OlxcdFxcdCAgQmx1ZXRvb3RoIG1vZHVsZXMgaW4gdGhlIHNhbWUgc3lzdGVtLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgQVRIOUtcXG4gIDIyOlxcdFxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIDgwMi4xMW4gd2lyZWxlc3MgY2FyZHMgc3VwcG9ydFxcXCJcXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAgMjQ6XFx0XFx0c2VsZWN0IE1BQzgwMjExX0xFRFMgaWYgTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcXG4gIDI1OlxcdFxcdHNlbGVjdCBBVEg5S19IV1xcbiAgMjY6XFx0XFx0c2VsZWN0IEFUSDlLX0NPTU1PTlxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uXFxuICAyOTpcXHRcXHQgIEF0aGVyb3MgSUVFRSA4MDIuMTFuIEFSNTAwOCwgQVI5MDAxIGFuZCBBUjkwMDIgZmFtaWx5XFxuICAzMDpcXHRcXHQgIG9mIGNoaXBzZXRzLiBGb3IgYSBzcGVjaWZpYyBsaXN0IG9mIHN1cHBvcnRlZCBleHRlcm5hbFxcbiAgMzE6XFx0XFx0ICBjYXJkcywgbGFwdG9wcyB0aGF0IGFscmVhZHkgc2hpcCB3aXRoIHRoZXNlIGNhcmRzIGFuZFxcbiAgMzI6XFx0XFx0ICBBUHMgdGhhdCBjb21lIHdpdGggdGhlc2UgY2FyZHMgcmVmZXIgdG8gYXRoOWsgd2lraVxcbiAgMzM6XFx0XFx0ICBwcm9kdWN0cyBwYWdlOlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRcXHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXRoOWsvcHJvZHVjdHNcXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgYXRoOWsuXFxuICAzODpcXHRcXG4gIDM5OlxcdGNvbmZpZyBBVEg5S19QQ0lcXG4gIDQwOlxcdFxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWsgUENJL1BDSWUgYnVzIHN1cHBvcnRcXFwiXFxuICA0MTpcXHRcXHRkZWZhdWx0IHlcXG4gIDQyOlxcdFxcdGRlcGVuZHMgb24gQVRIOUsgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBDSSBidXMgc3VwcG9ydCBpbiBhdGg5ay5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0ICBTYXkgWSwgaWYgeW91IGhhdmUgYSBjb21wYXRpYmxlIFBDSS9QQ0llIHdpcmVsZXNzIGNhcmQuXFxuICA0NzpcXHRcXG4gIDQ4OlxcdGNvbmZpZyBBVEg5S19BSEJcXG4gIDQ5OlxcdFxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWsgQUhCIGJ1cyBzdXBwb3J0XFxcIlxcbiAgNTA6XFx0XFx0ZGVwZW5kcyBvbiBBVEg5SyBcXHUwMDI2XFx1MDAyNiBPRlxcbiAgNTE6XFx0XFx0ZGVmYXVsdCBuXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEFIQiBidXMgc3VwcG9ydCBpbiBhdGg5ay5cXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0ICBTYXkgWSwgaWYgeW91IGhhdmUgYSBTb0Mgd2l0aCBhIGNvbXBhdGlibGUgYnVpbHQtaW5cXG4gIDU2OlxcdFxcdCAgd2lyZWxlc3MgTUFDLiBTYXkgTiBpZiB1bnN1cmUuXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBBVEg5S19ERUJVR0ZTXFxuICA1OTpcXHRcXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrIGRlYnVnZ2luZ1xcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gQVRIOUsgXFx1MDAyNlxcdTAwMjYgREVCVUdfRlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTFfREVCVUdGU1xcbiAgNjE6XFx0XFx0c2VsZWN0IEFUSDlLX0NPTU1PTl9ERUJVR1xcbiAgNjI6XFx0XFx0aGVscFxcbiAgNjM6XFx0XFx0ICBTYXkgWSwgaWYgeW91IG5lZWQgYWNjZXNzIHRvIGF0aDlrJ3Mgc3RhdGlzdGljcyBmb3JcXG4gIDY0OlxcdFxcdCAgaW50ZXJydXB0cywgcmF0ZSBjb250cm9sLCBldGMuXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgQWxzbyByZXF1aXJlZCBmb3IgY2hhbmdpbmcgZGVidWcgbWVzc2FnZSBmbGFncyBhdCBydW4gdGltZSBhbmQgZm9yXFxuICA2NzpcXHRcXHQgIFRYOTkuXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBBVEg5S19TVEFUSU9OX1NUQVRJU1RJQ1NcXG4gIDcwOlxcdFxcdGJvb2wgXFxcIkRldGFpbGVkIHN0YXRpb24gc3RhdGlzdGljc1xcXCJcXG4gIDcxOlxcdFxcdGRlcGVuZHMgb24gQVRIOUsgXFx1MDAyNlxcdTAwMjYgQVRIOUtfREVCVUdGUyBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbiAgNzI6XFx0XFx0ZGVmYXVsdCBuXFxuICA3MzpcXHRcXHRoZWxwXFxuICA3NDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZGV0YWlsZWQgc3RhdGlzdGljcyBmb3IgYXNzb2NpYXRpb24gc3RhdGlvbnMuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBBVEg5S19UWDk5XFxuICA3NzpcXHRcXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrIFRYOTkgdGVzdGluZyBzdXBwb3J0XFxcIlxcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIFxcdTAwMjZcXHUwMDI2IENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbiAgNzk6XFx0XFx0ZGVmYXVsdCBuXFxuICA4MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjE5LjE2NDY3NDgyM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDk2NTExMzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIGF0aDlrIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc2VlLi4uIHRoZSB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBgYXRoOWtgIHdpcmVsZXNzIGRyaXZlciBjb25maWd1cmF0aW9uLiBSaWdodCwgdGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBhdCB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGxpbmVzIDE3MCB0aHJvdWdoIDIyMC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBvciBwZXJoYXBzIGRlcGVuZGVuY2llcyBhcmUgc2V0LiBIb3BlZnVsbHksIGl0J3Mgbm90aGluZyB0b28gb2JzY3VyZTsgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBJIGNhbiBoYW5kbGUgbW9zdCBvZiB3aGF0J3MgaW4gdGhlcmUsIGV2ZW4gaWYgaXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB0aG9zZSBsaW5lcyBob2xkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ3OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDQ6MjEuNjYxMTg4MzQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXHQgIElmIHVuc3VyZSBzYXkgTi5cXG4gMTcxOlxcdFxcbiAxNzI6XFx0Y29uZmlnIEFUSDlLX0hUQ1xcbiAxNzM6XFx0XFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgSFRDIGJhc2VkIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcXFwiXFxuIDE3NDpcXHRcXHRkZXBlbmRzIG9uIFVTQiBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMVxcbiAxNzU6XFx0XFx0c2VsZWN0IE1BQzgwMjExX0xFRFMgaWYgTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcXG4gMTc2OlxcdFxcdHNlbGVjdCBBVEg5S19IV1xcbiAxNzc6XFx0XFx0c2VsZWN0IEFUSDlLX0NPTU1PTlxcbiAxNzg6XFx0XFx0aGVscFxcbiAxNzk6XFx0XFx0ICBTdXBwb3J0IGZvciBBdGhlcm9zIEhUQyBiYXNlZCBjYXJkcy5cXG4gMTgwOlxcdFxcdCAgQ2hpcHNldHMgc3VwcG9ydGVkOiBBUjkyNzFcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbjpcXG4gMTgzOlxcdFxcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9hdGg5a19odGNcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0ICBUaGUgYnVpbHQgbW9kdWxlIHdpbGwgYmUgYXRoOWtfaHRjLlxcbiAxODY6XFx0XFxuIDE4NzpcXHRjb25maWcgQVRIOUtfSFRDX0RFQlVHRlNcXG4gMTg4OlxcdFxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWtfaHRjIGRlYnVnZ2luZ1xcXCJcXG4gMTg5OlxcdFxcdGRlcGVuZHMgb24gQVRIOUtfSFRDIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuIDE5MDpcXHRcXHRzZWxlY3QgQVRIOUtfQ09NTU9OX0RFQlVHXFxuIDE5MTpcXHRcXHRoZWxwXFxuIDE5MjpcXHRcXHQgIFNheSBZLCBpZiB5b3UgbmVlZCBhY2Nlc3MgdG8gYXRoOWtfaHRjJ3Mgc3RhdGlzdGljcy5cXG4gMTkzOlxcdFxcdCAgQXMgd2VsbCBhcyBhY2Nlc3MgdG8gdGhlIEZGVC9zcGVjdHJhbCBkYXRhLlxcbiAxOTQ6XFx0XFxuIDE5NTpcXHRjb25maWcgQVRIOUtfSFdSTkdcXG4gMTk2OlxcdFxcdGJvb2wgXFxcIlJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHN1cHBvcnRcXFwiXFxuIDE5NzpcXHRcXHRkZXBlbmRzIG9uIEFUSDlLIFxcdTAwMjZcXHUwMDI2IChIV19SQU5ET00gPSB5IHx8IEhXX1JBTkRPTSA9IEFUSDlLKVxcbiAxOTg6XFx0XFx0ZGVmYXVsdCBuXFxuIDE5OTpcXHRcXHRoZWxwXFxuIDIwMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGluY29ycG9yYXRlcyB0aGUgQURDIHJlZ2lzdGVyIG91dHB1dCBhcyBhIHNvdXJjZSBvZlxcbiAyMDE6XFx0XFx0ICByYW5kb21uZXNzIGludG8gTGludXggZW50cm9weSBwb29sICgvZGV2L3VyYW5kb20gYW5kIC9kZXYvcmFuZG9tKVxcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHQgIFNheSBZLCBmZWVkcyB0aGUgZW50cm9weSBkaXJlY3RseSBmcm9tIHRoZSBXaUZpIGRyaXZlciB0byB0aGUgaW5wdXRcXG4gMjA0OlxcdFxcdCAgcG9vbC5cXG4gMjA1OlxcdFxcbiAyMDY6XFx0Y29uZmlnIEFUSDlLX0NPTU1PTl9TUEVDVFJBTFxcbiAyMDc6XFx0XFx0Ym9vbCBcXFwiQXRoZXJvcyBhdGg5ay9hdGg5a19odGMgc3BlY3RyYWwgc2NhbiBzdXBwb3J0XFxcIlxcbiAyMDg6XFx0XFx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIHx8IEFUSDlLX0hUQ19ERUJVR0ZTXFxuIDIwOTpcXHRcXHRzZWxlY3QgUkVMQVlcXG4gMjEwOlxcdFxcdGRlZmF1bHQgblxcbiAyMTE6XFx0XFx0aGVscFxcbiAyMTI6XFx0XFx0ICBTYXkgWSB0byBlbmFibGUgYWNjZXNzIHRvIHRoZSBGRlQvc3BlY3RyYWwgZGF0YSB2aWEgZGVidWdmcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDQ6MjEuNjYxMjU3NDU5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MzMyMTUzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBhdGg5a19odGNgIFNwZWN0cmFsIFNjYW4gRGVidWdmcyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBtb2RpZmllZCBjb2RlIGlzIGV2ZW4gYWNjZXNzaWJsZSB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgc3BlY2lmaWNhbGx5LCBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuIFRoZSBnb29kIG5ld3MgaXMsIHllcywgdGhlIGBhdGg5a19odGNgIGRyaXZlciwgYmVpbmcgVVNCLWJhc2VkIChhbmQgdXRpbGl6aW5nIHRoZSBBUjkyNzEgY2hpcHNldCksIGlzIGluZGVlZCByZWFjaGFibGUgYW5kIGVhc2lseSBlbXVsYXRlZCB2aWEgdGhlIFVTQiByYXcgZ2FkZ2V0IHdpdGhpbiB0aGF0IGNvbnRleHQuIFRoYXQncyBhIGNydWNpYWwgZmlyc3Qgc3RlcC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBzcGVjaWZpY3MuIFdoZW4gd2UgZW5hYmxlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMg4oCTIGBBVEg5S19IVENgLCBgQVRIOUtfSFRDX0RFQlVHRlNgLCBhbmQgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAg4oCTIHRoZSBgYXRoOWtfaHRjYCBkcml2ZXIgZXhwb3NlcyB0aGUgYHNwZWN0cmFsX3NjYW5fY3RsYCBjb250cm9sIHdpdGhpbiBkZWJ1Z2ZzLCBhbmQgaXQncyBuZWF0bHkgdHVja2VkIGF3YXkgdW5kZXIgdGhlIHdpcGh5IGRlYnVnZnMgZGlyZWN0b3J5LiBXcml0aW5nIHRvIHRoaXMgY29udHJvbCB0cmlnZ2VycyB0aGUgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCgpYCBmdW5jdGlvbi5cblxuVGhlIHBhdGNoIGl0c2VsZiBpbnRyb2R1Y2VzIGEgY3J1Y2lhbCB2YWxpZGF0aW9uIHdpdGhpbiBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKClgOiBhIGNoZWNrIHVzaW5nIGB0ZXN0X2JpdChBVEhfT1BfSU5WQUxJRCwgXHUwMDI2Y29tbW9uLVx1MDAzZW9wX2ZsYWdzKWAuIFRoaXMgaXMgYSBkaXJlY3QsIGV4ZWN1dGFibGUgY29kZSBwYXRoIHRoYXQgYWx0ZXJzIGNvbnRyb2wgZmxvdyB3aGVuIHRoZSBkZXZpY2UgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlOlxuLSAgIGBBVEg5S19IVENgIChvciBgQVRIOUtgKVxuLSAgIGBBVEg5S19IVENfREVCVUdGU2AgKG9yIGBBVEg5S19ERUJVR0ZTYClcbi0gICBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYFxuXG5JIGFsc28gbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBpbXBvcnRhbnQgc3ltYm9scyBpbiB0aGUgY29kZTpcbi0gICBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYFxuLSAgIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyYFxuLSAgIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWdgXG5cbkxldCdzIGRvdWJsZSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgc3ltYm9sczpcbi0gYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGBcbi0gYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ2Bcbi0gYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXJgXG5cblRha2luZyBhIHN0ZXAgYmFjaywgdGhpcyBtZWFucyB0aGF0IHRoZSBwYXRjaCBhZGRzIGEgc2FmZXR5IGNoZWNrLiBTcGVjaWZpY2FsbHksIHRoZSBjaGVjayBgdGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFx1MDAyNmNvbW1vbi1cdTAwM2VvcF9mbGFncylgIGFkZGVkIHRvIHRoZSBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCB3aXRoaW4gZGVidWdmcyBoZWxwcyBwcmV2ZW50IHBvdGVudGlhbGx5IHVuc2FmZSBQSFkgcmVnaXN0ZXIgd3JpdGVzIHdoZW4gdGhlIGludGVyZmFjZSBpcyBkb3duLiAgVGhpcyBjb2RlIGlzIGNsZWFybHkgcmVhY2hhYmxlIHVzaW5nIHRoZSBVU0ItZW11bGF0ZWQgYGF0aDlrX2h0Y2AgZHJpdmVyLCBnaXZlbiB0aGF0IHRoZSBzcGVjdHJhbCBzY2FuIGFuZCBkZWJ1Z2ZzIGZlYXR1cmVzIGFyZSBlbmFibGVkLlxuXG5UaGVyZWZvcmUsIHRoaXMgaXMgc29tZXRoaW5nIEknbSBjYWxsaW5nIHdvcnRoIGZ1enppbmcuIEknbGwgbmVlZCB0byBlbmFibGUgdGhvc2UgY29uZmlndXJhdGlvbnM6IGBBVEg5S19DT01NT05fU1BFQ1RSQUxgLCBgQVRIOUtfSFRDYCwgYW5kIGBBVEg5S19IVENfREVCVUdGU2AuIE15IGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHk6IGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgLCBgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcmAsIGFuZCBgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnYC4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDAzLCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjI3LjA5NDQ3NTg4MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMjc2Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVEg5S19DT01NT05fU1BFQ1RSQUxcIixcbiAgICBcIkFUSDlLX0hUQ1wiLFxuICAgIFwiQVRIOUtfSFRDX0RFQlVHRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxcIixcbiAgICBcImF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ1wiLFxuICAgIFwiYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgdGhlIEFUSF9PUF9JTlZBTElEIGZsYWcgaW4gd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKCkgd2l0aGluIHRoZSBhdGg5ayBzcGVjdHJhbCBzY2FuIGRlYnVnZnMgaW50ZXJmYWNlIHRvIHJlamVjdCBQSFkgcmVnaXN0ZXIgd3JpdGUgY29tbWFuZHMgd2hpbGUgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBpcyBkb3duLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIG9mIHRoZSBhdGg5a19odGMgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDlLX0NPTU1PTl9TUEVDVFJBTFwiLFxuICAgIFwiQVRIOUtfSFRDXCIsXG4gICAgXCJBVEg5S19IVENfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIndyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bFwiLFxuICAgIFwiYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnXCIsXG4gICAgXCJhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciB0aGUgQVRIX09QX0lOVkFMSUQgZmxhZyBpbiB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB3aXRoaW4gdGhlIGF0aDlrIHNwZWN0cmFsIHNjYW4gZGVidWdmcyBpbnRlcmZhY2UgdG8gcmVqZWN0IFBIWSByZWdpc3RlciB3cml0ZSBjb21tYW5kcyB3aGlsZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gb2YgdGhlIGF0aDlrX2h0YyBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjI3LjE3Njc1ODk0OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM3MDMxOTk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjI3LjE3NzIyODEyOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkzNjk4NDYxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzdGF0ZSBjaGVjayAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFxcdTAwMjZjb21tb24tXFx1MDAzZW9wX2ZsYWdzKSkgaW4gdGhlIGRlYnVnZnMgd3JpdGUgaGFuZGxlciB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB0byBwcmV2ZW50IHNwZWN0cmFsIHNjYW4gY29tbWFuZHMgZnJvbSBkcml2aW5nIFBIWSByZWdpc3RlciB3cml0ZXMgd2hlbiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRpc2FibGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjZkOTZiZDEwZGY3NzUzN2M5NDAzZWI4OTA1Njg5ZjAwM2ZlMTM2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMjE6NDM6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcbmluZGV4IGNhMDFhMDdmNjYzMGMuLjBiYmJlZjllM2I5YzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1xuQEAgLTgwNSw2ICs4MDUsMTQgQEAgc3RhdGljIHNzaXplX3Qgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuIFxuIFx0YnVmW2xlbl0gPSAnXFwwJztcbiBcbitcdC8qIEV2ZXJ5IGNvbW1hbmQgYmVsb3cgZHJpdmVzIFBIWSByZWdpc3RlciB3cml0ZXMuIFJlZnVzZSB0aGVtIHdoaWxlXG4rXHQgKiB0aGUgaGFyZHdhcmUgaXMgZGlzYWJsZWQgKHRoZSBpbnRlcmZhY2UgaXMgZG93bik6IG9uIHRoZSBBUjkyNzFcbitcdCAqIHRoYXQgdHJhZmZpYyBoYW5ncyB0aGUgZmlybXdhcmUgdW50aWwgdGhlIGRldmljZSBpcyByZS1lbnVtZXJhdGVkLlxuK1x0ICogVGhlIHJlc2V0IGNvbnRyb2wgcmVmdXNlcyBvbiB0aGUgc2FtZSBmbGFnLlxuK1x0ICovXG4rXHRpZiAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFx1MDAyNmNvbW1vbi1cdTAwM2VvcF9mbGFncykpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4gXHRpZiAoc3RybmNtcChcInRyaWdnZXJcIiwgYnVmLCA3KSA9PSAwKSB7XG4gXHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpO1xuIFx0fSBlbHNlIGlmIChzdHJuY21wKFwiYmFja2dyb3VuZFwiLCBidWYsIDEwKSA9PSAwKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0NDoyNy4xNzcyMzA2MjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY0Mjc4ODczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBTcGVjdHJhbCBDb250cm9sKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoaXMgbmV3IHBhdGNoLiBTcGVjaWZpY2FsbHksIEkgc2VlIGl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBjaGVjayB3aXRoaW4gYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY2AuIFRoZSBjaGVjayBpdHNlbGYsIGBpZiAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFx1MDAyNmNvbW1vbi1cdTAwM2VvcF9mbGFncykpIHJldHVybiAtRUJVU1k7YCwgbG9va3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBvbiB0aGUgc3VyZmFjZSDigJMgaXQncyBiYXNpY2FsbHkgcHJldmVudGluZyB0aGUgZnVuY3Rpb24gZnJvbSBydW5uaW5nIGlmIGEgc3BlY2lmaWMgb3BlcmF0aW9uYWwgZmxhZywgYEFUSF9PUF9JTlZBTElEYCwgaXMgc2V0LiBNeSBpbnR1aXRpb24gaXMgdGhhdCB0aGlzIGlzIGd1YXJkaW5nIGFnYWluc3Qgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uIG9yIGNvbmZsaWN0LCBwcmV2ZW50aW5nIHNwZWN0cmFsIHNjYW4gY29udHJvbCBmcm9tIGhhcHBlbmluZyB3aGlsZSB0aGUgaGFyZHdhcmUgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS5cblxuVG8gcHJvcGVybHkgYXNzZXNzIHRoaXMsIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFyb3VuZCBsaW5lIDgwNSBvZiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jYC4gSSBuZWVkIHRoYXQgYnJvYWRlciBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCB3aXRoIG90aGVyIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzLCBhbmQgdGhlIGV4YWN0IG1lYW5pbmcgb2YgYEFUSF9PUF9JTlZBTElEYCB3aXRoaW4gdGhpcyBkcml2ZXIgd2lsbCBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGNoJ3MgcHVycG9zZSBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZmxhZyBpcyBzZXQgYW5kIGNsZWFyZWQsIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAgaXMgYWN0dWFsbHkgY2FsbGVkLiBUaGlzIHdpbGwgbGV0IG1lIGZvcm0gYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyBwb3RlbnRpYWwgcmFtaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwOSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjMxLjgyMDAyMjg4N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc4MDpcXHRcXHRhdGhfcHNfb3BzKGNvbW1vbiktXFx1MDAzZXdha2V1cChjb21tb24pO1xcbiA3ODE6XFx0XFx0YXRoOWtfaHdfb3BzKGFoKS1cXHUwMDNlc3BlY3RyYWxfc2Nhbl9jb25maWcoYWgsIFxcdTAwMjZzcGVjX3ByaXYtXFx1MDAzZXNwZWNfY29uZmlnKTtcXG4gNzgyOlxcdFxcdGF0aF9wc19vcHMoY29tbW9uKS1cXHUwMDNlcmVzdG9yZShjb21tb24pO1xcbiA3ODM6XFx0XFxuIDc4NDpcXHRcXHRzcGVjX3ByaXYtXFx1MDAzZXNwZWN0cmFsX21vZGUgPSBzcGVjdHJhbF9tb2RlO1xcbiA3ODU6XFx0XFxuIDc4NjpcXHRcXHRyZXR1cm4gMDtcXG4gNzg3OlxcdH1cXG4gNzg4OlxcdEVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKTtcXG4gNzg5OlxcdFxcbiA3OTA6XFx0c3RhdGljIHNzaXplX3Qgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbiA3OTE6XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbiA3OTI6XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIDc5MzpcXHR7XFxuIDc5NDpcXHRcXHRzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDc5NTpcXHRcXHRzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNwZWNfcHJpdi1cXHUwMDNlYWgpO1xcbiA3OTY6XFx0XFx0Y2hhciBidWZbMzJdO1xcbiA3OTc6XFx0XFx0c3NpemVfdCBsZW47XFxuIDc5ODpcXHRcXG4gNzk5OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19BVEg5S19UWDk5KSlcXG4gODAwOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0bGVuID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtIDEpO1xcbiA4MDM6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpXFxuIDgwNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gODA1OlxcdFxcbiA4MDY6XFx0XFx0YnVmW2xlbl0gPSAnXFxcXDAnO1xcbiA4MDc6XFx0XFxuIDgwODpcXHRcXHQvKiBFdmVyeSBjb21tYW5kIGJlbG93IGRyaXZlcyBQSFkgcmVnaXN0ZXIgd3JpdGVzLiBSZWZ1c2UgdGhlbSB3aGlsZVxcbiA4MDk6XFx0XFx0ICogdGhlIGhhcmR3YXJlIGlzIGRpc2FibGVkICh0aGUgaW50ZXJmYWNlIGlzIGRvd24pOiBvbiB0aGUgQVI5MjcxXFxuIDgxMDpcXHRcXHQgKiB0aGF0IHRyYWZmaWMgaGFuZ3MgdGhlIGZpcm13YXJlIHVudGlsIHRoZSBkZXZpY2UgaXMgcmUtZW51bWVyYXRlZC5cXG4gODExOlxcdFxcdCAqIFRoZSByZXNldCBjb250cm9sIHJlZnVzZXMgb24gdGhlIHNhbWUgZmxhZy5cXG4gODEyOlxcdFxcdCAqL1xcbiA4MTM6XFx0XFx0aWYgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcXHUwMDI2Y29tbW9uLVxcdTAwM2VvcF9mbGFncykpXFxuIDgxNDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA4MTU6XFx0XFxuIDgxNjpcXHRcXHRpZiAoc3RybmNtcChcXFwidHJpZ2dlclxcXCIsIGJ1ZiwgNykgPT0gMCkge1xcbiA4MTc6XFx0XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcihjb21tb24sIHNwZWNfcHJpdik7XFxuIDgxODpcXHRcXHR9IGVsc2UgaWYgKHN0cm5jbXAoXFxcImJhY2tncm91bmRcXFwiLCBidWYsIDEwKSA9PSAwKSB7XFxuIDgxOTpcXHRcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoY29tbW9uLCBzcGVjX3ByaXYsIFNQRUNUUkFMX0JBQ0tHUk9VTkQpO1xcbiA4MjA6XFx0XFx0XFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXFxcInNwZWN0cmFsIHNjYW46IGJhY2tncm91bmQgbW9kZSBlbmFibGVkXFxcXG5cXFwiKTtcXG4gODIxOlxcdFxcdH0gZWxzZSBpZiAoc3RybmNtcChcXFwiY2hhbnNjYW5cXFwiLCBidWYsIDgpID09IDApIHtcXG4gODIyOlxcdFxcdFxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfQ0hBTlNDQU4pO1xcbiA4MjM6XFx0XFx0XFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXFxcInNwZWN0cmFsIHNjYW46IGNoYW5uZWwgc2NhbiBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcbiA4MjQ6XFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKFxcXCJtYW51YWxcXFwiLCBidWYsIDYpID09IDApIHtcXG4gODI1OlxcdFxcdFxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfTUFOVUFMKTtcXG4gODI2OlxcdFxcdFxcdGF0aF9kYmcoY29tbW9uLCBDT05GSUcsIFxcXCJzcGVjdHJhbCBzY2FuOiBtYW51YWwgbW9kZSBlbmFibGVkXFxcXG5cXFwiKTtcXG4gODI3OlxcdFxcdH0gZWxzZSBpZiAoc3RybmNtcChcXFwiZGlzYWJsZVxcXCIsIGJ1ZiwgNykgPT0gMCkge1xcbiA4Mjg6XFx0XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9ESVNBQkxFRCk7XFxuIDgyOTpcXHRcXHRcXHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcXFwic3BlY3RyYWwgc2NhbjogZGlzYWJsZWRcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0NDozMS44MjAxNDUxMjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcyNjkwOTU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBhIGRlYnVnZnMgd3JpdGUgaGFuZGxlciwgc3BlY2lmaWNhbGx5IGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgLiBCZWZvcmUgdGhlIHBhdGNoLCB3cml0ZXMgdG8gYHNwZWN0cmFsX3NjYW5fY3RsYCB3b3VsZCB0cmlnZ2VyIFBIWSByZWdpc3RlciB3cml0ZXMgZXZlbiB3aGVuIHRoZSBpbnRlcmZhY2Ugd2Fzbid0IHZhbGlkLCBpbmRpY2F0ZWQgYnkgYEFUSF9PUF9JTlZBTElEYC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gZWFybHkgZXhpdCBjb25kaXRpb246IGBpZiAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFx1MDAyNmNvbW1vbi1cdTAwM2VvcF9mbGFncykpIHJldHVybiAtRUJVU1k7YC4gU21hcnQuXG5cbk5vdywgbGV0IG1lIHJ1biB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3QgZm9yIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuMS4gICoqS2VybmVsIFN0cnVjdHVyZXMgXHUwMDI2IFVzZXIgU3BhY2U6KiogRG9lcyB0aGlzIGludHJvZHVjZSBuZXcga2VybmVsIHN0cnVjdHVyZXMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9uZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQ/IE5vLCB0aGUgZnVuY3Rpb24gdXNlcyBgY29weV9mcm9tX3VzZXJgLCBzbyBpdCByZWNlaXZlcyBkYXRhLCBub3Qgc2VuZHMgaXQsIGFuZCByZXR1cm5zIGEgY291bnQgb3IgZXJyb3IgY29kZS4gU2FmZS5cbjIuICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgTG9naWM6KiogRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIGBjb21tb24tXHUwMDNlb3BfZmxhZ3NgIGlzIGNsZWFybHkgYW4gb3BlcmF0aW9uYWwgZmxhZyBiaXRmaWVsZCBtYW5hZ2VkIGJ5IHRoZSBkcml2ZXIgaXRzZWxmLCBzbyBpdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYXQgc29tZSBwb2ludC4gU2VjdXJlLlxuMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBEb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm8uIERvZXNuJ3QgbG9vayBsaWtlIGFueSBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gdGhpcyBhcmVhLiBObyBwcm9ibGVtLlxuNC4gICoqQm91bmRzIENoZWNrcyBcdTAwMjYgTWVtb3J5IEFjY2VzczoqKiBEb2VzIGl0IG1lc3Mgd2l0aCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IHN1cnJvdW5kaW5nIGNvZGUgY291bGQgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGxpa2UgdGhhdCBoZXJlLiBUaGlzIGlzIGEgcHJldHR5IGZvY3VzZWQgY2hhbmdlLlxuXG5TbywgaXQncyByZWFsbHkganVzdCBhIGRldmljZSBzdGF0ZSB2YWxpZGl0eSBjaGVjay4gV2UncmUgcHJldmVudGluZyBQSFkgcmVnaXN0ZXIgd3JpdGVzIChoYXJkd2FyZSBjb21tYW5kcykgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGRpc2FibGVkLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBjYXVzZXMgZmlybXdhcmUgaGFuZ3Mgb24gQVI5MjcxLiBJdCBzZWVtcyBsaWtlIGl0J3MgYSBnb29kIGZpeC5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gS01TQU4gZG9lc24ndCBzZWVtIG5lY2Vzc2FyeSBoZXJlLiBJIHRoaW5rIHdlJ3JlIGdvb2QgdG8gZ28uIExldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIG15IHdvcmsuLi5hbmQgcHJlcGFyZSBteSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0OSwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0NDozNi41NDcwNTY3OTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzdGF0ZSBjaGVjayAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFxcdTAwMjZjb21tb24tXFx1MDAzZW9wX2ZsYWdzKSkgaW4gdGhlIGRlYnVnZnMgd3JpdGUgaGFuZGxlciB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB0byBwcmV2ZW50IHNwZWN0cmFsIHNjYW4gY29tbWFuZHMgZnJvbSBkcml2aW5nIFBIWSByZWdpc3RlciB3cml0ZXMgd2hlbiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRpc2FibGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHN0YXRlIGNoZWNrICh0ZXN0X2JpdChBVEhfT1BfSU5WQUxJRCwgXFx1MDAyNmNvbW1vbi1cXHUwMDNlb3BfZmxhZ3MpKSBpbiB0aGUgZGVidWdmcyB3cml0ZSBoYW5kbGVyIHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCgpIHRvIHByZXZlbnQgc3BlY3RyYWwgc2NhbiBjb21tYW5kcyBmcm9tIGRyaXZpbmcgUEhZIHJlZ2lzdGVyIHdyaXRlcyB3aGVuIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowm2lfh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 21:41:58 +0000 UTC FinishedAt: 2026-09-08 21:44:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1d8e73163ef933624341075f576e2f36ef9133f7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH9K_COMMON_SPECTRAL", "ATH9K_HTC", "ATH9K_HTC_DEBUGFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "1d8e73163ef933624341075f576e2f36ef9133f7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH9K_COMMON_SPECTRAL", "ATH9K_HTC", "ATH9K_HTC_DEBUGFS" ], "series_id": "75a74993-46bb-41fe-a3e4-9c96c463edc4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "write_file_spec_scan_ctl", "ath9k_cmn_spectral_scan_config", "ath9k_cmn_spectral_scan_trigger" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDlLX0NPTU1PTl9TUEVDVFJBTCYjMzQ7LAogICAgJiMzNDtBVEg5S19IVEMmIzM0OywKICAgICYjMzQ7QVRIOUtfSFRDX0RFQlVHRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwmIzM0OywKICAgICYjMzQ7YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnJiMzNDssCiAgICAmIzM0O2F0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc3RhdGUgY2hlY2sgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcdTAwMjZjb21tb24tXHUwMDNlb3BfZmxhZ3MpKSBpbiB0aGUgZGVidWdmcyB3cml0ZSBoYW5kbGVyIHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCgpIHRvIHByZXZlbnQgc3BlY3RyYWwgc2NhbiBjb21tYW5kcyBmcm9tIGRyaXZpbmcgUEhZIHJlZ2lzdGVyIHdyaXRlcyB3aGVuIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciB0aGUgQVRIX09QX0lOVkFMSUQgZmxhZyBpbiB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB3aXRoaW4gdGhlIGF0aDlrIHNwZWN0cmFsIHNjYW4gZGVidWdmcyBpbnRlcmZhY2UgdG8gcmVqZWN0IFBIWSByZWdpc3RlciB3cml0ZSBjb21tYW5kcyB3aGlsZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gb2YgdGhlIGF0aDlrX2h0YyBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNmQ5NmJkMTBkZjc3NTM3Yzk0MDNlYjg5MDU2ODlmMDAzZmUxMzZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMTo0Mzo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcbmluZGV4IGNhMDFhMDdmNjYzMGMuLjBiYmJlZjllM2I5YzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1xuQEAgLTgwNSw2ICYjNDM7ODA1LDE0IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcbiBcdGJ1ZltsZW5dID0gJiMzOTtcXDAmIzM5OztcbiBcbiYjNDM7XHQvKiBFdmVyeSBjb21tYW5kIGJlbG93IGRyaXZlcyBQSFkgcmVnaXN0ZXIgd3JpdGVzLiBSZWZ1c2UgdGhlbSB3aGlsZVxuJiM0MztcdCAqIHRoZSBoYXJkd2FyZSBpcyBkaXNhYmxlZCAodGhlIGludGVyZmFjZSBpcyBkb3duKTogb24gdGhlIEFSOTI3MVxuJiM0MztcdCAqIHRoYXQgdHJhZmZpYyBoYW5ncyB0aGUgZmlybXdhcmUgdW50aWwgdGhlIGRldmljZSBpcyByZS1lbnVtZXJhdGVkLlxuJiM0MztcdCAqIFRoZSByZXNldCBjb250cm9sIHJlZnVzZXMgb24gdGhlIHNhbWUgZmxhZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFx1MDAyNmNvbW1vbi1cdTAwM2VvcF9mbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiBcdGlmIChzdHJuY21wKFwmIzM0O3RyaWdnZXJcJiMzNDssIGJ1ZiwgNykgPT0gMCkge1xuIFx0XHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGNvbW1vbiwgc3BlY19wcml2KTtcbiBcdH0gZWxzZSBpZiAoc3RybmNtcChcJiMzNDtiYWNrZ3JvdW5kXCYjMzQ7LCBidWYsIDEwKSA9PSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRIOUtfQ09NTU9OX1NQRUNUUkFMJiMzNDssCiAgICAmIzM0O0FUSDlLX0hUQyYjMzQ7LAogICAgJiMzNDtBVEg5S19IVENfREVCVUdGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCYjMzQ7LAogICAgJiMzNDthdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcmIzM0OywKICAgICYjMzQ7YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgZm9yIHRoZSBBVEhfT1BfSU5WQUxJRCBmbGFnIGluIHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCgpIHdpdGhpbiB0aGUgYXRoOWsgc3BlY3RyYWwgc2NhbiBkZWJ1Z2ZzIGludGVyZmFjZSB0byByZWplY3QgUEhZIHJlZ2lzdGVyIHdyaXRlIGNvbW1hbmRzIHdoaWxlIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgZG93bi4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiBvZiB0aGUgYXRoOWtfaHRjIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI2ZDk2YmQxMGRmNzc1MzdjOTQwM2ViODkwNTY4OWYwMDNmZTEzNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIxOjQzOjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jCmluZGV4IGNhMDFhMDdmNjYzMGMuLjBiYmJlZjllM2I5YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMKQEAgLTgwNSw2ICYjNDM7ODA1LDE0IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAogCWJ1ZltsZW5dID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7CS8qIEV2ZXJ5IGNvbW1hbmQgYmVsb3cgZHJpdmVzIFBIWSByZWdpc3RlciB3cml0ZXMuIFJlZnVzZSB0aGVtIHdoaWxlCiYjNDM7CSAqIHRoZSBoYXJkd2FyZSBpcyBkaXNhYmxlZCAodGhlIGludGVyZmFjZSBpcyBkb3duKTogb24gdGhlIEFSOTI3MQomIzQzOwkgKiB0aGF0IHRyYWZmaWMgaGFuZ3MgdGhlIGZpcm13YXJlIHVudGlsIHRoZSBkZXZpY2UgaXMgcmUtZW51bWVyYXRlZC4KJiM0MzsJICogVGhlIHJlc2V0IGNvbnRyb2wgcmVmdXNlcyBvbiB0aGUgc2FtZSBmbGFnLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCAmYW1wO2NvbW1vbi0mZ3Q7b3BfZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAlpZiAoc3RybmNtcCgmIzM0O3RyaWdnZXImIzM0OywgYnVmLCA3KSA9PSAwKSB7CiAJCWF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpOwogCX0gZWxzZSBpZiAoc3RybmNtcCgmIzM0O2JhY2tncm91bmQmIzM0OywgYnVmLCAxMCkgPT0gMCkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdpcmVsZXNzIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCBhZmZlY3RzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNgLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGxpY2F0aW9ucy4gT2theSwgc28gaXQgbG9va3MgbGlrZSBgYXRoOWtgIGlzIHRoZSBmb2N1cywgYW5kIGl0JiMzOTtzIGluIHRoZSB3aXJlbGVzcyBkcml2ZXIgc3BhY2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoaXMgcmVsYXRlIHRvIHRoZSBsYXJnZXIgc3lzdGVtPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGF0aDlrYCBhbmQgYGF0aDlrX2h0Y2AuIFdhaXQsIGlzbiYjMzk7dCBgYXRoOWtgIFBDSS9BSEIgYW5kIGBhdGg5a19odGNgIFVTQj8KClRoaXMgYWRkcyBzb21lIGNvbXBsZXhpdHkgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIHRlc3RpbmcgYW5kIHZlcmlmaWNhdGlvbi4gQXJlIHRoZXkgYWN0dWFsbHkgdXNpbmcgdGhpcyBjb21tb24gZmlsZSBkaXJlY3RseSwgb3IgaXMgaXQgcG90ZW50aWFsbHkgZW11bGF0ZWQgdmlhIFVTQiBSYXcgR2FkZ2V0IGluIHNvbWV0aGluZyBsaWtlIHN5emthbGxlcj8gVGhhdCYjMzk7cyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBjb21tb24tc3BlY3RyYWwuY2AgaXMgYWN0dWFsbHkgdXRpbGl6ZWQgaW4gZWFjaCBlbnZpcm9ubWVudC4gQWxyaWdodCwgbGV0JiMzOTtzIHRyYWNrIGRvd24gd2hlcmUgYGNvbW1vbi1zcGVjdHJhbC5jYCBpcyB1c2VkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBzZWFyY2ggZm9yIHRoZSBmaWxlIGFuZCBpdHMgYXNzb2NpYXRlZCBLY29uZmlnIGFuZCBNYWtlZmlsZSBlbnRyaWVzLiBLbm93aW5nIHdoZXJlIHRoZSBzb3VyY2UgaXMgYnVpbHQgYW5kIHVzZWQgaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGltcGFjdCBmcm9tIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tbW9uLXNwZWN0cmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZT02NT1hdGg5a19jb21tb24tJChDT05GSUdfQVRIOUtfQ09NTU9OX0RFQlVHKSAmIzQzOz0gY29tbW9uLWRlYnVnLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZTo2NjphdGg5a19jb21tb24tJChDT05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMKSAmIzQzOz0gY29tbW9uLXNwZWN0cmFsLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS02Ny1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtMjYtI2luY2x1ZGUgXCYjMzQ7Y29tbW9uLWRlYnVnLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaDoyNzojaW5jbHVkZSBcJiMzNDtjb21tb24tc3BlY3RyYWwuaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oLTI4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipLY29uZmlnIERpdmUgZm9yIGF0aDlrICZhbXA7IFNwZWN0cmFsIFN1cHBvcnQqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlIGBhdGg5a2AgZHJpdmVyLCBpdHMgY29tbW9uIGNvbXBvbmVudHMgKGBhdGg5a19jb21tb25gKSwgYW5kIHRoZSBIVEMgdmFyaWFudCAoYGF0aDlrX2h0Y2ApIGFyZSBjb25maWd1cmVkLCBhbmQgd2hldGhlciBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCBpcyBhcHByb3ByaWF0ZWx5IGhhbmRsZWQuIFRoaXMgaXMgbGlrZWx5IHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50LCBhcyBpdCBkZWZpbmVzIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBzcGVjdHJhbCBhbmFseXNpcyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgdW5kZXJzdGFuZCB1bmRlciB3aGljaCBjb25kaXRpb25zIHRoZXNlIG9wdGlvbnMgYmVjb21lIHZpc2libGUuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGVsZW1lbnRzIHJlbGF0ZSB0byBlYWNoIG90aGVyIGluIHRlcm1zIG9mIGJ1aWxkIG9wdGlvbnMuIEFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgYXJlIGdvaW5nIHRvIG5lZWQgYSBjbG9zZSBsb29rLiBUaGlzIGlzIHRoZSBiZWRyb2NrIG9mIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBleHBvc2VkIGFuZCBpbmNvcnBvcmF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVRIOUtfQ09NTU9OX1NQRUNUUkFMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTE5NT1jb25maWcgQVRIOUtfSFdSTkdcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0yMDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoyMDY6Y29uZmlnIEFUSDlLX0NPTU1PTl9TUEVDVFJBTFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMjA3LVx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrL2F0aDlrX2h0YyBzcGVjdHJhbCBzY2FuIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU9NjU9YXRoOWtfY29tbW9uLSQoQ09ORklHX0FUSDlLX0NPTU1PTl9ERUJVRykgJiM0Mzs9IGNvbW1vbi1kZWJ1Zy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6NjY6YXRoOWtfY29tbW9uLSQoQ09ORklHX0FUSDlLX0NPTU1PTl9TUEVDVFJBTCkgJiM0Mzs9IGNvbW1vbi1zcGVjdHJhbC5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtNjctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oPTE2Nj1zdGF0aWMgaW5saW5lIHU4IHNwZWN0cmFsX2JpdG1hcF93ZWlnaHQodTggKmJpbnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE3MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzE6I2lmZGVmIENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzItdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTk3PXN0YXRpYyBpbmxpbmUgaW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0yMDItfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjIwMzojZW5kaWYgLyogQ09ORklHX0FUSDlLX0NPTU1PTl9TUEVDVFJBTCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTIwNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDQ4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBBVEg5S19DT01NT05fU1BFQ1RSQUwgaW4gS2NvbmZpZyBmb3IgYXRoOWsgYW5kIGF0aDlrX2h0YyBSZWxhdGlvbnNoaXAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGBBVEg5S19DT01NT05fU1BFQ1RSQUxgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiB0aWVzIHRvZ2V0aGVyIHRoZSBgYXRoOWtgIGFuZCBgYXRoOWtfaHRjYCBkcml2ZXJzLiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIHNvbWUgY29tbW9uIGZ1bmN0aW9uYWxpdHksIGxpa2VseSBzcGVjdHJhbCBhbmFseXNpcyBvciByZWxhdGVkIGZlYXR1cmVzLCB0aGF0JiMzOTtzIHNoYXJlZCBvciBhdCBsZWFzdCBjb25kaXRpb25hbGx5IHVzZWQgYmV0d2VlbiB0aGUgdHdvLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSB0aGUga2V5IHRvIHVubG9ja2luZyB0aGlzIGRlcGVuZGVuY3kgYW5kIHVuZGVyc3RhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIChlLmcuLCBkcml2ZXIgc2VsZWN0aW9uLCBoYXJkd2FyZSBzdXBwb3J0KSBpdCYjMzk7cyBlbmFibGVkLiBJIG5lZWQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIGRlZmluZWQgdGhyb3VnaCBgc2VsZWN0YCBvciBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGNvZGUsIGFuZCBob3cgdGhlc2Ugc2VwYXJhdGUgZGV2aWNlcyB3b3JrIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdFx0c2VsZWN0IEFUSDlLX0NPTU1PTl9ERUJVR1xuIDE5MTpcdFx0aGVscFxuIDE5MjpcdFx0ICBTYXkgWSwgaWYgeW91IG5lZWQgYWNjZXNzIHRvIGF0aDlrX2h0YyYjMzk7cyBzdGF0aXN0aWNzLlxuIDE5MzpcdFx0ICBBcyB3ZWxsIGFzIGFjY2VzcyB0byB0aGUgRkZUL3NwZWN0cmFsIGRhdGEuXG4gMTk0Olx0XG4gMTk1Olx0Y29uZmlnIEFUSDlLX0hXUk5HXG4gMTk2Olx0XHRib29sIFwmIzM0O1JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHN1cHBvcnRcJiMzNDtcbiAxOTc6XHRcdGRlcGVuZHMgb24gQVRIOUsgXHUwMDI2XHUwMDI2IChIV19SQU5ET00gPSB5IHx8IEhXX1JBTkRPTSA9IEFUSDlLKVxuIDE5ODpcdFx0ZGVmYXVsdCBuXG4gMTk5Olx0XHRoZWxwXG4gMjAwOlx0XHQgIFRoaXMgb3B0aW9uIGluY29ycG9yYXRlcyB0aGUgQURDIHJlZ2lzdGVyIG91dHB1dCBhcyBhIHNvdXJjZSBvZlxuIDIwMTpcdFx0ICByYW5kb21uZXNzIGludG8gTGludXggZW50cm9weSBwb29sICgvZGV2L3VyYW5kb20gYW5kIC9kZXYvcmFuZG9tKVxuIDIwMjpcdFxuIDIwMzpcdFx0ICBTYXkgWSwgZmVlZHMgdGhlIGVudHJvcHkgZGlyZWN0bHkgZnJvbSB0aGUgV2lGaSBkcml2ZXIgdG8gdGhlIGlucHV0XG4gMjA0Olx0XHQgIHBvb2wuXG4gMjA1Olx0XG4gMjA2Olx0Y29uZmlnIEFUSDlLX0NPTU1PTl9TUEVDVFJBTFxuIDIwNzpcdFx0Ym9vbCBcJiMzNDtBdGhlcm9zIGF0aDlrL2F0aDlrX2h0YyBzcGVjdHJhbCBzY2FuIHN1cHBvcnRcJiMzNDtcbiAyMDg6XHRcdGRlcGVuZHMgb24gQVRIOUtfREVCVUdGUyB8fCBBVEg5S19IVENfREVCVUdGU1xuIDIwOTpcdFx0c2VsZWN0IFJFTEFZXG4gMjEwOlx0XHRkZWZhdWx0IG5cbiAyMTE6XHRcdGhlbHBcbiAyMTI6XHRcdCAgU2F5IFkgdG8gZW5hYmxlIGFjY2VzcyB0byB0aGUgRkZUL3NwZWN0cmFsIGRhdGEgdmlhIGRlYnVnZnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTExNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEFUSDlLX0hUQyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhdGg5a19odGNgLiBSaWdodCwgaXQmIzM5O3MgYSBVU0IgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYW4gYEFUSDlLX0hUQ2Agb25lLiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBhbmQgd2hlcmUgdGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUSDlLX0hUQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZz0xNTY9Y29uZmlnIEFUSDlLX1BDSV9OT19FRVBST01cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xNzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoxNzI6Y29uZmlnIEFUSDlLX0hUQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTczLVx0dHJpc3RhdGUgXCYjMzQ7QXRoZXJvcyBIVEMgYmFzZWQgd2lyZWxlc3MgY2FyZHMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE4Nzpjb25maWcgQVRIOUtfSFRDX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5a19odGMgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkludmVzdGlnYXRpbmcgdGhlIGF0aDlrLWh0YyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhdGg5ay1odGMgZHJpdmVyIGhhbmRsZXMgaXRzIGluaXRpYWxpemF0aW9uLiAgU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGhvdyBpdCByZWdpc3RlcnMgdGhlIFVTQiBkZXZpY2UsIGFuZCwgb2YgY291cnNlLCBob3cgaXQgc2V0cyB1cCBmZWF0dXJlcyBsaWtlIHNwZWN0cmFsIHNjYW4gYW5kIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZS4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgbGlrZWx5IHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgaXRzZWxmLiBHaXZlbiB0aGF0LCBJJiMzOTttIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZpcnN0IHN0b3AgaXMgcHJvYmFibHkgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuY2AsIG9yIHNvbWV0aGluZyBjbG9zZWx5IGFuYWxvZ291cyBpbiB0aGUgYXRoOWstaHRjIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBkZXZpY2Ugc2V0dXAgbG9naWMgbGl2ZXMuIEkmIzM5O2xsIG5lZWQgdG8gcG9yZSBvdmVyIHRoYXQgZmlsZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhlIFVTQiBkZXZpY2UgaXMgcHJvYmVkIGFuZCBib3VuZCwgYW5kIHRoZW4gdHJhY2UgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgc3BlY3RyYWwgc2NhbiBjYXBhYmlsaXRpZXMgYW5kIHRoZSBkZWJ1Z2ZzIGVudHJpZXMuIEhvcGVmdWxseSwgaXTigJlzIGFsbCBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGFuZCB3ZWxsLWNvbW1lbnRlZC4gSWYgbm90LCBJJiMzOTtsbCBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCByZWxhdGVkIGZ1bmN0aW9uIGNhbGxzIGFuZCBsb29rIGZvciB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi4gSG9wZWZ1bGx5IHRoaXMgaXMgd2hlcmUgSSB3aWxsIGZpbmQgd2hhdCBJIGFtIGxvb2tpbmcgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGg5a19jbW5fc3BlY3RyYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NoYW5uZWwuYz0yMz1zdGF0aWMgaW50IGF0aF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX3NvZnRjICpzYylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2hhbm5lbC5jLTk2LVx0XHRcdHNjLVx1MDAzZXNwZWNfcHJpdi5zcGVjdHJhbF9tb2RlID09IFNQRUNUUkFMX0NIQU5TQ0FOKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NoYW5uZWwuYzo5NzpcdFx0XHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGNvbW1vbiwgXHUwMDI2c2MtXHUwMDNlc3BlY19wcml2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jaGFubmVsLmMtOTgtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jPTY5MD1zdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy03MTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6NzE1OnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcihzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTcxNi1cdFx0XHRcdCBzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTc0Mi1cdCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjc0MzpcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgc3BlY19wcml2LVx1MDAzZXNwZWN0cmFsX21vZGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTc0NC1cdGF0aDlrX2h3X29wcyhhaCktXHUwMDNlc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGFoKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzQ2LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzo3NDc6RVhQT1JUX1NZTUJPTChhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy03NDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6NzQ5OmludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy03NTAtXHRcdFx0ICAgICAgIHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzg3LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzo3ODg6RVhQT1JUX1NZTUJPTChhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTc4OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYz03OTA9c3RhdGljIHNzaXplX3Qgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy04MTYtXHRpZiAoc3RybmNtcChcJiMzNDt0cmlnZ2VyXCYjMzQ7LCBidWYsIDcpID09IDApIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzo4MTc6XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgxOC1cdH0gZWxzZSBpZiAoc3RybmNtcChcJiMzNDtiYWNrZ3JvdW5kXCYjMzQ7LCBidWYsIDEwKSA9PSAwKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6ODE5Olx0XHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoY29tbW9uLCBzcGVjX3ByaXYsIFNQRUNUUkFMX0JBQ0tHUk9VTkQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgyMC1cdFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXCYjMzQ7c3BlY3RyYWwgc2NhbjogYmFja2dyb3VuZCBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgyMS1cdH0gZWxzZSBpZiAoc3RybmNtcChcJiMzNDtjaGFuc2NhblwmIzM0OywgYnVmLCA4KSA9PSAwKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6ODIyOlx0XHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoY29tbW9uLCBzcGVjX3ByaXYsIFNQRUNUUkFMX0NIQU5TQ0FOKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy04MjMtXHRcdGF0aF9kYmcoY29tbW9uLCBDT05GSUcsIFwmIzM0O3NwZWN0cmFsIHNjYW46IGNoYW5uZWwgc2NhbiBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgyNC1cdH0gZWxzZSBpZiAoc3RybmNtcChcJiMzNDttYW51YWxcJiMzNDssIGJ1ZiwgNikgPT0gMCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjgyNTpcdFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9NQU5VQUwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgyNi1cdFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXCYjMzQ7c3BlY3RyYWwgc2NhbjogbWFudWFsIG1vZGUgZW5hYmxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtODI3LVx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O2Rpc2FibGVcJiMzNDssIGJ1ZiwgNykgPT0gMCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjgyODpcdFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9ESVNBQkxFRCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtODI5LVx0XHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcJiMzNDtzcGVjdHJhbCBzY2FuOiBkaXNhYmxlZFxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jPTEwNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCByY2hhbl9jYWxsYmFja3MgcmZzX3NwZWNfc2Nhbl9jYiA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtMTA1Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzoxMDUzOnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtMTA1NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTEwNTktfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjEwNjA6RVhQT1JUX1NZTUJPTChhdGg5a19jbW5fc3BlY3RyYWxfZGVpbml0X2RlYnVnKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy0xMDYxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjEwNjI6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtMTA2My1cdFx0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy0xMDkyLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzoxMDkzOkVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaD0xNjY9c3RhdGljIGlubGluZSB1OCBzcGVjdHJhbF9iaXRtYXBfd2VpZ2h0KHU4ICpiaW5zKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzEtI2lmZGVmIENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzI6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzM6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE3NTp2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzYtXHRcdFx0XHQgc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzc6aW50IGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE3OC1cdFx0XHQgICAgICAgc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaD0xODA9aW50IGF0aF9jbW5fcHJvY2Vzc19mZnQoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODItI2Vsc2VcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxODM6c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9pbml0X2RlYnVnKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODQtXHRcdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTg4OnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xOTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTkyOnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTkzLVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYz0xMzcyPXZvaWQgYXRoOWtfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMtMTM3My17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYzoxMzc0Olx0YXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhcdTAwMjZzYy1cdTAwM2VzcGVjX3ByaXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMtMTM3NS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmM9MTM3Nz1pbnQgYXRoOWtfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYy0xMzkxLVx0YXRoOWtfdHg5OV9pbml0X2RlYnVnKHNjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jOjEzOTI6XHRhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhcdTAwMjZzYy1cdTAwM2VzcGVjX3ByaXYsIHNjLVx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jLTEzOTMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYz00Nzc9dm9pZCBhdGg5a19odGNfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDc4LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM6NDc5Olx0YXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQ4MC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYz00ODI9aW50IGF0aDlrX2h0Y19pbml0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDg5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYzo0OTA6XHRhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdiwgcHJpdi1cdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jLTQ5MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM9MjQwPXN0YXRpYyBpbnQgYXRoOWtfaHRjX3NldF9jaGFubmVsKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzE2LVx0XHQgICAgIHByaXYtXHUwMDNlc3BlY19wcml2LnNwZWN0cmFsX21vZGUgPT0gU1BFQ1RSQUxfQ0hBTlNDQU4pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmM6MzE3Olx0XHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGNvbW1vbiwgXHUwMDI2cHJpdi1cdTAwM2VzcGVjX3ByaXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTMxOC1lcnI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGF0aDlrX2h0YyBEcml2ZXIgZm9yIEZ1enppbmcqKgoKT2theSwgc28gYXRoOWtfaHRjIGlzIGEgVVNCIGRldmljZSBkcml2ZXIg4oCTIHRoYXQmIzM5O3MgdGhlIGtleS4gQW5kIGlmIGl0JiMzOTtzIFVTQiwgdGhlbiBpdCYjMzk7cyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGVtdWxhdGlvbiB0aHJvdWdoIFVTQiBSYXcgR2FkZ2V0IGFuZCBzdWJzZXF1ZW50IGZ1enppbmcgd2l0aCB0b29scyBsaWtlIHN5emthbGxlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgc3l6a2FsbGVyIGNhbiBldmVuICp0YXJnZXQqIHRoaXMgZHJpdmVyLiBHb29kIG5ld3Mg4oCTIGl0IGNhbiEgVGhlIFVTQiBJRHMgYXJlIHByZXNlbnQsIG1lYW5pbmcgc3l6a2FsbGVyIGNhbiBwcm9iZSBmb3IgYXRoOWtfaHRjIGRldmljZXMuCgpOb3csIGxldCYjMzk7cyBkaWcgZGVlcGVyLiBXaGVyZSBhcmUgdGhlIGp1aWN5IHRhcmdldHM/IFdlIG5lZWQgdG8gbG9vayBmb3IgaW50ZXJlc3RpbmcgZW50cnkgcG9pbnRzLCBwZXJoYXBzIHRocm91Z2ggZGVidWdmcyBhY2Nlc3Mgb3Igc29tZSBvdGhlciBwcml2aWxlZ2VkIGludGVyYWN0aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCBpcyBhY3R1YWxseSByZWFjaGVkLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSBpdHMgZGVmaW5pdGlvbiwgc28gSSYjMzk7bGwgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGV4YW1pbmUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY2AgYXJvdW5kIGxpbmUgODA1LiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIHdoYXQgYW5kIGlkZW50aWZ5IHRoZSBhdHRhY2sgc3VyZmFjZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5MDpcdHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiA3OTE6XHRcdFx0XHRcdFx0Y29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuIDc5MjpcdFx0XHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiA3OTM6XHR7XG4gNzk0Olx0XHRzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA3OTU6XHRcdHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc3BlY19wcml2LVx1MDAzZWFoKTtcbiA3OTY6XHRcdGNoYXIgYnVmWzMyXTtcbiA3OTc6XHRcdHNzaXplX3QgbGVuO1xuIDc5ODpcdFxuIDc5OTpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FUSDlLX1RYOTkpKVxuIDgwMDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gODAxOlx0XG4gODAyOlx0XHRsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7XG4gODAzOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSlcbiA4MDQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gODA1Olx0XG4gODA2Olx0XHRidWZbbGVuXSA9ICYjMzk7XFwwJiMzOTs7XG4gODA3Olx0XG4gODA4Olx0XHQvKiBFdmVyeSBjb21tYW5kIGJlbG93IGRyaXZlcyBQSFkgcmVnaXN0ZXIgd3JpdGVzLiBSZWZ1c2UgdGhlbSB3aGlsZVxuIDgwOTpcdFx0ICogdGhlIGhhcmR3YXJlIGlzIGRpc2FibGVkICh0aGUgaW50ZXJmYWNlIGlzIGRvd24pOiBvbiB0aGUgQVI5MjcxXG4gODEwOlx0XHQgKiB0aGF0IHRyYWZmaWMgaGFuZ3MgdGhlIGZpcm13YXJlIHVudGlsIHRoZSBkZXZpY2UgaXMgcmUtZW51bWVyYXRlZC5cbiA4MTE6XHRcdCAqIFRoZSByZXNldCBjb250cm9sIHJlZnVzZXMgb24gdGhlIHNhbWUgZmxhZy5cbiA4MTI6XHRcdCAqL1xuIDgxMzpcdFx0aWYgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcdTAwMjZjb21tb24tXHUwMDNlb3BfZmxhZ3MpKVxuIDgxNDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDgxNTpcdFxuIDgxNjpcdFx0aWYgKHN0cm5jbXAoXCYjMzQ7dHJpZ2dlclwmIzM0OywgYnVmLCA3KSA9PSAwKSB7XG4gODE3Olx0XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpO1xuIDgxODpcdFx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O2JhY2tncm91bmRcJiMzNDssIGJ1ZiwgMTApID09IDApIHtcbiA4MTk6XHRcdFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9CQUNLR1JPVU5EKTtcbiA4MjA6XHRcdFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXCYjMzQ7c3BlY3RyYWwgc2NhbjogYmFja2dyb3VuZCBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuIDgyMTpcdFx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O2NoYW5zY2FuXCYjMzQ7LCBidWYsIDgpID09IDApIHtcbiA4MjI6XHRcdFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9DSEFOU0NBTik7XG4gODIzOlx0XHRcdGF0aF9kYmcoY29tbW9uLCBDT05GSUcsIFwmIzM0O3NwZWN0cmFsIHNjYW46IGNoYW5uZWwgc2NhbiBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuIDgyNDpcdFx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O21hbnVhbFwmIzM0OywgYnVmLCA2KSA9PSAwKSB7XG4gODI1Olx0XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfTUFOVUFMKTtcbiA4MjY6XHRcdFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXCYjMzQ7c3BlY3RyYWwgc2NhbjogbWFudWFsIG1vZGUgZW5hYmxlZFxcblwmIzM0Oyk7XG4gODI3Olx0XHR9IGVsc2UgaWYgKHN0cm5jbXAoXCYjMzQ7ZGlzYWJsZVwmIzM0OywgYnVmLCA3KSA9PSAwKSB7XG4gODI4Olx0XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfRElTQUJMRUQpO1xuIDgyOTpcdFx0XHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcJiMzNDtzcGVjdHJhbCBzY2FuOiBkaXNhYmxlZFxcblwmIzM0Oyk7XG4gODMwOlx0XHR9IGVsc2Uge1xuIDgzMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4MzI6XHRcdH1cbiA4MzM6XHRcbiA4MzQ6XHRcdHJldHVybiBjb3VudDtcbiA4MzU6XHR9XG4gODM2Olx0XG4gODM3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19zcGVjX3NjYW5fY3RsID0ge1xuIDgzODpcdFx0LnJlYWQgPSByZWFkX2ZpbGVfc3BlY19zY2FuX2N0bCxcbiA4Mzk6XHRcdC53cml0ZSA9IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCxcbiA4NDA6XHRcdC5vcGVuID0gc2ltcGxlX29wZW4sXG4gODQxOlx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiA4NDI6XHRcdC5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlayxcbiA4NDM6XHR9O1xuIDg0NDpcdFxuIDg0NTpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqL1xuIDg0NjpcdC8qIHNwZWN0cmFsX3Nob3J0X3JlcGVhdCAqL1xuIDg0NzpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqL1xuIDg0ODpcdFxuIDg0OTpcdHN0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV9zcGVjdHJhbF9zaG9ydF9yZXBlYXQoc3RydWN0IGZpbGUgKmZpbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjE5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgRGVidWdmcyBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAuIFRoaXMgaXMgYSBkZWJ1Z2ZzIGZpbGUgd3JpdGUgY2FsbGJhY2ssIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgY29ubmVjdGVkLiBGaXJzdCwgSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgcmVnaXN0ZXJlZC4gTGV0JiMzOTtzIHNlZS4uLiBBaGEhIGBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1Z2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoZSBgc3BlY3RyYWxfc2Nhbl9jdGxgIGRlYnVnZnMgZmlsZS4gVGhpcyBpcyBnb29kIGluZm9ybWF0aW9uLiBOb3csIEkgbmVlZCB0byBnbyBkZWVwZXIgaW50byBgYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWdgIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIGZpbGUgYW5kIGl0cyBjYWxsYmFjayBhcmUgcGx1bWJlZCBpbnRvIHRoZSBkZWJ1Z2ZzIHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCBpcyBhY3R1YWxseSBkb2luZyBpbiB0aGUgZ3JlYXRlciBzY2hlbWUgb2YgdGhpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2MDpcdEVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1Zyk7XG4xMDYxOlx0XG4xMDYyOlx0dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXG4xMDYzOlx0XHRcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeSlcbjEwNjQ6XHR7XG4xMDY1Olx0XHRzcGVjX3ByaXYtXHUwMDNlcmZzX2NoYW5fc3BlY19zY2FuID0gcmVsYXlfb3BlbihcJiMzNDtzcGVjdHJhbF9zY2FuXCYjMzQ7LFxuMTA2NjpcdFx0XHRcdFx0XHQgICAgZGVidWdmc19waHksXG4xMDY3Olx0XHRcdFx0XHRcdCAgICAxMDI0LCAyNTYsIFx1MDAyNnJmc19zcGVjX3NjYW5fY2IsXG4xMDY4Olx0XHRcdFx0XHRcdCAgICBOVUxMKTtcbjEwNjk6XHRcdGlmICghc3BlY19wcml2LVx1MDAzZXJmc19jaGFuX3NwZWNfc2NhbilcbjEwNzA6XHRcdFx0cmV0dXJuO1xuMTA3MTpcdFxuMTA3MjpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtzcGVjdHJhbF9zY2FuX2N0bFwmIzM0OyxcbjEwNzM6XHRcdFx0XHQgICAgMDYwMCxcbjEwNzQ6XHRcdFx0XHQgICAgZGVidWdmc19waHksIHNwZWNfcHJpdixcbjEwNzU6XHRcdFx0XHQgICAgXHUwMDI2Zm9wc19zcGVjX3NjYW5fY3RsKTtcbjEwNzY6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c3BlY3RyYWxfc2hvcnRfcmVwZWF0XCYjMzQ7LFxuMTA3NzpcdFx0XHRcdCAgICAwNjAwLFxuMTA3ODpcdFx0XHRcdCAgICBkZWJ1Z2ZzX3BoeSwgc3BlY19wcml2LFxuMTA3OTpcdFx0XHRcdCAgICBcdTAwMjZmb3BzX3NwZWN0cmFsX3Nob3J0X3JlcGVhdCk7XG4xMDgwOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3NwZWN0cmFsX2NvdW50XCYjMzQ7LFxuMTA4MTpcdFx0XHRcdCAgICAwNjAwLFxuMTA4MjpcdFx0XHRcdCAgICBkZWJ1Z2ZzX3BoeSwgc3BlY19wcml2LFxuMTA4MzpcdFx0XHRcdCAgICBcdTAwMjZmb3BzX3NwZWN0cmFsX2NvdW50KTtcbjEwODQ6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c3BlY3RyYWxfcGVyaW9kXCYjMzQ7LFxuMTA4NTpcdFx0XHRcdCAgICAwNjAwLFxuMTA4NjpcdFx0XHRcdCAgICBkZWJ1Z2ZzX3BoeSwgc3BlY19wcml2LFxuMTA4NzpcdFx0XHRcdCAgICBcdTAwMjZmb3BzX3NwZWN0cmFsX3BlcmlvZCk7XG4xMDg4Olx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3NwZWN0cmFsX2ZmdF9wZXJpb2RcJiMzNDssXG4xMDg5Olx0XHRcdFx0ICAgIDA2MDAsXG4xMDkwOlx0XHRcdFx0ICAgIGRlYnVnZnNfcGh5LCBzcGVjX3ByaXYsXG4xMDkxOlx0XHRcdFx0ICAgIFx1MDAyNmZvcHNfc3BlY3RyYWxfZmZ0X3BlcmlvZCk7XG4xMDkyOlx0fVxuMTA5MzpcdEVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUyOAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDlrX2h0Y2AgZHJpdmVyIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGl0cyBkZWJ1Z2ZzIGludGVncmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZGVidWdnaW5nIGludGVyZmFjZXMgYXJlIHNldCB1cCBhbmQgaG93IGFjY2Vzc2libGUgdGhleSByZWFsbHkgYXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmcm9tIHRoZSBwb2ludCB3aGVyZSBhIFVTQiBkZXZpY2UgaXMgcHJvYmVkLgoKU28sIHdoZW4gYGF0aDlrX2h0Y2AgZGV0ZWN0cyBhbmQgcHJvYmVzIGEgVVNCIGRldmljZSwgYGF0aDlrX2h0Y19pbml0X2RlYnVnYCBzaG91bGQgYmUgdGhlIGtleSBmdW5jdGlvbiB0byBpbnNwZWN0LiBJdCYjMzk7cyB0aW1lIHRvIG5hdmlnYXRlIHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jYCB0byBleGFtaW5lIHRoZSBpbnRlcm5hbCBsb2dpYyBvZiBgYXRoOWtfaHRjX2luaXRfZGVidWdgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHJvdXRpbmUgYWN0dWFsbHkgcmVnaXN0ZXJzIHRoZXNlIGRlYnVnZnMgZW50cmllcyBhbmQsIGNydWNpYWxseSwgdmVyaWZ5IHRoYXQgdGhleSBhcmUgcmVhY2hhYmxlIGZyb20gYSB1c2VyIHBlcnNwZWN0aXZlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBpbmZvcm1hdGlvbiB0aGF0JiMzOTtzIHN1cHBvc2VkIHRvIGJlIGV4cG9zZWQgaXMgYWN0dWFsbHkgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0XHRkYXRhW2kmIzQzOyYjNDM7XSA9IFNSWEJBU0UucGh5X2Vycl9zdGF0c1tBVEg5S19QSFlFUlJfUkFEQVJdO1xuIDQ3MTpcdFx0ZGF0YVtpJiM0MzsmIzQzO10gPSBTUlhCQVNFLnBoeV9lcnJfc3RhdHNbQVRIOUtfUEhZRVJSX09GRE1fVElNSU5HXTtcbiA0NzI6XHRcdGRhdGFbaSYjNDM7JiM0MztdID0gU1JYQkFTRS5waHlfZXJyX3N0YXRzW0FUSDlLX1BIWUVSUl9DQ0tfVElNSU5HXTtcbiA0NzM6XHRcbiA0NzQ6XHRcdFdBUk5fT04oaSAhPSBBVEg5S19IVENfU1NUQVRTX0xFTik7XG4gNDc1Olx0fVxuIDQ3NjpcdFxuIDQ3NzpcdHZvaWQgYXRoOWtfaHRjX2RlaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXG4gNDc4Olx0e1xuIDQ3OTpcdFx0YXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhcdTAwMjZwcml2LVx1MDAzZXNwZWNfcHJpdik7XG4gNDgwOlx0fVxuIDQ4MTpcdFxuIDQ4MjpcdGludCBhdGg5a19odGNfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaClcbiA0ODM6XHR7XG4gNDg0Olx0XHRzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTtcbiA0ODU6XHRcdHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGNvbW1vbi1cdTAwM2Vwcml2O1xuIDQ4NjpcdFxuIDQ4NzpcdFx0cHJpdi1cdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSxcbiA0ODg6XHRcdFx0XHRcdFx0ICAgICBwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LVx1MDAzZWRlYnVnZnNkaXIpO1xuIDQ4OTpcdFxuIDQ5MDpcdFx0YXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoXHUwMDI2cHJpdi1cdTAwM2VzcGVjX3ByaXYsIHByaXYtXHUwMDNlZGVidWcuZGVidWdmc19waHkpO1xuIDQ5MTpcdFxuIDQ5MjpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDt0Z3RfaW50X3N0YXRzXCYjMzQ7LCAwNDAwLCBwcml2LVx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5LFxuIDQ5MzpcdFx0XHRcdCAgICBwcml2LCBcdTAwMjZmb3BzX3RndF9pbnRfc3RhdHMpO1xuIDQ5NDpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDt0Z3RfdHhfc3RhdHNcJiMzNDssIDA0MDAsIHByaXYtXHUwMDNlZGVidWcuZGVidWdmc19waHksXG4gNDk1Olx0XHRcdFx0ICAgIHByaXYsIFx1MDAyNmZvcHNfdGd0X3R4X3N0YXRzKTtcbiA0OTY6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7dGd0X3J4X3N0YXRzXCYjMzQ7LCAwNDAwLCBwcml2LVx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5LFxuIDQ5NzpcdFx0XHRcdCAgICBwcml2LCBcdTAwMjZmb3BzX3RndF9yeF9zdGF0cyk7XG4gNDk4Olx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3htaXRcJiMzNDssIDA0MDAsIHByaXYtXHUwMDNlZGVidWcuZGVidWdmc19waHksXG4gNDk5Olx0XHRcdFx0ICAgIHByaXYsIFx1MDAyNmZvcHNfeG1pdCk7XG4gNTAwOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O3NrYl9yeFwmIzM0OywgMDQwMCwgcHJpdi1cdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSxcbiA1MDE6XHRcdFx0XHQgICAgcHJpdiwgXHUwMDI2Zm9wc19za2JfcngpO1xuIDUwMjpcdFxuIDUwMzpcdFx0YXRoOWtfY21uX2RlYnVnX3JlY3YocHJpdi1cdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSwgXHUwMDI2cHJpdi1cdTAwM2VkZWJ1Zy5yeF9zdGF0cyk7XG4gNTA0Olx0XHRhdGg5a19jbW5fZGVidWdfcGh5X2Vycihwcml2LVx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5LCBcdTAwMjZwcml2LVx1MDAzZWRlYnVnLnJ4X3N0YXRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGF0aDlrX2h0YyBhbmQgVVNCIEdhZGdldCBQcm9iaW5nKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHRpbWluZyBvZiB0aGUgYGF0aDlrX2h0Y2AgZHJpdmVyJiMzOTtzIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgd2hlbiB0aGVzZSBldmVudHMgb2NjdXIgaW4gcmVsYXRpb24gdG8gVVNCIGdhZGdldCBtb2RlLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgd2UgY2FuIHByb2JlIGBhdGg5a19odGNgIGVmZmVjdGl2ZWx5IHVzaW5nIGEgVVNCIGdhZGdldCBzZXR1cCB3aXRoaW4gdGhlIGBzeXprYWxsZXJgIGVudmlyb25tZW50LiBUaGF0IHdpbGwgbGV0IHVzIHRlc3QgdGhlIGRyaXZlciBpbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIFRvIGdldCBzdGFydGVkLCBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNgLiBUaGlzIGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIFVTQi1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoYXQgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIFVTQiBpbnRlcmZhY2UgYW5kLCBob3BlZnVsbHksIGhvdyB3ZSBjYW4gbWFuaXB1bGF0ZSBpdCBmb3Igb3VyIHByb2JpbmcgbmVlZHMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIHN0YXJ0IGJ1aWxkaW5nIGEgdGVzdCB0byBjaGVjayBpdCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01PRFVMRV9ERVZJQ0VfVEFCTEVcXCh1c2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYz0yMz1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXRoOWtfaGlmX3VzYl9pZHNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jLTY2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYzo2NzpNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYXRoOWtfaGlmX3VzYl9pZHMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYy02OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBhdGg5a19odGMgVVNCIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gYGF0aDlrX2h0Y2AgaXMgYSBVU0IgZHJpdmVyLCBtYWtpbmcgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nIHZpYSBVU0IgcmF3IGdhZGdldCBhbmQgc3l6a2FsbGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSByZWNlbnQgcGF0Y2hlcywgYW5kIHRoaXMgb25lIGNhdWdodCBteSBleWUuIExldCYjMzk7cyBzZWUuLi4gaXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gYWRkcyBhIGNoZWNrIHdpdGhpbiBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYC4gSXQmIzM5O3MgcmVmdXNpbmcgd3JpdGUgY29tbWFuZHMgd2hpbGUgdGhlIGhhcmR3YXJlIGlzIGRpc2FibGVkLCBzcGVjaWZpY2FsbHkgdG8gYXZvaWQgZmlybXdhcmUgaGFuZ3Mgb24gdGhlIEFSOTI3MS4gUmlnaHQsIHN0YW5kYXJkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4KCkhvbGQgb24gYSBzZWNvbmQsIGlzIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgIHN0YXRpYz8gWWVzLCBpdCBpczogYHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCguLi4pYC4gT2theSwgdGhhdCYjMzk7cyBjcnVjaWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBldmVuIGEgdXNlZnVsIHRhcmdldCBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBzdGF0aWMgZnVuY3Rpb25zIGhhdmUgbGltaXRhdGlvbnMgcmVnYXJkaW5nIHN5bWJvbCB2aXNpYmlsaXR5LgoKTGV0IG1lIHJlZnJlc2guLi4gVGhpcyBmdW5jdGlvbiByZXNpZGVzIGluIGBjb21tb24tc3BlY3RyYWwuY2AuIExldCYjMzk7cyBlbnVtZXJhdGUgdGhlIGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGU6IGByZWFkX2ZpbGVfc3BlY19zY2FuX2N0bGAsIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgLCBgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcmAsIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWdgLCBldGMuIE9rYXkuCgpOb3csIHRoaXMgaXMgd2hlcmUgdGhlIGd1aWRlbGluZXMgY29tZSBpbiBoYW5keS4gUnVsZSBudW1iZXIgNCBzYXlzIHRoYXQgc3RhdGljIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyBjYW4gc3RpbGwgaGF2ZSBzeW1ib2xzIGlmIHRoZXkgYXJlIG5vdCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiBTbywgdGhhdCBtZWFucyBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCAqY291bGQqIGJlIGEgdmlhYmxlIHRhcmdldCBkZXNwaXRlIGJlaW5nIHN0YXRpYywgZXNwZWNpYWxseSBhcyBpdCBsb29rcyBsaWtlIGl0IGlzIG5vdCBhbiBpbmxpbmUgZnVuY3Rpb24gaW4gYSBoZWFkZXIuIFBsdXMsIHRoZXJlIGFyZSBhbHNvIHRoZSBub24tc3RhdGljIGV4cG9ydGVkIGZ1bmN0aW9ucyBsaWtlIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyYCBhbmQgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ2AuIFRob3NlIGFyZSBkZWZpbml0ZWx5IGludGVyZXN0aW5nLgoKVGhlcmVmb3JlLCBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCBhbmQgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ2Agc2VlbSBsaWtlIGdvb2QgZm9jdXMgc3ltYm9scyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgdHJhY2UgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4gICAyOlx0Y29uZmlnIEFUSDlLX0hXXG4gICAzOlx0XHR0cmlzdGF0ZVxuICAgNDpcdGNvbmZpZyBBVEg5S19DT01NT05cbiAgIDU6XHRcdHRyaXN0YXRlXG4gICA2Olx0XHRzZWxlY3QgQVRIX0NPTU1PTlxuICAgNzpcdGNvbmZpZyBBVEg5S19DT01NT05fREVCVUdcbiAgIDg6XHRcdGJvb2xcbiAgIDk6XHRjb25maWcgQVRIOUtfREZTX0RFQlVHRlNcbiAgMTA6XHRcdGRlZl9ib29sIHlcbiAgMTE6XHRcdGRlcGVuZHMgb24gQVRIOUtfREVCVUdGUyBcdTAwMjZcdTAwMjYgQVRIOUtfREZTX0NFUlRJRklFRFxuICAxMjpcdFxuICAxMzpcdGNvbmZpZyBBVEg5S19CVENPRVhfU1VQUE9SVFxuICAxNDpcdFx0Ym9vbCBcJiMzNDtBdGhlcm9zIGJsdWV0b290aCBjb2V4aXN0ZW5jZSBzdXBwb3J0XCYjMzQ7XG4gIDE1Olx0XHRkZXBlbmRzIG9uIChBVEg5SyB8fCBBVEg5S19IVEMpXG4gIDE2Olx0XHRkZWZhdWx0IHlcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU2F5IFksIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgYXRoOWsvYXRoOWtfaHRjIHJhZGlvcyB0b2dldGhlciB3aXRoXG4gIDE5Olx0XHQgIEJsdWV0b290aCBtb2R1bGVzIGluIHRoZSBzYW1lIHN5c3RlbS5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgQVRIOUtcbiAgMjI6XHRcdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgODAyLjExbiB3aXJlbGVzcyBjYXJkcyBzdXBwb3J0XCYjMzQ7XG4gIDIzOlx0XHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBIQVNfRE1BXG4gIDI0Olx0XHRzZWxlY3QgTUFDODAyMTFfTEVEUyBpZiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxuICAyNTpcdFx0c2VsZWN0IEFUSDlLX0hXXG4gIDI2Olx0XHRzZWxlY3QgQVRIOUtfQ09NTU9OXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb25cbiAgMjk6XHRcdCAgQXRoZXJvcyBJRUVFIDgwMi4xMW4gQVI1MDA4LCBBUjkwMDEgYW5kIEFSOTAwMiBmYW1pbHlcbiAgMzA6XHRcdCAgb2YgY2hpcHNldHMuIEZvciBhIHNwZWNpZmljIGxpc3Qgb2Ygc3VwcG9ydGVkIGV4dGVybmFsXG4gIDMxOlx0XHQgIGNhcmRzLCBsYXB0b3BzIHRoYXQgYWxyZWFkeSBzaGlwIHdpdGggdGhlc2UgY2FyZHMgYW5kXG4gIDMyOlx0XHQgIEFQcyB0aGF0IGNvbWUgd2l0aCB0aGVzZSBjYXJkcyByZWZlciB0byBhdGg5ayB3aWtpXG4gIDMzOlx0XHQgIHByb2R1Y3RzIHBhZ2U6XG4gIDM0Olx0XG4gIDM1Olx0XHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXRoOWsvcHJvZHVjdHNcbiAgMzY6XHRcbiAgMzc6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBhdGg5ay5cbiAgMzg6XHRcbiAgMzk6XHRjb25maWcgQVRIOUtfUENJXG4gIDQwOlx0XHRib29sIFwmIzM0O0F0aGVyb3MgYXRoOWsgUENJL1BDSWUgYnVzIHN1cHBvcnRcJiMzNDtcbiAgNDE6XHRcdGRlZmF1bHQgeVxuICA0MjpcdFx0ZGVwZW5kcyBvbiBBVEg5SyBcdTAwMjZcdTAwMjYgUENJXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBDSSBidXMgc3VwcG9ydCBpbiBhdGg5ay5cbiAgNDU6XHRcbiAgNDY6XHRcdCAgU2F5IFksIGlmIHlvdSBoYXZlIGEgY29tcGF0aWJsZSBQQ0kvUENJZSB3aXJlbGVzcyBjYXJkLlxuICA0NzpcdFxuICA0ODpcdGNvbmZpZyBBVEg5S19BSEJcbiAgNDk6XHRcdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBBSEIgYnVzIHN1cHBvcnRcJiMzNDtcbiAgNTA6XHRcdGRlcGVuZHMgb24gQVRIOUsgXHUwMDI2XHUwMDI2IE9GXG4gIDUxOlx0XHRkZWZhdWx0IG5cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgQUhCIGJ1cyBzdXBwb3J0IGluIGF0aDlrLlxuICA1NDpcdFxuICA1NTpcdFx0ICBTYXkgWSwgaWYgeW91IGhhdmUgYSBTb0Mgd2l0aCBhIGNvbXBhdGlibGUgYnVpbHQtaW5cbiAgNTY6XHRcdCAgd2lyZWxlc3MgTUFDLiBTYXkgTiBpZiB1bnN1cmUuXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEFUSDlLX0RFQlVHRlNcbiAgNTk6XHRcdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBkZWJ1Z2dpbmdcJiMzNDtcbiAgNjA6XHRcdGRlcGVuZHMgb24gQVRIOUsgXHUwMDI2XHUwMDI2IERFQlVHX0ZTIFx1MDAyNlx1MDAyNiBNQUM4MDIxMV9ERUJVR0ZTXG4gIDYxOlx0XHRzZWxlY3QgQVRIOUtfQ09NTU9OX0RFQlVHXG4gIDYyOlx0XHRoZWxwXG4gIDYzOlx0XHQgIFNheSBZLCBpZiB5b3UgbmVlZCBhY2Nlc3MgdG8gYXRoOWsmIzM5O3Mgc3RhdGlzdGljcyBmb3JcbiAgNjQ6XHRcdCAgaW50ZXJydXB0cywgcmF0ZSBjb250cm9sLCBldGMuXG4gIDY1Olx0XG4gIDY2Olx0XHQgIEFsc28gcmVxdWlyZWQgZm9yIGNoYW5naW5nIGRlYnVnIG1lc3NhZ2UgZmxhZ3MgYXQgcnVuIHRpbWUgYW5kIGZvclxuICA2NzpcdFx0ICBUWDk5LlxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBBVEg5S19TVEFUSU9OX1NUQVRJU1RJQ1NcbiAgNzA6XHRcdGJvb2wgXCYjMzQ7RGV0YWlsZWQgc3RhdGlvbiBzdGF0aXN0aWNzXCYjMzQ7XG4gIDcxOlx0XHRkZXBlbmRzIG9uIEFUSDlLIFx1MDAyNlx1MDAyNiBBVEg5S19ERUJVR0ZTIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuICA3MjpcdFx0ZGVmYXVsdCBuXG4gIDczOlx0XHRoZWxwXG4gIDc0Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZGV0YWlsZWQgc3RhdGlzdGljcyBmb3IgYXNzb2NpYXRpb24gc3RhdGlvbnMuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIEFUSDlLX1RYOTlcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7QXRoZXJvcyBhdGg5ayBUWDk5IHRlc3Rpbmcgc3VwcG9ydFwmIzM0O1xuICA3ODpcdFx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIFx1MDAyNlx1MDAyNiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbiAgNzk6XHRcdGRlZmF1bHQgblxuICA4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ3OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgYXRoOWsgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgYGF0aDlrYCB3aXJlbGVzcyBkcml2ZXIgY29uZmlndXJhdGlvbi4gUmlnaHQsIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5a2AgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiBsaW5lcyAxNzAgdGhyb3VnaCAyMjAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIG9yIHBlcmhhcHMgZGVwZW5kZW5jaWVzIGFyZSBzZXQuIEhvcGVmdWxseSwgaXQmIzM5O3Mgbm90aGluZyB0b28gb2JzY3VyZTsgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBJIGNhbiBoYW5kbGUgbW9zdCBvZiB3aGF0JiMzOTtzIGluIHRoZXJlLCBldmVuIGlmIGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB0aG9zZSBsaW5lcyBob2xkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzA6XHRcdCAgSWYgdW5zdXJlIHNheSBOLlxuIDE3MTpcdFxuIDE3MjpcdGNvbmZpZyBBVEg5S19IVENcbiAxNzM6XHRcdHRyaXN0YXRlIFwmIzM0O0F0aGVyb3MgSFRDIGJhc2VkIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcJiMzNDtcbiAxNzQ6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBNQUM4MDIxMVxuIDE3NTpcdFx0c2VsZWN0IE1BQzgwMjExX0xFRFMgaWYgTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcbiAxNzY6XHRcdHNlbGVjdCBBVEg5S19IV1xuIDE3NzpcdFx0c2VsZWN0IEFUSDlLX0NPTU1PTlxuIDE3ODpcdFx0aGVscFxuIDE3OTpcdFx0ICBTdXBwb3J0IGZvciBBdGhlcm9zIEhUQyBiYXNlZCBjYXJkcy5cbiAxODA6XHRcdCAgQ2hpcHNldHMgc3VwcG9ydGVkOiBBUjkyNzFcbiAxODE6XHRcbiAxODI6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb246XG4gMTgzOlx0XHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXRoOWtfaHRjXG4gMTg0Olx0XG4gMTg1Olx0XHQgIFRoZSBidWlsdCBtb2R1bGUgd2lsbCBiZSBhdGg5a19odGMuXG4gMTg2Olx0XG4gMTg3Olx0Y29uZmlnIEFUSDlLX0hUQ19ERUJVR0ZTXG4gMTg4Olx0XHRib29sIFwmIzM0O0F0aGVyb3MgYXRoOWtfaHRjIGRlYnVnZ2luZ1wmIzM0O1xuIDE4OTpcdFx0ZGVwZW5kcyBvbiBBVEg5S19IVEMgXHUwMDI2XHUwMDI2IERFQlVHX0ZTXG4gMTkwOlx0XHRzZWxlY3QgQVRIOUtfQ09NTU9OX0RFQlVHXG4gMTkxOlx0XHRoZWxwXG4gMTkyOlx0XHQgIFNheSBZLCBpZiB5b3UgbmVlZCBhY2Nlc3MgdG8gYXRoOWtfaHRjJiMzOTtzIHN0YXRpc3RpY3MuXG4gMTkzOlx0XHQgIEFzIHdlbGwgYXMgYWNjZXNzIHRvIHRoZSBGRlQvc3BlY3RyYWwgZGF0YS5cbiAxOTQ6XHRcbiAxOTU6XHRjb25maWcgQVRIOUtfSFdSTkdcbiAxOTY6XHRcdGJvb2wgXCYjMzQ7UmFuZG9tIG51bWJlciBnZW5lcmF0b3Igc3VwcG9ydFwmIzM0O1xuIDE5NzpcdFx0ZGVwZW5kcyBvbiBBVEg5SyBcdTAwMjZcdTAwMjYgKEhXX1JBTkRPTSA9IHkgfHwgSFdfUkFORE9NID0gQVRIOUspXG4gMTk4Olx0XHRkZWZhdWx0IG5cbiAxOTk6XHRcdGhlbHBcbiAyMDA6XHRcdCAgVGhpcyBvcHRpb24gaW5jb3Jwb3JhdGVzIHRoZSBBREMgcmVnaXN0ZXIgb3V0cHV0IGFzIGEgc291cmNlIG9mXG4gMjAxOlx0XHQgIHJhbmRvbW5lc3MgaW50byBMaW51eCBlbnRyb3B5IHBvb2wgKC9kZXYvdXJhbmRvbSBhbmQgL2Rldi9yYW5kb20pXG4gMjAyOlx0XG4gMjAzOlx0XHQgIFNheSBZLCBmZWVkcyB0aGUgZW50cm9weSBkaXJlY3RseSBmcm9tIHRoZSBXaUZpIGRyaXZlciB0byB0aGUgaW5wdXRcbiAyMDQ6XHRcdCAgcG9vbC5cbiAyMDU6XHRcbiAyMDY6XHRjb25maWcgQVRIOUtfQ09NTU9OX1NQRUNUUkFMXG4gMjA3Olx0XHRib29sIFwmIzM0O0F0aGVyb3MgYXRoOWsvYXRoOWtfaHRjIHNwZWN0cmFsIHNjYW4gc3VwcG9ydFwmIzM0O1xuIDIwODpcdFx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIHx8IEFUSDlLX0hUQ19ERUJVR0ZTXG4gMjA5Olx0XHRzZWxlY3QgUkVMQVlcbiAyMTA6XHRcdGRlZmF1bHQgblxuIDIxMTpcdFx0aGVscFxuIDIxMjpcdFx0ICBTYXkgWSB0byBlbmFibGUgYWNjZXNzIHRvIHRoZSBGRlQvc3BlY3RyYWwgZGF0YSB2aWEgZGVidWdmcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MDMKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogNTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgYXRoOWtfaHRjYCBTcGVjdHJhbCBTY2FuIERlYnVnZnMgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBtb2RpZmllZCBjb2RlIGlzIGV2ZW4gYWNjZXNzaWJsZSB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgc3BlY2lmaWNhbGx5LCBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuIFRoZSBnb29kIG5ld3MgaXMsIHllcywgdGhlIGBhdGg5a19odGNgIGRyaXZlciwgYmVpbmcgVVNCLWJhc2VkIChhbmQgdXRpbGl6aW5nIHRoZSBBUjkyNzEgY2hpcHNldCksIGlzIGluZGVlZCByZWFjaGFibGUgYW5kIGVhc2lseSBlbXVsYXRlZCB2aWEgdGhlIFVTQiByYXcgZ2FkZ2V0IHdpdGhpbiB0aGF0IGNvbnRleHQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGZpcnN0IHN0ZXAuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzcGVjaWZpY3MuIFdoZW4gd2UgZW5hYmxlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMg4oCTIGBBVEg5S19IVENgLCBgQVRIOUtfSFRDX0RFQlVHRlNgLCBhbmQgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAg4oCTIHRoZSBgYXRoOWtfaHRjYCBkcml2ZXIgZXhwb3NlcyB0aGUgYHNwZWN0cmFsX3NjYW5fY3RsYCBjb250cm9sIHdpdGhpbiBkZWJ1Z2ZzLCBhbmQgaXQmIzM5O3MgbmVhdGx5IHR1Y2tlZCBhd2F5IHVuZGVyIHRoZSB3aXBoeSBkZWJ1Z2ZzIGRpcmVjdG9yeS4gV3JpdGluZyB0byB0aGlzIGNvbnRyb2wgdHJpZ2dlcnMgdGhlIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKWAgZnVuY3Rpb24uCgpUaGUgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYSBjcnVjaWFsIHZhbGlkYXRpb24gd2l0aGluIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKWA6IGEgY2hlY2sgdXNpbmcgYHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCAmYW1wO2NvbW1vbi0mZ3Q7b3BfZmxhZ3MpYC4gVGhpcyBpcyBhIGRpcmVjdCwgZXhlY3V0YWJsZSBjb2RlIHBhdGggdGhhdCBhbHRlcnMgY29udHJvbCBmbG93IHdoZW4gdGhlIGRldmljZSBpbnRlcmZhY2UgaXMgZG93bi4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlOgotICAgYEFUSDlLX0hUQ2AgKG9yIGBBVEg5S2ApCi0gICBgQVRIOUtfSFRDX0RFQlVHRlNgIChvciBgQVRIOUtfREVCVUdGU2ApCi0gICBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYAoKSSBhbHNvIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgaW1wb3J0YW50IHN5bWJvbHMgaW4gdGhlIGNvZGU6Ci0gICBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYAotICAgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXJgCi0gICBgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnYAoKTGV0JiMzOTtzIGRvdWJsZSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgc3ltYm9sczoKLSBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYAotIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWdgCi0gYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXJgCgpUYWtpbmcgYSBzdGVwIGJhY2ssIHRoaXMgbWVhbnMgdGhhdCB0aGUgcGF0Y2ggYWRkcyBhIHNhZmV0eSBjaGVjay4gU3BlY2lmaWNhbGx5LCB0aGUgY2hlY2sgYHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCAmYW1wO2NvbW1vbi0mZ3Q7b3BfZmxhZ3MpYCBhZGRlZCB0byB0aGUgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAgd2l0aGluIGRlYnVnZnMgaGVscHMgcHJldmVudCBwb3RlbnRpYWxseSB1bnNhZmUgUEhZIHJlZ2lzdGVyIHdyaXRlcyB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgZG93bi4gIFRoaXMgY29kZSBpcyBjbGVhcmx5IHJlYWNoYWJsZSB1c2luZyB0aGUgVVNCLWVtdWxhdGVkIGBhdGg5a19odGNgIGRyaXZlciwgZ2l2ZW4gdGhhdCB0aGUgc3BlY3RyYWwgc2NhbiBhbmQgZGVidWdmcyBmZWF0dXJlcyBhcmUgZW5hYmxlZC4KClRoZXJlZm9yZSwgdGhpcyBpcyBzb21ldGhpbmcgSSYjMzk7bSBjYWxsaW5nIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHRob3NlIGNvbmZpZ3VyYXRpb25zOiBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYCwgYEFUSDlLX0hUQ2AsIGFuZCBgQVRIOUtfSFRDX0RFQlVHRlNgLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBkZWZpbml0ZWx5OiBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCwgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXJgLCBhbmQgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ2AuIE5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDlLX0NPTU1PTl9TUEVDVFJBTCYjMzQ7LAogICAgJiMzNDtBVEg5S19IVEMmIzM0OywKICAgICYjMzQ7QVRIOUtfSFRDX0RFQlVHRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwmIzM0OywKICAgICYjMzQ7YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnJiMzNDssCiAgICAmIzM0O2F0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciB0aGUgQVRIX09QX0lOVkFMSUQgZmxhZyBpbiB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB3aXRoaW4gdGhlIGF0aDlrIHNwZWN0cmFsIHNjYW4gZGVidWdmcyBpbnRlcmZhY2UgdG8gcmVqZWN0IFBIWSByZWdpc3RlciB3cml0ZSBjb21tYW5kcyB3aGlsZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gb2YgdGhlIGF0aDlrX2h0YyBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDlLX0NPTU1PTl9TUEVDVFJBTCYjMzQ7LAogICAgJiMzNDtBVEg5S19IVEMmIzM0OywKICAgICYjMzQ7QVRIOUtfSFRDX0RFQlVHRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwmIzM0OywKICAgICYjMzQ7YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnJiMzNDssCiAgICAmIzM0O2F0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciB0aGUgQVRIX09QX0lOVkFMSUQgZmxhZyBpbiB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB3aXRoaW4gdGhlIGF0aDlrIHNwZWN0cmFsIHNjYW4gZGVidWdmcyBpbnRlcmZhY2UgdG8gcmVqZWN0IFBIWSByZWdpc3RlciB3cml0ZSBjb21tYW5kcyB3aGlsZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gb2YgdGhlIGF0aDlrX2h0YyBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc3RhdGUgY2hlY2sgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcdTAwMjZjb21tb24tXHUwMDNlb3BfZmxhZ3MpKSBpbiB0aGUgZGVidWdmcyB3cml0ZSBoYW5kbGVyIHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCgpIHRvIHByZXZlbnQgc3BlY3RyYWwgc2NhbiBjb21tYW5kcyBmcm9tIGRyaXZpbmcgUEhZIHJlZ2lzdGVyIHdyaXRlcyB3aGVuIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI2ZDk2YmQxMGRmNzc1MzdjOTQwM2ViODkwNTY4OWYwMDNmZTEzNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIxOjQzOjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jCmluZGV4IGNhMDFhMDdmNjYzMGMuLjBiYmJlZjllM2I5YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMKQEAgLTgwNSw2ICYjNDM7ODA1LDE0IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAogCWJ1ZltsZW5dID0gJiMzOTtcMCYjMzk7OwogCiYjNDM7CS8qIEV2ZXJ5IGNvbW1hbmQgYmVsb3cgZHJpdmVzIFBIWSByZWdpc3RlciB3cml0ZXMuIFJlZnVzZSB0aGVtIHdoaWxlCiYjNDM7CSAqIHRoZSBoYXJkd2FyZSBpcyBkaXNhYmxlZCAodGhlIGludGVyZmFjZSBpcyBkb3duKTogb24gdGhlIEFSOTI3MQomIzQzOwkgKiB0aGF0IHRyYWZmaWMgaGFuZ3MgdGhlIGZpcm13YXJlIHVudGlsIHRoZSBkZXZpY2UgaXMgcmUtZW51bWVyYXRlZC4KJiM0MzsJICogVGhlIHJlc2V0IGNvbnRyb2wgcmVmdXNlcyBvbiB0aGUgc2FtZSBmbGFnLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCAmYW1wO2NvbW1vbi0mZ3Q7b3BfZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAlpZiAoc3RybmNtcCgmIzM0O3RyaWdnZXImIzM0OywgYnVmLCA3KSA9PSAwKSB7CiAJCWF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpOwogCX0gZWxzZSBpZiAoc3RybmNtcCgmIzM0O2JhY2tncm91bmQmIzM0OywgYnVmLCAxMCkgPT0gMCkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwOQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBTcGVjdHJhbCBDb250cm9sKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhpcyBuZXcgcGF0Y2guIFNwZWNpZmljYWxseSwgSSBzZWUgaXQgaW50cm9kdWNlcyBhIGNvbmRpdGlvbmFsIGNoZWNrIHdpdGhpbiBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jYC4gVGhlIGNoZWNrIGl0c2VsZiwgYGlmICh0ZXN0X2JpdChBVEhfT1BfSU5WQUxJRCwgJmFtcDtjb21tb24tJmd0O29wX2ZsYWdzKSkgcmV0dXJuIC1FQlVTWTtgLCBsb29rcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIG9uIHRoZSBzdXJmYWNlIOKAkyBpdCYjMzk7cyBiYXNpY2FsbHkgcHJldmVudGluZyB0aGUgZnVuY3Rpb24gZnJvbSBydW5uaW5nIGlmIGEgc3BlY2lmaWMgb3BlcmF0aW9uYWwgZmxhZywgYEFUSF9PUF9JTlZBTElEYCwgaXMgc2V0LiBNeSBpbnR1aXRpb24gaXMgdGhhdCB0aGlzIGlzIGd1YXJkaW5nIGFnYWluc3Qgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uIG9yIGNvbmZsaWN0LCBwcmV2ZW50aW5nIHNwZWN0cmFsIHNjYW4gY29udHJvbCBmcm9tIGhhcHBlbmluZyB3aGlsZSB0aGUgaGFyZHdhcmUgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS4KClRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYXJvdW5kIGxpbmUgODA1IG9mIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNgLiBJIG5lZWQgdGhhdCBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIG9mIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgIHdpdGggb3RoZXIgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMsIGFuZCB0aGUgZXhhY3QgbWVhbmluZyBvZiBgQVRIX09QX0lOVkFMSURgIHdpdGhpbiB0aGlzIGRyaXZlciB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZmxhZyBpcyBzZXQgYW5kIGNsZWFyZWQsIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAgaXMgYWN0dWFsbHkgY2FsbGVkLiBUaGlzIHdpbGwgbGV0IG1lIGZvcm0gYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyBwb3RlbnRpYWwgcmFtaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc4MDpcdFx0YXRoX3BzX29wcyhjb21tb24pLVx1MDAzZXdha2V1cChjb21tb24pO1xuIDc4MTpcdFx0YXRoOWtfaHdfb3BzKGFoKS1cdTAwM2VzcGVjdHJhbF9zY2FuX2NvbmZpZyhhaCwgXHUwMDI2c3BlY19wcml2LVx1MDAzZXNwZWNfY29uZmlnKTtcbiA3ODI6XHRcdGF0aF9wc19vcHMoY29tbW9uKS1cdTAwM2VyZXN0b3JlKGNvbW1vbik7XG4gNzgzOlx0XG4gNzg0Olx0XHRzcGVjX3ByaXYtXHUwMDNlc3BlY3RyYWxfbW9kZSA9IHNwZWN0cmFsX21vZGU7XG4gNzg1Olx0XG4gNzg2Olx0XHRyZXR1cm4gMDtcbiA3ODc6XHR9XG4gNzg4Olx0RVhQT1JUX1NZTUJPTChhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcpO1xuIDc4OTpcdFxuIDc5MDpcdHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiA3OTE6XHRcdFx0XHRcdFx0Y29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuIDc5MjpcdFx0XHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiA3OTM6XHR7XG4gNzk0Olx0XHRzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA3OTU6XHRcdHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc3BlY19wcml2LVx1MDAzZWFoKTtcbiA3OTY6XHRcdGNoYXIgYnVmWzMyXTtcbiA3OTc6XHRcdHNzaXplX3QgbGVuO1xuIDc5ODpcdFxuIDc5OTpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FUSDlLX1RYOTkpKVxuIDgwMDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gODAxOlx0XG4gODAyOlx0XHRsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7XG4gODAzOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSlcbiA4MDQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gODA1Olx0XG4gODA2Olx0XHRidWZbbGVuXSA9ICYjMzk7XFwwJiMzOTs7XG4gODA3Olx0XG4gODA4Olx0XHQvKiBFdmVyeSBjb21tYW5kIGJlbG93IGRyaXZlcyBQSFkgcmVnaXN0ZXIgd3JpdGVzLiBSZWZ1c2UgdGhlbSB3aGlsZVxuIDgwOTpcdFx0ICogdGhlIGhhcmR3YXJlIGlzIGRpc2FibGVkICh0aGUgaW50ZXJmYWNlIGlzIGRvd24pOiBvbiB0aGUgQVI5MjcxXG4gODEwOlx0XHQgKiB0aGF0IHRyYWZmaWMgaGFuZ3MgdGhlIGZpcm13YXJlIHVudGlsIHRoZSBkZXZpY2UgaXMgcmUtZW51bWVyYXRlZC5cbiA4MTE6XHRcdCAqIFRoZSByZXNldCBjb250cm9sIHJlZnVzZXMgb24gdGhlIHNhbWUgZmxhZy5cbiA4MTI6XHRcdCAqL1xuIDgxMzpcdFx0aWYgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcdTAwMjZjb21tb24tXHUwMDNlb3BfZmxhZ3MpKVxuIDgxNDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDgxNTpcdFxuIDgxNjpcdFx0aWYgKHN0cm5jbXAoXCYjMzQ7dHJpZ2dlclwmIzM0OywgYnVmLCA3KSA9PSAwKSB7XG4gODE3Olx0XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpO1xuIDgxODpcdFx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O2JhY2tncm91bmRcJiMzNDssIGJ1ZiwgMTApID09IDApIHtcbiA4MTk6XHRcdFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9CQUNLR1JPVU5EKTtcbiA4MjA6XHRcdFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXCYjMzQ7c3BlY3RyYWwgc2NhbjogYmFja2dyb3VuZCBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuIDgyMTpcdFx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O2NoYW5zY2FuXCYjMzQ7LCBidWYsIDgpID09IDApIHtcbiA4MjI6XHRcdFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9DSEFOU0NBTik7XG4gODIzOlx0XHRcdGF0aF9kYmcoY29tbW9uLCBDT05GSUcsIFwmIzM0O3NwZWN0cmFsIHNjYW46IGNoYW5uZWwgc2NhbiBtb2RlIGVuYWJsZWRcXG5cJiMzNDspO1xuIDgyNDpcdFx0fSBlbHNlIGlmIChzdHJuY21wKFwmIzM0O21hbnVhbFwmIzM0OywgYnVmLCA2KSA9PSAwKSB7XG4gODI1Olx0XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfTUFOVUFMKTtcbiA4MjY6XHRcdFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXCYjMzQ7c3BlY3RyYWwgc2NhbjogbWFudWFsIG1vZGUgZW5hYmxlZFxcblwmIzM0Oyk7XG4gODI3Olx0XHR9IGVsc2UgaWYgKHN0cm5jbXAoXCYjMzQ7ZGlzYWJsZVwmIzM0OywgYnVmLCA3KSA9PSAwKSB7XG4gODI4Olx0XHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfRElTQUJMRUQpO1xuIDgyOTpcdFx0XHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcJiMzNDtzcGVjdHJhbCBzY2FuOiBkaXNhYmxlZFxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDkKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gYSBkZWJ1Z2ZzIHdyaXRlIGhhbmRsZXIsIHNwZWNpZmljYWxseSBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYC4gQmVmb3JlIHRoZSBwYXRjaCwgd3JpdGVzIHRvIGBzcGVjdHJhbF9zY2FuX2N0bGAgd291bGQgdHJpZ2dlciBQSFkgcmVnaXN0ZXIgd3JpdGVzIGV2ZW4gd2hlbiB0aGUgaW50ZXJmYWNlIHdhc24mIzM5O3QgdmFsaWQsIGluZGljYXRlZCBieSBgQVRIX09QX0lOVkFMSURgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhbiBlYXJseSBleGl0IGNvbmRpdGlvbjogYGlmICh0ZXN0X2JpdChBVEhfT1BfSU5WQUxJRCwgJmFtcDtjb21tb24tJmd0O29wX2ZsYWdzKSkgcmV0dXJuIC1FQlVTWTtgLiBTbWFydC4KCk5vdywgbGV0IG1lIHJ1biB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3QgZm9yIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaC4KCjEuICAqKktlcm5lbCBTdHJ1Y3R1cmVzICZhbXA7IFVzZXIgU3BhY2U6KiogRG9lcyB0aGlzIGludHJvZHVjZSBuZXcga2VybmVsIHN0cnVjdHVyZXMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9uZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQ/IE5vLCB0aGUgZnVuY3Rpb24gdXNlcyBgY29weV9mcm9tX3VzZXJgLCBzbyBpdCByZWNlaXZlcyBkYXRhLCBub3Qgc2VuZHMgaXQsIGFuZCByZXR1cm5zIGEgY291bnQgb3IgZXJyb3IgY29kZS4gU2FmZS4KMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZSBMb2dpYzoqKiBEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gYGNvbW1vbi0mZ3Q7b3BfZmxhZ3NgIGlzIGNsZWFybHkgYW4gb3BlcmF0aW9uYWwgZmxhZyBiaXRmaWVsZCBtYW5hZ2VkIGJ5IHRoZSBkcml2ZXIgaXRzZWxmLCBzbyBpdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYXQgc29tZSBwb2ludC4gU2VjdXJlLgozLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIERvZXMgaXQgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOby4gRG9lc24mIzM5O3QgbG9vayBsaWtlIGFueSBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gdGhpcyBhcmVhLiBObyBwcm9ibGVtLgo0LiAgKipCb3VuZHMgQ2hlY2tzICZhbXA7IE1lbW9yeSBBY2Nlc3M6KiogRG9lcyBpdCBtZXNzIHdpdGggYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBzdXJyb3VuZGluZyBjb2RlIGNvdWxkIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzPyBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgbGlrZSB0aGF0IGhlcmUuIFRoaXMgaXMgYSBwcmV0dHkgZm9jdXNlZCBjaGFuZ2UuCgpTbywgaXQmIzM5O3MgcmVhbGx5IGp1c3QgYSBkZXZpY2Ugc3RhdGUgdmFsaWRpdHkgY2hlY2suIFdlJiMzOTtyZSBwcmV2ZW50aW5nIFBIWSByZWdpc3RlciB3cml0ZXMgKGhhcmR3YXJlIGNvbW1hbmRzKSB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQsIHdoaWNoIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGNhdXNlcyBmaXJtd2FyZSBoYW5ncyBvbiBBUjkyNzEuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYSBnb29kIGZpeC4KCk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIEtNU0FOIGRvZXNuJiMzOTt0IHNlZW0gbmVjZXNzYXJ5IGhlcmUuIEkgdGhpbmsgd2UmIzM5O3JlIGdvb2QgdG8gZ28uIExldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIG15IHdvcmsuLi5hbmQgcHJlcGFyZSBteSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHN0YXRlIGNoZWNrICh0ZXN0X2JpdChBVEhfT1BfSU5WQUxJRCwgXHUwMDI2Y29tbW9uLVx1MDAzZW9wX2ZsYWdzKSkgaW4gdGhlIGRlYnVnZnMgd3JpdGUgaGFuZGxlciB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB0byBwcmV2ZW50IHNwZWN0cmFsIHNjYW4gY29tbWFuZHMgZnJvbSBkcml2aW5nIFBIWSByZWdpc3RlciB3cml0ZXMgd2hlbiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRpc2FibGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc3RhdGUgY2hlY2sgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcdTAwMjZjb21tb24tXHUwMDNlb3BfZmxhZ3MpKSBpbiB0aGUgZGVidWdmcyB3cml0ZSBoYW5kbGVyIHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCgpIHRvIHByZXZlbnQgc3BlY3RyYWwgc2NhbiBjb21tYW5kcyBmcm9tIGRyaXZpbmcgUEhZIHJlZ2lzdGVyIHdyaXRlcyB3aGVuIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDM6NDQuNzcwMDcyOTcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3NzcwMTU4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIOUtfQ09NTU9OX1NQRUNUUkFMXCIsXG4gICAgXCJBVEg5S19IVENcIixcbiAgICBcIkFUSDlLX0hUQ19ERUJVR0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsXCIsXG4gICAgXCJhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWdcIixcbiAgICBcImF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzdGF0ZSBjaGVjayAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFxcdTAwMjZjb21tb24tXFx1MDAzZW9wX2ZsYWdzKSkgaW4gdGhlIGRlYnVnZnMgd3JpdGUgaGFuZGxlciB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB0byBwcmV2ZW50IHNwZWN0cmFsIHNjYW4gY29tbWFuZHMgZnJvbSBkcml2aW5nIFBIWSByZWdpc3RlciB3cml0ZXMgd2hlbiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRpc2FibGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciB0aGUgQVRIX09QX0lOVkFMSUQgZmxhZyBpbiB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB3aXRoaW4gdGhlIGF0aDlrIHNwZWN0cmFsIHNjYW4gZGVidWdmcyBpbnRlcmZhY2UgdG8gcmVqZWN0IFBIWSByZWdpc3RlciB3cml0ZSBjb21tYW5kcyB3aGlsZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gb2YgdGhlIGF0aDlrX2h0YyBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQzOjQ0Ljc3MDA3NzE2MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1ODAxMzYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI2ZDk2YmQxMGRmNzc1MzdjOTQwM2ViODkwNTY4OWYwMDNmZTEzNmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMTo0Mzo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcXG5pbmRleCBjYTAxYTA3ZjY2MzBjLi4wYmJiZWY5ZTNiOWMxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1xcbkBAIC04MDUsNiArODA1LDE0IEBAIHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFxuIFxcdGJ1ZltsZW5dID0gJ1xcXFwwJztcXG4gXFxuK1xcdC8qIEV2ZXJ5IGNvbW1hbmQgYmVsb3cgZHJpdmVzIFBIWSByZWdpc3RlciB3cml0ZXMuIFJlZnVzZSB0aGVtIHdoaWxlXFxuK1xcdCAqIHRoZSBoYXJkd2FyZSBpcyBkaXNhYmxlZCAodGhlIGludGVyZmFjZSBpcyBkb3duKTogb24gdGhlIEFSOTI3MVxcbitcXHQgKiB0aGF0IHRyYWZmaWMgaGFuZ3MgdGhlIGZpcm13YXJlIHVudGlsIHRoZSBkZXZpY2UgaXMgcmUtZW51bWVyYXRlZC5cXG4rXFx0ICogVGhlIHJlc2V0IGNvbnRyb2wgcmVmdXNlcyBvbiB0aGUgc2FtZSBmbGFnLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcXHUwMDI2Y29tbW9uLVxcdTAwM2VvcF9mbGFncykpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbiBcXHRpZiAoc3RybmNtcChcXFwidHJpZ2dlclxcXCIsIGJ1ZiwgNykgPT0gMCkge1xcbiBcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGNvbW1vbiwgc3BlY19wcml2KTtcXG4gXFx0fSBlbHNlIGlmIChzdHJuY21wKFxcXCJiYWNrZ3JvdW5kXFxcIiwgYnVmLCAxMCkgPT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0Mzo0Ni4yMjg3Nzk5NDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQwOTQ3OTc1MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDlLX0NPTU1PTl9TUEVDVFJBTFwiLFxuICAgIFwiQVRIOUtfSFRDXCIsXG4gICAgXCJBVEg5S19IVENfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIndyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bFwiLFxuICAgIFwiYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnXCIsXG4gICAgXCJhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciB0aGUgQVRIX09QX0lOVkFMSUQgZmxhZyBpbiB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB3aXRoaW4gdGhlIGF0aDlrIHNwZWN0cmFsIHNjYW4gZGVidWdmcyBpbnRlcmZhY2UgdG8gcmVqZWN0IFBIWSByZWdpc3RlciB3cml0ZSBjb21tYW5kcyB3aGlsZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gb2YgdGhlIGF0aDlrX2h0YyBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjZkOTZiZDEwZGY3NzUzN2M5NDAzZWI4OTA1Njg5ZjAwM2ZlMTM2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMjE6NDM6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcbmluZGV4IGNhMDFhMDdmNjYzMGMuLjBiYmJlZjllM2I5YzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1xuQEAgLTgwNSw2ICs4MDUsMTQgQEAgc3RhdGljIHNzaXplX3Qgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuIFxuIFx0YnVmW2xlbl0gPSAnXFwwJztcbiBcbitcdC8qIEV2ZXJ5IGNvbW1hbmQgYmVsb3cgZHJpdmVzIFBIWSByZWdpc3RlciB3cml0ZXMuIFJlZnVzZSB0aGVtIHdoaWxlXG4rXHQgKiB0aGUgaGFyZHdhcmUgaXMgZGlzYWJsZWQgKHRoZSBpbnRlcmZhY2UgaXMgZG93bik6IG9uIHRoZSBBUjkyNzFcbitcdCAqIHRoYXQgdHJhZmZpYyBoYW5ncyB0aGUgZmlybXdhcmUgdW50aWwgdGhlIGRldmljZSBpcyByZS1lbnVtZXJhdGVkLlxuK1x0ICogVGhlIHJlc2V0IGNvbnRyb2wgcmVmdXNlcyBvbiB0aGUgc2FtZSBmbGFnLlxuK1x0ICovXG4rXHRpZiAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFx1MDAyNmNvbW1vbi1cdTAwM2VvcF9mbGFncykpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4gXHRpZiAoc3RybmNtcChcInRyaWdnZXJcIiwgYnVmLCA3KSA9PSAwKSB7XG4gXHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpO1xuIFx0fSBlbHNlIGlmIChzdHJuY21wKFwiYmFja2dyb3VuZFwiLCBidWYsIDEwKSA9PSAwKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0Mzo0Ni4yMjg3ODExNDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzE3MDk1ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFdpcmVsZXNzIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggYWZmZWN0cyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jYCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYGF0aDlrYCBpcyB0aGUgZm9jdXMsIGFuZCBpdCdzIGluIHRoZSB3aXJlbGVzcyBkcml2ZXIgc3BhY2UuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoaXMgcmVsYXRlIHRvIHRoZSBsYXJnZXIgc3lzdGVtPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGF0aDlrYCBhbmQgYGF0aDlrX2h0Y2AuIFdhaXQsIGlzbid0IGBhdGg5a2AgUENJL0FIQiBhbmQgYGF0aDlrX2h0Y2AgVVNCP1xuXG5UaGlzIGFkZHMgc29tZSBjb21wbGV4aXR5IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciB0ZXN0aW5nIGFuZCB2ZXJpZmljYXRpb24uIEFyZSB0aGV5IGFjdHVhbGx5IHVzaW5nIHRoaXMgY29tbW9uIGZpbGUgZGlyZWN0bHksIG9yIGlzIGl0IHBvdGVudGlhbGx5IGVtdWxhdGVkIHZpYSBVU0IgUmF3IEdhZGdldCBpbiBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXI/IFRoYXQncyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBjb21tb24tc3BlY3RyYWwuY2AgaXMgYWN0dWFsbHkgdXRpbGl6ZWQgaW4gZWFjaCBlbnZpcm9ubWVudC4gQWxyaWdodCwgbGV0J3MgdHJhY2sgZG93biB3aGVyZSBgY29tbW9uLXNwZWN0cmFsLmNgIGlzIHVzZWQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHNlYXJjaCBmb3IgdGhlIGZpbGUgYW5kIGl0cyBhc3NvY2lhdGVkIEtjb25maWcgYW5kIE1ha2VmaWxlIGVudHJpZXMuIEtub3dpbmcgd2hlcmUgdGhlIHNvdXJjZSBpcyBidWlsdCBhbmQgdXNlZCBpcyBrZXkgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGZyb20gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQzOjUwLjU0NTg3OTMyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIxNDM4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21tb24tc3BlY3RyYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZT02NT1hdGg5a19jb21tb24tJChDT05GSUdfQVRIOUtfQ09NTU9OX0RFQlVHKSArPSBjb21tb24tZGVidWcub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZTo2NjphdGg5a19jb21tb24tJChDT05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMKSArPSBjb21tb24tc3BlY3RyYWwub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS02Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaC0yNi0jaW5jbHVkZSBcXFwiY29tbW9uLWRlYnVnLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oOjI3OiNpbmNsdWRlIFxcXCJjb21tb24tc3BlY3RyYWwuaFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgtMjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQzOjUwLjU5MTA5OTMyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjQ5MTk4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgYXRoOWsgXHUwMDI2IFNwZWN0cmFsIFN1cHBvcnQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGUgYGF0aDlrYCBkcml2ZXIsIGl0cyBjb21tb24gY29tcG9uZW50cyAoYGF0aDlrX2NvbW1vbmApLCBhbmQgdGhlIEhUQyB2YXJpYW50IChgYXRoOWtfaHRjYCkgYXJlIGNvbmZpZ3VyZWQsIGFuZCB3aGV0aGVyIGBBVEg5S19DT01NT05fU1BFQ1RSQUxgIGlzIGFwcHJvcHJpYXRlbHkgaGFuZGxlZC4gVGhpcyBpcyBsaWtlbHkgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQsIGFzIGl0IGRlZmluZXMgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHNwZWN0cmFsIGFuYWx5c2lzIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCB1bmRlcnN0YW5kIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgdGhlc2Ugb3B0aW9ucyBiZWNvbWUgdmlzaWJsZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZWxlbWVudHMgcmVsYXRlIHRvIGVhY2ggb3RoZXIgaW4gdGVybXMgb2YgYnVpbGQgb3B0aW9ucy4gQW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBhcmUgZ29pbmcgdG8gbmVlZCBhIGNsb3NlIGxvb2suIFRoaXMgaXMgdGhlIGJlZHJvY2sgb2YgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGV4cG9zZWQgYW5kIGluY29ycG9yYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY1NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQzOjUyLjY1NjAyMjEwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE4NzU0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBVEg5S19DT01NT05fU1BFQ1RSQUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTE5NT1jb25maWcgQVRIOUtfSFdSTkdcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTIwNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZzoyMDY6Y29uZmlnIEFUSDlLX0NPTU1PTl9TUEVDVFJBTFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnLTIwNy1cXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrL2F0aDlrX2h0YyBzcGVjdHJhbCBzY2FuIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU9NjU9YXRoOWtfY29tbW9uLSQoQ09ORklHX0FUSDlLX0NPTU1PTl9ERUJVRykgKz0gY29tbW9uLWRlYnVnLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6NjY6YXRoOWtfY29tbW9uLSQoQ09ORklHX0FUSDlLX0NPTU1PTl9TUEVDVFJBTCkgKz0gY29tbW9uLXNwZWN0cmFsLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtNjctXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTY2PXN0YXRpYyBpbmxpbmUgdTggc3BlY3RyYWxfYml0bWFwX3dlaWdodCh1OCAqYmlucylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE3MTojaWZkZWYgQ09ORklHX0FUSDlLX0NPTU1PTl9TUEVDVFJBTFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzItdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaD0xOTc9c3RhdGljIGlubGluZSBpbnQgYXRoX2Ntbl9wcm9jZXNzX2ZmdChzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMjAyLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MjAzOiNlbmRpZiAvKiBDT05GSUdfQVRIOUtfQ09NTU9OX1NQRUNUUkFMICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTIwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDM6NTIuNzAzMjE1MDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjY0Mjc2MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBBVEg5S19DT01NT05fU1BFQ1RSQUwgaW4gS2NvbmZpZyBmb3IgYXRoOWsgYW5kIGF0aDlrX2h0YyBSZWxhdGlvbnNoaXAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBLY29uZmlnYCBmaWxlcyBhc3NvY2lhdGVkIHdpdGggYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRpZXMgdG9nZXRoZXIgdGhlIGBhdGg5a2AgYW5kIGBhdGg5a19odGNgIGRyaXZlcnMuIEknbSBhc3N1bWluZyB0aGVyZSdzIHNvbWUgY29tbW9uIGZ1bmN0aW9uYWxpdHksIGxpa2VseSBzcGVjdHJhbCBhbmFseXNpcyBvciByZWxhdGVkIGZlYXR1cmVzLCB0aGF0J3Mgc2hhcmVkIG9yIGF0IGxlYXN0IGNvbmRpdGlvbmFsbHkgdXNlZCBiZXR3ZWVuIHRoZSB0d28uIFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBrZXkgdG8gdW5sb2NraW5nIHRoaXMgZGVwZW5kZW5jeSBhbmQgdW5kZXJzdGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgKGUuZy4sIGRyaXZlciBzZWxlY3Rpb24sIGhhcmR3YXJlIHN1cHBvcnQpIGl0J3MgZW5hYmxlZC4gSSBuZWVkIHRvIGxvb2sgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsYXRpb25zaGlwcyBkZWZpbmVkIHRocm91Z2ggYHNlbGVjdGAgb3IgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBjb2RlLCBhbmQgaG93IHRoZXNlIHNlcGFyYXRlIGRldmljZXMgd29yayB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ0OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQzOjU0Ljk2NzQ5MzQ0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHRzZWxlY3QgQVRIOUtfQ09NTU9OX0RFQlVHXFxuIDE5MTpcXHRcXHRoZWxwXFxuIDE5MjpcXHRcXHQgIFNheSBZLCBpZiB5b3UgbmVlZCBhY2Nlc3MgdG8gYXRoOWtfaHRjJ3Mgc3RhdGlzdGljcy5cXG4gMTkzOlxcdFxcdCAgQXMgd2VsbCBhcyBhY2Nlc3MgdG8gdGhlIEZGVC9zcGVjdHJhbCBkYXRhLlxcbiAxOTQ6XFx0XFxuIDE5NTpcXHRjb25maWcgQVRIOUtfSFdSTkdcXG4gMTk2OlxcdFxcdGJvb2wgXFxcIlJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHN1cHBvcnRcXFwiXFxuIDE5NzpcXHRcXHRkZXBlbmRzIG9uIEFUSDlLIFxcdTAwMjZcXHUwMDI2IChIV19SQU5ET00gPSB5IHx8IEhXX1JBTkRPTSA9IEFUSDlLKVxcbiAxOTg6XFx0XFx0ZGVmYXVsdCBuXFxuIDE5OTpcXHRcXHRoZWxwXFxuIDIwMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGluY29ycG9yYXRlcyB0aGUgQURDIHJlZ2lzdGVyIG91dHB1dCBhcyBhIHNvdXJjZSBvZlxcbiAyMDE6XFx0XFx0ICByYW5kb21uZXNzIGludG8gTGludXggZW50cm9weSBwb29sICgvZGV2L3VyYW5kb20gYW5kIC9kZXYvcmFuZG9tKVxcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHQgIFNheSBZLCBmZWVkcyB0aGUgZW50cm9weSBkaXJlY3RseSBmcm9tIHRoZSBXaUZpIGRyaXZlciB0byB0aGUgaW5wdXRcXG4gMjA0OlxcdFxcdCAgcG9vbC5cXG4gMjA1OlxcdFxcbiAyMDY6XFx0Y29uZmlnIEFUSDlLX0NPTU1PTl9TUEVDVFJBTFxcbiAyMDc6XFx0XFx0Ym9vbCBcXFwiQXRoZXJvcyBhdGg5ay9hdGg5a19odGMgc3BlY3RyYWwgc2NhbiBzdXBwb3J0XFxcIlxcbiAyMDg6XFx0XFx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIHx8IEFUSDlLX0hUQ19ERUJVR0ZTXFxuIDIwOTpcXHRcXHRzZWxlY3QgUkVMQVlcXG4gMjEwOlxcdFxcdGRlZmF1bHQgblxcbiAyMTE6XFx0XFx0aGVscFxcbiAyMTI6XFx0XFx0ICBTYXkgWSB0byBlbmFibGUgYWNjZXNzIHRvIHRoZSBGRlQvc3BlY3RyYWwgZGF0YSB2aWEgZGVidWdmcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDM6NTQuOTY3NTU1NzYzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgzNjUxNjc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBBVEg5S19IVEMgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGF0aDlrX2h0Y2AuIFJpZ2h0LCBpdCdzIGEgVVNCIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFuIGBBVEg5S19IVENgIG9uZS4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBjaGVjayB3aGVyZSBpdCdzIGRlZmluZWQgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBhbmQgd2hlcmUgdGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTE0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0Mzo1OC44MDQwNzQ5OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mzc1MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEg5S19IVENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnPTE1Nj1jb25maWcgQVRIOUtfUENJX05PX0VFUFJPTVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTcxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE3Mjpjb25maWcgQVRIOUtfSFRDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIEhUQyBiYXNlZCB3aXJlbGVzcyBjYXJkcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL0tjb25maWctMTg2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnOjE4Nzpjb25maWcgQVRIOUtfSFRDX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZy0xODgtXFx0Ym9vbCBcXFwiQXRoZXJvcyBhdGg5a19odGMgZGVidWdnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0Mzo1OC44NTA0NTQ0MTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5MjE2NzA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbi4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGF0aDlrLWh0YyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGF0aDlrLWh0YyBkcml2ZXIgaGFuZGxlcyBpdHMgaW5pdGlhbGl6YXRpb24uICBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IGl0IHJlZ2lzdGVycyB0aGUgVVNCIGRldmljZSwgYW5kLCBvZiBjb3Vyc2UsIGhvdyBpdCBzZXRzIHVwIGZlYXR1cmVzIGxpa2Ugc3BlY3RyYWwgc2NhbiBhbmQgdGhlIGRlYnVnZnMgaW50ZXJmYWNlLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBsaWtlbHkgd2l0aGluIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiByb3V0aW5lIGl0c2VsZi4gR2l2ZW4gdGhhdCwgSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZpcnN0IHN0b3AgaXMgcHJvYmFibHkgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuY2AsIG9yIHNvbWV0aGluZyBjbG9zZWx5IGFuYWxvZ291cyBpbiB0aGUgYXRoOWstaHRjIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGRldmljZSBzZXR1cCBsb2dpYyBsaXZlcy4gSSdsbCBuZWVkIHRvIHBvcmUgb3ZlciB0aGF0IGZpbGUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZSBVU0IgZGV2aWNlIGlzIHByb2JlZCBhbmQgYm91bmQsIGFuZCB0aGVuIHRyYWNlIHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIHNwZWN0cmFsIHNjYW4gY2FwYWJpbGl0aWVzIGFuZCB0aGUgZGVidWdmcyBlbnRyaWVzLiBIb3BlZnVsbHksIGl04oCZcyBhbGwgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgd2VsbC1jb21tZW50ZWQuIElmIG5vdCwgSSdsbCBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCByZWxhdGVkIGZ1bmN0aW9uIGNhbGxzIGFuZCBsb29rIGZvciB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi4gSG9wZWZ1bGx5IHRoaXMgaXMgd2hlcmUgSSB3aWxsIGZpbmQgd2hhdCBJIGFtIGxvb2tpbmcgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDQ6MDEuMzQyNjI0MzgzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM4NzE0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGg5a19jbW5fc3BlY3RyYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jaGFubmVsLmM9MjM9c3RhdGljIGludCBhdGhfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2hhbm5lbC5jLTk2LVxcdFxcdFxcdHNjLVxcdTAwM2VzcGVjX3ByaXYuc3BlY3RyYWxfbW9kZSA9PSBTUEVDVFJBTF9DSEFOU0NBTilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2hhbm5lbC5jOjk3OlxcdFxcdFxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBcXHUwMDI2c2MtXFx1MDAzZXNwZWNfcHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NoYW5uZWwuYy05OC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM9NjkwPXN0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV9zcGVjX3NjYW5fY3RsKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzE0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzo3MTU6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTcxNi1cXHRcXHRcXHRcXHQgc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTc0Mi1cXHQgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6NzQzOlxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgc3BlY19wcml2LVxcdTAwM2VzcGVjdHJhbF9tb2RlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzQ0LVxcdGF0aDlrX2h3X29wcyhhaCktXFx1MDAzZXNwZWN0cmFsX3NjYW5fdHJpZ2dlcihhaCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzQ2LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6NzQ3OkVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTc0OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6NzQ5OmludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzUwLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzg3LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6Nzg4OkVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtNzg5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYz03OTA9c3RhdGljIHNzaXplX3Qgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgxNi1cXHRpZiAoc3RybmNtcChcXFwidHJpZ2dlclxcXCIsIGJ1ZiwgNykgPT0gMCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzo4MTc6XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcihjb21tb24sIHNwZWNfcHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgxOC1cXHR9IGVsc2UgaWYgKHN0cm5jbXAoXFxcImJhY2tncm91bmRcXFwiLCBidWYsIDEwKSA9PSAwKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjgxOTpcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoY29tbW9uLCBzcGVjX3ByaXYsIFNQRUNUUkFMX0JBQ0tHUk9VTkQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy04MjAtXFx0XFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXFxcInNwZWN0cmFsIHNjYW46IGJhY2tncm91bmQgbW9kZSBlbmFibGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtODIxLVxcdH0gZWxzZSBpZiAoc3RybmNtcChcXFwiY2hhbnNjYW5cXFwiLCBidWYsIDgpID09IDApIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6ODIyOlxcdFxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfQ0hBTlNDQU4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy04MjMtXFx0XFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXFxcInNwZWN0cmFsIHNjYW46IGNoYW5uZWwgc2NhbiBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy04MjQtXFx0fSBlbHNlIGlmIChzdHJuY21wKFxcXCJtYW51YWxcXFwiLCBidWYsIDYpID09IDApIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmM6ODI1OlxcdFxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfTUFOVUFMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtODI2LVxcdFxcdGF0aF9kYmcoY29tbW9uLCBDT05GSUcsIFxcXCJzcGVjdHJhbCBzY2FuOiBtYW51YWwgbW9kZSBlbmFibGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtODI3LVxcdH0gZWxzZSBpZiAoc3RybmNtcChcXFwiZGlzYWJsZVxcXCIsIGJ1ZiwgNykgPT0gMCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzo4Mjg6XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9ESVNBQkxFRCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTgyOS1cXHRcXHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcXFwic3BlY3RyYWwgc2NhbjogZGlzYWJsZWRcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jPTEwNDQ9c3RhdGljIGNvbnN0IHN0cnVjdCByY2hhbl9jYWxsYmFja3MgcmZzX3NwZWNfc2Nhbl9jYiA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYy0xMDUyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzoxMDUzOnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTEwNTQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTEwNTktfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYzoxMDYwOkVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1Zyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTEwNjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjEwNjI6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jLTEwNjMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVidWdmc19waHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMtMTA5Mi19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jOjEwOTM6RVhQT1JUX1NZTUJPTChhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1Zyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTY2PXN0YXRpYyBpbmxpbmUgdTggc3BlY3RyYWxfYml0bWFwX3dlaWdodCh1OCAqYmlucylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xNzEtI2lmZGVmIENPTkZJR19BVEg5S19DT01NT05fU1BFQ1RSQUxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTcyOnZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oOjE3Mzp2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9kZWluaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxNzU6dm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE3Ni1cXHRcXHRcXHRcXHQgc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTc3OmludCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTc4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg9MTgwPWludCBhdGhfY21uX3Byb2Nlc3NfZmZ0KHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODItI2Vsc2VcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTgzOnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE4NC1cXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVidWdmc19waHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmgtMTg3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaDoxODg6c3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9kZWluaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuaC0xODkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE5MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmg6MTkyOnN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5oLTE5My1cXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYz0xMzcyPXZvaWQgYXRoOWtfZGVpbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jLTEzNzMte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jOjEzNzQ6XFx0YXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhcXHUwMDI2c2MtXFx1MDAzZXNwZWNfcHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMtMTM3NS19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYz0xMzc3PWludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMtMTM5MS1cXHRhdGg5a190eDk5X2luaXRfZGVidWcoc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jOjEzOTI6XFx0YXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoXFx1MDAyNnNjLVxcdTAwM2VzcGVjX3ByaXYsIHNjLVxcdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMtMTM5My1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM9NDc3PXZvaWQgYXRoOWtfaHRjX2RlaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYy00Nzgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmM6NDc5OlxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9kZWluaXRfZGVidWcoXFx1MDAyNnByaXYtXFx1MDAzZXNwZWNfcHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYy00ODAtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYz00ODI9aW50IGF0aDlrX2h0Y19pbml0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYy00ODktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYzo0OTA6XFx0YXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoXFx1MDAyNnByaXYtXFx1MDAzZXNwZWNfcHJpdiwgcHJpdi1cXHUwMDNlZGVidWcuZGVidWdmc19waHkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmMtNDkxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jPTI0MD1zdGF0aWMgaW50IGF0aDlrX2h0Y19zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMtMzE2LVxcdFxcdCAgICAgcHJpdi1cXHUwMDNlc3BlY19wcml2LnNwZWN0cmFsX21vZGUgPT0gU1BFQ1RSQUxfQ0hBTlNDQU4pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jOjMxNzpcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGNvbW1vbiwgXFx1MDAyNnByaXYtXFx1MDAzZXNwZWNfcHJpdik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jLTMxOC1lcnI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjAxLjM5MDAxNTAxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjY0Mjg0NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBhdGg5a19odGMgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gYXRoOWtfaHRjIGlzIGEgVVNCIGRldmljZSBkcml2ZXIg4oCTIHRoYXQncyB0aGUga2V5LiBBbmQgaWYgaXQncyBVU0IsIHRoZW4gaXQncyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGVtdWxhdGlvbiB0aHJvdWdoIFVTQiBSYXcgR2FkZ2V0IGFuZCBzdWJzZXF1ZW50IGZ1enppbmcgd2l0aCB0b29scyBsaWtlIHN5emthbGxlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgc3l6a2FsbGVyIGNhbiBldmVuICp0YXJnZXQqIHRoaXMgZHJpdmVyLiBHb29kIG5ld3Mg4oCTIGl0IGNhbiEgVGhlIFVTQiBJRHMgYXJlIHByZXNlbnQsIG1lYW5pbmcgc3l6a2FsbGVyIGNhbiBwcm9iZSBmb3IgYXRoOWtfaHRjIGRldmljZXMuXG5cbk5vdywgbGV0J3MgZGlnIGRlZXBlci4gV2hlcmUgYXJlIHRoZSBqdWljeSB0YXJnZXRzPyBXZSBuZWVkIHRvIGxvb2sgZm9yIGludGVyZXN0aW5nIGVudHJ5IHBvaW50cywgcGVyaGFwcyB0aHJvdWdoIGRlYnVnZnMgYWNjZXNzIG9yIHNvbWUgb3RoZXIgcHJpdmlsZWdlZCBpbnRlcmFjdGlvbi4gTGV0J3Mgc2VlIGhvdyBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCBpcyBhY3R1YWxseSByZWFjaGVkLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIGl0cyBkZWZpbml0aW9uLCBzbyBJJ2xsIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGV4YW1pbmUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY2AgYXJvdW5kIGxpbmUgODA1LiBUaW1lIHRvIHNlZSB3aGF0J3Mgd2hhdCBhbmQgaWRlbnRpZnkgdGhlIGF0dGFjayBzdXJmYWNlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTE0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjA1LjA1NDMwMTY1M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc5MDpcXHRzdGF0aWMgc3NpemVfdCB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXFxuIDc5MTpcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsXFxuIDc5MjpcXHRcXHRcXHRcXHRcXHRcXHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gNzkzOlxcdHtcXG4gNzk0OlxcdFxcdHN0cnVjdCBhdGhfc3BlY19zY2FuX3ByaXYgKnNwZWNfcHJpdiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gNzk1OlxcdFxcdHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc3BlY19wcml2LVxcdTAwM2VhaCk7XFxuIDc5NjpcXHRcXHRjaGFyIGJ1ZlszMl07XFxuIDc5NzpcXHRcXHRzc2l6ZV90IGxlbjtcXG4gNzk4OlxcdFxcbiA3OTk6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FUSDlLX1RYOTkpKVxcbiA4MDA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA4MDE6XFx0XFxuIDgwMjpcXHRcXHRsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7XFxuIDgwMzpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSlcXG4gODA0OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA4MDU6XFx0XFxuIDgwNjpcXHRcXHRidWZbbGVuXSA9ICdcXFxcMCc7XFxuIDgwNzpcXHRcXG4gODA4OlxcdFxcdC8qIEV2ZXJ5IGNvbW1hbmQgYmVsb3cgZHJpdmVzIFBIWSByZWdpc3RlciB3cml0ZXMuIFJlZnVzZSB0aGVtIHdoaWxlXFxuIDgwOTpcXHRcXHQgKiB0aGUgaGFyZHdhcmUgaXMgZGlzYWJsZWQgKHRoZSBpbnRlcmZhY2UgaXMgZG93bik6IG9uIHRoZSBBUjkyNzFcXG4gODEwOlxcdFxcdCAqIHRoYXQgdHJhZmZpYyBoYW5ncyB0aGUgZmlybXdhcmUgdW50aWwgdGhlIGRldmljZSBpcyByZS1lbnVtZXJhdGVkLlxcbiA4MTE6XFx0XFx0ICogVGhlIHJlc2V0IGNvbnRyb2wgcmVmdXNlcyBvbiB0aGUgc2FtZSBmbGFnLlxcbiA4MTI6XFx0XFx0ICovXFxuIDgxMzpcXHRcXHRpZiAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFxcdTAwMjZjb21tb24tXFx1MDAzZW9wX2ZsYWdzKSlcXG4gODE0OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDgxNTpcXHRcXG4gODE2OlxcdFxcdGlmIChzdHJuY21wKFxcXCJ0cmlnZ2VyXFxcIiwgYnVmLCA3KSA9PSAwKSB7XFxuIDgxNzpcXHRcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyKGNvbW1vbiwgc3BlY19wcml2KTtcXG4gODE4OlxcdFxcdH0gZWxzZSBpZiAoc3RybmNtcChcXFwiYmFja2dyb3VuZFxcXCIsIGJ1ZiwgMTApID09IDApIHtcXG4gODE5OlxcdFxcdFxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfQkFDS0dST1VORCk7XFxuIDgyMDpcXHRcXHRcXHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcXFwic3BlY3RyYWwgc2NhbjogYmFja2dyb3VuZCBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcbiA4MjE6XFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKFxcXCJjaGFuc2NhblxcXCIsIGJ1ZiwgOCkgPT0gMCkge1xcbiA4MjI6XFx0XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9DSEFOU0NBTik7XFxuIDgyMzpcXHRcXHRcXHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcXFwic3BlY3RyYWwgc2NhbjogY2hhbm5lbCBzY2FuIG1vZGUgZW5hYmxlZFxcXFxuXFxcIik7XFxuIDgyNDpcXHRcXHR9IGVsc2UgaWYgKHN0cm5jbXAoXFxcIm1hbnVhbFxcXCIsIGJ1ZiwgNikgPT0gMCkge1xcbiA4MjU6XFx0XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9NQU5VQUwpO1xcbiA4MjY6XFx0XFx0XFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXFxcInNwZWN0cmFsIHNjYW46IG1hbnVhbCBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcbiA4Mjc6XFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKFxcXCJkaXNhYmxlXFxcIiwgYnVmLCA3KSA9PSAwKSB7XFxuIDgyODpcXHRcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoY29tbW9uLCBzcGVjX3ByaXYsIFNQRUNUUkFMX0RJU0FCTEVEKTtcXG4gODI5OlxcdFxcdFxcdGF0aF9kYmcoY29tbW9uLCBDT05GSUcsIFxcXCJzcGVjdHJhbCBzY2FuOiBkaXNhYmxlZFxcXFxuXFxcIik7XFxuIDgzMDpcXHRcXHR9IGVsc2Uge1xcbiA4MzE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDgzMjpcXHRcXHR9XFxuIDgzMzpcXHRcXG4gODM0OlxcdFxcdHJldHVybiBjb3VudDtcXG4gODM1OlxcdH1cXG4gODM2OlxcdFxcbiA4Mzc6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19zcGVjX3NjYW5fY3RsID0ge1xcbiA4Mzg6XFx0XFx0LnJlYWQgPSByZWFkX2ZpbGVfc3BlY19zY2FuX2N0bCxcXG4gODM5OlxcdFxcdC53cml0ZSA9IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCxcXG4gODQwOlxcdFxcdC5vcGVuID0gc2ltcGxlX29wZW4sXFxuIDg0MTpcXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4gODQyOlxcdFxcdC5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlayxcXG4gODQzOlxcdH07XFxuIDg0NDpcXHRcXG4gODQ1OlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiA4NDY6XFx0Lyogc3BlY3RyYWxfc2hvcnRfcmVwZWF0ICovXFxuIDg0NzpcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4gODQ4OlxcdFxcbiA4NDk6XFx0c3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3NwZWN0cmFsX3Nob3J0X3JlcGVhdChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDQ6MDUuMDU0NDI4NTMzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMzk5NjQwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIERlYnVnZnMgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYC4gVGhpcyBpcyBhIGRlYnVnZnMgZmlsZSB3cml0ZSBjYWxsYmFjaywgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBjb25uZWN0ZWQuIEZpcnN0LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIHJlZ2lzdGVyZWQuIExldCdzIHNlZS4uLiBBaGEhIGBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1Z2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIGBzcGVjdHJhbF9zY2FuX2N0bGAgZGVidWdmcyBmaWxlLiBUaGlzIGlzIGdvb2QgaW5mb3JtYXRpb24uIE5vdywgSSBuZWVkIHRvIGdvIGRlZXBlciBpbnRvIGBhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1Z2AgdG8gc2VlIGV4YWN0bHkgaG93IHRoaXMgZmlsZSBhbmQgaXRzIGNhbGxiYWNrIGFyZSBwbHVtYmVkIGludG8gdGhlIGRlYnVnZnMgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgIGlzIGFjdHVhbGx5IGRvaW5nIGluIHRoZSBncmVhdGVyIHNjaGVtZSBvZiB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjE5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0NDowNy4zOTQzOTQ5NzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDYwOlxcdEVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1Zyk7XFxuMTA2MTpcXHRcXG4xMDYyOlxcdHZvaWQgYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2LFxcbjEwNjM6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVidWdmc19waHkpXFxuMTA2NDpcXHR7XFxuMTA2NTpcXHRcXHRzcGVjX3ByaXYtXFx1MDAzZXJmc19jaGFuX3NwZWNfc2NhbiA9IHJlbGF5X29wZW4oXFxcInNwZWN0cmFsX3NjYW5cXFwiLFxcbjEwNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRlYnVnZnNfcGh5LFxcbjEwNjc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIDEwMjQsIDI1NiwgXFx1MDAyNnJmc19zcGVjX3NjYW5fY2IsXFxuMTA2ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgTlVMTCk7XFxuMTA2OTpcXHRcXHRpZiAoIXNwZWNfcHJpdi1cXHUwMDNlcmZzX2NoYW5fc3BlY19zY2FuKVxcbjEwNzA6XFx0XFx0XFx0cmV0dXJuO1xcbjEwNzE6XFx0XFxuMTA3MjpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzcGVjdHJhbF9zY2FuX2N0bFxcXCIsXFxuMTA3MzpcXHRcXHRcXHRcXHQgICAgMDYwMCxcXG4xMDc0OlxcdFxcdFxcdFxcdCAgICBkZWJ1Z2ZzX3BoeSwgc3BlY19wcml2LFxcbjEwNzU6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZmb3BzX3NwZWNfc2Nhbl9jdGwpO1xcbjEwNzY6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic3BlY3RyYWxfc2hvcnRfcmVwZWF0XFxcIixcXG4xMDc3OlxcdFxcdFxcdFxcdCAgICAwNjAwLFxcbjEwNzg6XFx0XFx0XFx0XFx0ICAgIGRlYnVnZnNfcGh5LCBzcGVjX3ByaXYsXFxuMTA3OTpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZvcHNfc3BlY3RyYWxfc2hvcnRfcmVwZWF0KTtcXG4xMDgwOlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNwZWN0cmFsX2NvdW50XFxcIixcXG4xMDgxOlxcdFxcdFxcdFxcdCAgICAwNjAwLFxcbjEwODI6XFx0XFx0XFx0XFx0ICAgIGRlYnVnZnNfcGh5LCBzcGVjX3ByaXYsXFxuMTA4MzpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZvcHNfc3BlY3RyYWxfY291bnQpO1xcbjEwODQ6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic3BlY3RyYWxfcGVyaW9kXFxcIixcXG4xMDg1OlxcdFxcdFxcdFxcdCAgICAwNjAwLFxcbjEwODY6XFx0XFx0XFx0XFx0ICAgIGRlYnVnZnNfcGh5LCBzcGVjX3ByaXYsXFxuMTA4NzpcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZvcHNfc3BlY3RyYWxfcGVyaW9kKTtcXG4xMDg4OlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNwZWN0cmFsX2ZmdF9wZXJpb2RcXFwiLFxcbjEwODk6XFx0XFx0XFx0XFx0ICAgIDA2MDAsXFxuMTA5MDpcXHRcXHRcXHRcXHQgICAgZGVidWdmc19waHksIHNwZWNfcHJpdixcXG4xMDkxOlxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Zm9wc19zcGVjdHJhbF9mZnRfcGVyaW9kKTtcXG4xMDkyOlxcdH1cXG4xMDkzOlxcdEVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX2luaXRfZGVidWcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0NDowNy4zOTQ1ODIwNzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzNzM3NzkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDlrX2h0Y2AgZHJpdmVyIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggaXRzIGRlYnVnZnMgaW50ZWdyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkZWJ1Z2dpbmcgaW50ZXJmYWNlcyBhcmUgc2V0IHVwIGFuZCBob3cgYWNjZXNzaWJsZSB0aGV5IHJlYWxseSBhcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZyb20gdGhlIHBvaW50IHdoZXJlIGEgVVNCIGRldmljZSBpcyBwcm9iZWQuXG5cblNvLCB3aGVuIGBhdGg5a19odGNgIGRldGVjdHMgYW5kIHByb2JlcyBhIFVTQiBkZXZpY2UsIGBhdGg5a19odGNfaW5pdF9kZWJ1Z2Agc2hvdWxkIGJlIHRoZSBrZXkgZnVuY3Rpb24gdG8gaW5zcGVjdC4gSXQncyB0aW1lIHRvIG5hdmlnYXRlIHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jYCB0byBleGFtaW5lIHRoZSBpbnRlcm5hbCBsb2dpYyBvZiBgYXRoOWtfaHRjX2luaXRfZGVidWdgLiBMZXQncyBzZWUgaG93IHRoYXQgcm91dGluZSBhY3R1YWxseSByZWdpc3RlcnMgdGhlc2UgZGVidWdmcyBlbnRyaWVzIGFuZCwgY3J1Y2lhbGx5LCB2ZXJpZnkgdGhhdCB0aGV5IGFyZSByZWFjaGFibGUgZnJvbSBhIHVzZXIgcGVyc3BlY3RpdmUuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGluZm9ybWF0aW9uIHRoYXQncyBzdXBwb3NlZCB0byBiZSBleHBvc2VkIGlzIGFjdHVhbGx5IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUyOCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDQ6MDkuNTMxOTYzNzQ5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2RlYnVnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDcwOlxcdFxcdGRhdGFbaSsrXSA9IFNSWEJBU0UucGh5X2Vycl9zdGF0c1tBVEg5S19QSFlFUlJfUkFEQVJdO1xcbiA0NzE6XFx0XFx0ZGF0YVtpKytdID0gU1JYQkFTRS5waHlfZXJyX3N0YXRzW0FUSDlLX1BIWUVSUl9PRkRNX1RJTUlOR107XFxuIDQ3MjpcXHRcXHRkYXRhW2krK10gPSBTUlhCQVNFLnBoeV9lcnJfc3RhdHNbQVRIOUtfUEhZRVJSX0NDS19USU1JTkddO1xcbiA0NzM6XFx0XFxuIDQ3NDpcXHRcXHRXQVJOX09OKGkgIT0gQVRIOUtfSFRDX1NTVEFUU19MRU4pO1xcbiA0NzU6XFx0fVxcbiA0NzY6XFx0XFxuIDQ3NzpcXHR2b2lkIGF0aDlrX2h0Y19kZWluaXRfZGVidWcoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KVxcbiA0Nzg6XFx0e1xcbiA0Nzk6XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX2RlaW5pdF9kZWJ1ZyhcXHUwMDI2cHJpdi1cXHUwMDNlc3BlY19wcml2KTtcXG4gNDgwOlxcdH1cXG4gNDgxOlxcdFxcbiA0ODI6XFx0aW50IGF0aDlrX2h0Y19pbml0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKVxcbiA0ODM6XFx0e1xcbiA0ODQ6XFx0XFx0c3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7XFxuIDQ4NTpcXHRcXHRzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBjb21tb24tXFx1MDAzZXByaXY7XFxuIDQ4NjpcXHRcXG4gNDg3OlxcdFxcdHByaXYtXFx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5ID0gZGVidWdmc19jcmVhdGVfZGlyKEtCVUlMRF9NT0ROQU1FLFxcbiA0ODg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZWRlYnVnZnNkaXIpO1xcbiA0ODk6XFx0XFxuIDQ5MDpcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1ZyhcXHUwMDI2cHJpdi1cXHUwMDNlc3BlY19wcml2LCBwcml2LVxcdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSk7XFxuIDQ5MTpcXHRcXG4gNDkyOlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInRndF9pbnRfc3RhdHNcXFwiLCAwNDAwLCBwcml2LVxcdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSxcXG4gNDkzOlxcdFxcdFxcdFxcdCAgICBwcml2LCBcXHUwMDI2Zm9wc190Z3RfaW50X3N0YXRzKTtcXG4gNDk0OlxcdFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInRndF90eF9zdGF0c1xcXCIsIDA0MDAsIHByaXYtXFx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5LFxcbiA0OTU6XFx0XFx0XFx0XFx0ICAgIHByaXYsIFxcdTAwMjZmb3BzX3RndF90eF9zdGF0cyk7XFxuIDQ5NjpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJ0Z3Rfcnhfc3RhdHNcXFwiLCAwNDAwLCBwcml2LVxcdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSxcXG4gNDk3OlxcdFxcdFxcdFxcdCAgICBwcml2LCBcXHUwMDI2Zm9wc190Z3Rfcnhfc3RhdHMpO1xcbiA0OTg6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwieG1pdFxcXCIsIDA0MDAsIHByaXYtXFx1MDAzZWRlYnVnLmRlYnVnZnNfcGh5LFxcbiA0OTk6XFx0XFx0XFx0XFx0ICAgIHByaXYsIFxcdTAwMjZmb3BzX3htaXQpO1xcbiA1MDA6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic2tiX3J4XFxcIiwgMDQwMCwgcHJpdi1cXHUwMDNlZGVidWcuZGVidWdmc19waHksXFxuIDUwMTpcXHRcXHRcXHRcXHQgICAgcHJpdiwgXFx1MDAyNmZvcHNfc2tiX3J4KTtcXG4gNTAyOlxcdFxcbiA1MDM6XFx0XFx0YXRoOWtfY21uX2RlYnVnX3JlY3YocHJpdi1cXHUwMDNlZGVidWcuZGVidWdmc19waHksIFxcdTAwMjZwcml2LVxcdTAwM2VkZWJ1Zy5yeF9zdGF0cyk7XFxuIDUwNDpcXHRcXHRhdGg5a19jbW5fZGVidWdfcGh5X2Vycihwcml2LVxcdTAwM2VkZWJ1Zy5kZWJ1Z2ZzX3BoeSwgXFx1MDAyNnByaXYtXFx1MDAzZWRlYnVnLnJ4X3N0YXRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDQ6MDkuNTMyMDQ1ODA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTE5MjQ5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBhdGg5a19odGMgYW5kIFVTQiBHYWRnZXQgUHJvYmluZyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdGltaW5nIG9mIHRoZSBgYXRoOWtfaHRjYCBkcml2ZXIncyByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoZW4gdGhlc2UgZXZlbnRzIG9jY3VyIGluIHJlbGF0aW9uIHRvIFVTQiBnYWRnZXQgbW9kZS4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBwcm9iZSBgYXRoOWtfaHRjYCBlZmZlY3RpdmVseSB1c2luZyBhIFVTQiBnYWRnZXQgc2V0dXAgd2l0aGluIHRoZSBgc3l6a2FsbGVyYCBlbnZpcm9ubWVudC4gVGhhdCB3aWxsIGxldCB1cyB0ZXN0IHRoZSBkcml2ZXIgaW4gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLiBUbyBnZXQgc3RhcnRlZCwgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmNgLiBUaGlzIGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIFVTQi1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoYXQgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIFVTQiBpbnRlcmZhY2UgYW5kLCBob3BlZnVsbHksIGhvdyB3ZSBjYW4gbWFuaXB1bGF0ZSBpdCBmb3Igb3VyIHByb2JpbmcgbmVlZHMuIEZyb20gdGhlcmUsIEknbGwgc3RhcnQgYnVpbGRpbmcgYSB0ZXN0IHRvIGNoZWNrIGl0IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjEyLjAyMzk3NDExN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NzMyNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1PRFVMRV9ERVZJQ0VfVEFCTEVcXFxcKHVzYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYz0yMz1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXRoOWtfaGlmX3VzYl9pZHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMtNjYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYzo2NzpNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYXRoOWtfaGlmX3VzYl9pZHMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMtNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjEyLjQ4MzcxNDQxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjgwODcxMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYXRoOWtfaHRjIFVTQiBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gYGF0aDlrX2h0Y2AgaXMgYSBVU0IgZHJpdmVyLCBtYWtpbmcgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nIHZpYSBVU0IgcmF3IGdhZGdldCBhbmQgc3l6a2FsbGVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSByZWNlbnQgcGF0Y2hlcywgYW5kIHRoaXMgb25lIGNhdWdodCBteSBleWUuIExldCdzIHNlZS4uLiBpdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBhZGRzIGEgY2hlY2sgd2l0aGluIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgLiBJdCdzIHJlZnVzaW5nIHdyaXRlIGNvbW1hbmRzIHdoaWxlIHRoZSBoYXJkd2FyZSBpcyBkaXNhYmxlZCwgc3BlY2lmaWNhbGx5IHRvIGF2b2lkIGZpcm13YXJlIGhhbmdzIG9uIHRoZSBBUjkyNzEuIFJpZ2h0LCBzdGFuZGFyZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuXG5cbkhvbGQgb24gYSBzZWNvbmQsIGlzIGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgIHN0YXRpYz8gWWVzLCBpdCBpczogYHN0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCguLi4pYC4gT2theSwgdGhhdCdzIGNydWNpYWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZXZlbiBhIHVzZWZ1bCB0YXJnZXQgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbWl0YXRpb25zIHJlZ2FyZGluZyBzeW1ib2wgdmlzaWJpbGl0eS5cblxuTGV0IG1lIHJlZnJlc2guLi4gVGhpcyBmdW5jdGlvbiByZXNpZGVzIGluIGBjb21tb24tc3BlY3RyYWwuY2AuIExldCdzIGVudW1lcmF0ZSB0aGUgZnVuY3Rpb25zIGluIHRoYXQgZmlsZTogYHJlYWRfZmlsZV9zcGVjX3NjYW5fY3RsYCwgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAsIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyYCwgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ2AsIGV0Yy4gT2theS5cblxuTm93LCB0aGlzIGlzIHdoZXJlIHRoZSBndWlkZWxpbmVzIGNvbWUgaW4gaGFuZHkuIFJ1bGUgbnVtYmVyIDQgc2F5cyB0aGF0IHN0YXRpYyBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgY2FuIHN0aWxsIGhhdmUgc3ltYm9scyBpZiB0aGV5IGFyZSBub3Qgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycy4gU28sIHRoYXQgbWVhbnMgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAgKmNvdWxkKiBiZSBhIHZpYWJsZSB0YXJnZXQgZGVzcGl0ZSBiZWluZyBzdGF0aWMsIGVzcGVjaWFsbHkgYXMgaXQgbG9va3MgbGlrZSBpdCBpcyBub3QgYW4gaW5saW5lIGZ1bmN0aW9uIGluIGEgaGVhZGVyLiBQbHVzLCB0aGVyZSBhcmUgYWxzbyB0aGUgbm9uLXN0YXRpYyBleHBvcnRlZCBmdW5jdGlvbnMgbGlrZSBgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcmAgYW5kIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWdgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBpbnRlcmVzdGluZy5cblxuVGhlcmVmb3JlLCBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCBhbmQgYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ2Agc2VlbSBsaWtlIGdvb2QgZm9jdXMgc3ltYm9scyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBMZXQncyB0cmFjZSB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBBVEg5S19DT01NT05fU1BFQ1RSQUxgIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDg0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjE5LjE2NDU4ODc1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xcbiAgIDI6XFx0Y29uZmlnIEFUSDlLX0hXXFxuICAgMzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDQ6XFx0Y29uZmlnIEFUSDlLX0NPTU1PTlxcbiAgIDU6XFx0XFx0dHJpc3RhdGVcXG4gICA2OlxcdFxcdHNlbGVjdCBBVEhfQ09NTU9OXFxuICAgNzpcXHRjb25maWcgQVRIOUtfQ09NTU9OX0RFQlVHXFxuICAgODpcXHRcXHRib29sXFxuICAgOTpcXHRjb25maWcgQVRIOUtfREZTX0RFQlVHRlNcXG4gIDEwOlxcdFxcdGRlZl9ib29sIHlcXG4gIDExOlxcdFxcdGRlcGVuZHMgb24gQVRIOUtfREVCVUdGUyBcXHUwMDI2XFx1MDAyNiBBVEg5S19ERlNfQ0VSVElGSUVEXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBBVEg5S19CVENPRVhfU1VQUE9SVFxcbiAgMTQ6XFx0XFx0Ym9vbCBcXFwiQXRoZXJvcyBibHVldG9vdGggY29leGlzdGVuY2Ugc3VwcG9ydFxcXCJcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gKEFUSDlLIHx8IEFUSDlLX0hUQylcXG4gIDE2OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTYXkgWSwgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBhdGg5ay9hdGg5a19odGMgcmFkaW9zIHRvZ2V0aGVyIHdpdGhcXG4gIDE5OlxcdFxcdCAgQmx1ZXRvb3RoIG1vZHVsZXMgaW4gdGhlIHNhbWUgc3lzdGVtLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgQVRIOUtcXG4gIDIyOlxcdFxcdHRyaXN0YXRlIFxcXCJBdGhlcm9zIDgwMi4xMW4gd2lyZWxlc3MgY2FyZHMgc3VwcG9ydFxcXCJcXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAgMjQ6XFx0XFx0c2VsZWN0IE1BQzgwMjExX0xFRFMgaWYgTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcXG4gIDI1OlxcdFxcdHNlbGVjdCBBVEg5S19IV1xcbiAgMjY6XFx0XFx0c2VsZWN0IEFUSDlLX0NPTU1PTlxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uXFxuICAyOTpcXHRcXHQgIEF0aGVyb3MgSUVFRSA4MDIuMTFuIEFSNTAwOCwgQVI5MDAxIGFuZCBBUjkwMDIgZmFtaWx5XFxuICAzMDpcXHRcXHQgIG9mIGNoaXBzZXRzLiBGb3IgYSBzcGVjaWZpYyBsaXN0IG9mIHN1cHBvcnRlZCBleHRlcm5hbFxcbiAgMzE6XFx0XFx0ICBjYXJkcywgbGFwdG9wcyB0aGF0IGFscmVhZHkgc2hpcCB3aXRoIHRoZXNlIGNhcmRzIGFuZFxcbiAgMzI6XFx0XFx0ICBBUHMgdGhhdCBjb21lIHdpdGggdGhlc2UgY2FyZHMgcmVmZXIgdG8gYXRoOWsgd2lraVxcbiAgMzM6XFx0XFx0ICBwcm9kdWN0cyBwYWdlOlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRcXHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXRoOWsvcHJvZHVjdHNcXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgYXRoOWsuXFxuICAzODpcXHRcXG4gIDM5OlxcdGNvbmZpZyBBVEg5S19QQ0lcXG4gIDQwOlxcdFxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWsgUENJL1BDSWUgYnVzIHN1cHBvcnRcXFwiXFxuICA0MTpcXHRcXHRkZWZhdWx0IHlcXG4gIDQyOlxcdFxcdGRlcGVuZHMgb24gQVRIOUsgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBDSSBidXMgc3VwcG9ydCBpbiBhdGg5ay5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0ICBTYXkgWSwgaWYgeW91IGhhdmUgYSBjb21wYXRpYmxlIFBDSS9QQ0llIHdpcmVsZXNzIGNhcmQuXFxuICA0NzpcXHRcXG4gIDQ4OlxcdGNvbmZpZyBBVEg5S19BSEJcXG4gIDQ5OlxcdFxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWsgQUhCIGJ1cyBzdXBwb3J0XFxcIlxcbiAgNTA6XFx0XFx0ZGVwZW5kcyBvbiBBVEg5SyBcXHUwMDI2XFx1MDAyNiBPRlxcbiAgNTE6XFx0XFx0ZGVmYXVsdCBuXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEFIQiBidXMgc3VwcG9ydCBpbiBhdGg5ay5cXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0ICBTYXkgWSwgaWYgeW91IGhhdmUgYSBTb0Mgd2l0aCBhIGNvbXBhdGlibGUgYnVpbHQtaW5cXG4gIDU2OlxcdFxcdCAgd2lyZWxlc3MgTUFDLiBTYXkgTiBpZiB1bnN1cmUuXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBBVEg5S19ERUJVR0ZTXFxuICA1OTpcXHRcXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrIGRlYnVnZ2luZ1xcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gQVRIOUsgXFx1MDAyNlxcdTAwMjYgREVCVUdfRlMgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTFfREVCVUdGU1xcbiAgNjE6XFx0XFx0c2VsZWN0IEFUSDlLX0NPTU1PTl9ERUJVR1xcbiAgNjI6XFx0XFx0aGVscFxcbiAgNjM6XFx0XFx0ICBTYXkgWSwgaWYgeW91IG5lZWQgYWNjZXNzIHRvIGF0aDlrJ3Mgc3RhdGlzdGljcyBmb3JcXG4gIDY0OlxcdFxcdCAgaW50ZXJydXB0cywgcmF0ZSBjb250cm9sLCBldGMuXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgQWxzbyByZXF1aXJlZCBmb3IgY2hhbmdpbmcgZGVidWcgbWVzc2FnZSBmbGFncyBhdCBydW4gdGltZSBhbmQgZm9yXFxuICA2NzpcXHRcXHQgIFRYOTkuXFxuICA2ODpcXHRcXG4gIDY5OlxcdGNvbmZpZyBBVEg5S19TVEFUSU9OX1NUQVRJU1RJQ1NcXG4gIDcwOlxcdFxcdGJvb2wgXFxcIkRldGFpbGVkIHN0YXRpb24gc3RhdGlzdGljc1xcXCJcXG4gIDcxOlxcdFxcdGRlcGVuZHMgb24gQVRIOUsgXFx1MDAyNlxcdTAwMjYgQVRIOUtfREVCVUdGUyBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbiAgNzI6XFx0XFx0ZGVmYXVsdCBuXFxuICA3MzpcXHRcXHRoZWxwXFxuICA3NDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZGV0YWlsZWQgc3RhdGlzdGljcyBmb3IgYXNzb2NpYXRpb24gc3RhdGlvbnMuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBBVEg5S19UWDk5XFxuICA3NzpcXHRcXHRib29sIFxcXCJBdGhlcm9zIGF0aDlrIFRYOTkgdGVzdGluZyBzdXBwb3J0XFxcIlxcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIFxcdTAwMjZcXHUwMDI2IENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbiAgNzk6XFx0XFx0ZGVmYXVsdCBuXFxuICA4MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjE5LjE2NDY3NDgyM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDk2NTExMzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIGF0aDlrIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc2VlLi4uIHRoZSB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBgYXRoOWtgIHdpcmVsZXNzIGRyaXZlciBjb25maWd1cmF0aW9uLiBSaWdodCwgdGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBhdCB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGxpbmVzIDE3MCB0aHJvdWdoIDIyMC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBvciBwZXJoYXBzIGRlcGVuZGVuY2llcyBhcmUgc2V0LiBIb3BlZnVsbHksIGl0J3Mgbm90aGluZyB0b28gb2JzY3VyZTsgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBJIGNhbiBoYW5kbGUgbW9zdCBvZiB3aGF0J3MgaW4gdGhlcmUsIGV2ZW4gaWYgaXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB0aG9zZSBsaW5lcyBob2xkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ3OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDQ6MjEuNjYxMTg4MzQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXHQgIElmIHVuc3VyZSBzYXkgTi5cXG4gMTcxOlxcdFxcbiAxNzI6XFx0Y29uZmlnIEFUSDlLX0hUQ1xcbiAxNzM6XFx0XFx0dHJpc3RhdGUgXFxcIkF0aGVyb3MgSFRDIGJhc2VkIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnRcXFwiXFxuIDE3NDpcXHRcXHRkZXBlbmRzIG9uIFVTQiBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMVxcbiAxNzU6XFx0XFx0c2VsZWN0IE1BQzgwMjExX0xFRFMgaWYgTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcXG4gMTc2OlxcdFxcdHNlbGVjdCBBVEg5S19IV1xcbiAxNzc6XFx0XFx0c2VsZWN0IEFUSDlLX0NPTU1PTlxcbiAxNzg6XFx0XFx0aGVscFxcbiAxNzk6XFx0XFx0ICBTdXBwb3J0IGZvciBBdGhlcm9zIEhUQyBiYXNlZCBjYXJkcy5cXG4gMTgwOlxcdFxcdCAgQ2hpcHNldHMgc3VwcG9ydGVkOiBBUjkyNzFcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbjpcXG4gMTgzOlxcdFxcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9hdGg5a19odGNcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0ICBUaGUgYnVpbHQgbW9kdWxlIHdpbGwgYmUgYXRoOWtfaHRjLlxcbiAxODY6XFx0XFxuIDE4NzpcXHRjb25maWcgQVRIOUtfSFRDX0RFQlVHRlNcXG4gMTg4OlxcdFxcdGJvb2wgXFxcIkF0aGVyb3MgYXRoOWtfaHRjIGRlYnVnZ2luZ1xcXCJcXG4gMTg5OlxcdFxcdGRlcGVuZHMgb24gQVRIOUtfSFRDIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuIDE5MDpcXHRcXHRzZWxlY3QgQVRIOUtfQ09NTU9OX0RFQlVHXFxuIDE5MTpcXHRcXHRoZWxwXFxuIDE5MjpcXHRcXHQgIFNheSBZLCBpZiB5b3UgbmVlZCBhY2Nlc3MgdG8gYXRoOWtfaHRjJ3Mgc3RhdGlzdGljcy5cXG4gMTkzOlxcdFxcdCAgQXMgd2VsbCBhcyBhY2Nlc3MgdG8gdGhlIEZGVC9zcGVjdHJhbCBkYXRhLlxcbiAxOTQ6XFx0XFxuIDE5NTpcXHRjb25maWcgQVRIOUtfSFdSTkdcXG4gMTk2OlxcdFxcdGJvb2wgXFxcIlJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHN1cHBvcnRcXFwiXFxuIDE5NzpcXHRcXHRkZXBlbmRzIG9uIEFUSDlLIFxcdTAwMjZcXHUwMDI2IChIV19SQU5ET00gPSB5IHx8IEhXX1JBTkRPTSA9IEFUSDlLKVxcbiAxOTg6XFx0XFx0ZGVmYXVsdCBuXFxuIDE5OTpcXHRcXHRoZWxwXFxuIDIwMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGluY29ycG9yYXRlcyB0aGUgQURDIHJlZ2lzdGVyIG91dHB1dCBhcyBhIHNvdXJjZSBvZlxcbiAyMDE6XFx0XFx0ICByYW5kb21uZXNzIGludG8gTGludXggZW50cm9weSBwb29sICgvZGV2L3VyYW5kb20gYW5kIC9kZXYvcmFuZG9tKVxcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHQgIFNheSBZLCBmZWVkcyB0aGUgZW50cm9weSBkaXJlY3RseSBmcm9tIHRoZSBXaUZpIGRyaXZlciB0byB0aGUgaW5wdXRcXG4gMjA0OlxcdFxcdCAgcG9vbC5cXG4gMjA1OlxcdFxcbiAyMDY6XFx0Y29uZmlnIEFUSDlLX0NPTU1PTl9TUEVDVFJBTFxcbiAyMDc6XFx0XFx0Ym9vbCBcXFwiQXRoZXJvcyBhdGg5ay9hdGg5a19odGMgc3BlY3RyYWwgc2NhbiBzdXBwb3J0XFxcIlxcbiAyMDg6XFx0XFx0ZGVwZW5kcyBvbiBBVEg5S19ERUJVR0ZTIHx8IEFUSDlLX0hUQ19ERUJVR0ZTXFxuIDIwOTpcXHRcXHRzZWxlY3QgUkVMQVlcXG4gMjEwOlxcdFxcdGRlZmF1bHQgblxcbiAyMTE6XFx0XFx0aGVscFxcbiAyMTI6XFx0XFx0ICBTYXkgWSB0byBlbmFibGUgYWNjZXNzIHRvIHRoZSBGRlQvc3BlY3RyYWwgZGF0YSB2aWEgZGVidWdmcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6NDQ6MjEuNjYxMjU3NDU5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MzMyMTUzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBhdGg5a19odGNgIFNwZWN0cmFsIFNjYW4gRGVidWdmcyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBtb2RpZmllZCBjb2RlIGlzIGV2ZW4gYWNjZXNzaWJsZSB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgc3BlY2lmaWNhbGx5LCBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuIFRoZSBnb29kIG5ld3MgaXMsIHllcywgdGhlIGBhdGg5a19odGNgIGRyaXZlciwgYmVpbmcgVVNCLWJhc2VkIChhbmQgdXRpbGl6aW5nIHRoZSBBUjkyNzEgY2hpcHNldCksIGlzIGluZGVlZCByZWFjaGFibGUgYW5kIGVhc2lseSBlbXVsYXRlZCB2aWEgdGhlIFVTQiByYXcgZ2FkZ2V0IHdpdGhpbiB0aGF0IGNvbnRleHQuIFRoYXQncyBhIGNydWNpYWwgZmlyc3Qgc3RlcC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBzcGVjaWZpY3MuIFdoZW4gd2UgZW5hYmxlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMg4oCTIGBBVEg5S19IVENgLCBgQVRIOUtfSFRDX0RFQlVHRlNgLCBhbmQgYEFUSDlLX0NPTU1PTl9TUEVDVFJBTGAg4oCTIHRoZSBgYXRoOWtfaHRjYCBkcml2ZXIgZXhwb3NlcyB0aGUgYHNwZWN0cmFsX3NjYW5fY3RsYCBjb250cm9sIHdpdGhpbiBkZWJ1Z2ZzLCBhbmQgaXQncyBuZWF0bHkgdHVja2VkIGF3YXkgdW5kZXIgdGhlIHdpcGh5IGRlYnVnZnMgZGlyZWN0b3J5LiBXcml0aW5nIHRvIHRoaXMgY29udHJvbCB0cmlnZ2VycyB0aGUgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCgpYCBmdW5jdGlvbi5cblxuVGhlIHBhdGNoIGl0c2VsZiBpbnRyb2R1Y2VzIGEgY3J1Y2lhbCB2YWxpZGF0aW9uIHdpdGhpbiBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKClgOiBhIGNoZWNrIHVzaW5nIGB0ZXN0X2JpdChBVEhfT1BfSU5WQUxJRCwgXHUwMDI2Y29tbW9uLVx1MDAzZW9wX2ZsYWdzKWAuIFRoaXMgaXMgYSBkaXJlY3QsIGV4ZWN1dGFibGUgY29kZSBwYXRoIHRoYXQgYWx0ZXJzIGNvbnRyb2wgZmxvdyB3aGVuIHRoZSBkZXZpY2UgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlOlxuLSAgIGBBVEg5S19IVENgIChvciBgQVRIOUtgKVxuLSAgIGBBVEg5S19IVENfREVCVUdGU2AgKG9yIGBBVEg5S19ERUJVR0ZTYClcbi0gICBgQVRIOUtfQ09NTU9OX1NQRUNUUkFMYFxuXG5JIGFsc28gbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBpbXBvcnRhbnQgc3ltYm9scyBpbiB0aGUgY29kZTpcbi0gICBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYFxuLSAgIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyYFxuLSAgIGBhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWdgXG5cbkxldCdzIGRvdWJsZSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgc3ltYm9sczpcbi0gYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGBcbi0gYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ2Bcbi0gYGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXJgXG5cblRha2luZyBhIHN0ZXAgYmFjaywgdGhpcyBtZWFucyB0aGF0IHRoZSBwYXRjaCBhZGRzIGEgc2FmZXR5IGNoZWNrLiBTcGVjaWZpY2FsbHksIHRoZSBjaGVjayBgdGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFx1MDAyNmNvbW1vbi1cdTAwM2VvcF9mbGFncylgIGFkZGVkIHRvIHRoZSBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCB3aXRoaW4gZGVidWdmcyBoZWxwcyBwcmV2ZW50IHBvdGVudGlhbGx5IHVuc2FmZSBQSFkgcmVnaXN0ZXIgd3JpdGVzIHdoZW4gdGhlIGludGVyZmFjZSBpcyBkb3duLiAgVGhpcyBjb2RlIGlzIGNsZWFybHkgcmVhY2hhYmxlIHVzaW5nIHRoZSBVU0ItZW11bGF0ZWQgYGF0aDlrX2h0Y2AgZHJpdmVyLCBnaXZlbiB0aGF0IHRoZSBzcGVjdHJhbCBzY2FuIGFuZCBkZWJ1Z2ZzIGZlYXR1cmVzIGFyZSBlbmFibGVkLlxuXG5UaGVyZWZvcmUsIHRoaXMgaXMgc29tZXRoaW5nIEknbSBjYWxsaW5nIHdvcnRoIGZ1enppbmcuIEknbGwgbmVlZCB0byBlbmFibGUgdGhvc2UgY29uZmlndXJhdGlvbnM6IGBBVEg5S19DT01NT05fU1BFQ1RSQUxgLCBgQVRIOUtfSFRDYCwgYW5kIGBBVEg5S19IVENfREVCVUdGU2AuIE15IGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHk6IGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgLCBgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcmAsIGFuZCBgYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnYC4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDAzLCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjI3LjA5NDQ3NTg4MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMjc2Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVEg5S19DT01NT05fU1BFQ1RSQUxcIixcbiAgICBcIkFUSDlLX0hUQ1wiLFxuICAgIFwiQVRIOUtfSFRDX0RFQlVHRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxcIixcbiAgICBcImF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZ1wiLFxuICAgIFwiYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBmb3IgdGhlIEFUSF9PUF9JTlZBTElEIGZsYWcgaW4gd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKCkgd2l0aGluIHRoZSBhdGg5ayBzcGVjdHJhbCBzY2FuIGRlYnVnZnMgaW50ZXJmYWNlIHRvIHJlamVjdCBQSFkgcmVnaXN0ZXIgd3JpdGUgY29tbWFuZHMgd2hpbGUgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBpcyBkb3duLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIG9mIHRoZSBhdGg5a19odGMgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUSDlLX0NPTU1PTl9TUEVDVFJBTFwiLFxuICAgIFwiQVRIOUtfSFRDXCIsXG4gICAgXCJBVEg5S19IVENfREVCVUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIndyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bFwiLFxuICAgIFwiYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnXCIsXG4gICAgXCJhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl90cmlnZ2VyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciB0aGUgQVRIX09QX0lOVkFMSUQgZmxhZyBpbiB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB3aXRoaW4gdGhlIGF0aDlrIHNwZWN0cmFsIHNjYW4gZGVidWdmcyBpbnRlcmZhY2UgdG8gcmVqZWN0IFBIWSByZWdpc3RlciB3cml0ZSBjb21tYW5kcyB3aGlsZSB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRvd24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gb2YgdGhlIGF0aDlrX2h0YyBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjI3LjE3Njc1ODk0OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM3MDMxOTk4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjI3LjE3NzIyODEyOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjkzNjk4NDYxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzdGF0ZSBjaGVjayAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFxcdTAwMjZjb21tb24tXFx1MDAzZW9wX2ZsYWdzKSkgaW4gdGhlIGRlYnVnZnMgd3JpdGUgaGFuZGxlciB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB0byBwcmV2ZW50IHNwZWN0cmFsIHNjYW4gY29tbWFuZHMgZnJvbSBkcml2aW5nIFBIWSByZWdpc3RlciB3cml0ZXMgd2hlbiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRpc2FibGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjZkOTZiZDEwZGY3NzUzN2M5NDAzZWI4OTA1Njg5ZjAwM2ZlMTM2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMjE6NDM6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcbmluZGV4IGNhMDFhMDdmNjYzMGMuLjBiYmJlZjllM2I5YzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY1xuQEAgLTgwNSw2ICs4MDUsMTQgQEAgc3RhdGljIHNzaXplX3Qgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuIFxuIFx0YnVmW2xlbl0gPSAnXFwwJztcbiBcbitcdC8qIEV2ZXJ5IGNvbW1hbmQgYmVsb3cgZHJpdmVzIFBIWSByZWdpc3RlciB3cml0ZXMuIFJlZnVzZSB0aGVtIHdoaWxlXG4rXHQgKiB0aGUgaGFyZHdhcmUgaXMgZGlzYWJsZWQgKHRoZSBpbnRlcmZhY2UgaXMgZG93bik6IG9uIHRoZSBBUjkyNzFcbitcdCAqIHRoYXQgdHJhZmZpYyBoYW5ncyB0aGUgZmlybXdhcmUgdW50aWwgdGhlIGRldmljZSBpcyByZS1lbnVtZXJhdGVkLlxuK1x0ICogVGhlIHJlc2V0IGNvbnRyb2wgcmVmdXNlcyBvbiB0aGUgc2FtZSBmbGFnLlxuK1x0ICovXG4rXHRpZiAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFx1MDAyNmNvbW1vbi1cdTAwM2VvcF9mbGFncykpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4gXHRpZiAoc3RybmNtcChcInRyaWdnZXJcIiwgYnVmLCA3KSA9PSAwKSB7XG4gXHRcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX3RyaWdnZXIoY29tbW9uLCBzcGVjX3ByaXYpO1xuIFx0fSBlbHNlIGlmIChzdHJuY21wKFwiYmFja2dyb3VuZFwiLCBidWYsIDEwKSA9PSAwKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0NDoyNy4xNzcyMzA2MjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY0Mjc4ODczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBTcGVjdHJhbCBDb250cm9sKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoaXMgbmV3IHBhdGNoLiBTcGVjaWZpY2FsbHksIEkgc2VlIGl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBjaGVjayB3aXRoaW4gYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuY2AuIFRoZSBjaGVjayBpdHNlbGYsIGBpZiAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFx1MDAyNmNvbW1vbi1cdTAwM2VvcF9mbGFncykpIHJldHVybiAtRUJVU1k7YCwgbG9va3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBvbiB0aGUgc3VyZmFjZSDigJMgaXQncyBiYXNpY2FsbHkgcHJldmVudGluZyB0aGUgZnVuY3Rpb24gZnJvbSBydW5uaW5nIGlmIGEgc3BlY2lmaWMgb3BlcmF0aW9uYWwgZmxhZywgYEFUSF9PUF9JTlZBTElEYCwgaXMgc2V0LiBNeSBpbnR1aXRpb24gaXMgdGhhdCB0aGlzIGlzIGd1YXJkaW5nIGFnYWluc3Qgc29tZSBraW5kIG9mIHJhY2UgY29uZGl0aW9uIG9yIGNvbmZsaWN0LCBwcmV2ZW50aW5nIHNwZWN0cmFsIHNjYW4gY29udHJvbCBmcm9tIGhhcHBlbmluZyB3aGlsZSB0aGUgaGFyZHdhcmUgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS5cblxuVG8gcHJvcGVybHkgYXNzZXNzIHRoaXMsIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFyb3VuZCBsaW5lIDgwNSBvZiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jYC4gSSBuZWVkIHRoYXQgYnJvYWRlciBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBvZiBgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsYCB3aXRoIG90aGVyIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzLCBhbmQgdGhlIGV4YWN0IG1lYW5pbmcgb2YgYEFUSF9PUF9JTlZBTElEYCB3aXRoaW4gdGhpcyBkcml2ZXIgd2lsbCBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGNoJ3MgcHVycG9zZSBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZmxhZyBpcyBzZXQgYW5kIGNsZWFyZWQsIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgYHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bGAgaXMgYWN0dWFsbHkgY2FsbGVkLiBUaGlzIHdpbGwgbGV0IG1lIGZvcm0gYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIGl0cyBwb3RlbnRpYWwgcmFtaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwOSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjQ0OjMxLjgyMDAyMjg4N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc4MDpcXHRcXHRhdGhfcHNfb3BzKGNvbW1vbiktXFx1MDAzZXdha2V1cChjb21tb24pO1xcbiA3ODE6XFx0XFx0YXRoOWtfaHdfb3BzKGFoKS1cXHUwMDNlc3BlY3RyYWxfc2Nhbl9jb25maWcoYWgsIFxcdTAwMjZzcGVjX3ByaXYtXFx1MDAzZXNwZWNfY29uZmlnKTtcXG4gNzgyOlxcdFxcdGF0aF9wc19vcHMoY29tbW9uKS1cXHUwMDNlcmVzdG9yZShjb21tb24pO1xcbiA3ODM6XFx0XFxuIDc4NDpcXHRcXHRzcGVjX3ByaXYtXFx1MDAzZXNwZWN0cmFsX21vZGUgPSBzcGVjdHJhbF9tb2RlO1xcbiA3ODU6XFx0XFxuIDc4NjpcXHRcXHRyZXR1cm4gMDtcXG4gNzg3OlxcdH1cXG4gNzg4OlxcdEVYUE9SVF9TWU1CT0woYXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKTtcXG4gNzg5OlxcdFxcbiA3OTA6XFx0c3RhdGljIHNzaXplX3Qgd3JpdGVfZmlsZV9zcGVjX3NjYW5fY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbiA3OTE6XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbiA3OTI6XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIDc5MzpcXHR7XFxuIDc5NDpcXHRcXHRzdHJ1Y3QgYXRoX3NwZWNfc2Nhbl9wcml2ICpzcGVjX3ByaXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDc5NTpcXHRcXHRzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNwZWNfcHJpdi1cXHUwMDNlYWgpO1xcbiA3OTY6XFx0XFx0Y2hhciBidWZbMzJdO1xcbiA3OTc6XFx0XFx0c3NpemVfdCBsZW47XFxuIDc5ODpcXHRcXG4gNzk5OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19BVEg5S19UWDk5KSlcXG4gODAwOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0bGVuID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtIDEpO1xcbiA4MDM6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpXFxuIDgwNDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gODA1OlxcdFxcbiA4MDY6XFx0XFx0YnVmW2xlbl0gPSAnXFxcXDAnO1xcbiA4MDc6XFx0XFxuIDgwODpcXHRcXHQvKiBFdmVyeSBjb21tYW5kIGJlbG93IGRyaXZlcyBQSFkgcmVnaXN0ZXIgd3JpdGVzLiBSZWZ1c2UgdGhlbSB3aGlsZVxcbiA4MDk6XFx0XFx0ICogdGhlIGhhcmR3YXJlIGlzIGRpc2FibGVkICh0aGUgaW50ZXJmYWNlIGlzIGRvd24pOiBvbiB0aGUgQVI5MjcxXFxuIDgxMDpcXHRcXHQgKiB0aGF0IHRyYWZmaWMgaGFuZ3MgdGhlIGZpcm13YXJlIHVudGlsIHRoZSBkZXZpY2UgaXMgcmUtZW51bWVyYXRlZC5cXG4gODExOlxcdFxcdCAqIFRoZSByZXNldCBjb250cm9sIHJlZnVzZXMgb24gdGhlIHNhbWUgZmxhZy5cXG4gODEyOlxcdFxcdCAqL1xcbiA4MTM6XFx0XFx0aWYgKHRlc3RfYml0KEFUSF9PUF9JTlZBTElELCBcXHUwMDI2Y29tbW9uLVxcdTAwM2VvcF9mbGFncykpXFxuIDgxNDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA4MTU6XFx0XFxuIDgxNjpcXHRcXHRpZiAoc3RybmNtcChcXFwidHJpZ2dlclxcXCIsIGJ1ZiwgNykgPT0gMCkge1xcbiA4MTc6XFx0XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fdHJpZ2dlcihjb21tb24sIHNwZWNfcHJpdik7XFxuIDgxODpcXHRcXHR9IGVsc2UgaWYgKHN0cm5jbXAoXFxcImJhY2tncm91bmRcXFwiLCBidWYsIDEwKSA9PSAwKSB7XFxuIDgxOTpcXHRcXHRcXHRhdGg5a19jbW5fc3BlY3RyYWxfc2Nhbl9jb25maWcoY29tbW9uLCBzcGVjX3ByaXYsIFNQRUNUUkFMX0JBQ0tHUk9VTkQpO1xcbiA4MjA6XFx0XFx0XFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXFxcInNwZWN0cmFsIHNjYW46IGJhY2tncm91bmQgbW9kZSBlbmFibGVkXFxcXG5cXFwiKTtcXG4gODIxOlxcdFxcdH0gZWxzZSBpZiAoc3RybmNtcChcXFwiY2hhbnNjYW5cXFwiLCBidWYsIDgpID09IDApIHtcXG4gODIyOlxcdFxcdFxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfQ0hBTlNDQU4pO1xcbiA4MjM6XFx0XFx0XFx0YXRoX2RiZyhjb21tb24sIENPTkZJRywgXFxcInNwZWN0cmFsIHNjYW46IGNoYW5uZWwgc2NhbiBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcbiA4MjQ6XFx0XFx0fSBlbHNlIGlmIChzdHJuY21wKFxcXCJtYW51YWxcXFwiLCBidWYsIDYpID09IDApIHtcXG4gODI1OlxcdFxcdFxcdGF0aDlrX2Ntbl9zcGVjdHJhbF9zY2FuX2NvbmZpZyhjb21tb24sIHNwZWNfcHJpdiwgU1BFQ1RSQUxfTUFOVUFMKTtcXG4gODI2OlxcdFxcdFxcdGF0aF9kYmcoY29tbW9uLCBDT05GSUcsIFxcXCJzcGVjdHJhbCBzY2FuOiBtYW51YWwgbW9kZSBlbmFibGVkXFxcXG5cXFwiKTtcXG4gODI3OlxcdFxcdH0gZWxzZSBpZiAoc3RybmNtcChcXFwiZGlzYWJsZVxcXCIsIGJ1ZiwgNykgPT0gMCkge1xcbiA4Mjg6XFx0XFx0XFx0YXRoOWtfY21uX3NwZWN0cmFsX3NjYW5fY29uZmlnKGNvbW1vbiwgc3BlY19wcml2LCBTUEVDVFJBTF9ESVNBQkxFRCk7XFxuIDgyOTpcXHRcXHRcXHRhdGhfZGJnKGNvbW1vbiwgQ09ORklHLCBcXFwic3BlY3RyYWwgc2NhbjogZGlzYWJsZWRcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0NDozMS44MjAxNDUxMjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcyNjkwOTU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBhIGRlYnVnZnMgd3JpdGUgaGFuZGxlciwgc3BlY2lmaWNhbGx5IGB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGxgLiBCZWZvcmUgdGhlIHBhdGNoLCB3cml0ZXMgdG8gYHNwZWN0cmFsX3NjYW5fY3RsYCB3b3VsZCB0cmlnZ2VyIFBIWSByZWdpc3RlciB3cml0ZXMgZXZlbiB3aGVuIHRoZSBpbnRlcmZhY2Ugd2Fzbid0IHZhbGlkLCBpbmRpY2F0ZWQgYnkgYEFUSF9PUF9JTlZBTElEYC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYW4gZWFybHkgZXhpdCBjb25kaXRpb246IGBpZiAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFx1MDAyNmNvbW1vbi1cdTAwM2VvcF9mbGFncykpIHJldHVybiAtRUJVU1k7YC4gU21hcnQuXG5cbk5vdywgbGV0IG1lIHJ1biB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3QgZm9yIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gV2UgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuMS4gICoqS2VybmVsIFN0cnVjdHVyZXMgXHUwMDI2IFVzZXIgU3BhY2U6KiogRG9lcyB0aGlzIGludHJvZHVjZSBuZXcga2VybmVsIHN0cnVjdHVyZXMgb3IgbW9kaWZ5IGV4aXN0aW5nIG9uZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQ/IE5vLCB0aGUgZnVuY3Rpb24gdXNlcyBgY29weV9mcm9tX3VzZXJgLCBzbyBpdCByZWNlaXZlcyBkYXRhLCBub3Qgc2VuZHMgaXQsIGFuZCByZXR1cm5zIGEgY291bnQgb3IgZXJyb3IgY29kZS4gU2FmZS5cbjIuICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgTG9naWM6KiogRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIGBjb21tb24tXHUwMDNlb3BfZmxhZ3NgIGlzIGNsZWFybHkgYW4gb3BlcmF0aW9uYWwgZmxhZyBiaXRmaWVsZCBtYW5hZ2VkIGJ5IHRoZSBkcml2ZXIgaXRzZWxmLCBzbyBpdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYXQgc29tZSBwb2ludC4gU2VjdXJlLlxuMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBEb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm8uIERvZXNuJ3QgbG9vayBsaWtlIGFueSBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gdGhpcyBhcmVhLiBObyBwcm9ibGVtLlxuNC4gICoqQm91bmRzIENoZWNrcyBcdTAwMjYgTWVtb3J5IEFjY2VzczoqKiBEb2VzIGl0IG1lc3Mgd2l0aCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IHN1cnJvdW5kaW5nIGNvZGUgY291bGQgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGxpa2UgdGhhdCBoZXJlLiBUaGlzIGlzIGEgcHJldHR5IGZvY3VzZWQgY2hhbmdlLlxuXG5TbywgaXQncyByZWFsbHkganVzdCBhIGRldmljZSBzdGF0ZSB2YWxpZGl0eSBjaGVjay4gV2UncmUgcHJldmVudGluZyBQSFkgcmVnaXN0ZXIgd3JpdGVzIChoYXJkd2FyZSBjb21tYW5kcykgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGRpc2FibGVkLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBjYXVzZXMgZmlybXdhcmUgaGFuZ3Mgb24gQVI5MjcxLiBJdCBzZWVtcyBsaWtlIGl0J3MgYSBnb29kIGZpeC5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gS01TQU4gZG9lc24ndCBzZWVtIG5lY2Vzc2FyeSBoZXJlLiBJIHRoaW5rIHdlJ3JlIGdvb2QgdG8gZ28uIExldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIG15IHdvcmsuLi5hbmQgcHJlcGFyZSBteSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0OSwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTo0NDozNi41NDcwNTY3OTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzdGF0ZSBjaGVjayAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsIFxcdTAwMjZjb21tb24tXFx1MDAzZW9wX2ZsYWdzKSkgaW4gdGhlIGRlYnVnZnMgd3JpdGUgaGFuZGxlciB3cml0ZV9maWxlX3NwZWNfc2Nhbl9jdGwoKSB0byBwcmV2ZW50IHNwZWN0cmFsIHNjYW4gY29tbWFuZHMgZnJvbSBkcml2aW5nIFBIWSByZWdpc3RlciB3cml0ZXMgd2hlbiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGRpc2FibGVkLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIGJ1ZmZlciBhbGxvY2F0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHN0YXRlIGNoZWNrICh0ZXN0X2JpdChBVEhfT1BfSU5WQUxJRCwgXFx1MDAyNmNvbW1vbi1cXHUwMDNlb3BfZmxhZ3MpKSBpbiB0aGUgZGVidWdmcyB3cml0ZSBoYW5kbGVyIHdyaXRlX2ZpbGVfc3BlY19zY2FuX2N0bCgpIHRvIHByZXZlbnQgc3BlY3RyYWwgc2NhbiBjb21tYW5kcyBmcm9tIGRyaXZpbmcgUEhZIHJlZ2lzdGVyIHdyaXRlcyB3aGVuIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgZGlzYWJsZWQuIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbC10by11c2VyIGNvcGllcywgYnVmZmVyIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowm2lfh[1] Phase: Succeeded StartedAt: 2026-09-08 21:44:47 +0000 UTC FinishedAt: 2026-09-08 21:44:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 21:44:47 +0000 UTC FinishedAt: 2026-09-08 21:44:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2] Phase: Succeeded StartedAt: 2026-09-08 21:44:47 +0000 UTC FinishedAt: 2026-09-08 23:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 21:44:47 +0000 UTC FinishedAt: 2026-09-08 23:21:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 21:44:47 +0000 UTC FinishedAt: 2026-09-08 21:44:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 21:44:47 +0000 UTC FinishedAt: 2026-09-08 21:44:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm2lfh/series-workflowm2lfh-convert-artifact-3810733797/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 21:44:57 +0000 UTC FinishedAt: 2026-09-08 22:01:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 21:44:57 +0000 UTC FinishedAt: 2026-09-08 22:01:06 +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:*7da75476-0e06-4135-b3d5-74a2b0099e46,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-workflowm2lfh/series-workflowm2lfh-convert-artifact-3810733797/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": "8bdc97ba-253d-43fd-946f-0bd36d85deae", "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-workflowm2lfh/series-workflowm2lfh-build-action-296102667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 21:44:57 +0000 UTC FinishedAt: 2026-09-08 22:00:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7da75476-0e06-4135-b3d5-74a2b0099e46,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-workflowm2lfh/series-workflowm2lfh-convert-artifact-3810733797/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": "8bdc97ba-253d-43fd-946f-0bd36d85deae", "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-workflowm2lfh/series-workflowm2lfh-build-action-296102667/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 22:01:06 +0000 UTC FinishedAt: 2026-09-08 22:01:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 22:01:06 +0000 UTC FinishedAt: 2026-09-08 22:01:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 22:01:06 +0000 UTC FinishedAt: 2026-09-08 22:01:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 22:01:06 +0000 UTC FinishedAt: 2026-09-08 22:01:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm2lfh/series-workflowm2lfh-convert-artifact-2945586368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 22:01:16 +0000 UTC FinishedAt: 2026-09-08 22:03:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 22:01:16 +0000 UTC FinishedAt: 2026-09-08 22:03:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8bdc97ba-253d-43fd-946f-0bd36d85deae,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-workflowm2lfh/series-workflowm2lfh-build-action-296102667/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-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 22:03:19 +0000 UTC FinishedAt: 2026-09-08 22:03:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 22:03:19 +0000 UTC FinishedAt: 2026-09-08 22:03:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 22:03:19 +0000 UTC FinishedAt: 2026-09-08 22:25:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 22:03:19 +0000 UTC FinishedAt: 2026-09-08 22:25:20 +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:*7da75476-0e06-4135-b3d5-74a2b0099e46,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-workflowm2lfh/series-workflowm2lfh-convert-artifact-2945586368/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": "2e965a87-0e60-4f0f-b944-06b14fac056e", "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-workflowm2lfh/series-workflowm2lfh-build-action-4264395388/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 22:03:19 +0000 UTC FinishedAt: 2026-09-08 22:25:10 +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:*7da75476-0e06-4135-b3d5-74a2b0099e46,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-workflowm2lfh/series-workflowm2lfh-convert-artifact-2945586368/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": "2e965a87-0e60-4f0f-b944-06b14fac056e", "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-workflowm2lfh/series-workflowm2lfh-build-action-4264395388/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 22:25:20 +0000 UTC FinishedAt: 2026-09-08 22:25:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 22:25:20 +0000 UTC FinishedAt: 2026-09-08 22:25:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 22:25:20 +0000 UTC FinishedAt: 2026-09-08 22:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 22:25:20 +0000 UTC FinishedAt: 2026-09-08 22:27:01 +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:*2e965a87-0e60-4f0f-b944-06b14fac056e,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-workflowm2lfh/series-workflowm2lfh-build-action-4264395388/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-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 22:27:10 +0000 UTC FinishedAt: 2026-09-08 23:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 22:27:10 +0000 UTC FinishedAt: 2026-09-08 23:21:24 +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":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"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:*8bdc97ba-253d-43fd-946f-0bd36d85deae,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2e965a87-0e60-4f0f-b944-06b14fac056e,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-workflowm2lfh/series-workflowm2lfh-build-action-296102667/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-workflowm2lfh/series-workflowm2lfh-build-action-4264395388/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 22:27:10 +0000 UTC FinishedAt: 2026-09-08 22:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 22:27:10 +0000 UTC FinishedAt: 2026-09-08 22:27:18 +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":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"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-workflowm2lfh/series-workflowm2lfh-convert-artifact-2496808729/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 22:27:10 +0000 UTC FinishedAt: 2026-09-08 22:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 22:27:10 +0000 UTC FinishedAt: 2026-09-08 22:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 22:27:10 +0000 UTC FinishedAt: 2026-09-08 22:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 22:27:20 +0000 UTC FinishedAt: 2026-09-08 23:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm2lfh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["write_file_spec_scan_ctl","ath9k_cmn_spectral_scan_config","ath9k_cmn_spectral_scan_trigger"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d8e73163ef933624341075f576e2f36ef9133f7","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH9K_COMMON_SPECTRAL","ATH9K_HTC","ATH9K_HTC_DEBUGFS"],"series_id":"75a74993-46bb-41fe-a3e4-9c96c463edc4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 22:27:20 +0000 UTC FinishedAt: 2026-09-08 23:21:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8bdc97ba-253d-43fd-946f-0bd36d85deae,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2e965a87-0e60-4f0f-b944-06b14fac056e,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-workflowm2lfh/series-workflowm2lfh-build-action-296102667/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-workflowm2lfh/series-workflowm2lfh-build-action-4264395388/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-workflowm2lfh/series-workflowm2lfh-convert-artifact-2496808729/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,}