Name: series-workflowfqw7v Phase: Succeeded StartedAt: 2026-08-17 11:29:56 +0000 UTC FinishedAt: 2026-08-17 16:02:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[0] Phase: Succeeded StartedAt: 2026-08-17 11:29:56 +0000 UTC FinishedAt: 2026-08-17 12:20:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 11:29:56 +0000 UTC FinishedAt: 2026-08-17 12:20:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_HMAC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_HMAC" ], "series_id": "222029a2-23a5-41e9-bb54-0d5cc8412bfb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipv6_srh_rcv", "ipv6_rthdr_rcv" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9ITUFDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBgc2tiLVx1MDAzZWRhdGFgIGlzIHJlc3RvcmVkIHRvIHRoZSBuZXR3b3JrIGhlYWRlciBpbiBgaXB2Nl9zcmhfcmN2KClgLiBJbnN0ZWFkIG9mIHB1c2hpbmcgYSBmaXhlZCBzaXplIChgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWApLCBpdCBwdXNoZXMgYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGFueSBleHRlbnNpb24gaGVhZGVycyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgYHNrYl9wdXNoYCBjb3VsZCBpbmNvcnJlY3RseSBhZGp1c3QgdGhlIGBza2ItXHUwMDNlZGF0YWAgcG9pbnRlciwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBvciBpbmNvcnJlY3QgcGFja2V0IHByb2Nlc3NpbmcuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGFjY2VzcyBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHJlY2VpdmUgcGF0aCAoYGlwdjZfc3JoX3JjdmApIHRvIGNvcnJlY3RseSBhZGp1c3QgdGhlIGBza2JgIG5ldHdvcmsgb2Zmc2V0IGJlZm9yZSBjYWxsaW5nIGBkc3RfaW5wdXQoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBoYW5kbGVzIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZWFlOTU2MGUzZTc3MDAzYzZlNzMzODU1NDlkMmQwMzJiZDY1OTRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTI6MTc6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXG5pbmRleCA5YzY3N2ViMWQxYTYxLi40YzQwNzUyMGU5ZGFhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbkBAIC00NTIsOCAmIzQzOzQ1Miw2IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIFx0YWRkciA9IGhkci1cdTAwM2VzZWdtZW50cyAmIzQzOyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiBcbi1cdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4tXG4gXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcbiBcdFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xuIFxuQEAgLTQ2Miw2ICYjNDM7NDYwLDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlwNl9yb3V0ZV9pbnB1dChza2IpO1xuIFxuIFx0aWYgKHNrYl9kc3Qoc2tiKS1cdTAwM2VlcnJvcikge1xuJiM0MztcdFx0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIFx0XHRkc3RfaW5wdXQoc2tiKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuQEAgLTQ3NiwxMCAmIzQzOzQ3NSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gXHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gXHR9XG4gXG4mIzQzO1x0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIFx0ZHN0X2lucHV0KHNrYik7XG4gXG4gXHRyZXR1cm4gLTE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9ITUFDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcmVjZWl2ZSBwYXRoIChgaXB2Nl9zcmhfcmN2YCkgdG8gY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYmAgbmV0d29yayBvZmZzZXQgYmVmb3JlIGNhbGxpbmcgYGRzdF9pbnB1dCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGhhbmRsZXMgSVB2NiBleHRlbnNpb24gaGVhZGVycywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlYWU5NTYwZTNlNzcwMDNjNmU3MzM4NTU0OWQyZDAzMmJkNjU5NGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxMjoxNzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuYwppbmRleCA5YzY3N2ViMWQxYTYxLi40YzQwNzUyMGU5ZGFhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jCkBAIC00NTIsOCAmIzQzOzQ1Miw2IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJaGRyLSZndDtzZWdtZW50c19sZWZ0LS07CiAJYWRkciA9IGhkci0mZ3Q7c2VnbWVudHMgJiM0MzsgaGRyLSZndDtzZWdtZW50c19sZWZ0OwogCi0Jc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKLQogCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkKIAkJc2VnNl91cGRhdGVfY3N1bShza2IpOwogCkBAIC00NjIsNiAmIzQzOzQ2MCw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJaXA2X3JvdXRlX2lucHV0KHNrYik7CiAKIAlpZiAoc2tiX2RzdChza2IpLSZndDtlcnJvcikgewomIzQzOwkJc2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpOwogCQlkc3RfaW5wdXQoc2tiKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTQ3NiwxMCAmIzQzOzQ3NSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQl9CiAJCWlwdjZfaGRyKHNrYiktJmd0O2hvcF9saW1pdC0tOwogCi0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiAJCWdvdG8gbG9vcGVkX2JhY2s7CiAJfQogCiYjNDM7CXNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKIAlkc3RfaW5wdXQoc2tiKTsKIAogCXJldHVybiAtMTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFBhY2tldCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgdG8gYGlwdjZfc3JoX3JjdmAuIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIG1hZGUgc29tZSBpbnRlcmVzdGluZyBhZGp1c3RtZW50cyByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIElQdjYgaGVhZGVyIGFuZCwgbW9zdCBsaWtlbHksIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcHJvY2Vzc2luZy4KClRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcmVtb3ZhbCBvZiBgc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtgLiBUaGF0JiMzOTtzIHNpZ25pZmljYW50LiBJdCBpbXBsaWVzIHdlJiMzOTtyZSBubyBsb25nZXIgZXhwbGljaXRseSBwdXNoaW5nIHRoZSBJUHY2IGhlYWRlciBvbnRvIHRoZSBzdGFjayB3aGVuIGhhbmRsaW5nIHRoZSBwYWNrZXQgaW4gdGhpcyBmdW5jdGlvbi4gSW5zdGVhZCwgdGhleSYjMzk7dmUgYWRkZWQgYHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtgIGluIHR3byBsb2NhdGlvbnMgYmVmb3JlIGBkc3RfaW5wdXQoc2tiKTtgLiBUaGlzIGxvb2tzIGxpa2UgYSByZXBsYWNlbWVudCBmb3IgdGhlIGV4cGxpY2l0IHB1c2guIFVzaW5nIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGlzIGVzc2VudGlhbGx5IHB1c2hpbmcgYWxsIG5ldHdvcmsgaGVhZGVycy4gSSBzdXNwZWN0IHRoaXMgaXMgYWltZWQgYXQgbWFraW5nIHRoZSBjb2RlIG1vcmUgZ2VuZXJhbCBvciBwb3RlbnRpYWxseSBvcHRpbWl6aW5nIGhlYWRlciBwcm9jZXNzaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFNSSC4gV2Ugc2hvdWxkIGV4YW1pbmUgd2h5IHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBhbmQgd2hldGhlciB0aGUgbmV0d29yayBoZWFkZXJzIHdpbGwgYmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgZm9yIGFsbCB1c2VzLgoKVGhlbiwgdGhlcmUmIzM5O3MgdGhlIHJlbW92YWwgb2YgYHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7YCBiZWZvcmUgdGhhdCBgZ290byBsb29wZWRfYmFjaztgLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBubyBsb25nZXIgZXhwbGljaXRseSAqcG9wcGluZyogdGhlIElQdjYgaGVhZGVyIG9mZiBiZWZvcmUgbG9vcGluZyBiYWNrLiBTZWVtcyBjb25zaXN0ZW50IHdpdGggdGhlIGZpcnN0IGNoYW5nZSwgc28gdGhlIElQdjYgaGVhZGVyIGlzIG5vdCBiZWluZyBtYW51YWxseSBoYW5kbGVkLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGlkZWEgdGhhdCB0aGUgSVB2NiBoZWFkZXIgbWFuaXB1bGF0aW9uIGlzIG5vdyBoYW5kbGVkIGRpZmZlcmVudGx5LgoKTGV0IG1lIGdvIGFoZWFkIGFuZCBkaXZlIGludG8gYGlwdjZfc3JoX3JjdmAgd2l0aGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHJhdGlvbmFsZSBiZWhpbmQgdGhlc2UgbW9kaWZpY2F0aW9ucyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBUaGlzIGlzIHdoZXJlIEkgY2FuIHN0YXJ0IHRvIGV2YWx1YXRlIHRoZSBvdmVyYWxsIGltcGFjdCwgbG9vayBmb3IgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgYW5kIGRldGVybWluZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGNoYW5nZXMgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYz0zNDI9c3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzcxOnN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjU0PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkwLVx0XHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cbm5ldC9pcHY2L2V4dGhkcnMuYzo2OTE6XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiKTtcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTItXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFRhcmdldCBmb3IgRnV6emluZyoqCgpSaWdodCwgYGlwdjZfc3JoX3JjdmAgaXMgaW52b2tlZCBkaXJlY3RseSBmcm9tIGBpcHY2X3J0aGRyX3JjdmAuIFRoYXQgY2hhaW4gbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSwgYW5kIGdpdmVuIHRoYXQgaXQmIzM5O3MgaGFuZGxpbmcgcG90ZW50aWFsbHkgY29tcGxleCBwYWNrZXQgc3RydWN0dXJlcywgaXQmIzM5O3MgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFdlIGtub3cgd2hlcmUgdGhlIGVudHJ5cG9pbnQgaXMsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHVwcyBpdHMgdmFsdWUgYXMgYSB0YXJnZXQuIFRpbWUgdG8gZGlnIGluLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZ28gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NiBTZWdtZW50IFJvdXRpbmcuIExldCYjMzk7cyBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBhbmQgc2VlIHdoYXQga25vYnMgYW5kIGxldmVycyB3ZSBjYW4gdHdpZGRsZSB0byBnZXQgb3VyIGZ1enppbmcgY2FtcGFpZ24gZ29pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYz0zNDI9c3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzcxOnN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjU0PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkwLVx0XHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cbm5ldC9pcHY2L2V4dGhkcnMuYzo2OTE6XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiKTtcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTItXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgZm9yIENvbmZpZ3VyYWJsZSBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgUmVjZXB0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBpcHY2X3NyaF9yY3ZgIGlzbiYjMzk7dCBjb250cm9sbGVkIGJ5IHNvbWUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHByYWN0aWNlLCByaWdodD8gWW91IGFsd2F5cyB3YW50IHRvIGVsaW1pbmF0ZSB0aGUgb2J2aW91cyBwb3NzaWJpbGl0aWVzLCBsaWtlIGEgZGlzYWJsZWQgZmVhdHVyZSwgYmVmb3JlIHlvdSBkaXZlIGludG8gbW9yZSBjb21wbGV4IHByb2JsZW1zLiBJdCYjMzk7cyBlc3BlY2lhbGx5IGNydWNpYWwgd2l0aCBzb21ldGhpbmcgbGlrZSBJUHY2IHNlZ21lbnQgcm91dGluZywgd2hlcmUgYSBtaXNjb25maWd1cmF0aW9uIGNvdWxkIGVhc2lseSBiZSB0aGUgcm9vdCBjYXVzZS4gVGhpcyBjb3VsZCBiZSBhIGdsb2JhbCBzZXR0aW5nLCBhIHBlci1pbnRlcmZhY2Ugc2V0dGluZywgbWF5YmUgZXZlbiBzb21ldGhpbmcgYXBwbGllZCB2aWEgYSBwb2xpY3kgbWFwLiBJIG5lZWQgdG8ga25vdyB0aGUgcG90ZW50aWFsIGZvciBleHRlcm5hbCBmYWN0b3JzLiBXaGF0IGFyZSB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBiZSBpbiBwbGF5IGZvciBgaXB2Nl9zcmhfcmN2YD8gSSBuZWVkIHRvIGNoZWNrIGFsbCB0aGUgbGlrZWx5IHN1c3BlY3RzLiBUaGVuLCBhbmQgb25seSB0aGVuLCBjYW4gSSByZWFsbHkgc3RhcnQgdG8gbmFycm93IGRvd24gd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4gVGhhdCYjMzk7cyBteSBuZXh0IGxvZ2ljYWwgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSVBWNl9TRUc2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTI0PWlwdjYtJChDT05GSUdfTkVUTEFCRUwpICYjNDM7PSBjYWxpcHNvLm9cbm5ldC9pcHY2L01ha2VmaWxlOjI1OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSAmIzQzOz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xubmV0L2lwdjYvTWFrZWZpbGU6MjY6aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfSE1BQykgJiM0Mzs9IHNlZzZfaG1hYy5vXG5uZXQvaXB2Ni9NYWtlZmlsZS0yNy1pcHY2LSQoQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMKSAmIzQzOz0gcnBsX2lwdHVubmVsLm9cbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTE4MT1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmYgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIyOS1cdC5zZWc2X2VuYWJsZWRcdFx0PSAwLFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMzA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yMzEtXHQuc2VnNl9yZXF1aXJlX2htYWNcdD0gMCxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0LVx0LnNlZzZfZW5hYmxlZFx0XHQ9IDAsXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI5NTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5Ni1cdC5zZWc2X3JlcXVpcmVfaG1hY1x0PSAwLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2Mj1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczNi1cdGFycmF5W0RFVkNPTkZfU0VHNl9FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXHUwMDNlc2VnNl9lbmFibGVkKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTczNzojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MzgtXHRhcnJheVtERVZDT05GX1NFRzZfUkVRVUlSRV9ITUFDXSA9IFJFQURfT05DRShjbmYtXHUwMDNlc2VnNl9yZXF1aXJlX2htYWMpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Njg2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhZGRyY29uZl9zeXNjdGxbXSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcyMzktXHR9LFxubmV0L2lwdjYvYWRkcmNvbmYuYzo3MjQwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzI0MS1cdHtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDctI2luY2x1ZGUgXHUwMDNjbmV0L3NlZzYuaFx1MDAzZVxubmV0L2lwdjYvZXh0aGRycy5jOjQ4OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2V4dGhkcnMuYy00OS0jaW5jbHVkZSBcdTAwM2NuZXQvc2VnNl9obWFjLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9MzcxPXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTM5NS1cbm5ldC9pcHY2L2V4dGhkcnMuYzozOTY6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvZXh0aGRycy5jLTM5Ny1cdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKSB7XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTExMjU9c3RhdGljIHU4IGlwdjZfcHVzaF9ydGhkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTExNTMtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTE1NDojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE1NS1cdGlmIChzcl9oYXNfaG1hYyhzcl9waGRyKSkge1xuLS1cbm5ldC9pcHY2L3NlZzYuYz0xNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHNlZzZfZ2VubF9wb2xpY3lbU0VHNl9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2LmMtMTUwLVxubmV0L2lwdjYvc2VnNi5jOjE1MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2LmMtMTUyLVxuLS1cbm5ldC9pcHY2L3NlZzYuYz0yNjY9c3RhdGljIGludCBzZWc2X2dlbmxfZ2V0X3R1bnNyYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pcHY2L3NlZzYuYy0yOTktXG5uZXQvaXB2Ni9zZWc2LmM6MzAwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzYuYy0zMDEtXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTI1LSNpbmNsdWRlIFx1MDAzY25ldC9kc3RfY2FjaGUuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjI2OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0yNy0jaW5jbHVkZSBcdTAwM2NuZXQvc2VnNl9obWFjLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM9MTM5PXN0YXRpYyBpbnQgX19zZWc2X2RvX3NyaF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKm9zcmgsXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTE5OS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYzoyMDA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIwMS1cdGlmIChzcl9oYXNfaG1hYyhpc3JoKSkge1xuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0yMjM9c3RhdGljIGludCBzZWc2X2RvX3NyaF9lbmNhcF9yZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzI2LVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjMyNzojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzI4LVx0aWYgKHVubGlrZWx5KCFza2lwX3NyaCBcdTAwMjZcdTAwMjYgc3JfaGFzX2htYWMoaXNyaCkpKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTM0Mz1zdGF0aWMgaW50IF9fc2VnNl9kb19zcmhfaW5saW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzc4LVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjM3OTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzgwLVx0aWYgKHNyX2hhc19obWFjKGlzcmgpKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI3LSNpbmNsdWRlIFx1MDAzY25ldC9pcF90dW5uZWxzLmhcdTAwM2Vcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyODojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjktI2luY2x1ZGUgXHUwMDNjbmV0L3NlZzZfaG1hYy5oXHUwMDNlXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjI0OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjUtXHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjMyPXN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDE6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0Mi1cdGlmIChzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTc0Mj1zdGF0aWMgaW50IGVuZF9mbHY4OTg2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NTMtXHRwaW5mbyA9IHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHNyaCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzU0OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NTUtXHRpZiAoc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBzZWVpbmcgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgIGFuZCBgQ09ORklHX0lQVjZfU0VHNl9ITUFDYCBwb3AgdXAuIFRoaXMgbWFrZXMgbWUgd29uZGVyLi4uIGlzIHRoZXJlIGEgbW9yZSBnZW5lcmFsIGBDT05GSUdfSVBWNl9TRUc2YCBvcHRpb24/IEl0IHdvdWxkIGJlIHdlaXJkIHRvIGhhdmUgdGhlIHNwZWNpZmljIG9uZXMgd2l0aG91dCBhIGJyb2FkZXIgZW5hYmxpbmcgZmxhZy4gQmVzdCB0byBjaGVjayB0aGUgc291cmNlLiBMZXQmIzM5O3MgZGlnIGludG8gYG5ldC9pcHY2L0tjb25maWdgIGFuZCBnZXQgdGhlIHdob2xlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBhdmFpbGFibGUgdGhlcmUuIEl0JiMzOTtsbCBnaXZlIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHdob2xlIElQdjYgc2VnbWVudCByb3V0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgc3RydWN0dXJlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X1NFRzYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9Mjc5PWNvbmZpZyBJUFY2X1BJTVNNX1YyXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvS2NvbmZpZy0zMDEtXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQzNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgSVB2NiBTUkggUmVjZXB0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpcHY2X3NyaF9yY3ZgIOKAkyBhbmQgdGhhdCYjMzk7cyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gUmlnaHQsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGhhbmRsaW5nIHRoZSByZWNlcHRpb24gb2YgU291cmNlIFJvdXRpbmcgSGVhZGVyIChTUkgpIGV4dGVuc2lvbiBoZWFkZXJzIHdpdGhpbiBJUHY2IHBhY2tldHMuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaW4gbXkgbWluZCBpcywgaXMgdGhpcyBjb2RlIHBhdGggZXZlbiAqY29tcGlsZWQqIHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzPyBPciBpcyBpdCBjb25kaXRpb25hbGl6ZWQgc29tZWhvdz8gSSBuZWVkIHRvIGNoZWNrIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgbmV0L2lwdjYvZXh0aGRycy5jYCBpdHNlbGYsIGFuZCBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgaXB2Nl9zcmhfcmN2YCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBgI2lmZGVmYCBibG9ja3MsIGBDT05GSUdfYCBvcHRpb25zLCBvciBhbnl0aGluZyBlbHNlIHRoYXQgY29udHJvbHMgd2hldGhlciB0aGlzIGNvZGUgaXMgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBpbWFnZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMgKmZpcnN0KiBiZWZvcmUgSSBjYW4gcHJvY2VlZCB3aXRoIHVuZGVyc3RhbmRpbmcgdGhlIGFjdHVhbCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYz0zNDI9c3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzcxOnN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjU0PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkwLVx0XHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cbm5ldC9pcHY2L2V4dGhkcnMuYzo2OTE6XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiKTtcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTItXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDAyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRXhhbWluaW5nIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgUmVjZWl2ZXIqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBzdHJpa2luZyBtZSB0aGF0IGl0IHNlZW1zIHRvIGJlIGNvbnNpc3RlbnRseSBjb21waWxlZCB3aGVuZXZlciB0aGUgSVB2NiBjb25maWd1cmF0aW9uIG9wdGlvbiwgYENPTkZJR19JUFY2YCwgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIHBhdHRlcm4gdGhhdCB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoaXMuCgpNeSBpbml0aWFsIGFzc3VtcHRpb24gbWlnaHQgYmUgY29ycmVjdCwgYnV0IEkgc2hvdWxkbiYjMzk7dCBqdW1wIHRvIGNvbmNsdXNpb25zLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZSBzdXJyb3VuZGluZyBgaXB2Nl9zcmhfcmN2YC4gTGV0JiMzOTtzIGNvbmZpcm0gd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHdyYXBwZWQgaW5zaWRlIGFueSBjb25kaXRpb25hbCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgYCNpZmRlZmAgc3RhdGVtZW50cywgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkgbmVlZCB0byBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlcmUmIzM5O3MgYSBtb3JlIG51YW5jZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQsIHBvdGVudGlhbGx5IHRpZWQgdG8gYW5vdGhlciBmZWF0dXJlIGZsYWcgb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmcuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0ICovXG4gMzUxOlx0XG4gMzUyOlx0XHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiAzNTM6XHRcdGFkZHIgPSBoZHItXHUwMDNlc2VnbWVudHMgJiM0MzsgaGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQ7XG4gMzU0Olx0XG4gMzU1Olx0XHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdCYjNDM7JiM0Mzs7XG4gMzU2Olx0XHRmcm9tID0gKihfX2JlMzIgKiloZHI7XG4gMzU3Olx0XG4gMzU4Olx0XHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIDM1OTpcdFx0dG8gPSAqKF9fYmUzMiAqKWhkcjtcbiAzNjA6XHRcbiAzNjE6XHRcdC8qIHVwZGF0ZSBza2IgY3N1bSB3aXRoIGRpZmYgcmVzdWx0aW5nIGZyb20gc2VnX2xlZnQgZGVjcmVtZW50ICovXG4gMzYyOlx0XG4gMzYzOlx0XHR1cGRhdGVfY3N1bV9kaWZmNChza2IsIGZyb20sIHRvKTtcbiAzNjQ6XHRcbiAzNjU6XHRcdC8qIGNvbXB1dGUgY3N1bSBkaWZmIGJldHdlZW4gY3VycmVudCBhbmQgbmV4dCBzZWdtZW50IGFuZCB1cGRhdGUgKi9cbiAzNjY6XHRcbiAzNjc6XHRcdHVwZGF0ZV9jc3VtX2RpZmYxNihza2IsIChfX2JlMzIgKikoXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkciksXG4gMzY4Olx0XHRcdFx0ICAgKF9fYmUzMiAqKWFkZHIpO1xuIDM2OTpcdH1cbiAzNzA6XHRcbiAzNzE6XHRzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDM3MjpcdHtcbiAzNzM6XHRcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbiAzNzQ6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gMzc1Olx0XHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKmhkcjtcbiAzNzY6XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XG4gMzc3Olx0XHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7XG4gMzc4Olx0XHRpbnQgYWNjZXB0X3NlZzY7XG4gMzc5Olx0XG4gMzgwOlx0XHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiAzODE6XHRcbiAzODI6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xuIDM4MzpcdFx0aWYgKCFpZGV2KSB7XG4gMzg0Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM4NTpcdFx0XHRyZXR1cm4gLTE7XG4gMzg2Olx0XHR9XG4gMzg3Olx0XG4gMzg4Olx0XHRhY2NlcHRfc2VnNiA9IG1pbihSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlc2VnNl9lbmFibGVkKSxcbiAzODk6XHRcdFx0XHQgIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5zZWc2X2VuYWJsZWQpKTtcbiAzOTA6XHRcbiAzOTE6XHRcdGlmICghYWNjZXB0X3NlZzYpIHtcbiAzOTI6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMzkzOlx0XHRcdHJldHVybiAtMTtcbiAzOTQ6XHRcdH1cbiAzOTU6XHRcbiAzOTY6XHQjaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG4gMzk3Olx0XHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSkge1xuIDM5ODpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzOTk6XHRcdFx0cmV0dXJuIC0xO1xuIDQwMDpcdFx0fVxuIDQwMTpcdCNlbmRpZlxuIDQwMjpcdFxuIDQwMzpcdGxvb3BlZF9iYWNrOlxuIDQwNDpcdFx0aWYgKGhkci1cdTAwM2VzZWdtZW50c19sZWZ0ID09IDApIHtcbiA0MDU6XHRcdFx0aWYgKGhkci1cdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNiB8fCBoZHItXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjQpIHtcbiA0MDY6XHRcdFx0XHRpbnQgb2Zmc2V0ID0gKGhkci1cdTAwM2VoZHJsZW4gJiM0MzsgMSkgXHUwMDNjXHUwMDNjIDM7XG4gNDA3Olx0XG4gNDA4Olx0XHRcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksXG4gNDA5Olx0XHRcdFx0XHRcdCAgIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSk7XG4gNDEwOlx0XHRcdFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQpO1xuIDQxMTpcdFx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYiksXG4gNDEyOlx0XHRcdFx0XHRcdCAgIG9mZnNldCk7XG4gNDEzOlx0XG4gNDE0Olx0XHRcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNDE1Olx0XHRcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiA0MTY6XHRcdFx0XHRza2ItXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XG4gNDE3Olx0XHRcdFx0aWYgKGhkci1cdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNClcbiA0MTg6XHRcdFx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcbiA0MTk6XHRcdFx0XHRfX3NrYl90dW5uZWxfcngoc2tiLCBza2ItXHUwMDNlZGV2LCBuZXQpO1xuIDQyMDpcdFxuIDQyMTpcdFx0XHRcdG5ldGlmX3J4KHNrYik7XG4gNDIyOlx0XHRcdFx0cmV0dXJuIC0xO1xuIDQyMzpcdFx0XHR9XG4gNDI0Olx0XG4gNDI1Olx0XHRcdG9wdC1cdTAwM2VzcmNydCA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcbiA0MjY6XHRcdFx0b3B0LVx1MDAzZWxhc3RvcHQgPSBvcHQtXHUwMDNlc3JjcnQ7XG4gNDI3Olx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSAoaGRyLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMztcbiA0Mjg6XHRcdFx0b3B0LVx1MDAzZW5ob2ZmID0gKFx1MDAyNmhkci1cdTAwM2VuZXh0aGRyKSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDQyOTpcdFxuIDQzMDpcdFx0XHRyZXR1cm4gMTtcbiA0MzE6XHRcdH1cbiA0MzI6XHRcbiA0MzM6XHRcdGlmIChoZHItXHUwMDNlc2VnbWVudHNfbGVmdCBcdTAwM2U9IChoZHItXHUwMDNlaGRybGVuIFx1MDAzZVx1MDAzZSAxKSkge1xuIDQzNDpcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gNDM1Olx0XHRcdGljbXB2Nl9wYXJhbV9wcm9iKHNrYiwgSUNNUFY2X0hEUl9GSUVMRCxcbiA0MzY6XHRcdFx0XHRcdCAgKChcdTAwMjZoZHItXHUwMDNlc2VnbWVudHNfbGVmdCkgLVxuIDQzNzpcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcbiA0Mzg6XHRcdFx0cmV0dXJuIC0xO1xuIDQzOTpcdFx0fVxuIDQ0MDpcdFxuIDQ0MTpcdFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xuIDQ0MjpcdFx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7XG4gNDQzOlx0XHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXG4gNDQ0Olx0XHRcdFx0XHRcdElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTtcbiA0NDU6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0NDY6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDQ3Olx0XHRcdH1cbiA0NDg6XHRcbiA0NDk6XHRcdFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4ODcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIElQdjYgQ29uZmlndXJhdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBiZWhhdmlvciBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGlmIGBDT05GSUdfSVBWNmAgaXMgb24sIGNvbXBpbGF0aW9uIGhhcHBlbnMuIFRoYXQmIzM5O3MgZXhwZWN0ZWQuIEJ1dCBoYW5nIG9uLCB0aGlzIGBhY2NlcHRfc2VnNmAgZnVuY3Rpb24uLi4gdGhhdOKAmXMgbm90IHF1aXRlIHJpZ2h0LiBJdCBsb29rcyBsaWtlIGl0ICpuZWVkcyogYHNlZzZfZW5hYmxlZGAgdG8gYmUgc2V0LiBBbmQgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBgc2VnNl9lbmFibGVkYCBpcyBwYXJ0IG9mIGBpcHY2X2RldmNvbmZgLiBOb3cgSSBoYXZlIHRvIGFzayBteXNlbGYsIGlzIHRoYXQgYWx3YXlzIGdvaW5nIHRvIGJlIHByZXNlbnQ/IEkmIzM5O2QgYmV0dGVyIGRvdWJsZSBjaGVjayB0aGF0IGBzZWc2X2VuYWJsZWRgIGlzIGFsd2F5cyBkZWZpbmVkLiBMZXQgbWUganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L2lwdjYuaGAgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdCwgb3RoZXJ3aXNlLCB0aGlzIGNvdWxkIGJlIGEgbmFzdHkgYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWc2X2VuYWJsZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lwdjYuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lwdjYuaD0xMz1zdHJ1Y3QgaXB2Nl9kZXZjb25mIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC03OS1cdF9fczMyXHRcdGtlZXBfYWRkcl9vbl9kb3duO1xuaW5jbHVkZS9saW51eC9pcHY2Lmg6ODA6XHRfX3MzMlx0XHRzZWc2X2VuYWJsZWQ7XG5pbmNsdWRlL2xpbnV4L2lwdjYuaC04MS0jaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYHNlZzZfZW5hYmxlZGAgZmxhZy4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyAqYWx3YXlzKiBwcmVzZW50LCByZWdhcmRsZXNzLiBUaGF0IGltcGxpZXMgYGlwdjZfc3JoX3JjdmAgaXMgYWx3YXlzIGNvbXBpbGVkIGluLCBtZWFuaW5nIGl0JiMzOTtzIHRoZXJlIGFuZCByZWFjaGFibGUgaWYgYHNlZzZfZW5hYmxlZGAgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBzeXNjdGwgaW50ZXJmYWNlLiBIbW0sIHRoYXQgZmVlbHMgYSBiaXQgc3VycHJpc2luZy4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYHNlZzZfZW5hYmxlZGAgc3lzY3RsIHNldHRpbmcgaXMgKmFsd2F5cyogYXZhaWxhYmxlIGFzIEkgYmVsaWV2ZS4gV2hlcmUgd291bGQgdGhhdCBzZXR0aW5nIGJlIGRlZmluZWQ/IExldCBtZSBqdXN0IHF1aWNrbHkganVtcCBvdmVyIHRvIGBuZXQvaXB2Ni9hZGRyY29uZi5jYCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERVZDT05GX1NFRzZfRU5BQkxFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FkZHJjb25mLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWRkcmNvbmYuYz01NjYyPXN0YXRpYyB2b2lkIGlwdjZfc3RvcmVfZGV2Y29uZihjb25zdCBzdHJ1Y3QgaXB2Nl9kZXZjb25mICpjbmYsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01NzM1LVx0YXJyYXlbREVWQ09ORl9LRUVQX0FERFJfT05fRE9XTl0gPSBSRUFEX09OQ0UoY25mLVx1MDAzZWtlZXBfYWRkcl9vbl9kb3duKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTczNjpcdGFycmF5W0RFVkNPTkZfU0VHNl9FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXHUwMDNlc2VnNl9lbmFibGVkKTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczNy0jaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZvY3VzIG9uIElQdjYgU1JIIEhhbmRsaW5nKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBjb25maXJtZWQ7IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBgaXB2Nl9zcmhfcmN2YCDigJMgYW5kIHllcywgYGlwdjZfc3JoX3JjdmAgaXMgaW5kZWVkIHJlYWNoYWJsZS4gVGhlIGNoYW5nZSBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCBsb29rcyBzdHJhaWdodGZvcndhcmQ6IGl0IHN3YXBzIGBza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO2AgZm9yIGBza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7YC4gSXQmIzM5O3MgY2xlYXJseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHNrYiBvZmZzZXQgaXNzdWUuIFRoaXMgZmVlbHMgc2lnbmlmaWNhbnQ7IGl0IGRlZmluaXRlbHkgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBSaWdodCwgc28gYGlwdjZfc3JoX3JjdmAgaXMgc3RhdGljLiBIbW0sIGl0JiMzOTtzIHN0YXRpYyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gVGhlIG1vcmUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyBpdCBjYWxsZWQgZnJvbT8gQWghIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGBpcHY2X3J0aGRyX3JjdmAsIHdoaWNoLCB3YWl0IGEgbWludXRlLCBpcyBhbHNvIHN0YXRpYz8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYz00ODc9c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTY1My0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cbm5ldC9pcHY2L2V4dGhkcnMuYzo2NTQ6c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvZXh0aGRycy5jLTY1NS17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTg0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIHJ0aGRyX3Byb3RvY29sID0ge1xubmV0L2lwdjYvZXh0aGRycy5jOjg0MjpcdC5oYW5kbGVyXHQ9XHRpcHY2X3J0aGRyX3Jjdixcbm5ldC9pcHY2L2V4dGhkcnMuYy04NDMtXHQuZmxhZ3NcdFx0PVx0SU5FVDZfUFJPVE9fTk9QT0xJQ1ksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzkwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IFJvdXRpbmcgSGVhZGVyIEhhbmRsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaXB2Nl9ydGhkcl9yY3ZgIGFuZCBgaXB2Nl9zcmhfcmN2YCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgYXJlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgYW5kIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGVkLiBUaGUgaW5zdHJ1Y3Rpb25zIGVtcGhhc2l6ZSBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gSSBzZWUgdGhhdCBgaXB2Nl9ydGhkcl9yY3ZgIGlzIHN0YXRpYywgd2hpY2ggaW5pdGlhbGx5IHJhaXNlcyBhIHJlZCBmbGFnLiBIb3dldmVyLCBpdCYjMzk7cyByZWdpc3RlcmVkIGFzIGEgcHJvdG9jb2wgaGFuZGxlciwgbWVhbmluZyBpdHMgYWRkcmVzcyAqbXVzdCogYmUgdGFrZW4uIFRoZXJlZm9yZSwgaXQgKmNhbm5vdCogYmUgaW5saW5lZC4gVGhhdCBtYWtlcyBpdCBhIHZhbGlkIHN5bWJvbCB0byBjb25zaWRlci4gYHJ0aGRyX3Byb3RvY29sYCBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCBpcyB0aGUga2V5LgoKTm93LCBgaXB2Nl9zcmhfcmN2YCBpcyBhbHNvIHN0YXRpYywgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBpcHY2X3J0aGRyX3JjdmAuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBgaXB2Nl9zcmhfcmN2YCwgdGhhdCYjMzk7cyBhbiBpbXBvcnRhbnQgZGV0YWlsLiBHaXZlbiBpdHMgc2l6ZSwgaXQmIzM5O3MgcHJvYmFibHkgKm5vdCogaW5saW5lZCwgdGhvdWdoIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybS4gV2hpbGUgYGlwdjZfcnRoZHJfcmN2YCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgSSBzaG91bGQgaW5jbHVkZSBib3RoIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ydGhkcl9yY3ZgIGluIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QgdG8gbWFrZSBzdXJlIEkgY292ZXIgYm90aCBjb2RlIHBhdGhzLgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLiBgQ09ORklHX0lQVjZgIGlzIG9idmlvdXNseSByZXF1aXJlZC4gSSB3YXMgY3VyaW91cyBhYm91dCBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAsIGJ1dCBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGUgc3lzY3RsIGBzZWc2X2VuYWJsZWRgIGlzIGFsd2F5cyBwcmVzZW50LiBUaGVuIEkgd2VudCB0byBzZWUgaWYgdGhlIHByZXNlbmNlIG9mIGBzZWc2X2VuYWJsZWRgIGlzIHN1ZmZpY2llbnQgdG8gdHJpZ2dlciBgaXB2Nl9zcmhfcmN2YC4gSXQgc2VlbXMgYGlwdjZfcnRoZHJfcmN2YCBoYW5kbGVzIHNlZ21lbnQgcm91dGluZyBhbmQgKnRoZW4qIGNhbGxzIGBpcHY2X3NyaF9yY3ZgLCB3aGVyZSBgc2VnNl9lbmFibGVkYCBpcyBhY3R1YWxseSBjaGVja2VkLiBUaGVyZWZvcmUsIG5vIGFkZGl0aW9uYWwgY29uZmlnIGlzICpzdHJpY3RseSogbmVjZXNzYXJ5IGJleW9uZCBgQ09ORklHX0lQVjZgLiBTdGlsbCwgdGhlcmUgY291bGQgYmUgY29kZSBwYXRocyBhZGRlZCBieSBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAgb3IgYENPTkZJR19JUFY2X1NFRzZfSE1BQ2AsIHNvIEkmIzM5O2xsIHF1aWNrbHkgZ2xhbmNlIGF0IGBuZXQvaXB2Ni9LY29uZmlnYCBqdXN0IGluIGNhc2UgdG8gbWFrZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIGFkZCB0aGVzZSB0byB0aGUgYEZvY3VzU3ltYm9sc2AgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODA6XHRcdGJvb2wgXCYjMzQ7SVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XCYjMzQ7XG4gMjgxOlx0XHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXG4gMjgyOlx0XHRoZWxwXG4gMjgzOlx0XHQgIFN1cHBvcnQgZm9yIElQdjYgUElNIG11bHRpY2FzdCByb3V0aW5nIHByb3RvY29sIFBJTS1TTXYyLlxuIDI4NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI4NTpcdFxuIDI4NjpcdGNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbiAyODc6XHRcdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiAyODg6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDI4OTpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMjkwOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMjkxOlx0XHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbiAyOTI6XHRcdGhlbHBcbiAyOTM6XHRcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XG4gMjk0Olx0XHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxuIDI5NTpcdFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcbiAyOTY6XHRcdCAgcHJvY2Vzc2luZyBvZiBTUnY2IHBhY2tldHMgYmFzZWQgb24gdGhlaXIgYWN0aXZlIHNlZ21lbnQuXG4gMjk3Olx0XG4gMjk4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjk5Olx0XG4gMzAwOlx0Y29uZmlnIElQVjZfU0VHNl9ITUFDXG4gMzAxOlx0XHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbiAzMDI6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDMwMzpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuIDMwNDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gMzA1Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuIDMwNjpcdFx0aGVscFxuIDMwNzpcdFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cbiAzMDg6XHRcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxuIDMwOTpcdFxuIDMxMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDMxMTpcdFxuIDMxMjpcdGNvbmZpZyBJUFY2X1NFRzZfQlBGXG4gMzEzOlx0XHRkZWZfYm9vbCB5XG4gMzE0Olx0XHRkZXBlbmRzIG9uIElQVjZfU0VHNl9MV1RVTk5FTFxuIDMxNTpcdFx0ZGVwZW5kcyBvbiBJUFY2ID0geVxuIDMxNjpcdFxuIDMxNzpcdGNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxuIDMxODpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbiAzMTk6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDMyMDpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMzIxOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMzIyOlx0XHRoZWxwXG4gMzIzOlx0XHQgIFN1cHBvcnQgZm9yIFJGQzY1NTQgUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcbiAzMjQ6XHRcdCAgdHVubmVscyBtZWNoYW5pc20uXG4gMzI1Olx0XG4gMzI2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzI3Olx0XG4gMzI4Olx0Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcbiAzMjk6XHRcdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjM0CgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDc3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjYgU1JIIFJlY2VpdmUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGlwdjZfc3JoX3JjdmAsIHdoaWNoIGlzIHRoZSBoZWFydCBvZiBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgcHJvY2Vzc2luZy4gVG8gbWFrZSBzdXJlIEkgY292ZXIgZXZlcnl0aGluZywgSSYjMzk7bSBnb2luZyB0byBlbmFibGUgYElQVjZgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYW5kIGBJUFY2X1NFRzZfSE1BQ2AuIE5vdywgYElQVjZfU0VHNl9MV1RVTk5FTGAgYWxzbyBwdWxscyBpbiBgc2VnNl9pcHR1bm5lbC5jYCBhbmQgYHNlZzZfbG9jYWwuY2AsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gVGhlIGFjdHVhbCBwYXRjaCBpcyBpbiBgZXh0aGRycy5jYCwgd2hpY2ggaXMgY29tcGlsZWQgaWYgYElQVjZgIGlzIHNldC4gIEJ1dCBlbmFibGluZyB0aGUgYFNFRzZgIGZlYXR1cmVzIHdpbGwgbGlrZWx5IGJlIGJlbmVmaWNpYWwgZm9yIG1vcmUgZ2VuZXJhbCBTUnY2IGZ1enppbmcuCgpMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGNvZGUgY2hhbmdlczoKCmBgYGMKQEAgLTQ1Miw4ICYjNDM7NDUyLDYgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAloZHItJmd0O3NlZ21lbnRzX2xlZnQtLTsKIAlhZGRyID0gaGRyLSZndDtzZWdtZW50cyAmIzQzOyBoZHItJmd0O3NlZ21lbnRzX2xlZnQ7CiAKLQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOwotCiAJaWYgKHNrYi0mZ3Q7aXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKQogCQlzZWc2X3VwZGF0ZV9jc3VtKHNrYik7CiAKQEAgLTQ2Miw2ICYjNDM7NDYwLDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpcDZfcm91dGVfaW5wdXQoc2tiKTsKIAogCWlmIChza2JfZHN0KHNrYiktJmd0O2Vycm9yKSB7CiYjNDM7CQlza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7CiAJCWRzdF9pbnB1dChza2IpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtNDc2LDEwICYjNDM7NDc1LDEwIEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJCX0KIAkJaXB2Nl9oZHIoc2tiKS0mZ3Q7aG9wX2xpbWl0LS07CiAKLQkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKIAkJZ290byBsb29wZWRfYmFjazsKIAl9CiAKJiM0MzsJc2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpOwogCWRzdF9pbnB1dChza2IpOwogCiAJcmV0dXJuIC0xOwpgYGAKClJpZ2h0LCBpdCYjMzk7cyBhIGNyaXRpY2FsIGZpeCwgY29ycmVjdGx5IGFkanVzdGluZyB0aGUgYHNrYmAgb2Zmc2V0IGJlZm9yZSBjYWxsaW5nIGBkc3RfaW5wdXQoKWAuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIElQdjYgbmV0d29ya2luZyBzdGFjayBhbmQgaXMgZXNzZW50aWFsIGZvciByZWxpYWJsZSBvcGVyYXRpb24gYW5kIHRoZXJlZm9yZSBmdXp6aW5nLgoKSSYjMzk7bSBjb25maWRlbnQgSSBuZWVkIHRvIGluY2x1ZGUgYGlwdjZfc3JoX3JjdmAgYW5kIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YC4gU2luY2UgdGhleSBhcmUgYm90aCBpbiB0aGUgY3JpdGljYWwgcGF0aCB0byBnZXR0aW5nIElQdjYgdHJhZmZpYyBwcm9jZXNzZWQsIHRoZXkgYm90aCBuZWVkIHRvIGJlIGNvdmVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfSE1BQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICAgJiMzNDtpcHY2X3J0aGRyX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHJlY2VpdmUgcGF0aCAoYGlwdjZfc3JoX3JjdmApIHRvIGNvcnJlY3RseSBhZGp1c3QgdGhlIGBza2JgIG5ldHdvcmsgb2Zmc2V0IGJlZm9yZSBjYWxsaW5nIGBkc3RfaW5wdXQoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBoYW5kbGVzIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9ITUFDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcmVjZWl2ZSBwYXRoIChgaXB2Nl9zcmhfcmN2YCkgdG8gY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYmAgbmV0d29yayBvZmZzZXQgYmVmb3JlIGNhbGxpbmcgYGRzdF9pbnB1dCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGhhbmRsZXMgSVB2NiBleHRlbnNpb24gaGVhZGVycywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGBza2ItXHUwMDNlZGF0YWAgaXMgcmVzdG9yZWQgdG8gdGhlIG5ldHdvcmsgaGVhZGVyIGluIGBpcHY2X3NyaF9yY3YoKWAuIEluc3RlYWQgb2YgcHVzaGluZyBhIGZpeGVkIHNpemUgKGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCksIGl0IHB1c2hlcyBgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCB0byBjb3JyZWN0bHkgYWNjb3VudCBmb3IgYW55IGV4dGVuc2lvbiBoZWFkZXJzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2tiX3B1c2hgIGNvdWxkIGluY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlYWU5NTYwZTNlNzcwMDNjNmU3MzM4NTU0OWQyZDAzMmJkNjU5NGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxMjoxNzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuYwppbmRleCA5YzY3N2ViMWQxYTYxLi40YzQwNzUyMGU5ZGFhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jCkBAIC00NTIsOCAmIzQzOzQ1Miw2IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJaGRyLSZndDtzZWdtZW50c19sZWZ0LS07CiAJYWRkciA9IGhkci0mZ3Q7c2VnbWVudHMgJiM0MzsgaGRyLSZndDtzZWdtZW50c19sZWZ0OwogCi0Jc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKLQogCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkKIAkJc2VnNl91cGRhdGVfY3N1bShza2IpOwogCkBAIC00NjIsNiAmIzQzOzQ2MCw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJaXA2X3JvdXRlX2lucHV0KHNrYik7CiAKIAlpZiAoc2tiX2RzdChza2IpLSZndDtlcnJvcikgewomIzQzOwkJc2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpOwogCQlkc3RfaW5wdXQoc2tiKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTQ3NiwxMCAmIzQzOzQ3NSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQl9CiAJCWlwdjZfaGRyKHNrYiktJmd0O2hvcF9saW1pdC0tOwogCi0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiAJCWdvdG8gbG9vcGVkX2JhY2s7CiAJfQogCiYjNDM7CXNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKIAlkc3RfaW5wdXQoc2tiKTsKIAogCXJldHVybiAtMTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHY2IFNSSCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpcHY2X3NyaF9yY3ZgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZXMgYXJlIGFyb3VuZCBgc2tiX3B1c2hgIGFuZCBgc2tiX3B1bGxgLiBJIHNlZSB0aGF0IHRoZXkmIzM5O3JlIHJlbW92aW5nIGBza2JfcHVzaGAgb2YgdGhlIElQdjYgaGVhZGVyIHNpemUgYW5kIGFkZGluZyBgc2tiX3B1c2hgIG9mIHRoZSAqbmVnYXRpdmUqIG5ldHdvcmsgb2Zmc2V0IGluIGEgY291cGxlIG9mIHBsYWNlcy4gVGhleSYjMzk7cmUgYWxzbyByZW1vdmluZyB0aGUgY29ycmVzcG9uZGluZyBgc2tiX3B1bGxgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHdpdGhpbiBJUHY2IHBhY2tldHMuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgd2l0aCBtZW1vcnkgc2FmZXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGludHJvZHVjZXMgYW55IHJpc2tzIG9mIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZXZlbiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdXNlIG9mIGBza2JfcHVzaGAgYW5kIGBza2JfcHVsbGAgYXJlIHRoZSBjb3JlIG9mIHRoaXMuIFRoZXkmIzM5O3JlIG1vZGlmeWluZyB0aGUgYHNrYi0mZ3Q7ZGF0YWAgcG9pbnRlciBhbmQgYHNrYi0mZ3Q7bGVuYC4KCk5vdywgaWYgYHNrYl9wdXNoYCBwdXNoZXMgaW50byBzb21lIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCB0aGVuIHRoYXQgbWVtb3J5IGlzIHNlbnQgdG8gdXNlciBzcGFjZSBvciByZWFkLCB0aGF0JiMzOTtzIGEgcHJvYmxlbS4gQnV0IHdhaXQsIGBza2JfcHVzaGAgKmp1c3QqIG1vdmVzIGBza2ItJmd0O2RhdGFgIGJhY2t3YXJkLiBUaGUgbWVtb3J5IGJlaW5nIG1vdmVkIG92ZXIgaXMgKnVzdWFsbHkqIHRoZSBwYWNrZXQgaGVhZGVyLCB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHJlY2VpdmVkIG9yIGFsbG9jYXRlZC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcmVzdG9yaW5nIHRoZSBoZWFkZXIgcG9pbnRlci4gT2theSwgc28gaWYgaXQgcHVzaGVzICp0b28gbXVjaCosIHdlIG1pZ2h0IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBpbiBtb3N0IGNhc2VzLCBgc2tiX3B1c2hgIGlzIHVzZWQgdG8gcmVzdG9yZSB0aGUgaGVhZGVyIHBvaW50ZXIgYXMgaXQgd2FzIGJlZm9yZSBzb21lIG9wZXJhdGlvbiBvbiB0aGUgcGFja2V0LgoKSG9sZCBvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSB1c2Ugb2YgYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBMZXQmIzM5O3MgZmlndXJlIHRoaXMgb3V0Li4uIElmIGBza2JfbmV0d29ya19vZmZzZXQoc2tiKWAgaXMgbmVnYXRpdmUsIHRoZW4gdGhhdCYjMzk7cyBwb3NpdGl2ZS4gV2FpdCwgaXNuJiMzOTt0IGl0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYHNrYi0mZ3Q7bmV0d29ya19oZWFkZXJgIGFuZCBgc2tiLSZndDtkYXRhYD8gTm90IGBza2ItJmd0O21hY19oZWFkZXJgLCBJIHJlbWVtYmVyIGl0IG5vdy4gU28sICBgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCBpcyBgc2tiLSZndDtkYXRhIC0gc2tiLSZndDtuZXR3b3JrX2hlYWRlcmAuIFJpZ2h0LCBpZiBgc2tiLSZndDtkYXRhYCBpcyAqYWZ0ZXIqIGBza2ItJmd0O25ldHdvcmtfaGVhZGVyYCwgdGhlIHJlc3VsdCBpcyBwb3NpdGl2ZSwgYW5kIGBza2JfcHVzaGAgaXMgbW92aW5nIGBza2ItJmd0O2RhdGFgIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXR3b3JrIGhlYWRlci4gVGhhdCBtYWtlcyBzZW5zZS4gVGhhdCYjMzk7cyBhIHN0YW5kYXJkIHdheSB0byByZXN0b3JlIHRoZSBuZXR3b3JrIGhlYWRlciBwb2ludGVyLgoKU28sIGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZT8gTm8sIEkgZG9uJiMzOTt0IHRoaW5rIHNvLiBgc2tiX3B1c2hgIGFuZCBgc2tiX3B1bGxgIGFyZSBqdXN0IG1hbmlwdWxhdGluZyBwb2ludGVycyAqd2l0aGluKiB0aGUgYWxsb2NhdGVkIGBza2JgIGJ1ZmZlci4gVGhlIGJ1ZmZlciBpdHNlbGYgY29udGFpbnMgdGhlIHBhY2tldCB3ZSByZWNlaXZlZC4gSWYgdGhlcmUgaXMgYSBidWcgaGVyZSwgaXQmIzM5O3MgbW9yZSBsaWtlbHkgdG8gYmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkL3dyaXRlIGlzc3VlLCB3aGljaCBzaG91bGQgaG9wZWZ1bGx5IGJlIGNhdWdodCBieSBLQVNBTiBvciBsb2dpYyBlcnJvcnMuCgpMZXQgbWUgdGhpbmsuLi4gaXQmIzM5O3MgcHJvYmFibHkgZml4aW5nIGFuIGlzc3VlIHdoZXJlIGBza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpYCB3YXMgYmVpbmcgdXNlZCwgYnV0IHRoZSBuZXR3b3JrIGhlYWRlciB3YXNuJiMzOTt0ICpleGFjdGx5KiB0aGF0IHNpemUg4oCTIGl0IGNvdWxkIGJlIGJpZ2dlciwgd2l0aCBleHRlbnNpb24gaGVhZGVycy4gQnkgdXNpbmcgYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAsIHRoZSBwYXRjaCBjb3JyZWN0bHkgcmVzdG9yZXMgdGhlIG5ldHdvcmsgaGVhZGVyIHBvaW50ZXIgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXJlIHdlcmUgZXh0ZW5zaW9uIGhlYWRlcnMgb3Igbm90LiBUaGF0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb3JyZWN0IHBhY2tldCBwcm9jZXNzaW5nLCB3aGljaCBhcmUgdGhlIG1haW4gY29uY2VybnMuIEl0JiMzOTtzIG5vdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCBhbGwsIHRoZW4uCgpBbHJpZ2h0LCBzZWVtcyBzb2xpZC4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYGlwdjZfc3JoX3JjdmAgaW1wbGVtZW50YXRpb24gdG8gdmVyaWZ5IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmM9MzQyPXN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvZXh0aGRycy5jLTM3Mi17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTY1ND1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTY5MC1cdFx0Lyogc2VnbWVudCByb3V0aW5nICovXG5uZXQvaXB2Ni9leHRoZHJzLmM6NjkxOlx0XHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkyLVx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyMgoJCQkJCQkJb3V0cHV0OiAxOTIKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB5ZXQgcG90ZW50aWFsbHkgbmFzdHksIGJ1Zy4gSXQgc2VlbXMgdGhlIG9yaWdpbmFsIGNvZGUgaW4gYGlwdjZfc3JoX3JjdigpYCB1c2VkIGBza2JfcHVzaGAgd2l0aCBhIGZpeGVkIHNpemXigJRgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWDigJRidXQgdGhhdCYjMzk7cyBmbGF3ZWQuIElmIHRoZXJlIGFyZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIGludm9sdmVkLCB0aGF0IGZpeGVkIHNpemUgaXMgbGlrZWx5IHdyb25nLCBhbmQgdGhlIGBza2ItJmd0O2RhdGFgIHBvaW50ZXIgZ2V0cyBtaXNhZGp1c3RlZC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBhbiBvdXQtb2YtYm91bmRzIG9yIGxvZ2ljIGVycm9yLgoKTm93LCBmcm9tIG15IHBlcnNwZWN0aXZlLCB0aGlzIGlzICpleGFjdGx5KiB0aGUga2luZCBvZiBidWcgdGhhdCBLQVNBTiBleGNlbHMgYXQgY2F0Y2hpbmcuIElmIGBza2JfcHVzaGAgaXMgcHVzaGluZyB0b28gZmFyIGFuZCB0aGUgY29kZSBsYXRlciB0cmllcyB0byBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgdGhlIGFsbG9jYXRlZCBidWZmZXIsIEtBU0FOIHdpbGwgZmxhZyBpdCBpbW1lZGlhdGVseS4gVGhhdCYjMzk7cyB0aGUgaWRlYWwgc2l0dWF0aW9uLgoKS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4gV2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgYWxsb2NhdGVkIG9yIGV4cG9zZWQuIFRoZSBwYXRjaCYjMzk7cyBmaXggaW52b2x2ZXMgKmhvdyogdGhlIGV4aXN0aW5nIGJ1ZmZlciBpcyBhZGp1c3RlZCBhbmQgcHJvY2Vzc2VkLiBObyBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG5vdGhpbmcgbGlrZSB0aGF0LiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGBza2ItXHUwMDNlZGF0YWAgaXMgcmVzdG9yZWQgdG8gdGhlIG5ldHdvcmsgaGVhZGVyIGluIGBpcHY2X3NyaF9yY3YoKWAuIEluc3RlYWQgb2YgcHVzaGluZyBhIGZpeGVkIHNpemUgKGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCksIGl0IHB1c2hlcyBgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCB0byBjb3JyZWN0bHkgYWNjb3VudCBmb3IgYW55IGV4dGVuc2lvbiBoZWFkZXJzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2tiX3B1c2hgIGNvdWxkIGluY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGBza2ItXHUwMDNlZGF0YWAgaXMgcmVzdG9yZWQgdG8gdGhlIG5ldHdvcmsgaGVhZGVyIGluIGBpcHY2X3NyaF9yY3YoKWAuIEluc3RlYWQgb2YgcHVzaGluZyBhIGZpeGVkIHNpemUgKGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCksIGl0IHB1c2hlcyBgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCB0byBjb3JyZWN0bHkgYWNjb3VudCBmb3IgYW55IGV4dGVuc2lvbiBoZWFkZXJzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2tiX3B1c2hgIGNvdWxkIGluY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE3OjM0LjYxNTk4MDAzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDA2ODA2NjA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9ITUFDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9zcmhfcmN2XCIsXG4gICAgXCJpcHY2X3J0aGRyX3JjdlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBgc2tiLVxcdTAwM2VkYXRhYCBpcyByZXN0b3JlZCB0byB0aGUgbmV0d29yayBoZWFkZXIgaW4gYGlwdjZfc3JoX3JjdigpYC4gSW5zdGVhZCBvZiBwdXNoaW5nIGEgZml4ZWQgc2l6ZSAoYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgKSwgaXQgcHVzaGVzIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBhbnkgZXh0ZW5zaW9uIGhlYWRlcnMgdGhhdCBtaWdodCBiZSBwcmVzZW50LiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBza2JfcHVzaGAgY291bGQgaW5jb3JyZWN0bHkgYWRqdXN0IHRoZSBgc2tiLVxcdTAwM2VkYXRhYCBwb2ludGVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHBhdGggKGBpcHY2X3NyaF9yY3ZgKSB0byBjb3JyZWN0bHkgYWRqdXN0IHRoZSBgc2tiYCBuZXR3b3JrIG9mZnNldCBiZWZvcmUgY2FsbGluZyBgZHN0X2lucHV0KClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgaGFuZGxlcyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxNzozNC42MTU5ODYyODhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjM2OTA3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZWFlOTU2MGUzZTc3MDAzYzZlNzMzODU1NDlkMmQwMzJiZDY1OTRmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDEyOjE3OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuY1xcbmluZGV4IDljNjc3ZWIxZDFhNjEuLjRjNDA3NTIwZTlkYWEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jXFxuKysrIGIvbmV0L2lwdjYvZXh0aGRycy5jXFxuQEAgLTQ1Miw4ICs0NTIsNiBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQtLTtcXG4gXFx0YWRkciA9IGhkci1cXHUwMDNlc2VnbWVudHMgKyBoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQ7XFxuIFxcbi1cXHRza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbi1cXG4gXFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbiBcXHRcXHRzZWc2X3VwZGF0ZV9jc3VtKHNrYik7XFxuIFxcbkBAIC00NjIsNiArNDYwLDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0aXA2X3JvdXRlX2lucHV0KHNrYik7XFxuIFxcbiBcXHRpZiAoc2tiX2RzdChza2IpLVxcdTAwM2VlcnJvcikge1xcbitcXHRcXHRza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7XFxuIFxcdFxcdGRzdF9pbnB1dChza2IpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG5AQCAtNDc2LDEwICs0NzUsMTAgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0fVxcbiBcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQtLTtcXG4gXFxuLVxcdFxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuIFxcdFxcdGdvdG8gbG9vcGVkX2JhY2s7XFxuIFxcdH1cXG4gXFxuK1xcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcXG4gXFx0ZHN0X2lucHV0KHNrYik7XFxuIFxcbiBcXHRyZXR1cm4gLTE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE3OjM1Ljk0MDM1MjU0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYyNDc0NDYxMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TRUc2X0hNQUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHY2X3NyaF9yY3ZcIixcbiAgICBcImlwdjZfcnRoZHJfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHBhdGggKGBpcHY2X3NyaF9yY3ZgKSB0byBjb3JyZWN0bHkgYWRqdXN0IHRoZSBgc2tiYCBuZXR3b3JrIG9mZnNldCBiZWZvcmUgY2FsbGluZyBgZHN0X2lucHV0KClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgaGFuZGxlcyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZWFlOTU2MGUzZTc3MDAzYzZlNzMzODU1NDlkMmQwMzJiZDY1OTRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTI6MTc6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbmluZGV4IDljNjc3ZWIxZDFhNjEuLjRjNDA3NTIwZTlkYWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcbisrKyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuQEAgLTQ1Miw4ICs0NTIsNiBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQtLTtcbiBcdGFkZHIgPSBoZHItXHUwMDNlc2VnbWVudHMgKyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiBcbi1cdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4tXG4gXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcbiBcdFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xuIFxuQEAgLTQ2Miw2ICs0NjAsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aXA2X3JvdXRlX2lucHV0KHNrYik7XG4gXG4gXHRpZiAoc2tiX2RzdChza2IpLVx1MDAzZWVycm9yKSB7XG4rXHRcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcbiBcdFx0ZHN0X2lucHV0KHNrYik7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbkBAIC00NzYsMTAgKzQ3NSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gXHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gXHR9XG4gXG4rXHRza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7XG4gXHRkc3RfaW5wdXQoc2tiKTtcbiBcbiBcdHJldHVybiAtMTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE3OjM1Ljk0MDM1MzkyMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNDA1MTkyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBQYWNrZXQgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9pcHY2L2V4dGhkcnMuY2AsIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyB0byBgaXB2Nl9zcmhfcmN2YC4gSXQgc2VlbXMgdGhleSd2ZSBtYWRlIHNvbWUgaW50ZXJlc3RpbmcgYWRqdXN0bWVudHMgcmVsYXRlZCB0byBob3cgd2UgaGFuZGxlIHRoZSBJUHY2IGhlYWRlciBhbmQsIG1vc3QgbGlrZWx5LCBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHByb2Nlc3NpbmcuXG5cblRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcmVtb3ZhbCBvZiBgc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtgLiBUaGF0J3Mgc2lnbmlmaWNhbnQuIEl0IGltcGxpZXMgd2UncmUgbm8gbG9uZ2VyIGV4cGxpY2l0bHkgcHVzaGluZyB0aGUgSVB2NiBoZWFkZXIgb250byB0aGUgc3RhY2sgd2hlbiBoYW5kbGluZyB0aGUgcGFja2V0IGluIHRoaXMgZnVuY3Rpb24uIEluc3RlYWQsIHRoZXkndmUgYWRkZWQgYHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtgIGluIHR3byBsb2NhdGlvbnMgYmVmb3JlIGBkc3RfaW5wdXQoc2tiKTtgLiBUaGlzIGxvb2tzIGxpa2UgYSByZXBsYWNlbWVudCBmb3IgdGhlIGV4cGxpY2l0IHB1c2guIFVzaW5nIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGlzIGVzc2VudGlhbGx5IHB1c2hpbmcgYWxsIG5ldHdvcmsgaGVhZGVycy4gSSBzdXNwZWN0IHRoaXMgaXMgYWltZWQgYXQgbWFraW5nIHRoZSBjb2RlIG1vcmUgZ2VuZXJhbCBvciBwb3RlbnRpYWxseSBvcHRpbWl6aW5nIGhlYWRlciBwcm9jZXNzaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFNSSC4gV2Ugc2hvdWxkIGV4YW1pbmUgd2h5IHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBhbmQgd2hldGhlciB0aGUgbmV0d29yayBoZWFkZXJzIHdpbGwgYmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgZm9yIGFsbCB1c2VzLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSByZW1vdmFsIG9mIGBza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO2AgYmVmb3JlIHRoYXQgYGdvdG8gbG9vcGVkX2JhY2s7YC4gVGhpcyBtZWFucyB3ZSdyZSBubyBsb25nZXIgZXhwbGljaXRseSAqcG9wcGluZyogdGhlIElQdjYgaGVhZGVyIG9mZiBiZWZvcmUgbG9vcGluZyBiYWNrLiBTZWVtcyBjb25zaXN0ZW50IHdpdGggdGhlIGZpcnN0IGNoYW5nZSwgc28gdGhlIElQdjYgaGVhZGVyIGlzIG5vdCBiZWluZyBtYW51YWxseSBoYW5kbGVkLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGlkZWEgdGhhdCB0aGUgSVB2NiBoZWFkZXIgbWFuaXB1bGF0aW9uIGlzIG5vdyBoYW5kbGVkIGRpZmZlcmVudGx5LlxuXG5MZXQgbWUgZ28gYWhlYWQgYW5kIGRpdmUgaW50byBgaXB2Nl9zcmhfcmN2YCB3aXRoaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcmF0aW9uYWxlIGJlaGluZCB0aGVzZSBtb2RpZmljYXRpb25zIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaXMgd2hlcmUgSSBjYW4gc3RhcnQgdG8gZXZhbHVhdGUgdGhlIG92ZXJhbGwgaW1wYWN0LCBsb29rIGZvciBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgY2hhbmdlcyBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE3OjQxLjk4MDg3Njc0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDM4MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfc3JoX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jPTM0Mj1zdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzozNzE6c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz02NTQ9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTY5MC1cXHRcXHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NjkxOlxcdFxcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiKTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkyLVxcdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE3OjQyLjAzOTMyMzA4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDUzMzcwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogVGFyZ2V0IGZvciBGdXp6aW5nKipcblxuUmlnaHQsIGBpcHY2X3NyaF9yY3ZgIGlzIGludm9rZWQgZGlyZWN0bHkgZnJvbSBgaXB2Nl9ydGhkcl9yY3ZgLiBUaGF0IGNoYWluIG1lYW5zIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSwgYW5kIGdpdmVuIHRoYXQgaXQncyBoYW5kbGluZyBwb3RlbnRpYWxseSBjb21wbGV4IHBhY2tldCBzdHJ1Y3R1cmVzLCBpdCdzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBrbm93IHdoZXJlIHRoZSBlbnRyeXBvaW50IGlzLCBhbmQgdGhhdCBpbW1lZGlhdGVseSB1cHMgaXRzIHZhbHVlIGFzIGEgdGFyZ2V0LiBUaW1lIHRvIGRpZyBpbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGdvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjYgU2VnbWVudCBSb3V0aW5nLiBMZXQncyBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBhbmQgc2VlIHdoYXQga25vYnMgYW5kIGxldmVycyB3ZSBjYW4gdHdpZGRsZSB0byBnZXQgb3VyIGZ1enppbmcgY2FtcGFpZ24gZ29pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxNzo0NS41NDQ2NjI1MTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5NDY5MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9zcmhfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmM9MzQyPXN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzIte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTY1ND1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkwLVxcdFxcdC8qIHNlZ21lbnQgcm91dGluZyAqL1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2OTE6XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTItXFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTc6NDUuNjQwNjEzNTMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4Mzk0MTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIGZvciBDb25maWd1cmFibGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIFJlY2VwdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgYGlwdjZfc3JoX3JjdmAgaXNuJ3QgY29udHJvbGxlZCBieSBzb21lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBwcmFjdGljZSwgcmlnaHQ/IFlvdSBhbHdheXMgd2FudCB0byBlbGltaW5hdGUgdGhlIG9idmlvdXMgcG9zc2liaWxpdGllcywgbGlrZSBhIGRpc2FibGVkIGZlYXR1cmUsIGJlZm9yZSB5b3UgZGl2ZSBpbnRvIG1vcmUgY29tcGxleCBwcm9ibGVtcy4gSXQncyBlc3BlY2lhbGx5IGNydWNpYWwgd2l0aCBzb21ldGhpbmcgbGlrZSBJUHY2IHNlZ21lbnQgcm91dGluZywgd2hlcmUgYSBtaXNjb25maWd1cmF0aW9uIGNvdWxkIGVhc2lseSBiZSB0aGUgcm9vdCBjYXVzZS4gVGhpcyBjb3VsZCBiZSBhIGdsb2JhbCBzZXR0aW5nLCBhIHBlci1pbnRlcmZhY2Ugc2V0dGluZywgbWF5YmUgZXZlbiBzb21ldGhpbmcgYXBwbGllZCB2aWEgYSBwb2xpY3kgbWFwLiBJIG5lZWQgdG8ga25vdyB0aGUgcG90ZW50aWFsIGZvciBleHRlcm5hbCBmYWN0b3JzLiBXaGF0IGFyZSB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBiZSBpbiBwbGF5IGZvciBgaXB2Nl9zcmhfcmN2YD8gSSBuZWVkIHRvIGNoZWNrIGFsbCB0aGUgbGlrZWx5IHN1c3BlY3RzLiBUaGVuLCBhbmQgb25seSB0aGVuLCBjYW4gSSByZWFsbHkgc3RhcnQgdG8gbmFycm93IGRvd24gd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLiBUaGF0J3MgbXkgbmV4dCBsb2dpY2FsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxNzo0OC42MjQ1NjM0MDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTY2NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JUFY2X1NFRzZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTI0PWlwdjYtJChDT05GSUdfTkVUTEFCRUwpICs9IGNhbGlwc28ub1xcbm5ldC9pcHY2L01ha2VmaWxlOjI1OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSArPSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXFxubmV0L2lwdjYvTWFrZWZpbGU6MjY6aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfSE1BQykgKz0gc2VnNl9obWFjLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0yNy1pcHY2LSQoQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMKSArPSBycGxfaXB0dW5uZWwub1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0xODE9c3RhdGljIHN0cnVjdCBpcHY2X2RldmNvbmYgaXB2Nl9kZXZjb25mIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIyOS1cXHQuc2VnNl9lbmFibGVkXFx0XFx0PSAwLFxcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjMwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIzMS1cXHQuc2VnNl9yZXF1aXJlX2htYWNcXHQ9IDAsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTQtXFx0LnNlZzZfZW5hYmxlZFxcdFxcdD0gMCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI5NTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTYtXFx0LnNlZzZfcmVxdWlyZV9obWFjXFx0PSAwLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz01NjYyPXN0YXRpYyB2b2lkIGlwdjZfc3RvcmVfZGV2Y29uZihjb25zdCBzdHJ1Y3QgaXB2Nl9kZXZjb25mICpjbmYsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MzYtXFx0YXJyYXlbREVWQ09ORl9TRUc2X0VOQUJMRURdID0gUkVBRF9PTkNFKGNuZi1cXHUwMDNlc2VnNl9lbmFibGVkKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU3Mzc6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczOC1cXHRhcnJheVtERVZDT05GX1NFRzZfUkVRVUlSRV9ITUFDXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZXNlZzZfcmVxdWlyZV9obWFjKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Njg2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhZGRyY29uZl9zeXNjdGxbXSA9IHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIzOS1cXHR9LFxcbm5ldC9pcHY2L2FkZHJjb25mLmM6NzI0MDojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvYWRkcmNvbmYuYy03MjQxLVxcdHtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy00Ny0jaW5jbHVkZSBcXHUwMDNjbmV0L3NlZzYuaFxcdTAwM2VcXG5uZXQvaXB2Ni9leHRoZHJzLmM6NDg6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L2V4dGhkcnMuYy00OS0jaW5jbHVkZSBcXHUwMDNjbmV0L3NlZzZfaG1hYy5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTM3MT1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTM5NS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6Mzk2OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzk3LVxcdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKSB7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9MTEyNT1zdGF0aWMgdTggaXB2Nl9wdXNoX3J0aGRyNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwcm90byxcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTUzLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMTU0OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE1NS1cXHRpZiAoc3JfaGFzX2htYWMoc3JfcGhkcikpIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzYuYz0xNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHNlZzZfZ2VubF9wb2xpY3lbU0VHNl9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2lwdjYvc2VnNi5jLTE1MC1cXG5uZXQvaXB2Ni9zZWc2LmM6MTUxOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2LmMtMTUyLVxcbi0tXFxubmV0L2lwdjYvc2VnNi5jPTI2Nj1zdGF0aWMgaW50IHNlZzZfZ2VubF9nZXRfdHVuc3JjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmMtMjk5LVxcbm5ldC9pcHY2L3NlZzYuYzozMDA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzYuYy0zMDEtXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjUtI2luY2x1ZGUgXFx1MDAzY25ldC9kc3RfY2FjaGUuaFxcdTAwM2VcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6MjY6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0yNy0jaW5jbHVkZSBcXHUwMDNjbmV0L3NlZzZfaG1hYy5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTEzOT1zdGF0aWMgaW50IF9fc2VnNl9kb19zcmhfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfc3JfaGRyICpvc3JoLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTE5OS1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6MjAwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjAxLVxcdGlmIChzcl9oYXNfaG1hYyhpc3JoKSkge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTIyMz1zdGF0aWMgaW50IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTMyNi1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6MzI3OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzI4LVxcdGlmICh1bmxpa2VseSghc2tpcF9zcmggXFx1MDAyNlxcdTAwMjYgc3JfaGFzX2htYWMoaXNyaCkpKSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM9MzQzPXN0YXRpYyBpbnQgX19zZWc2X2RvX3NyaF9pbmxpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfc3JfaGRyICpvc3JoLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTM3OC1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6Mzc5OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzgwLVxcdGlmIChzcl9oYXNfaG1hYyhpc3JoKSkge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI3LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXBfdHVubmVscy5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyODojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI5LSNpbmNsdWRlIFxcdTAwM2NuZXQvc2VnNl9obWFjLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjE2PXN0YXRpYyBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKmdldF9hbmRfdmFsaWRhdGVfc3JoKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjIzLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjQ6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjUtXFx0aWYgKCFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjMyPXN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQwLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDE6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDItXFx0aWYgKHNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTc0Mj1zdGF0aWMgaW50IGVuZF9mbHY4OTg2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc1My1cXHRwaW5mbyA9IHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHNyaCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjc1NDojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc1NS1cXHRpZiAoc3JoIFxcdTAwMjZcXHUwMDI2ICFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE3OjQ4LjczMzUzNTY0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDA4OTcxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHNlZWluZyBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAgYW5kIGBDT05GSUdfSVBWNl9TRUc2X0hNQUNgIHBvcCB1cC4gVGhpcyBtYWtlcyBtZSB3b25kZXIuLi4gaXMgdGhlcmUgYSBtb3JlIGdlbmVyYWwgYENPTkZJR19JUFY2X1NFRzZgIG9wdGlvbj8gSXQgd291bGQgYmUgd2VpcmQgdG8gaGF2ZSB0aGUgc3BlY2lmaWMgb25lcyB3aXRob3V0IGEgYnJvYWRlciBlbmFibGluZyBmbGFnLiBCZXN0IHRvIGNoZWNrIHRoZSBzb3VyY2UuIExldCdzIGRpZyBpbnRvIGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQgZ2V0IHRoZSB3aG9sZSBwaWN0dXJlIG9mIHdoYXQncyBhdmFpbGFibGUgdGhlcmUuIEl0J2xsIGdpdmUgYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgd2hvbGUgSVB2NiBzZWdtZW50IHJvdXRpbmcgZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTc1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTc6NTIuMTc0NDM1NjE5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDg1MDYzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9TRUc2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTc6NTIuMjM1MjkyOTY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDc1OTc0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBTUkggUmVjZXB0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaXB2Nl9zcmhfcmN2YCDigJMgYW5kIHRoYXQncyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gUmlnaHQsIHNvIGl0J3MgcHJvYmFibHkgaGFuZGxpbmcgdGhlIHJlY2VwdGlvbiBvZiBTb3VyY2UgUm91dGluZyBIZWFkZXIgKFNSSCkgZXh0ZW5zaW9uIGhlYWRlcnMgd2l0aGluIElQdjYgcGFja2V0cy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCBpcyB0aGlzIGNvZGUgcGF0aCBldmVuICpjb21waWxlZCogdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXM/IE9yIGlzIGl0IGNvbmRpdGlvbmFsaXplZCBzb21laG93PyBJIG5lZWQgdG8gY2hlY2sgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGRpc2FibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYG5ldC9pcHY2L2V4dGhkcnMuY2AgaXRzZWxmLCBhbmQgSSdsbCBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgaXB2Nl9zcmhfcmN2YCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGAjaWZkZWZgIGJsb2NrcywgYENPTkZJR19gIG9wdGlvbnMsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBjb250cm9scyB3aGV0aGVyIHRoaXMgY29kZSBpcyBpbmNsdWRlZCBpbiB0aGUga2VybmVsIGltYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucyAqZmlyc3QqIGJlZm9yZSBJIGNhbiBwcm9jZWVkIHdpdGggdW5kZXJzdGFuZGluZyB0aGUgYWN0dWFsIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTc6NTYuMTgyODkzMzEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTcyMzQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3NyaF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuYz0zNDI9c3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTM3MC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzcxOnN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvZXh0aGRycy5jLTM3Mi17XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjU0PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTAtXFx0XFx0Lyogc2VnbWVudCByb3V0aW5nICovXFxubmV0L2lwdjYvZXh0aGRycy5jOjY5MTpcXHRcXHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYik7XFxubmV0L2lwdjYvZXh0aGRycy5jLTY5Mi1cXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxNzo1Ni4yNDg2MjAxM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIwNjgzNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciBSZWNlaXZlcioqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24sIGFuZCBpdCdzIHN0cmlraW5nIG1lIHRoYXQgaXQgc2VlbXMgdG8gYmUgY29uc2lzdGVudGx5IGNvbXBpbGVkIHdoZW5ldmVyIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBgQ09ORklHX0lQVjZgLCBpcyBlbmFibGVkLiBUaGF0J3MgYSBwYXR0ZXJuIHRoYXQgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGlzLlxuXG5NeSBpbml0aWFsIGFzc3VtcHRpb24gbWlnaHQgYmUgY29ycmVjdCwgYnV0IEkgc2hvdWxkbid0IGp1bXAgdG8gY29uY2x1c2lvbnMuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhlIGNvZGUgc3Vycm91bmRpbmcgYGlwdjZfc3JoX3JjdmAuIExldCdzIGNvbmZpcm0gd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHdyYXBwZWQgaW5zaWRlIGFueSBjb25kaXRpb25hbCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgYCNpZmRlZmAgc3RhdGVtZW50cywgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkgbmVlZCB0byBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlcmUncyBhIG1vcmUgbnVhbmNlZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbnZvbHZlZCwgcG90ZW50aWFsbHkgdGllZCB0byBhbm90aGVyIGZlYXR1cmUgZmxhZyBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZy4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxODowMC4zNjkzMDY4MDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdCAqL1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gMzUzOlxcdFxcdGFkZHIgPSBoZHItXFx1MDAzZXNlZ21lbnRzICsgaGRyLVxcdTAwM2VzZWdtZW50c19sZWZ0O1xcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQrKztcXG4gMzU2OlxcdFxcdGZyb20gPSAqKF9fYmUzMiAqKWhkcjtcXG4gMzU3OlxcdFxcbiAzNTg6XFx0XFx0aGRyLVxcdTAwM2VzZWdtZW50c19sZWZ0LS07XFxuIDM1OTpcXHRcXHR0byA9ICooX19iZTMyICopaGRyO1xcbiAzNjA6XFx0XFxuIDM2MTpcXHRcXHQvKiB1cGRhdGUgc2tiIGNzdW0gd2l0aCBkaWZmIHJlc3VsdGluZyBmcm9tIHNlZ19sZWZ0IGRlY3JlbWVudCAqL1xcbiAzNjI6XFx0XFxuIDM2MzpcXHRcXHR1cGRhdGVfY3N1bV9kaWZmNChza2IsIGZyb20sIHRvKTtcXG4gMzY0OlxcdFxcbiAzNjU6XFx0XFx0LyogY29tcHV0ZSBjc3VtIGRpZmYgYmV0d2VlbiBjdXJyZW50IGFuZCBuZXh0IHNlZ21lbnQgYW5kIHVwZGF0ZSAqL1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHR1cGRhdGVfY3N1bV9kaWZmMTYoc2tiLCAoX19iZTMyICopKFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkciksXFxuIDM2ODpcXHRcXHRcXHRcXHQgICAoX19iZTMyICopYWRkcik7XFxuIDM2OTpcXHR9XFxuIDM3MDpcXHRcXG4gMzcxOlxcdHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuIDM3MjpcXHR7XFxuIDM3MzpcXHRcXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuIDM3NDpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gMzc1OlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqaGRyO1xcbiAzNzY6XFx0XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcXG4gMzc3OlxcdFxcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjtcXG4gMzc4OlxcdFxcdGludCBhY2NlcHRfc2VnNjtcXG4gMzc5OlxcdFxcbiAzODA6XFx0XFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG4gMzgzOlxcdFxcdGlmICghaWRldikge1xcbiAzODQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM4NTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDM4NjpcXHRcXHR9XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdGFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXFx1MDAzZXNlZzZfZW5hYmxlZCksXFxuIDM4OTpcXHRcXHRcXHRcXHQgIFJFQURfT05DRShpZGV2LVxcdTAwM2VjbmYuc2VnNl9lbmFibGVkKSk7XFxuIDM5MDpcXHRcXG4gMzkxOlxcdFxcdGlmICghYWNjZXB0X3NlZzYpIHtcXG4gMzkyOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzOTM6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAzOTQ6XFx0XFx0fVxcbiAzOTU6XFx0XFxuIDM5NjpcXHQjaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxuIDM5NzpcXHRcXHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSkge1xcbiAzOTg6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM5OTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDQwMDpcXHRcXHR9XFxuIDQwMTpcXHQjZW5kaWZcXG4gNDAyOlxcdFxcbiA0MDM6XFx0bG9vcGVkX2JhY2s6XFxuIDQwNDpcXHRcXHRpZiAoaGRyLVxcdTAwM2VzZWdtZW50c19sZWZ0ID09IDApIHtcXG4gNDA1OlxcdFxcdFxcdGlmIChoZHItXFx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY2IHx8IGhkci1cXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjQpIHtcXG4gNDA2OlxcdFxcdFxcdFxcdGludCBvZmZzZXQgPSAoaGRyLVxcdTAwM2VoZHJsZW4gKyAxKSBcXHUwMDNjXFx1MDAzYyAzO1xcbiA0MDc6XFx0XFxuIDQwODpcXHRcXHRcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSxcXG4gNDA5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSk7XFxuIDQxMDpcXHRcXHRcXHRcXHRza2JfcHVsbChza2IsIG9mZnNldCk7XFxuIDQxMTpcXHRcXHRcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLFxcbiA0MTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgb2Zmc2V0KTtcXG4gNDEzOlxcdFxcbiA0MTQ6XFx0XFx0XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDQxNTpcXHRcXHRcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiA0MTY6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcXG4gNDE3OlxcdFxcdFxcdFxcdGlmIChoZHItXFx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY0KVxcbiA0MTg6XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcXG4gNDE5OlxcdFxcdFxcdFxcdF9fc2tiX3R1bm5lbF9yeChza2IsIHNrYi1cXHUwMDNlZGV2LCBuZXQpO1xcbiA0MjA6XFx0XFxuIDQyMTpcXHRcXHRcXHRcXHRuZXRpZl9yeChza2IpO1xcbiA0MjI6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0MjM6XFx0XFx0XFx0fVxcbiA0MjQ6XFx0XFxuIDQyNTpcXHRcXHRcXHRvcHQtXFx1MDAzZXNyY3J0ID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpO1xcbiA0MjY6XFx0XFx0XFx0b3B0LVxcdTAwM2VsYXN0b3B0ID0gb3B0LVxcdTAwM2VzcmNydDtcXG4gNDI3OlxcdFxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSAoaGRyLVxcdTAwM2VoZHJsZW4gKyAxKSBcXHUwMDNjXFx1MDAzYyAzO1xcbiA0Mjg6XFx0XFx0XFx0b3B0LVxcdTAwM2VuaG9mZiA9IChcXHUwMDI2aGRyLVxcdTAwM2VuZXh0aGRyKSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gNDMxOlxcdFxcdH1cXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0aWYgKGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCBcXHUwMDNlPSAoaGRyLVxcdTAwM2VoZHJsZW4gXFx1MDAzZVxcdTAwM2UgMSkpIHtcXG4gNDM0OlxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gNDM1OlxcdFxcdFxcdGljbXB2Nl9wYXJhbV9wcm9iKHNrYiwgSUNNUFY2X0hEUl9GSUVMRCxcXG4gNDM2OlxcdFxcdFxcdFxcdFxcdCAgKChcXHUwMDI2aGRyLVxcdTAwM2VzZWdtZW50c19sZWZ0KSAtXFxuIDQzNzpcXHRcXHRcXHRcXHRcXHQgICBza2JfbmV0d29ya19oZWFkZXIoc2tiKSkpO1xcbiA0Mzg6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0Mzk6XFx0XFx0fVxcbiA0NDA6XFx0XFxuIDQ0MTpcXHRcXHRpZiAoc2tiX2Nsb25lZChza2IpKSB7XFxuIDQ0MjpcXHRcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7XFxuIDQ0MzpcXHRcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcXG4gNDQ0OlxcdFxcdFxcdFxcdFxcdFxcdElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTtcXG4gNDQ1OlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0NDY6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0NDc6XFx0XFx0XFx0fVxcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXHRcXHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MDAuMzY5NDc3ODk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTI4NTQ4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUHY2IENvbmZpZ3VyYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSdzIGJlaGF2aW9yIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaWYgYENPTkZJR19JUFY2YCBpcyBvbiwgY29tcGlsYXRpb24gaGFwcGVucy4gVGhhdCdzIGV4cGVjdGVkLiBCdXQgaGFuZyBvbiwgdGhpcyBgYWNjZXB0X3NlZzZgIGZ1bmN0aW9uLi4uIHRoYXTigJlzIG5vdCBxdWl0ZSByaWdodC4gSXQgbG9va3MgbGlrZSBpdCAqbmVlZHMqIGBzZWc2X2VuYWJsZWRgIHRvIGJlIHNldC4gQW5kIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYHNlZzZfZW5hYmxlZGAgaXMgcGFydCBvZiBgaXB2Nl9kZXZjb25mYC4gTm93IEkgaGF2ZSB0byBhc2sgbXlzZWxmLCBpcyB0aGF0IGFsd2F5cyBnb2luZyB0byBiZSBwcmVzZW50PyBJJ2QgYmV0dGVyIGRvdWJsZSBjaGVjayB0aGF0IGBzZWc2X2VuYWJsZWRgIGlzIGFsd2F5cyBkZWZpbmVkLiBMZXQgbWUganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L2lwdjYuaGAgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdCwgb3RoZXJ3aXNlLCB0aGlzIGNvdWxkIGJlIGEgbmFzdHkgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODg3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxODowNS40ODIzMzU5NjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODcwNTI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2VuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9pcHY2LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pcHY2Lmg9MTM9c3RydWN0IGlwdjZfZGV2Y29uZiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC03OS1cXHRfX3MzMlxcdFxcdGtlZXBfYWRkcl9vbl9kb3duO1xcbmluY2x1ZGUvbGludXgvaXB2Ni5oOjgwOlxcdF9fczMyXFx0XFx0c2VnNl9lbmFibGVkO1xcbmluY2x1ZGUvbGludXgvaXB2Ni5oLTgxLSNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MDYuMjQxMDQ1NDM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjk1MDI1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgc2VnNl9lbmFibGVkYCBmbGFnLiBJdCBzZWVtcyBsaWtlIGl0J3MgKmFsd2F5cyogcHJlc2VudCwgcmVnYXJkbGVzcy4gVGhhdCBpbXBsaWVzIGBpcHY2X3NyaF9yY3ZgIGlzIGFsd2F5cyBjb21waWxlZCBpbiwgbWVhbmluZyBpdCdzIHRoZXJlIGFuZCByZWFjaGFibGUgaWYgYHNlZzZfZW5hYmxlZGAgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBzeXNjdGwgaW50ZXJmYWNlLiBIbW0sIHRoYXQgZmVlbHMgYSBiaXQgc3VycHJpc2luZy4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYHNlZzZfZW5hYmxlZGAgc3lzY3RsIHNldHRpbmcgaXMgKmFsd2F5cyogYXZhaWxhYmxlIGFzIEkgYmVsaWV2ZS4gV2hlcmUgd291bGQgdGhhdCBzZXR0aW5nIGJlIGRlZmluZWQ/IExldCBtZSBqdXN0IHF1aWNrbHkganVtcCBvdmVyIHRvIGBuZXQvaXB2Ni9hZGRyY29uZi5jYCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjY3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MTAuMzEwNTUxMjA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU5NTgzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVWQ09ORl9TRUc2X0VOQUJMRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvYWRkcmNvbmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jPTU2NjI9c3RhdGljIHZvaWQgaXB2Nl9zdG9yZV9kZXZjb25mKGNvbnN0IHN0cnVjdCBpcHY2X2RldmNvbmYgKmNuZixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczNS1cXHRhcnJheVtERVZDT05GX0tFRVBfQUREUl9PTl9ET1dOXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZWtlZXBfYWRkcl9vbl9kb3duKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU3MzY6XFx0YXJyYXlbREVWQ09ORl9TRUc2X0VOQUJMRURdID0gUkVBRF9PTkNFKGNuZi1cXHUwMDNlc2VnNl9lbmFibGVkKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MzctI2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxODoxMC40MjY1MTQ0M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTU4MzUxMjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBGb2N1cyBvbiBJUHY2IFNSSCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBjb25maXJtZWQ7IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGBpcHY2X3NyaF9yY3ZgIOKAkyBhbmQgeWVzLCBgaXB2Nl9zcmhfcmN2YCBpcyBpbmRlZWQgcmVhY2hhYmxlLiBUaGUgY2hhbmdlIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgc3dhcHMgYHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7YCBmb3IgYHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtgLiBJdCdzIGNsZWFybHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBza2Igb2Zmc2V0IGlzc3VlLiBUaGlzIGZlZWxzIHNpZ25pZmljYW50OyBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHdlIG5lZWQgdG8gZm9jdXMgb24uIFJpZ2h0LCBzbyBgaXB2Nl9zcmhfcmN2YCBpcyBzdGF0aWMuIEhtbSwgaXQncyBzdGF0aWMgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIFRoZSBtb3JlIGltcG9ydGFudCBxdWVzdGlvbiBpcywgd2hlcmUgaXMgaXQgY2FsbGVkIGZyb20/IEFoISBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGJ5IGBpcHY2X3J0aGRyX3JjdmAsIHdoaWNoLCB3YWl0IGEgbWludXRlLCBpcyBhbHNvIHN0YXRpYz8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2ODUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MTUuMzg0ODY5NTA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTk3MzY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3J0aGRyX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jPTQ4Nz1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy02NTMtLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpICovXFxubmV0L2lwdjYvZXh0aGRycy5jOjY1NDpzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvZXh0aGRycy5jLTY1NS17XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9ODQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgcnRoZHJfcHJvdG9jb2wgPSB7XFxubmV0L2lwdjYvZXh0aGRycy5jOjg0MjpcXHQuaGFuZGxlclxcdD1cXHRpcHY2X3J0aGRyX3JjdixcXG5uZXQvaXB2Ni9leHRoZHJzLmMtODQzLVxcdC5mbGFnc1xcdFxcdD1cXHRJTkVUNl9QUk9UT19OT1BPTElDWSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MTUuNDQ0ODQ4ODhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIwMTMxNTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBSb3V0aW5nIEhlYWRlciBIYW5kbGVycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpcHY2X3J0aGRyX3JjdmAgYW5kIGBpcHY2X3NyaF9yY3ZgIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVzZSBhcmUgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBhbmQgaG93IHRoZXkncmUgaGFuZGxlZC4gVGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemUgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYGlwdjZfcnRoZHJfcmN2YCBpcyBzdGF0aWMsIHdoaWNoIGluaXRpYWxseSByYWlzZXMgYSByZWQgZmxhZy4gSG93ZXZlciwgaXQncyByZWdpc3RlcmVkIGFzIGEgcHJvdG9jb2wgaGFuZGxlciwgbWVhbmluZyBpdHMgYWRkcmVzcyAqbXVzdCogYmUgdGFrZW4uIFRoZXJlZm9yZSwgaXQgKmNhbm5vdCogYmUgaW5saW5lZC4gVGhhdCBtYWtlcyBpdCBhIHZhbGlkIHN5bWJvbCB0byBjb25zaWRlci4gYHJ0aGRyX3Byb3RvY29sYCBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCBpcyB0aGUga2V5LlxuXG5Ob3csIGBpcHY2X3NyaF9yY3ZgIGlzIGFsc28gc3RhdGljLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBgaXB2Nl9ydGhkcl9yY3ZgLiBTaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYGlwdjZfc3JoX3JjdmAsIHRoYXQncyBhbiBpbXBvcnRhbnQgZGV0YWlsLiBHaXZlbiBpdHMgc2l6ZSwgaXQncyBwcm9iYWJseSAqbm90KiBpbmxpbmVkLCB0aG91Z2ggSSdsbCBuZWVkIHRvIGNvbmZpcm0uIFdoaWxlIGBpcHY2X3J0aGRyX3JjdmAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQsIEkgc2hvdWxkIGluY2x1ZGUgYm90aCBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnRoZHJfcmN2YCBpbiBteSBgRm9jdXNTeW1ib2xzYCBsaXN0IHRvIG1ha2Ugc3VyZSBJIGNvdmVyIGJvdGggY29kZSBwYXRocy5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLiBgQ09ORklHX0lQVjZgIGlzIG9idmlvdXNseSByZXF1aXJlZC4gSSB3YXMgY3VyaW91cyBhYm91dCBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAsIGJ1dCBJJ3ZlIGFscmVhZHkgY29uZmlybWVkIHRoZSBzeXNjdGwgYHNlZzZfZW5hYmxlZGAgaXMgYWx3YXlzIHByZXNlbnQuIFRoZW4gSSB3ZW50IHRvIHNlZSBpZiB0aGUgcHJlc2VuY2Ugb2YgYHNlZzZfZW5hYmxlZGAgaXMgc3VmZmljaWVudCB0byB0cmlnZ2VyIGBpcHY2X3NyaF9yY3ZgLiBJdCBzZWVtcyBgaXB2Nl9ydGhkcl9yY3ZgIGhhbmRsZXMgc2VnbWVudCByb3V0aW5nIGFuZCAqdGhlbiogY2FsbHMgYGlwdjZfc3JoX3JjdmAsIHdoZXJlIGBzZWc2X2VuYWJsZWRgIGlzIGFjdHVhbGx5IGNoZWNrZWQuIFRoZXJlZm9yZSwgbm8gYWRkaXRpb25hbCBjb25maWcgaXMgKnN0cmljdGx5KiBuZWNlc3NhcnkgYmV5b25kIGBDT05GSUdfSVBWNmAuIFN0aWxsLCB0aGVyZSBjb3VsZCBiZSBjb2RlIHBhdGhzIGFkZGVkIGJ5IGBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMYCBvciBgQ09ORklHX0lQVjZfU0VHNl9ITUFDYCwgc28gSSdsbCBxdWlja2x5IGdsYW5jZSBhdCBgbmV0L2lwdjYvS2NvbmZpZ2AganVzdCBpbiBjYXNlIHRvIG1ha2Ugc3VyZS4gSSdtIGdvaW5nIHRvIGFkZCB0aGVzZSB0byB0aGUgYEZvY3VzU3ltYm9sc2AgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MjQuNjQ2MTY3MDU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjgwOlxcdFxcdGJvb2wgXFxcIklQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG4gMjgxOlxcdFxcdGRlcGVuZHMgb24gSVBWNl9NUk9VVEVcXG4gMjgyOlxcdFxcdGhlbHBcXG4gMjgzOlxcdFxcdCAgU3VwcG9ydCBmb3IgSVB2NiBQSU0gbXVsdGljYXN0IHJvdXRpbmcgcHJvdG9jb2wgUElNLVNNdjIuXFxuIDI4NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI4NTpcXHRcXG4gMjg2OlxcdGNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG4gMjg3OlxcdFxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbiAyODg6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2XFxuIDI4OTpcXHRcXHRzZWxlY3QgTFdUVU5ORUxcXG4gMjkwOlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gMjkxOlxcdFxcdHNlbGVjdCBJUFY2X01VTFRJUExFX1RBQkxFU1xcbiAyOTI6XFx0XFx0aGVscFxcbiAyOTM6XFx0XFx0ICBTdXBwb3J0IGZvciBlbmNhcHN1bGF0aW9uIG9mIHBhY2tldHMgd2l0aGluIGFuIG91dGVyIElQdjZcXG4gMjk0OlxcdFxcdCAgaGVhZGVyIGFuZCBhIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgdXNpbmcgdGhlIGxpZ2h0d2VpZ2h0XFxuIDI5NTpcXHRcXHQgIHR1bm5lbHMgbWVjaGFuaXNtLiBBbHNvIGVuYWJsZSBzdXBwb3J0IGZvciBhZHZhbmNlZCBsb2NhbFxcbiAyOTY6XFx0XFx0ICBwcm9jZXNzaW5nIG9mIFNSdjYgcGFja2V0cyBiYXNlZCBvbiB0aGVpciBhY3RpdmUgc2VnbWVudC5cXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyOTk6XFx0XFxuIDMwMDpcXHRjb25maWcgSVBWNl9TRUc2X0hNQUNcXG4gMzAxOlxcdFxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuIDMwMjpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMzAzOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcXG4gMzA0OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAzMDU6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gMzA2OlxcdFxcdGhlbHBcXG4gMzA3OlxcdFxcdCAgU3VwcG9ydCBmb3IgSE1BQyBzaWduYXR1cmUgZ2VuZXJhdGlvbiBhbmQgdmVyaWZpY2F0aW9uXFxuIDMwODpcXHRcXHQgIG9mIFNSLWVuYWJsZWQgcGFja2V0cy5cXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAzMTE6XFx0XFxuIDMxMjpcXHRjb25maWcgSVBWNl9TRUc2X0JQRlxcbiAzMTM6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAzMTQ6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X1NFRzZfTFdUVU5ORUxcXG4gMzE1OlxcdFxcdGRlcGVuZHMgb24gSVBWNiA9IHlcXG4gMzE2OlxcdFxcbiAzMTc6XFx0Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXFxuIDMxODpcXHRcXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuIDMxOTpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMzIwOlxcdFxcdHNlbGVjdCBMV1RVTk5FTFxcbiAzMjE6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAzMjI6XFx0XFx0aGVscFxcbiAzMjM6XFx0XFx0ICBTdXBwb3J0IGZvciBSRkM2NTU0IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgdXNpbmcgdGhlIGxpZ2h0d2VpZ2h0XFxuIDMyNDpcXHRcXHQgIHR1bm5lbHMgbWVjaGFuaXNtLlxcbiAzMjU6XFx0XFxuIDMyNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDMyNzpcXHRcXG4gMzI4OlxcdGNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXFxuIDMyOTpcXHRcXHRib29sIFxcXCJJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE4OjI0LjY0NjIzNzIzNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzYzMTgyMjI2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgU1JIIFJlY2VpdmUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpcHY2X3NyaF9yY3ZgLCB3aGljaCBpcyB0aGUgaGVhcnQgb2YgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHByb2Nlc3NpbmcuIFRvIG1ha2Ugc3VyZSBJIGNvdmVyIGV2ZXJ5dGhpbmcsIEknbSBnb2luZyB0byBlbmFibGUgYElQVjZgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYW5kIGBJUFY2X1NFRzZfSE1BQ2AuIE5vdywgYElQVjZfU0VHNl9MV1RVTk5FTGAgYWxzbyBwdWxscyBpbiBgc2VnNl9pcHR1bm5lbC5jYCBhbmQgYHNlZzZfbG9jYWwuY2AsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gVGhlIGFjdHVhbCBwYXRjaCBpcyBpbiBgZXh0aGRycy5jYCwgd2hpY2ggaXMgY29tcGlsZWQgaWYgYElQVjZgIGlzIHNldC4gIEJ1dCBlbmFibGluZyB0aGUgYFNFRzZgIGZlYXR1cmVzIHdpbGwgbGlrZWx5IGJlIGJlbmVmaWNpYWwgZm9yIG1vcmUgZ2VuZXJhbCBTUnY2IGZ1enppbmcuXG5cbkxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlIGNoYW5nZXM6XG5cbmBgYGNcbkBAIC00NTIsOCArNDUyLDYgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGhkci1cdTAwM2VzZWdtZW50c19sZWZ0LS07XG4gXHRhZGRyID0gaGRyLVx1MDAzZXNlZ21lbnRzICsgaGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQ7XG4gXG4tXHRza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xuLVxuIFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpXG4gXHRcdHNlZzZfdXBkYXRlX2NzdW0oc2tiKTtcbiBcbkBAIC00NjIsNiArNDYwLDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlwNl9yb3V0ZV9pbnB1dChza2IpO1xuIFxuIFx0aWYgKHNrYl9kc3Qoc2tiKS1cdTAwM2VlcnJvcikge1xuK1x0XHRza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7XG4gXHRcdGRzdF9pbnB1dChza2IpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG5AQCAtNDc2LDEwICs0NzUsMTAgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0fVxuIFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuIFxuLVx0XHRza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xuIFx0XHRnb3RvIGxvb3BlZF9iYWNrO1xuIFx0fVxuIFxuK1x0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIFx0ZHN0X2lucHV0KHNrYik7XG4gXG4gXHRyZXR1cm4gLTE7XG5gYGBcblxuUmlnaHQsIGl0J3MgYSBjcml0aWNhbCBmaXgsIGNvcnJlY3RseSBhZGp1c3RpbmcgdGhlIGBza2JgIG9mZnNldCBiZWZvcmUgY2FsbGluZyBgZHN0X2lucHV0KClgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3RhY2sgYW5kIGlzIGVzc2VudGlhbCBmb3IgcmVsaWFibGUgb3BlcmF0aW9uIGFuZCB0aGVyZWZvcmUgZnV6emluZy5cblxuSSdtIGNvbmZpZGVudCBJIG5lZWQgdG8gaW5jbHVkZSBgaXB2Nl9zcmhfcmN2YCBhbmQgdGhlIGNhbGxlciBgaXB2Nl9ydGhkcl9yY3ZgLiBTaW5jZSB0aGV5IGFyZSBib3RoIGluIHRoZSBjcml0aWNhbCBwYXRoIHRvIGdldHRpbmcgSVB2NiB0cmFmZmljIHByb2Nlc3NlZCwgdGhleSBib3RoIG5lZWQgdG8gYmUgY292ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzQsIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MzguMjc4MDYyOTgyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NzQ2ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9ITUFDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9zcmhfcmN2XCIsXG4gICAgXCJpcHY2X3J0aGRyX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcmVjZWl2ZSBwYXRoIChgaXB2Nl9zcmhfcmN2YCkgdG8gY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYmAgbmV0d29yayBvZmZzZXQgYmVmb3JlIGNhbGxpbmcgYGRzdF9pbnB1dCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGhhbmRsZXMgSVB2NiBleHRlbnNpb24gaGVhZGVycywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9ITUFDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9zcmhfcmN2XCIsXG4gICAgXCJpcHY2X3J0aGRyX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcmVjZWl2ZSBwYXRoIChgaXB2Nl9zcmhfcmN2YCkgdG8gY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYmAgbmV0d29yayBvZmZzZXQgYmVmb3JlIGNhbGxpbmcgYGRzdF9pbnB1dCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGhhbmRsZXMgSVB2NiBleHRlbnNpb24gaGVhZGVycywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MzguNDE0ODE4NzE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAyNjkxNzI2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxODozOC40MTY2MjgzMDhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIwMjY3MzUyMjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGBza2ItXFx1MDAzZWRhdGFgIGlzIHJlc3RvcmVkIHRvIHRoZSBuZXR3b3JrIGhlYWRlciBpbiBgaXB2Nl9zcmhfcmN2KClgLiBJbnN0ZWFkIG9mIHB1c2hpbmcgYSBmaXhlZCBzaXplIChgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWApLCBpdCBwdXNoZXMgYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGFueSBleHRlbnNpb24gaGVhZGVycyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgYHNrYl9wdXNoYCBjb3VsZCBpbmNvcnJlY3RseSBhZGp1c3QgdGhlIGBza2ItXFx1MDAzZWRhdGFgIHBvaW50ZXIsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgb3IgaW5jb3JyZWN0IHBhY2tldCBwcm9jZXNzaW5nLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZWFlOTU2MGUzZTc3MDAzYzZlNzMzODU1NDlkMmQwMzJiZDY1OTRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTI6MTc6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbmluZGV4IDljNjc3ZWIxZDFhNjEuLjRjNDA3NTIwZTlkYWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcbisrKyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuQEAgLTQ1Miw4ICs0NTIsNiBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQtLTtcbiBcdGFkZHIgPSBoZHItXHUwMDNlc2VnbWVudHMgKyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiBcbi1cdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4tXG4gXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcbiBcdFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xuIFxuQEAgLTQ2Miw2ICs0NjAsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aXA2X3JvdXRlX2lucHV0KHNrYik7XG4gXG4gXHRpZiAoc2tiX2RzdChza2IpLVx1MDAzZWVycm9yKSB7XG4rXHRcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcbiBcdFx0ZHN0X2lucHV0KHNrYik7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbkBAIC00NzYsMTAgKzQ3NSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gXHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gXHR9XG4gXG4rXHRza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7XG4gXHRkc3RfaW5wdXQoc2tiKTtcbiBcbiBcdHJldHVybiAtMTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE4OjM4LjQxNjYyOTc5OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMzMDM1Nzc0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHY2IFNSSCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9pcHY2L2V4dGhkcnMuY2AsIHNwZWNpZmljYWxseSB0aGUgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlcyBhcmUgYXJvdW5kIGBza2JfcHVzaGAgYW5kIGBza2JfcHVsbGAuIEkgc2VlIHRoYXQgdGhleSdyZSByZW1vdmluZyBgc2tiX3B1c2hgIG9mIHRoZSBJUHY2IGhlYWRlciBzaXplIGFuZCBhZGRpbmcgYHNrYl9wdXNoYCBvZiB0aGUgKm5lZ2F0aXZlKiBuZXR3b3JrIG9mZnNldCBpbiBhIGNvdXBsZSBvZiBwbGFjZXMuIFRoZXkncmUgYWxzbyByZW1vdmluZyB0aGUgY29ycmVzcG9uZGluZyBgc2tiX3B1bGxgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHdpdGhpbiBJUHY2IHBhY2tldHMuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB3aXRoIG1lbW9yeSBzYWZldHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaW50cm9kdWNlcyBhbnkgcmlza3Mgb2Ygb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHVzZS1hZnRlci1mcmVlLCBvciBldmVuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBMZXQncyBzZWUuLi4gdGhlIHVzZSBvZiBgc2tiX3B1c2hgIGFuZCBgc2tiX3B1bGxgIGFyZSB0aGUgY29yZSBvZiB0aGlzLiBUaGV5J3JlIG1vZGlmeWluZyB0aGUgYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyIGFuZCBgc2tiLVx1MDAzZWxlbmAuXG5cbk5vdywgaWYgYHNrYl9wdXNoYCBwdXNoZXMgaW50byBzb21lIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCB0aGVuIHRoYXQgbWVtb3J5IGlzIHNlbnQgdG8gdXNlciBzcGFjZSBvciByZWFkLCB0aGF0J3MgYSBwcm9ibGVtLiBCdXQgd2FpdCwgYHNrYl9wdXNoYCAqanVzdCogbW92ZXMgYHNrYi1cdTAwM2VkYXRhYCBiYWNrd2FyZC4gVGhlIG1lbW9yeSBiZWluZyBtb3ZlZCBvdmVyIGlzICp1c3VhbGx5KiB0aGUgcGFja2V0IGhlYWRlciwgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiByZWNlaXZlZCBvciBhbGxvY2F0ZWQuIEl0J3MgZXNzZW50aWFsbHkgcmVzdG9yaW5nIHRoZSBoZWFkZXIgcG9pbnRlci4gT2theSwgc28gaWYgaXQgcHVzaGVzICp0b28gbXVjaCosIHdlIG1pZ2h0IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBpbiBtb3N0IGNhc2VzLCBgc2tiX3B1c2hgIGlzIHVzZWQgdG8gcmVzdG9yZSB0aGUgaGVhZGVyIHBvaW50ZXIgYXMgaXQgd2FzIGJlZm9yZSBzb21lIG9wZXJhdGlvbiBvbiB0aGUgcGFja2V0LlxuXG5Ib2xkIG9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIHVzZSBvZiBgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYC4gVGhhdCdzIGltcG9ydGFudC4gTGV0J3MgZmlndXJlIHRoaXMgb3V0Li4uIElmIGBza2JfbmV0d29ya19vZmZzZXQoc2tiKWAgaXMgbmVnYXRpdmUsIHRoZW4gdGhhdCdzIHBvc2l0aXZlLiBXYWl0LCBpc24ndCBpdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBza2ItXHUwMDNlbmV0d29ya19oZWFkZXJgIGFuZCBgc2tiLVx1MDAzZWRhdGFgPyBOb3QgYHNrYi1cdTAwM2VtYWNfaGVhZGVyYCwgSSByZW1lbWJlciBpdCBub3cuIFNvLCAgYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAgaXMgYHNrYi1cdTAwM2VkYXRhIC0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyYC4gUmlnaHQsIGlmIGBza2ItXHUwMDNlZGF0YWAgaXMgKmFmdGVyKiBgc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyYCwgdGhlIHJlc3VsdCBpcyBwb3NpdGl2ZSwgYW5kIGBza2JfcHVzaGAgaXMgbW92aW5nIGBza2ItXHUwMDNlZGF0YWAgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIG5ldHdvcmsgaGVhZGVyLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGF0J3MgYSBzdGFuZGFyZCB3YXkgdG8gcmVzdG9yZSB0aGUgbmV0d29yayBoZWFkZXIgcG9pbnRlci5cblxuU28sIGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZT8gTm8sIEkgZG9uJ3QgdGhpbmsgc28uIGBza2JfcHVzaGAgYW5kIGBza2JfcHVsbGAgYXJlIGp1c3QgbWFuaXB1bGF0aW5nIHBvaW50ZXJzICp3aXRoaW4qIHRoZSBhbGxvY2F0ZWQgYHNrYmAgYnVmZmVyLiBUaGUgYnVmZmVyIGl0c2VsZiBjb250YWlucyB0aGUgcGFja2V0IHdlIHJlY2VpdmVkLiBJZiB0aGVyZSBpcyBhIGJ1ZyBoZXJlLCBpdCdzIG1vcmUgbGlrZWx5IHRvIGJlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZSBpc3N1ZSwgd2hpY2ggc2hvdWxkIGhvcGVmdWxseSBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgbG9naWMgZXJyb3JzLlxuXG5MZXQgbWUgdGhpbmsuLi4gaXQncyBwcm9iYWJseSBmaXhpbmcgYW4gaXNzdWUgd2hlcmUgYHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSlgIHdhcyBiZWluZyB1c2VkLCBidXQgdGhlIG5ldHdvcmsgaGVhZGVyIHdhc24ndCAqZXhhY3RseSogdGhhdCBzaXplIOKAkyBpdCBjb3VsZCBiZSBiaWdnZXIsIHdpdGggZXh0ZW5zaW9uIGhlYWRlcnMuIEJ5IHVzaW5nIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgLCB0aGUgcGF0Y2ggY29ycmVjdGx5IHJlc3RvcmVzIHRoZSBuZXR3b3JrIGhlYWRlciBwb2ludGVyIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVyZSB3ZXJlIGV4dGVuc2lvbiBoZWFkZXJzIG9yIG5vdC4gVGhhdCBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZywgd2hpY2ggYXJlIHRoZSBtYWluIGNvbmNlcm5zLiBJdCdzIG5vdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCBhbGwsIHRoZW4uXG5cbkFscmlnaHQsIHNlZW1zIHNvbGlkLiBMZXQncyBkb3VibGUtY2hlY2sgdGhlIGBpcHY2X3NyaF9yY3ZgIGltcGxlbWVudGF0aW9uIHRvIHZlcmlmeSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MjA6MzEuNzIwMjEyNjg0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI0NTUzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9zcmhfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmM9MzQyPXN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzIte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTY1ND1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkwLVxcdFxcdC8qIHNlZ21lbnQgcm91dGluZyAqL1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2OTE6XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTItXFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MjA6MzEuODIyNjc2ODk2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NjEyNzM4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHlldCBwb3RlbnRpYWxseSBuYXN0eSwgYnVnLiBJdCBzZWVtcyB0aGUgb3JpZ2luYWwgY29kZSBpbiBgaXB2Nl9zcmhfcmN2KClgIHVzZWQgYHNrYl9wdXNoYCB3aXRoIGEgZml4ZWQgc2l6ZeKAlGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYOKAlGJ1dCB0aGF0J3MgZmxhd2VkLiBJZiB0aGVyZSBhcmUgSVB2NiBleHRlbnNpb24gaGVhZGVycyBpbnZvbHZlZCwgdGhhdCBmaXhlZCBzaXplIGlzIGxpa2VseSB3cm9uZywgYW5kIHRoZSBgc2tiLVx1MDAzZWRhdGFgIHBvaW50ZXIgZ2V0cyBtaXNhZGp1c3RlZC4gVGhhdCdzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFuIG91dC1vZi1ib3VuZHMgb3IgbG9naWMgZXJyb3IuXG5cbk5vdywgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBpcyAqZXhhY3RseSogdGhlIGtpbmQgb2YgYnVnIHRoYXQgS0FTQU4gZXhjZWxzIGF0IGNhdGNoaW5nLiBJZiBgc2tiX3B1c2hgIGlzIHB1c2hpbmcgdG9vIGZhciBhbmQgdGhlIGNvZGUgbGF0ZXIgdHJpZXMgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLCBLQVNBTiB3aWxsIGZsYWcgaXQgaW1tZWRpYXRlbHkuIFRoYXQncyB0aGUgaWRlYWwgc2l0dWF0aW9uLlxuXG5LTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzbid0IHJlbGV2YW50IGhlcmUuIFdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgYWxsb2NhdGVkIG9yIGV4cG9zZWQuIFRoZSBwYXRjaCdzIGZpeCBpbnZvbHZlcyAqaG93KiB0aGUgZXhpc3RpbmcgYnVmZmVyIGlzIGFkanVzdGVkIGFuZCBwcm9jZXNzZWQuIE5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbm90aGluZyBsaWtlIHRoYXQuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOYCB0byBmYWxzZS4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoZSBqb2IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjIsIk91dHB1dFRva2VucyI6MTkyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjIwOjM4LjY4Mzk1Mzk4OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBgc2tiLVxcdTAwM2VkYXRhYCBpcyByZXN0b3JlZCB0byB0aGUgbmV0d29yayBoZWFkZXIgaW4gYGlwdjZfc3JoX3JjdigpYC4gSW5zdGVhZCBvZiBwdXNoaW5nIGEgZml4ZWQgc2l6ZSAoYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgKSwgaXQgcHVzaGVzIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBhbnkgZXh0ZW5zaW9uIGhlYWRlcnMgdGhhdCBtaWdodCBiZSBwcmVzZW50LiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBza2JfcHVzaGAgY291bGQgaW5jb3JyZWN0bHkgYWRqdXN0IHRoZSBgc2tiLVxcdTAwM2VkYXRhYCBwb2ludGVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBgc2tiLVxcdTAwM2VkYXRhYCBpcyByZXN0b3JlZCB0byB0aGUgbmV0d29yayBoZWFkZXIgaW4gYGlwdjZfc3JoX3JjdigpYC4gSW5zdGVhZCBvZiBwdXNoaW5nIGEgZml4ZWQgc2l6ZSAoYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgKSwgaXQgcHVzaGVzIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBhbnkgZXh0ZW5zaW9uIGhlYWRlcnMgdGhhdCBtaWdodCBiZSBwcmVzZW50LiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBza2JfcHVzaGAgY291bGQgaW5jb3JyZWN0bHkgYWRqdXN0IHRoZSBgc2tiLVxcdTAwM2VkYXRhYCBwb2ludGVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfqw7v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 11:29:56 +0000 UTC FinishedAt: 2026-08-17 12:20:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_HMAC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_SEG6_LWTUNNEL", "IPV6_SEG6_HMAC" ], "series_id": "222029a2-23a5-41e9-bb54-0d5cc8412bfb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipv6_srh_rcv", "ipv6_rthdr_rcv" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9ITUFDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBgc2tiLVx1MDAzZWRhdGFgIGlzIHJlc3RvcmVkIHRvIHRoZSBuZXR3b3JrIGhlYWRlciBpbiBgaXB2Nl9zcmhfcmN2KClgLiBJbnN0ZWFkIG9mIHB1c2hpbmcgYSBmaXhlZCBzaXplIChgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWApLCBpdCBwdXNoZXMgYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGFueSBleHRlbnNpb24gaGVhZGVycyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgYHNrYl9wdXNoYCBjb3VsZCBpbmNvcnJlY3RseSBhZGp1c3QgdGhlIGBza2ItXHUwMDNlZGF0YWAgcG9pbnRlciwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyBvciBpbmNvcnJlY3QgcGFja2V0IHByb2Nlc3NpbmcuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGFjY2VzcyBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciB1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHJlY2VpdmUgcGF0aCAoYGlwdjZfc3JoX3JjdmApIHRvIGNvcnJlY3RseSBhZGp1c3QgdGhlIGBza2JgIG5ldHdvcmsgb2Zmc2V0IGJlZm9yZSBjYWxsaW5nIGBkc3RfaW5wdXQoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBoYW5kbGVzIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZWFlOTU2MGUzZTc3MDAzYzZlNzMzODU1NDlkMmQwMzJiZDY1OTRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTI6MTc6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXG5pbmRleCA5YzY3N2ViMWQxYTYxLi40YzQwNzUyMGU5ZGFhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbkBAIC00NTIsOCAmIzQzOzQ1Miw2IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIFx0YWRkciA9IGhkci1cdTAwM2VzZWdtZW50cyAmIzQzOyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiBcbi1cdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4tXG4gXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcbiBcdFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xuIFxuQEAgLTQ2Miw2ICYjNDM7NDYwLDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlwNl9yb3V0ZV9pbnB1dChza2IpO1xuIFxuIFx0aWYgKHNrYl9kc3Qoc2tiKS1cdTAwM2VlcnJvcikge1xuJiM0MztcdFx0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIFx0XHRkc3RfaW5wdXQoc2tiKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuQEAgLTQ3NiwxMCAmIzQzOzQ3NSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gXHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gXHR9XG4gXG4mIzQzO1x0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIFx0ZHN0X2lucHV0KHNrYik7XG4gXG4gXHRyZXR1cm4gLTE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9ITUFDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcmVjZWl2ZSBwYXRoIChgaXB2Nl9zcmhfcmN2YCkgdG8gY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYmAgbmV0d29yayBvZmZzZXQgYmVmb3JlIGNhbGxpbmcgYGRzdF9pbnB1dCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGhhbmRsZXMgSVB2NiBleHRlbnNpb24gaGVhZGVycywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlYWU5NTYwZTNlNzcwMDNjNmU3MzM4NTU0OWQyZDAzMmJkNjU5NGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxMjoxNzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuYwppbmRleCA5YzY3N2ViMWQxYTYxLi40YzQwNzUyMGU5ZGFhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jCkBAIC00NTIsOCAmIzQzOzQ1Miw2IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJaGRyLSZndDtzZWdtZW50c19sZWZ0LS07CiAJYWRkciA9IGhkci0mZ3Q7c2VnbWVudHMgJiM0MzsgaGRyLSZndDtzZWdtZW50c19sZWZ0OwogCi0Jc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKLQogCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkKIAkJc2VnNl91cGRhdGVfY3N1bShza2IpOwogCkBAIC00NjIsNiAmIzQzOzQ2MCw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJaXA2X3JvdXRlX2lucHV0KHNrYik7CiAKIAlpZiAoc2tiX2RzdChza2IpLSZndDtlcnJvcikgewomIzQzOwkJc2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpOwogCQlkc3RfaW5wdXQoc2tiKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTQ3NiwxMCAmIzQzOzQ3NSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQl9CiAJCWlwdjZfaGRyKHNrYiktJmd0O2hvcF9saW1pdC0tOwogCi0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiAJCWdvdG8gbG9vcGVkX2JhY2s7CiAJfQogCiYjNDM7CXNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKIAlkc3RfaW5wdXQoc2tiKTsKIAogCXJldHVybiAtMTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFBhY2tldCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgdG8gYGlwdjZfc3JoX3JjdmAuIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIG1hZGUgc29tZSBpbnRlcmVzdGluZyBhZGp1c3RtZW50cyByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIElQdjYgaGVhZGVyIGFuZCwgbW9zdCBsaWtlbHksIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcHJvY2Vzc2luZy4KClRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcmVtb3ZhbCBvZiBgc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtgLiBUaGF0JiMzOTtzIHNpZ25pZmljYW50LiBJdCBpbXBsaWVzIHdlJiMzOTtyZSBubyBsb25nZXIgZXhwbGljaXRseSBwdXNoaW5nIHRoZSBJUHY2IGhlYWRlciBvbnRvIHRoZSBzdGFjayB3aGVuIGhhbmRsaW5nIHRoZSBwYWNrZXQgaW4gdGhpcyBmdW5jdGlvbi4gSW5zdGVhZCwgdGhleSYjMzk7dmUgYWRkZWQgYHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtgIGluIHR3byBsb2NhdGlvbnMgYmVmb3JlIGBkc3RfaW5wdXQoc2tiKTtgLiBUaGlzIGxvb2tzIGxpa2UgYSByZXBsYWNlbWVudCBmb3IgdGhlIGV4cGxpY2l0IHB1c2guIFVzaW5nIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGlzIGVzc2VudGlhbGx5IHB1c2hpbmcgYWxsIG5ldHdvcmsgaGVhZGVycy4gSSBzdXNwZWN0IHRoaXMgaXMgYWltZWQgYXQgbWFraW5nIHRoZSBjb2RlIG1vcmUgZ2VuZXJhbCBvciBwb3RlbnRpYWxseSBvcHRpbWl6aW5nIGhlYWRlciBwcm9jZXNzaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFNSSC4gV2Ugc2hvdWxkIGV4YW1pbmUgd2h5IHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBhbmQgd2hldGhlciB0aGUgbmV0d29yayBoZWFkZXJzIHdpbGwgYmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgZm9yIGFsbCB1c2VzLgoKVGhlbiwgdGhlcmUmIzM5O3MgdGhlIHJlbW92YWwgb2YgYHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7YCBiZWZvcmUgdGhhdCBgZ290byBsb29wZWRfYmFjaztgLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBubyBsb25nZXIgZXhwbGljaXRseSAqcG9wcGluZyogdGhlIElQdjYgaGVhZGVyIG9mZiBiZWZvcmUgbG9vcGluZyBiYWNrLiBTZWVtcyBjb25zaXN0ZW50IHdpdGggdGhlIGZpcnN0IGNoYW5nZSwgc28gdGhlIElQdjYgaGVhZGVyIGlzIG5vdCBiZWluZyBtYW51YWxseSBoYW5kbGVkLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGlkZWEgdGhhdCB0aGUgSVB2NiBoZWFkZXIgbWFuaXB1bGF0aW9uIGlzIG5vdyBoYW5kbGVkIGRpZmZlcmVudGx5LgoKTGV0IG1lIGdvIGFoZWFkIGFuZCBkaXZlIGludG8gYGlwdjZfc3JoX3JjdmAgd2l0aGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHJhdGlvbmFsZSBiZWhpbmQgdGhlc2UgbW9kaWZpY2F0aW9ucyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBUaGlzIGlzIHdoZXJlIEkgY2FuIHN0YXJ0IHRvIGV2YWx1YXRlIHRoZSBvdmVyYWxsIGltcGFjdCwgbG9vayBmb3IgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgYW5kIGRldGVybWluZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGNoYW5nZXMgaW4gdGhlIHBhY2tldCBwcm9jZXNzaW5nIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYz0zNDI9c3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzcxOnN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjU0PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkwLVx0XHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cbm5ldC9pcHY2L2V4dGhkcnMuYzo2OTE6XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiKTtcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTItXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFRhcmdldCBmb3IgRnV6emluZyoqCgpSaWdodCwgYGlwdjZfc3JoX3JjdmAgaXMgaW52b2tlZCBkaXJlY3RseSBmcm9tIGBpcHY2X3J0aGRyX3JjdmAuIFRoYXQgY2hhaW4gbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSwgYW5kIGdpdmVuIHRoYXQgaXQmIzM5O3MgaGFuZGxpbmcgcG90ZW50aWFsbHkgY29tcGxleCBwYWNrZXQgc3RydWN0dXJlcywgaXQmIzM5O3MgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFdlIGtub3cgd2hlcmUgdGhlIGVudHJ5cG9pbnQgaXMsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHVwcyBpdHMgdmFsdWUgYXMgYSB0YXJnZXQuIFRpbWUgdG8gZGlnIGluLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZ28gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVB2NiBTZWdtZW50IFJvdXRpbmcuIExldCYjMzk7cyBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBhbmQgc2VlIHdoYXQga25vYnMgYW5kIGxldmVycyB3ZSBjYW4gdHdpZGRsZSB0byBnZXQgb3VyIGZ1enppbmcgY2FtcGFpZ24gZ29pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYz0zNDI9c3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzcxOnN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjU0PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkwLVx0XHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cbm5ldC9pcHY2L2V4dGhkcnMuYzo2OTE6XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiKTtcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTItXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgZm9yIENvbmZpZ3VyYWJsZSBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgUmVjZXB0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBpcHY2X3NyaF9yY3ZgIGlzbiYjMzk7dCBjb250cm9sbGVkIGJ5IHNvbWUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHByYWN0aWNlLCByaWdodD8gWW91IGFsd2F5cyB3YW50IHRvIGVsaW1pbmF0ZSB0aGUgb2J2aW91cyBwb3NzaWJpbGl0aWVzLCBsaWtlIGEgZGlzYWJsZWQgZmVhdHVyZSwgYmVmb3JlIHlvdSBkaXZlIGludG8gbW9yZSBjb21wbGV4IHByb2JsZW1zLiBJdCYjMzk7cyBlc3BlY2lhbGx5IGNydWNpYWwgd2l0aCBzb21ldGhpbmcgbGlrZSBJUHY2IHNlZ21lbnQgcm91dGluZywgd2hlcmUgYSBtaXNjb25maWd1cmF0aW9uIGNvdWxkIGVhc2lseSBiZSB0aGUgcm9vdCBjYXVzZS4gVGhpcyBjb3VsZCBiZSBhIGdsb2JhbCBzZXR0aW5nLCBhIHBlci1pbnRlcmZhY2Ugc2V0dGluZywgbWF5YmUgZXZlbiBzb21ldGhpbmcgYXBwbGllZCB2aWEgYSBwb2xpY3kgbWFwLiBJIG5lZWQgdG8ga25vdyB0aGUgcG90ZW50aWFsIGZvciBleHRlcm5hbCBmYWN0b3JzLiBXaGF0IGFyZSB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBiZSBpbiBwbGF5IGZvciBgaXB2Nl9zcmhfcmN2YD8gSSBuZWVkIHRvIGNoZWNrIGFsbCB0aGUgbGlrZWx5IHN1c3BlY3RzLiBUaGVuLCBhbmQgb25seSB0aGVuLCBjYW4gSSByZWFsbHkgc3RhcnQgdG8gbmFycm93IGRvd24gd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4gVGhhdCYjMzk7cyBteSBuZXh0IGxvZ2ljYWwgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSVBWNl9TRUc2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTI0PWlwdjYtJChDT05GSUdfTkVUTEFCRUwpICYjNDM7PSBjYWxpcHNvLm9cbm5ldC9pcHY2L01ha2VmaWxlOjI1OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSAmIzQzOz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xubmV0L2lwdjYvTWFrZWZpbGU6MjY6aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfSE1BQykgJiM0Mzs9IHNlZzZfaG1hYy5vXG5uZXQvaXB2Ni9NYWtlZmlsZS0yNy1pcHY2LSQoQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMKSAmIzQzOz0gcnBsX2lwdHVubmVsLm9cbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTE4MT1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmYgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIyOS1cdC5zZWc2X2VuYWJsZWRcdFx0PSAwLFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMzA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yMzEtXHQuc2VnNl9yZXF1aXJlX2htYWNcdD0gMCxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjk0LVx0LnNlZzZfZW5hYmxlZFx0XHQ9IDAsXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI5NTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5Ni1cdC5zZWc2X3JlcXVpcmVfaG1hY1x0PSAwLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2Mj1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczNi1cdGFycmF5W0RFVkNPTkZfU0VHNl9FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXHUwMDNlc2VnNl9lbmFibGVkKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTczNzojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MzgtXHRhcnJheVtERVZDT05GX1NFRzZfUkVRVUlSRV9ITUFDXSA9IFJFQURfT05DRShjbmYtXHUwMDNlc2VnNl9yZXF1aXJlX2htYWMpO1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Njg2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhZGRyY29uZl9zeXNjdGxbXSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcyMzktXHR9LFxubmV0L2lwdjYvYWRkcmNvbmYuYzo3MjQwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzI0MS1cdHtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDctI2luY2x1ZGUgXHUwMDNjbmV0L3NlZzYuaFx1MDAzZVxubmV0L2lwdjYvZXh0aGRycy5jOjQ4OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L2V4dGhkcnMuYy00OS0jaW5jbHVkZSBcdTAwM2NuZXQvc2VnNl9obWFjLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9MzcxPXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTM5NS1cbm5ldC9pcHY2L2V4dGhkcnMuYzozOTY6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvZXh0aGRycy5jLTM5Ny1cdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKSB7XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTExMjU9c3RhdGljIHU4IGlwdjZfcHVzaF9ydGhkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcHJvdG8sXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTExNTMtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MTE1NDojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE1NS1cdGlmIChzcl9oYXNfaG1hYyhzcl9waGRyKSkge1xuLS1cbm5ldC9pcHY2L3NlZzYuYz0xNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHNlZzZfZ2VubF9wb2xpY3lbU0VHNl9BVFRSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2LmMtMTUwLVxubmV0L2lwdjYvc2VnNi5jOjE1MTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2LmMtMTUyLVxuLS1cbm5ldC9pcHY2L3NlZzYuYz0yNjY9c3RhdGljIGludCBzZWc2X2dlbmxfZ2V0X3R1bnNyYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9pcHY2L3NlZzYuYy0yOTktXG5uZXQvaXB2Ni9zZWc2LmM6MzAwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzYuYy0zMDEtXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTI1LSNpbmNsdWRlIFx1MDAzY25ldC9kc3RfY2FjaGUuaFx1MDAzZVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjI2OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0yNy0jaW5jbHVkZSBcdTAwM2NuZXQvc2VnNl9obWFjLmhcdTAwM2Vcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM9MTM5PXN0YXRpYyBpbnQgX19zZWc2X2RvX3NyaF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKm9zcmgsXG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTE5OS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYzoyMDA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTIwMS1cdGlmIChzcl9oYXNfaG1hYyhpc3JoKSkge1xuLS1cbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYz0yMjM9c3RhdGljIGludCBzZWc2X2RvX3NyaF9lbmNhcF9yZWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzI2LVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjMyNzojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzI4LVx0aWYgKHVubGlrZWx5KCFza2lwX3NyaCBcdTAwMjZcdTAwMjYgc3JfaGFzX2htYWMoaXNyaCkpKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTM0Mz1zdGF0aWMgaW50IF9fc2VnNl9kb19zcmhfaW5saW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2X3NyX2hkciAqb3NyaCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzc4LVxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jOjM3OTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzgwLVx0aWYgKHNyX2hhc19obWFjKGlzcmgpKSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI3LSNpbmNsdWRlIFx1MDAzY25ldC9pcF90dW5uZWxzLmhcdTAwM2Vcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyODojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjktI2luY2x1ZGUgXHUwMDNjbmV0L3NlZzZfaG1hYy5oXHUwMDNlXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjI0OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjUtXHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjMyPXN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0MC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDE6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0Mi1cdGlmIChzcmggXHUwMDI2XHUwMDI2ICFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTc0Mj1zdGF0aWMgaW50IGVuZF9mbHY4OTg2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NTMtXHRwaW5mbyA9IHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHNyaCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6NzU0OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy03NTUtXHRpZiAoc3JoIFx1MDAyNlx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBzZWVpbmcgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgIGFuZCBgQ09ORklHX0lQVjZfU0VHNl9ITUFDYCBwb3AgdXAuIFRoaXMgbWFrZXMgbWUgd29uZGVyLi4uIGlzIHRoZXJlIGEgbW9yZSBnZW5lcmFsIGBDT05GSUdfSVBWNl9TRUc2YCBvcHRpb24/IEl0IHdvdWxkIGJlIHdlaXJkIHRvIGhhdmUgdGhlIHNwZWNpZmljIG9uZXMgd2l0aG91dCBhIGJyb2FkZXIgZW5hYmxpbmcgZmxhZy4gQmVzdCB0byBjaGVjayB0aGUgc291cmNlLiBMZXQmIzM5O3MgZGlnIGludG8gYG5ldC9pcHY2L0tjb25maWdgIGFuZCBnZXQgdGhlIHdob2xlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBhdmFpbGFibGUgdGhlcmUuIEl0JiMzOTtsbCBnaXZlIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHdob2xlIElQdjYgc2VnbWVudCByb3V0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgc3RydWN0dXJlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X1NFRzYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9Mjc5PWNvbmZpZyBJUFY2X1BJTVNNX1YyXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvS2NvbmZpZy0zMDEtXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQzNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgSVB2NiBTUkggUmVjZXB0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpcHY2X3NyaF9yY3ZgIOKAkyBhbmQgdGhhdCYjMzk7cyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gUmlnaHQsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGhhbmRsaW5nIHRoZSByZWNlcHRpb24gb2YgU291cmNlIFJvdXRpbmcgSGVhZGVyIChTUkgpIGV4dGVuc2lvbiBoZWFkZXJzIHdpdGhpbiBJUHY2IHBhY2tldHMuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaW4gbXkgbWluZCBpcywgaXMgdGhpcyBjb2RlIHBhdGggZXZlbiAqY29tcGlsZWQqIHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzPyBPciBpcyBpdCBjb25kaXRpb25hbGl6ZWQgc29tZWhvdz8gSSBuZWVkIHRvIGNoZWNrIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgbmV0L2lwdjYvZXh0aGRycy5jYCBpdHNlbGYsIGFuZCBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgaXB2Nl9zcmhfcmN2YCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBgI2lmZGVmYCBibG9ja3MsIGBDT05GSUdfYCBvcHRpb25zLCBvciBhbnl0aGluZyBlbHNlIHRoYXQgY29udHJvbHMgd2hldGhlciB0aGlzIGNvZGUgaXMgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBpbWFnZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMgKmZpcnN0KiBiZWZvcmUgSSBjYW4gcHJvY2VlZCB3aXRoIHVuZGVyc3RhbmRpbmcgdGhlIGFjdHVhbCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYz0zNDI9c3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzcxOnN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjU0PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkwLVx0XHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cbm5ldC9pcHY2L2V4dGhkcnMuYzo2OTE6XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiKTtcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTItXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDAyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRXhhbWluaW5nIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgUmVjZWl2ZXIqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBzdHJpa2luZyBtZSB0aGF0IGl0IHNlZW1zIHRvIGJlIGNvbnNpc3RlbnRseSBjb21waWxlZCB3aGVuZXZlciB0aGUgSVB2NiBjb25maWd1cmF0aW9uIG9wdGlvbiwgYENPTkZJR19JUFY2YCwgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIHBhdHRlcm4gdGhhdCB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IHRoaXMuCgpNeSBpbml0aWFsIGFzc3VtcHRpb24gbWlnaHQgYmUgY29ycmVjdCwgYnV0IEkgc2hvdWxkbiYjMzk7dCBqdW1wIHRvIGNvbmNsdXNpb25zLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGUgY29kZSBzdXJyb3VuZGluZyBgaXB2Nl9zcmhfcmN2YC4gTGV0JiMzOTtzIGNvbmZpcm0gd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHdyYXBwZWQgaW5zaWRlIGFueSBjb25kaXRpb25hbCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgYCNpZmRlZmAgc3RhdGVtZW50cywgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkgbmVlZCB0byBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlcmUmIzM5O3MgYSBtb3JlIG51YW5jZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQsIHBvdGVudGlhbGx5IHRpZWQgdG8gYW5vdGhlciBmZWF0dXJlIGZsYWcgb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmcuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0ICovXG4gMzUxOlx0XG4gMzUyOlx0XHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiAzNTM6XHRcdGFkZHIgPSBoZHItXHUwMDNlc2VnbWVudHMgJiM0MzsgaGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQ7XG4gMzU0Olx0XG4gMzU1Olx0XHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdCYjNDM7JiM0Mzs7XG4gMzU2Olx0XHRmcm9tID0gKihfX2JlMzIgKiloZHI7XG4gMzU3Olx0XG4gMzU4Olx0XHRoZHItXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIDM1OTpcdFx0dG8gPSAqKF9fYmUzMiAqKWhkcjtcbiAzNjA6XHRcbiAzNjE6XHRcdC8qIHVwZGF0ZSBza2IgY3N1bSB3aXRoIGRpZmYgcmVzdWx0aW5nIGZyb20gc2VnX2xlZnQgZGVjcmVtZW50ICovXG4gMzYyOlx0XG4gMzYzOlx0XHR1cGRhdGVfY3N1bV9kaWZmNChza2IsIGZyb20sIHRvKTtcbiAzNjQ6XHRcbiAzNjU6XHRcdC8qIGNvbXB1dGUgY3N1bSBkaWZmIGJldHdlZW4gY3VycmVudCBhbmQgbmV4dCBzZWdtZW50IGFuZCB1cGRhdGUgKi9cbiAzNjY6XHRcbiAzNjc6XHRcdHVwZGF0ZV9jc3VtX2RpZmYxNihza2IsIChfX2JlMzIgKikoXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkciksXG4gMzY4Olx0XHRcdFx0ICAgKF9fYmUzMiAqKWFkZHIpO1xuIDM2OTpcdH1cbiAzNzA6XHRcbiAzNzE6XHRzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDM3MjpcdHtcbiAzNzM6XHRcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbiAzNzQ6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gMzc1Olx0XHRzdHJ1Y3QgaXB2Nl9zcl9oZHIgKmhkcjtcbiAzNzY6XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XG4gMzc3Olx0XHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7XG4gMzc4Olx0XHRpbnQgYWNjZXB0X3NlZzY7XG4gMzc5Olx0XG4gMzgwOlx0XHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiAzODE6XHRcbiAzODI6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cdTAwM2VkZXYpO1xuIDM4MzpcdFx0aWYgKCFpZGV2KSB7XG4gMzg0Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM4NTpcdFx0XHRyZXR1cm4gLTE7XG4gMzg2Olx0XHR9XG4gMzg3Olx0XG4gMzg4Olx0XHRhY2NlcHRfc2VnNiA9IG1pbihSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlc2VnNl9lbmFibGVkKSxcbiAzODk6XHRcdFx0XHQgIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5zZWc2X2VuYWJsZWQpKTtcbiAzOTA6XHRcbiAzOTE6XHRcdGlmICghYWNjZXB0X3NlZzYpIHtcbiAzOTI6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMzkzOlx0XHRcdHJldHVybiAtMTtcbiAzOTQ6XHRcdH1cbiAzOTU6XHRcbiAzOTY6XHQjaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG4gMzk3Olx0XHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSkge1xuIDM5ODpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzOTk6XHRcdFx0cmV0dXJuIC0xO1xuIDQwMDpcdFx0fVxuIDQwMTpcdCNlbmRpZlxuIDQwMjpcdFxuIDQwMzpcdGxvb3BlZF9iYWNrOlxuIDQwNDpcdFx0aWYgKGhkci1cdTAwM2VzZWdtZW50c19sZWZ0ID09IDApIHtcbiA0MDU6XHRcdFx0aWYgKGhkci1cdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNiB8fCBoZHItXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjQpIHtcbiA0MDY6XHRcdFx0XHRpbnQgb2Zmc2V0ID0gKGhkci1cdTAwM2VoZHJsZW4gJiM0MzsgMSkgXHUwMDNjXHUwMDNjIDM7XG4gNDA3Olx0XG4gNDA4Olx0XHRcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksXG4gNDA5Olx0XHRcdFx0XHRcdCAgIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSk7XG4gNDEwOlx0XHRcdFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQpO1xuIDQxMTpcdFx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYiksXG4gNDEyOlx0XHRcdFx0XHRcdCAgIG9mZnNldCk7XG4gNDEzOlx0XG4gNDE0Olx0XHRcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNDE1Olx0XHRcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiA0MTY6XHRcdFx0XHRza2ItXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XG4gNDE3Olx0XHRcdFx0aWYgKGhkci1cdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNClcbiA0MTg6XHRcdFx0XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcbiA0MTk6XHRcdFx0XHRfX3NrYl90dW5uZWxfcngoc2tiLCBza2ItXHUwMDNlZGV2LCBuZXQpO1xuIDQyMDpcdFxuIDQyMTpcdFx0XHRcdG5ldGlmX3J4KHNrYik7XG4gNDIyOlx0XHRcdFx0cmV0dXJuIC0xO1xuIDQyMzpcdFx0XHR9XG4gNDI0Olx0XG4gNDI1Olx0XHRcdG9wdC1cdTAwM2VzcmNydCA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcbiA0MjY6XHRcdFx0b3B0LVx1MDAzZWxhc3RvcHQgPSBvcHQtXHUwMDNlc3JjcnQ7XG4gNDI3Olx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSAoaGRyLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMztcbiA0Mjg6XHRcdFx0b3B0LVx1MDAzZW5ob2ZmID0gKFx1MDAyNmhkci1cdTAwM2VuZXh0aGRyKSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDQyOTpcdFxuIDQzMDpcdFx0XHRyZXR1cm4gMTtcbiA0MzE6XHRcdH1cbiA0MzI6XHRcbiA0MzM6XHRcdGlmIChoZHItXHUwMDNlc2VnbWVudHNfbGVmdCBcdTAwM2U9IChoZHItXHUwMDNlaGRybGVuIFx1MDAzZVx1MDAzZSAxKSkge1xuIDQzNDpcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gNDM1Olx0XHRcdGljbXB2Nl9wYXJhbV9wcm9iKHNrYiwgSUNNUFY2X0hEUl9GSUVMRCxcbiA0MzY6XHRcdFx0XHRcdCAgKChcdTAwMjZoZHItXHUwMDNlc2VnbWVudHNfbGVmdCkgLVxuIDQzNzpcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcbiA0Mzg6XHRcdFx0cmV0dXJuIC0xO1xuIDQzOTpcdFx0fVxuIDQ0MDpcdFxuIDQ0MTpcdFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xuIDQ0MjpcdFx0XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7XG4gNDQzOlx0XHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXG4gNDQ0Olx0XHRcdFx0XHRcdElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTtcbiA0NDU6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0NDY6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDQ3Olx0XHRcdH1cbiA0NDg6XHRcbiA0NDk6XHRcdFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4ODcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIElQdjYgQ29uZmlndXJhdGlvbiBMb2dpYyoqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBiZWhhdmlvciBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGlmIGBDT05GSUdfSVBWNmAgaXMgb24sIGNvbXBpbGF0aW9uIGhhcHBlbnMuIFRoYXQmIzM5O3MgZXhwZWN0ZWQuIEJ1dCBoYW5nIG9uLCB0aGlzIGBhY2NlcHRfc2VnNmAgZnVuY3Rpb24uLi4gdGhhdOKAmXMgbm90IHF1aXRlIHJpZ2h0LiBJdCBsb29rcyBsaWtlIGl0ICpuZWVkcyogYHNlZzZfZW5hYmxlZGAgdG8gYmUgc2V0LiBBbmQgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBgc2VnNl9lbmFibGVkYCBpcyBwYXJ0IG9mIGBpcHY2X2RldmNvbmZgLiBOb3cgSSBoYXZlIHRvIGFzayBteXNlbGYsIGlzIHRoYXQgYWx3YXlzIGdvaW5nIHRvIGJlIHByZXNlbnQ/IEkmIzM5O2QgYmV0dGVyIGRvdWJsZSBjaGVjayB0aGF0IGBzZWc2X2VuYWJsZWRgIGlzIGFsd2F5cyBkZWZpbmVkLiBMZXQgbWUganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L2lwdjYuaGAgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdCwgb3RoZXJ3aXNlLCB0aGlzIGNvdWxkIGJlIGEgbmFzdHkgYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWc2X2VuYWJsZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lwdjYuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lwdjYuaD0xMz1zdHJ1Y3QgaXB2Nl9kZXZjb25mIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC03OS1cdF9fczMyXHRcdGtlZXBfYWRkcl9vbl9kb3duO1xuaW5jbHVkZS9saW51eC9pcHY2Lmg6ODA6XHRfX3MzMlx0XHRzZWc2X2VuYWJsZWQ7XG5pbmNsdWRlL2xpbnV4L2lwdjYuaC04MS0jaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYHNlZzZfZW5hYmxlZGAgZmxhZy4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyAqYWx3YXlzKiBwcmVzZW50LCByZWdhcmRsZXNzLiBUaGF0IGltcGxpZXMgYGlwdjZfc3JoX3JjdmAgaXMgYWx3YXlzIGNvbXBpbGVkIGluLCBtZWFuaW5nIGl0JiMzOTtzIHRoZXJlIGFuZCByZWFjaGFibGUgaWYgYHNlZzZfZW5hYmxlZGAgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBzeXNjdGwgaW50ZXJmYWNlLiBIbW0sIHRoYXQgZmVlbHMgYSBiaXQgc3VycHJpc2luZy4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYHNlZzZfZW5hYmxlZGAgc3lzY3RsIHNldHRpbmcgaXMgKmFsd2F5cyogYXZhaWxhYmxlIGFzIEkgYmVsaWV2ZS4gV2hlcmUgd291bGQgdGhhdCBzZXR0aW5nIGJlIGRlZmluZWQ/IExldCBtZSBqdXN0IHF1aWNrbHkganVtcCBvdmVyIHRvIGBuZXQvaXB2Ni9hZGRyY29uZi5jYCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERVZDT05GX1NFRzZfRU5BQkxFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2FkZHJjb25mLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWRkcmNvbmYuYz01NjYyPXN0YXRpYyB2b2lkIGlwdjZfc3RvcmVfZGV2Y29uZihjb25zdCBzdHJ1Y3QgaXB2Nl9kZXZjb25mICpjbmYsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01NzM1LVx0YXJyYXlbREVWQ09ORl9LRUVQX0FERFJfT05fRE9XTl0gPSBSRUFEX09OQ0UoY25mLVx1MDAzZWtlZXBfYWRkcl9vbl9kb3duKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTczNjpcdGFycmF5W0RFVkNPTkZfU0VHNl9FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXHUwMDNlc2VnNl9lbmFibGVkKTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczNy0jaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZvY3VzIG9uIElQdjYgU1JIIEhhbmRsaW5nKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBjb25maXJtZWQ7IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBgaXB2Nl9zcmhfcmN2YCDigJMgYW5kIHllcywgYGlwdjZfc3JoX3JjdmAgaXMgaW5kZWVkIHJlYWNoYWJsZS4gVGhlIGNoYW5nZSBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCBsb29rcyBzdHJhaWdodGZvcndhcmQ6IGl0IHN3YXBzIGBza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO2AgZm9yIGBza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7YC4gSXQmIzM5O3MgY2xlYXJseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHNrYiBvZmZzZXQgaXNzdWUuIFRoaXMgZmVlbHMgc2lnbmlmaWNhbnQ7IGl0IGRlZmluaXRlbHkgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBSaWdodCwgc28gYGlwdjZfc3JoX3JjdmAgaXMgc3RhdGljLiBIbW0sIGl0JiMzOTtzIHN0YXRpYyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gVGhlIG1vcmUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyBpdCBjYWxsZWQgZnJvbT8gQWghIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGBpcHY2X3J0aGRyX3JjdmAsIHdoaWNoLCB3YWl0IGEgbWludXRlLCBpcyBhbHNvIHN0YXRpYz8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYz00ODc9c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTY1My0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cbm5ldC9pcHY2L2V4dGhkcnMuYzo2NTQ6c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvZXh0aGRycy5jLTY1NS17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTg0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIHJ0aGRyX3Byb3RvY29sID0ge1xubmV0L2lwdjYvZXh0aGRycy5jOjg0MjpcdC5oYW5kbGVyXHQ9XHRpcHY2X3J0aGRyX3Jjdixcbm5ldC9pcHY2L2V4dGhkcnMuYy04NDMtXHQuZmxhZ3NcdFx0PVx0SU5FVDZfUFJPVE9fTk9QT0xJQ1ksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzkwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IFJvdXRpbmcgSGVhZGVyIEhhbmRsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaXB2Nl9ydGhkcl9yY3ZgIGFuZCBgaXB2Nl9zcmhfcmN2YCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgYXJlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgYW5kIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGVkLiBUaGUgaW5zdHJ1Y3Rpb25zIGVtcGhhc2l6ZSBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4gSSBzZWUgdGhhdCBgaXB2Nl9ydGhkcl9yY3ZgIGlzIHN0YXRpYywgd2hpY2ggaW5pdGlhbGx5IHJhaXNlcyBhIHJlZCBmbGFnLiBIb3dldmVyLCBpdCYjMzk7cyByZWdpc3RlcmVkIGFzIGEgcHJvdG9jb2wgaGFuZGxlciwgbWVhbmluZyBpdHMgYWRkcmVzcyAqbXVzdCogYmUgdGFrZW4uIFRoZXJlZm9yZSwgaXQgKmNhbm5vdCogYmUgaW5saW5lZC4gVGhhdCBtYWtlcyBpdCBhIHZhbGlkIHN5bWJvbCB0byBjb25zaWRlci4gYHJ0aGRyX3Byb3RvY29sYCBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCBpcyB0aGUga2V5LgoKTm93LCBgaXB2Nl9zcmhfcmN2YCBpcyBhbHNvIHN0YXRpYywgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBpcHY2X3J0aGRyX3JjdmAuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBgaXB2Nl9zcmhfcmN2YCwgdGhhdCYjMzk7cyBhbiBpbXBvcnRhbnQgZGV0YWlsLiBHaXZlbiBpdHMgc2l6ZSwgaXQmIzM5O3MgcHJvYmFibHkgKm5vdCogaW5saW5lZCwgdGhvdWdoIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybS4gV2hpbGUgYGlwdjZfcnRoZHJfcmN2YCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgSSBzaG91bGQgaW5jbHVkZSBib3RoIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ydGhkcl9yY3ZgIGluIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QgdG8gbWFrZSBzdXJlIEkgY292ZXIgYm90aCBjb2RlIHBhdGhzLgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLiBgQ09ORklHX0lQVjZgIGlzIG9idmlvdXNseSByZXF1aXJlZC4gSSB3YXMgY3VyaW91cyBhYm91dCBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAsIGJ1dCBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGUgc3lzY3RsIGBzZWc2X2VuYWJsZWRgIGlzIGFsd2F5cyBwcmVzZW50LiBUaGVuIEkgd2VudCB0byBzZWUgaWYgdGhlIHByZXNlbmNlIG9mIGBzZWc2X2VuYWJsZWRgIGlzIHN1ZmZpY2llbnQgdG8gdHJpZ2dlciBgaXB2Nl9zcmhfcmN2YC4gSXQgc2VlbXMgYGlwdjZfcnRoZHJfcmN2YCBoYW5kbGVzIHNlZ21lbnQgcm91dGluZyBhbmQgKnRoZW4qIGNhbGxzIGBpcHY2X3NyaF9yY3ZgLCB3aGVyZSBgc2VnNl9lbmFibGVkYCBpcyBhY3R1YWxseSBjaGVja2VkLiBUaGVyZWZvcmUsIG5vIGFkZGl0aW9uYWwgY29uZmlnIGlzICpzdHJpY3RseSogbmVjZXNzYXJ5IGJleW9uZCBgQ09ORklHX0lQVjZgLiBTdGlsbCwgdGhlcmUgY291bGQgYmUgY29kZSBwYXRocyBhZGRlZCBieSBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAgb3IgYENPTkZJR19JUFY2X1NFRzZfSE1BQ2AsIHNvIEkmIzM5O2xsIHF1aWNrbHkgZ2xhbmNlIGF0IGBuZXQvaXB2Ni9LY29uZmlnYCBqdXN0IGluIGNhc2UgdG8gbWFrZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIGFkZCB0aGVzZSB0byB0aGUgYEZvY3VzU3ltYm9sc2AgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODA6XHRcdGJvb2wgXCYjMzQ7SVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XCYjMzQ7XG4gMjgxOlx0XHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXG4gMjgyOlx0XHRoZWxwXG4gMjgzOlx0XHQgIFN1cHBvcnQgZm9yIElQdjYgUElNIG11bHRpY2FzdCByb3V0aW5nIHByb3RvY29sIFBJTS1TTXYyLlxuIDI4NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI4NTpcdFxuIDI4NjpcdGNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbiAyODc6XHRcdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiAyODg6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDI4OTpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMjkwOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMjkxOlx0XHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbiAyOTI6XHRcdGhlbHBcbiAyOTM6XHRcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XG4gMjk0Olx0XHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxuIDI5NTpcdFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcbiAyOTY6XHRcdCAgcHJvY2Vzc2luZyBvZiBTUnY2IHBhY2tldHMgYmFzZWQgb24gdGhlaXIgYWN0aXZlIHNlZ21lbnQuXG4gMjk3Olx0XG4gMjk4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjk5Olx0XG4gMzAwOlx0Y29uZmlnIElQVjZfU0VHNl9ITUFDXG4gMzAxOlx0XHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbiAzMDI6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDMwMzpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuIDMwNDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gMzA1Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuIDMwNjpcdFx0aGVscFxuIDMwNzpcdFx0ICBTdXBwb3J0IGZvciBITUFDIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb25cbiAzMDg6XHRcdCAgb2YgU1ItZW5hYmxlZCBwYWNrZXRzLlxuIDMwOTpcdFxuIDMxMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDMxMTpcdFxuIDMxMjpcdGNvbmZpZyBJUFY2X1NFRzZfQlBGXG4gMzEzOlx0XHRkZWZfYm9vbCB5XG4gMzE0Olx0XHRkZXBlbmRzIG9uIElQVjZfU0VHNl9MV1RVTk5FTFxuIDMxNTpcdFx0ZGVwZW5kcyBvbiBJUFY2ID0geVxuIDMxNjpcdFxuIDMxNzpcdGNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxuIDMxODpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcJiMzNDtcbiAzMTk6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDMyMDpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMzIxOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMzIyOlx0XHRoZWxwXG4gMzIzOlx0XHQgIFN1cHBvcnQgZm9yIFJGQzY1NTQgUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcbiAzMjQ6XHRcdCAgdHVubmVscyBtZWNoYW5pc20uXG4gMzI1Olx0XG4gMzI2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzI3Olx0XG4gMzI4Olx0Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcbiAzMjk6XHRcdGJvb2wgXCYjMzQ7SVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjM0CgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDc3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQdjYgU1JIIFJlY2VpdmUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGlwdjZfc3JoX3JjdmAsIHdoaWNoIGlzIHRoZSBoZWFydCBvZiBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgcHJvY2Vzc2luZy4gVG8gbWFrZSBzdXJlIEkgY292ZXIgZXZlcnl0aGluZywgSSYjMzk7bSBnb2luZyB0byBlbmFibGUgYElQVjZgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYW5kIGBJUFY2X1NFRzZfSE1BQ2AuIE5vdywgYElQVjZfU0VHNl9MV1RVTk5FTGAgYWxzbyBwdWxscyBpbiBgc2VnNl9pcHR1bm5lbC5jYCBhbmQgYHNlZzZfbG9jYWwuY2AsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gVGhlIGFjdHVhbCBwYXRjaCBpcyBpbiBgZXh0aGRycy5jYCwgd2hpY2ggaXMgY29tcGlsZWQgaWYgYElQVjZgIGlzIHNldC4gIEJ1dCBlbmFibGluZyB0aGUgYFNFRzZgIGZlYXR1cmVzIHdpbGwgbGlrZWx5IGJlIGJlbmVmaWNpYWwgZm9yIG1vcmUgZ2VuZXJhbCBTUnY2IGZ1enppbmcuCgpMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGNvZGUgY2hhbmdlczoKCmBgYGMKQEAgLTQ1Miw4ICYjNDM7NDUyLDYgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAloZHItJmd0O3NlZ21lbnRzX2xlZnQtLTsKIAlhZGRyID0gaGRyLSZndDtzZWdtZW50cyAmIzQzOyBoZHItJmd0O3NlZ21lbnRzX2xlZnQ7CiAKLQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOwotCiAJaWYgKHNrYi0mZ3Q7aXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKQogCQlzZWc2X3VwZGF0ZV9jc3VtKHNrYik7CiAKQEAgLTQ2Miw2ICYjNDM7NDYwLDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpcDZfcm91dGVfaW5wdXQoc2tiKTsKIAogCWlmIChza2JfZHN0KHNrYiktJmd0O2Vycm9yKSB7CiYjNDM7CQlza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7CiAJCWRzdF9pbnB1dChza2IpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtNDc2LDEwICYjNDM7NDc1LDEwIEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJCX0KIAkJaXB2Nl9oZHIoc2tiKS0mZ3Q7aG9wX2xpbWl0LS07CiAKLQkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKIAkJZ290byBsb29wZWRfYmFjazsKIAl9CiAKJiM0MzsJc2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpOwogCWRzdF9pbnB1dChza2IpOwogCiAJcmV0dXJuIC0xOwpgYGAKClJpZ2h0LCBpdCYjMzk7cyBhIGNyaXRpY2FsIGZpeCwgY29ycmVjdGx5IGFkanVzdGluZyB0aGUgYHNrYmAgb2Zmc2V0IGJlZm9yZSBjYWxsaW5nIGBkc3RfaW5wdXQoKWAuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIElQdjYgbmV0d29ya2luZyBzdGFjayBhbmQgaXMgZXNzZW50aWFsIGZvciByZWxpYWJsZSBvcGVyYXRpb24gYW5kIHRoZXJlZm9yZSBmdXp6aW5nLgoKSSYjMzk7bSBjb25maWRlbnQgSSBuZWVkIHRvIGluY2x1ZGUgYGlwdjZfc3JoX3JjdmAgYW5kIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YC4gU2luY2UgdGhleSBhcmUgYm90aCBpbiB0aGUgY3JpdGljYWwgcGF0aCB0byBnZXR0aW5nIElQdjYgdHJhZmZpYyBwcm9jZXNzZWQsIHRoZXkgYm90aCBuZWVkIHRvIGJlIGNvdmVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtJUFY2X1NFRzZfSE1BQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICAgJiMzNDtpcHY2X3J0aGRyX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHJlY2VpdmUgcGF0aCAoYGlwdjZfc3JoX3JjdmApIHRvIGNvcnJlY3RseSBhZGp1c3QgdGhlIGBza2JgIG5ldHdvcmsgb2Zmc2V0IGJlZm9yZSBjYWxsaW5nIGBkc3RfaW5wdXQoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBoYW5kbGVzIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O0lQVjZfU0VHNl9ITUFDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9zcmhfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcmVjZWl2ZSBwYXRoIChgaXB2Nl9zcmhfcmN2YCkgdG8gY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYmAgbmV0d29yayBvZmZzZXQgYmVmb3JlIGNhbGxpbmcgYGRzdF9pbnB1dCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGhhbmRsZXMgSVB2NiBleHRlbnNpb24gaGVhZGVycywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGBza2ItXHUwMDNlZGF0YWAgaXMgcmVzdG9yZWQgdG8gdGhlIG5ldHdvcmsgaGVhZGVyIGluIGBpcHY2X3NyaF9yY3YoKWAuIEluc3RlYWQgb2YgcHVzaGluZyBhIGZpeGVkIHNpemUgKGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCksIGl0IHB1c2hlcyBgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCB0byBjb3JyZWN0bHkgYWNjb3VudCBmb3IgYW55IGV4dGVuc2lvbiBoZWFkZXJzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2tiX3B1c2hgIGNvdWxkIGluY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlYWU5NTYwZTNlNzcwMDNjNmU3MzM4NTU0OWQyZDAzMmJkNjU5NGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxMjoxNzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuYwppbmRleCA5YzY3N2ViMWQxYTYxLi40YzQwNzUyMGU5ZGFhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jCkBAIC00NTIsOCAmIzQzOzQ1Miw2IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJaGRyLSZndDtzZWdtZW50c19sZWZ0LS07CiAJYWRkciA9IGhkci0mZ3Q7c2VnbWVudHMgJiM0MzsgaGRyLSZndDtzZWdtZW50c19sZWZ0OwogCi0Jc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKLQogCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkKIAkJc2VnNl91cGRhdGVfY3N1bShza2IpOwogCkBAIC00NjIsNiAmIzQzOzQ2MCw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJaXA2X3JvdXRlX2lucHV0KHNrYik7CiAKIAlpZiAoc2tiX2RzdChza2IpLSZndDtlcnJvcikgewomIzQzOwkJc2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpOwogCQlkc3RfaW5wdXQoc2tiKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTQ3NiwxMCAmIzQzOzQ3NSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQl9CiAJCWlwdjZfaGRyKHNrYiktJmd0O2hvcF9saW1pdC0tOwogCi0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiAJCWdvdG8gbG9vcGVkX2JhY2s7CiAJfQogCiYjNDM7CXNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKIAlkc3RfaW5wdXQoc2tiKTsKIAogCXJldHVybiAtMTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHY2IFNSSCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpcHY2X3NyaF9yY3ZgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZXMgYXJlIGFyb3VuZCBgc2tiX3B1c2hgIGFuZCBgc2tiX3B1bGxgLiBJIHNlZSB0aGF0IHRoZXkmIzM5O3JlIHJlbW92aW5nIGBza2JfcHVzaGAgb2YgdGhlIElQdjYgaGVhZGVyIHNpemUgYW5kIGFkZGluZyBgc2tiX3B1c2hgIG9mIHRoZSAqbmVnYXRpdmUqIG5ldHdvcmsgb2Zmc2V0IGluIGEgY291cGxlIG9mIHBsYWNlcy4gVGhleSYjMzk7cmUgYWxzbyByZW1vdmluZyB0aGUgY29ycmVzcG9uZGluZyBgc2tiX3B1bGxgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHdpdGhpbiBJUHY2IHBhY2tldHMuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgd2l0aCBtZW1vcnkgc2FmZXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGludHJvZHVjZXMgYW55IHJpc2tzIG9mIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZXZlbiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdXNlIG9mIGBza2JfcHVzaGAgYW5kIGBza2JfcHVsbGAgYXJlIHRoZSBjb3JlIG9mIHRoaXMuIFRoZXkmIzM5O3JlIG1vZGlmeWluZyB0aGUgYHNrYi0mZ3Q7ZGF0YWAgcG9pbnRlciBhbmQgYHNrYi0mZ3Q7bGVuYC4KCk5vdywgaWYgYHNrYl9wdXNoYCBwdXNoZXMgaW50byBzb21lIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCB0aGVuIHRoYXQgbWVtb3J5IGlzIHNlbnQgdG8gdXNlciBzcGFjZSBvciByZWFkLCB0aGF0JiMzOTtzIGEgcHJvYmxlbS4gQnV0IHdhaXQsIGBza2JfcHVzaGAgKmp1c3QqIG1vdmVzIGBza2ItJmd0O2RhdGFgIGJhY2t3YXJkLiBUaGUgbWVtb3J5IGJlaW5nIG1vdmVkIG92ZXIgaXMgKnVzdWFsbHkqIHRoZSBwYWNrZXQgaGVhZGVyLCB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHJlY2VpdmVkIG9yIGFsbG9jYXRlZC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcmVzdG9yaW5nIHRoZSBoZWFkZXIgcG9pbnRlci4gT2theSwgc28gaWYgaXQgcHVzaGVzICp0b28gbXVjaCosIHdlIG1pZ2h0IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBpbiBtb3N0IGNhc2VzLCBgc2tiX3B1c2hgIGlzIHVzZWQgdG8gcmVzdG9yZSB0aGUgaGVhZGVyIHBvaW50ZXIgYXMgaXQgd2FzIGJlZm9yZSBzb21lIG9wZXJhdGlvbiBvbiB0aGUgcGFja2V0LgoKSG9sZCBvbi4gVGhlIGtleSBoZXJlIGlzIHRoZSB1c2Ugb2YgYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBMZXQmIzM5O3MgZmlndXJlIHRoaXMgb3V0Li4uIElmIGBza2JfbmV0d29ya19vZmZzZXQoc2tiKWAgaXMgbmVnYXRpdmUsIHRoZW4gdGhhdCYjMzk7cyBwb3NpdGl2ZS4gV2FpdCwgaXNuJiMzOTt0IGl0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYHNrYi0mZ3Q7bmV0d29ya19oZWFkZXJgIGFuZCBgc2tiLSZndDtkYXRhYD8gTm90IGBza2ItJmd0O21hY19oZWFkZXJgLCBJIHJlbWVtYmVyIGl0IG5vdy4gU28sICBgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCBpcyBgc2tiLSZndDtkYXRhIC0gc2tiLSZndDtuZXR3b3JrX2hlYWRlcmAuIFJpZ2h0LCBpZiBgc2tiLSZndDtkYXRhYCBpcyAqYWZ0ZXIqIGBza2ItJmd0O25ldHdvcmtfaGVhZGVyYCwgdGhlIHJlc3VsdCBpcyBwb3NpdGl2ZSwgYW5kIGBza2JfcHVzaGAgaXMgbW92aW5nIGBza2ItJmd0O2RhdGFgIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXR3b3JrIGhlYWRlci4gVGhhdCBtYWtlcyBzZW5zZS4gVGhhdCYjMzk7cyBhIHN0YW5kYXJkIHdheSB0byByZXN0b3JlIHRoZSBuZXR3b3JrIGhlYWRlciBwb2ludGVyLgoKU28sIGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZT8gTm8sIEkgZG9uJiMzOTt0IHRoaW5rIHNvLiBgc2tiX3B1c2hgIGFuZCBgc2tiX3B1bGxgIGFyZSBqdXN0IG1hbmlwdWxhdGluZyBwb2ludGVycyAqd2l0aGluKiB0aGUgYWxsb2NhdGVkIGBza2JgIGJ1ZmZlci4gVGhlIGJ1ZmZlciBpdHNlbGYgY29udGFpbnMgdGhlIHBhY2tldCB3ZSByZWNlaXZlZC4gSWYgdGhlcmUgaXMgYSBidWcgaGVyZSwgaXQmIzM5O3MgbW9yZSBsaWtlbHkgdG8gYmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkL3dyaXRlIGlzc3VlLCB3aGljaCBzaG91bGQgaG9wZWZ1bGx5IGJlIGNhdWdodCBieSBLQVNBTiBvciBsb2dpYyBlcnJvcnMuCgpMZXQgbWUgdGhpbmsuLi4gaXQmIzM5O3MgcHJvYmFibHkgZml4aW5nIGFuIGlzc3VlIHdoZXJlIGBza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpYCB3YXMgYmVpbmcgdXNlZCwgYnV0IHRoZSBuZXR3b3JrIGhlYWRlciB3YXNuJiMzOTt0ICpleGFjdGx5KiB0aGF0IHNpemUg4oCTIGl0IGNvdWxkIGJlIGJpZ2dlciwgd2l0aCBleHRlbnNpb24gaGVhZGVycy4gQnkgdXNpbmcgYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAsIHRoZSBwYXRjaCBjb3JyZWN0bHkgcmVzdG9yZXMgdGhlIG5ldHdvcmsgaGVhZGVyIHBvaW50ZXIgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXJlIHdlcmUgZXh0ZW5zaW9uIGhlYWRlcnMgb3Igbm90LiBUaGF0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgaW5jb3JyZWN0IHBhY2tldCBwcm9jZXNzaW5nLCB3aGljaCBhcmUgdGhlIG1haW4gY29uY2VybnMuIEl0JiMzOTtzIG5vdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCBhbGwsIHRoZW4uCgpBbHJpZ2h0LCBzZWVtcyBzb2xpZC4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYGlwdjZfc3JoX3JjdmAgaW1wbGVtZW50YXRpb24gdG8gdmVyaWZ5IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmM9MzQyPXN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvZXh0aGRycy5jLTM3Mi17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTY1ND1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTY5MC1cdFx0Lyogc2VnbWVudCByb3V0aW5nICovXG5uZXQvaXB2Ni9leHRoZHJzLmM6NjkxOlx0XHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYik7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkyLVx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyMgoJCQkJCQkJb3V0cHV0OiAxOTIKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB5ZXQgcG90ZW50aWFsbHkgbmFzdHksIGJ1Zy4gSXQgc2VlbXMgdGhlIG9yaWdpbmFsIGNvZGUgaW4gYGlwdjZfc3JoX3JjdigpYCB1c2VkIGBza2JfcHVzaGAgd2l0aCBhIGZpeGVkIHNpemXigJRgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWDigJRidXQgdGhhdCYjMzk7cyBmbGF3ZWQuIElmIHRoZXJlIGFyZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIGludm9sdmVkLCB0aGF0IGZpeGVkIHNpemUgaXMgbGlrZWx5IHdyb25nLCBhbmQgdGhlIGBza2ItJmd0O2RhdGFgIHBvaW50ZXIgZ2V0cyBtaXNhZGp1c3RlZC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBhbiBvdXQtb2YtYm91bmRzIG9yIGxvZ2ljIGVycm9yLgoKTm93LCBmcm9tIG15IHBlcnNwZWN0aXZlLCB0aGlzIGlzICpleGFjdGx5KiB0aGUga2luZCBvZiBidWcgdGhhdCBLQVNBTiBleGNlbHMgYXQgY2F0Y2hpbmcuIElmIGBza2JfcHVzaGAgaXMgcHVzaGluZyB0b28gZmFyIGFuZCB0aGUgY29kZSBsYXRlciB0cmllcyB0byBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgdGhlIGFsbG9jYXRlZCBidWZmZXIsIEtBU0FOIHdpbGwgZmxhZyBpdCBpbW1lZGlhdGVseS4gVGhhdCYjMzk7cyB0aGUgaWRlYWwgc2l0dWF0aW9uLgoKS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4gV2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgYWxsb2NhdGVkIG9yIGV4cG9zZWQuIFRoZSBwYXRjaCYjMzk7cyBmaXggaW52b2x2ZXMgKmhvdyogdGhlIGV4aXN0aW5nIGJ1ZmZlciBpcyBhZGp1c3RlZCBhbmQgcHJvY2Vzc2VkLiBObyBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG5vdGhpbmcgbGlrZSB0aGF0LiBUaGVyZWZvcmUsIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGBza2ItXHUwMDNlZGF0YWAgaXMgcmVzdG9yZWQgdG8gdGhlIG5ldHdvcmsgaGVhZGVyIGluIGBpcHY2X3NyaF9yY3YoKWAuIEluc3RlYWQgb2YgcHVzaGluZyBhIGZpeGVkIHNpemUgKGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCksIGl0IHB1c2hlcyBgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCB0byBjb3JyZWN0bHkgYWNjb3VudCBmb3IgYW55IGV4dGVuc2lvbiBoZWFkZXJzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2tiX3B1c2hgIGNvdWxkIGluY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGBza2ItXHUwMDNlZGF0YWAgaXMgcmVzdG9yZWQgdG8gdGhlIG5ldHdvcmsgaGVhZGVyIGluIGBpcHY2X3NyaF9yY3YoKWAuIEluc3RlYWQgb2YgcHVzaGluZyBhIGZpeGVkIHNpemUgKGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYCksIGl0IHB1c2hlcyBgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYCB0byBjb3JyZWN0bHkgYWNjb3VudCBmb3IgYW55IGV4dGVuc2lvbiBoZWFkZXJzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBgc2tiX3B1c2hgIGNvdWxkIGluY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE3OjM0LjYxNTk4MDAzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDA2ODA2NjA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9ITUFDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9zcmhfcmN2XCIsXG4gICAgXCJpcHY2X3J0aGRyX3JjdlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBgc2tiLVxcdTAwM2VkYXRhYCBpcyByZXN0b3JlZCB0byB0aGUgbmV0d29yayBoZWFkZXIgaW4gYGlwdjZfc3JoX3JjdigpYC4gSW5zdGVhZCBvZiBwdXNoaW5nIGEgZml4ZWQgc2l6ZSAoYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgKSwgaXQgcHVzaGVzIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBhbnkgZXh0ZW5zaW9uIGhlYWRlcnMgdGhhdCBtaWdodCBiZSBwcmVzZW50LiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBza2JfcHVzaGAgY291bGQgaW5jb3JyZWN0bHkgYWRqdXN0IHRoZSBgc2tiLVxcdTAwM2VkYXRhYCBwb2ludGVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHBhdGggKGBpcHY2X3NyaF9yY3ZgKSB0byBjb3JyZWN0bHkgYWRqdXN0IHRoZSBgc2tiYCBuZXR3b3JrIG9mZnNldCBiZWZvcmUgY2FsbGluZyBgZHN0X2lucHV0KClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgaGFuZGxlcyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxNzozNC42MTU5ODYyODhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjM2OTA3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZWFlOTU2MGUzZTc3MDAzYzZlNzMzODU1NDlkMmQwMzJiZDY1OTRmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDEyOjE3OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuY1xcbmluZGV4IDljNjc3ZWIxZDFhNjEuLjRjNDA3NTIwZTlkYWEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jXFxuKysrIGIvbmV0L2lwdjYvZXh0aGRycy5jXFxuQEAgLTQ1Miw4ICs0NTIsNiBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQtLTtcXG4gXFx0YWRkciA9IGhkci1cXHUwMDNlc2VnbWVudHMgKyBoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQ7XFxuIFxcbi1cXHRza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbi1cXG4gXFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxcbiBcXHRcXHRzZWc2X3VwZGF0ZV9jc3VtKHNrYik7XFxuIFxcbkBAIC00NjIsNiArNDYwLDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0aXA2X3JvdXRlX2lucHV0KHNrYik7XFxuIFxcbiBcXHRpZiAoc2tiX2RzdChza2IpLVxcdTAwM2VlcnJvcikge1xcbitcXHRcXHRza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7XFxuIFxcdFxcdGRzdF9pbnB1dChza2IpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG5AQCAtNDc2LDEwICs0NzUsMTAgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0fVxcbiBcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQtLTtcXG4gXFxuLVxcdFxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuIFxcdFxcdGdvdG8gbG9vcGVkX2JhY2s7XFxuIFxcdH1cXG4gXFxuK1xcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcXG4gXFx0ZHN0X2lucHV0KHNrYik7XFxuIFxcbiBcXHRyZXR1cm4gLTE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE3OjM1Ljk0MDM1MjU0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYyNDc0NDYxMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiSVBWNl9TRUc2X0hNQUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHY2X3NyaF9yY3ZcIixcbiAgICBcImlwdjZfcnRoZHJfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlaXZlIHBhdGggKGBpcHY2X3NyaF9yY3ZgKSB0byBjb3JyZWN0bHkgYWRqdXN0IHRoZSBgc2tiYCBuZXR3b3JrIG9mZnNldCBiZWZvcmUgY2FsbGluZyBgZHN0X2lucHV0KClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgaGFuZGxlcyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZWFlOTU2MGUzZTc3MDAzYzZlNzMzODU1NDlkMmQwMzJiZDY1OTRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTI6MTc6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbmluZGV4IDljNjc3ZWIxZDFhNjEuLjRjNDA3NTIwZTlkYWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcbisrKyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuQEAgLTQ1Miw4ICs0NTIsNiBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQtLTtcbiBcdGFkZHIgPSBoZHItXHUwMDNlc2VnbWVudHMgKyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiBcbi1cdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4tXG4gXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcbiBcdFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xuIFxuQEAgLTQ2Miw2ICs0NjAsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aXA2X3JvdXRlX2lucHV0KHNrYik7XG4gXG4gXHRpZiAoc2tiX2RzdChza2IpLVx1MDAzZWVycm9yKSB7XG4rXHRcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcbiBcdFx0ZHN0X2lucHV0KHNrYik7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbkBAIC00NzYsMTAgKzQ3NSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gXHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gXHR9XG4gXG4rXHRza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7XG4gXHRkc3RfaW5wdXQoc2tiKTtcbiBcbiBcdHJldHVybiAtMTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE3OjM1Ljk0MDM1MzkyMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNDA1MTkyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29yayBQYWNrZXQgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9pcHY2L2V4dGhkcnMuY2AsIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyB0byBgaXB2Nl9zcmhfcmN2YC4gSXQgc2VlbXMgdGhleSd2ZSBtYWRlIHNvbWUgaW50ZXJlc3RpbmcgYWRqdXN0bWVudHMgcmVsYXRlZCB0byBob3cgd2UgaGFuZGxlIHRoZSBJUHY2IGhlYWRlciBhbmQsIG1vc3QgbGlrZWx5LCBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHByb2Nlc3NpbmcuXG5cblRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcmVtb3ZhbCBvZiBgc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtgLiBUaGF0J3Mgc2lnbmlmaWNhbnQuIEl0IGltcGxpZXMgd2UncmUgbm8gbG9uZ2VyIGV4cGxpY2l0bHkgcHVzaGluZyB0aGUgSVB2NiBoZWFkZXIgb250byB0aGUgc3RhY2sgd2hlbiBoYW5kbGluZyB0aGUgcGFja2V0IGluIHRoaXMgZnVuY3Rpb24uIEluc3RlYWQsIHRoZXkndmUgYWRkZWQgYHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtgIGluIHR3byBsb2NhdGlvbnMgYmVmb3JlIGBkc3RfaW5wdXQoc2tiKTtgLiBUaGlzIGxvb2tzIGxpa2UgYSByZXBsYWNlbWVudCBmb3IgdGhlIGV4cGxpY2l0IHB1c2guIFVzaW5nIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIGlzIGVzc2VudGlhbGx5IHB1c2hpbmcgYWxsIG5ldHdvcmsgaGVhZGVycy4gSSBzdXNwZWN0IHRoaXMgaXMgYWltZWQgYXQgbWFraW5nIHRoZSBjb2RlIG1vcmUgZ2VuZXJhbCBvciBwb3RlbnRpYWxseSBvcHRpbWl6aW5nIGhlYWRlciBwcm9jZXNzaW5nIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFNSSC4gV2Ugc2hvdWxkIGV4YW1pbmUgd2h5IHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBhbmQgd2hldGhlciB0aGUgbmV0d29yayBoZWFkZXJzIHdpbGwgYmUgaGFuZGxlZCB0aGUgc2FtZSB3YXkgZm9yIGFsbCB1c2VzLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSByZW1vdmFsIG9mIGBza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO2AgYmVmb3JlIHRoYXQgYGdvdG8gbG9vcGVkX2JhY2s7YC4gVGhpcyBtZWFucyB3ZSdyZSBubyBsb25nZXIgZXhwbGljaXRseSAqcG9wcGluZyogdGhlIElQdjYgaGVhZGVyIG9mZiBiZWZvcmUgbG9vcGluZyBiYWNrLiBTZWVtcyBjb25zaXN0ZW50IHdpdGggdGhlIGZpcnN0IGNoYW5nZSwgc28gdGhlIElQdjYgaGVhZGVyIGlzIG5vdCBiZWluZyBtYW51YWxseSBoYW5kbGVkLiBUaGlzIHJlaW5mb3JjZXMgdGhlIGlkZWEgdGhhdCB0aGUgSVB2NiBoZWFkZXIgbWFuaXB1bGF0aW9uIGlzIG5vdyBoYW5kbGVkIGRpZmZlcmVudGx5LlxuXG5MZXQgbWUgZ28gYWhlYWQgYW5kIGRpdmUgaW50byBgaXB2Nl9zcmhfcmN2YCB3aXRoaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcmF0aW9uYWxlIGJlaGluZCB0aGVzZSBtb2RpZmljYXRpb25zIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgaXMgd2hlcmUgSSBjYW4gc3RhcnQgdG8gZXZhbHVhdGUgdGhlIG92ZXJhbGwgaW1wYWN0LCBsb29rIGZvciBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgY2hhbmdlcyBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE3OjQxLjk4MDg3Njc0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NDM4MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfc3JoX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jPTM0Mj1zdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzozNzE6c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz02NTQ9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTY5MC1cXHRcXHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NjkxOlxcdFxcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiKTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkyLVxcdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE3OjQyLjAzOTMyMzA4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDUzMzcwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogVGFyZ2V0IGZvciBGdXp6aW5nKipcblxuUmlnaHQsIGBpcHY2X3NyaF9yY3ZgIGlzIGludm9rZWQgZGlyZWN0bHkgZnJvbSBgaXB2Nl9ydGhkcl9yY3ZgLiBUaGF0IGNoYWluIG1lYW5zIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSwgYW5kIGdpdmVuIHRoYXQgaXQncyBoYW5kbGluZyBwb3RlbnRpYWxseSBjb21wbGV4IHBhY2tldCBzdHJ1Y3R1cmVzLCBpdCdzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBrbm93IHdoZXJlIHRoZSBlbnRyeXBvaW50IGlzLCBhbmQgdGhhdCBpbW1lZGlhdGVseSB1cHMgaXRzIHZhbHVlIGFzIGEgdGFyZ2V0LiBUaW1lIHRvIGRpZyBpbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGdvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIElQdjYgU2VnbWVudCBSb3V0aW5nLiBMZXQncyBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBhbmQgc2VlIHdoYXQga25vYnMgYW5kIGxldmVycyB3ZSBjYW4gdHdpZGRsZSB0byBnZXQgb3VyIGZ1enppbmcgY2FtcGFpZ24gZ29pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxNzo0NS41NDQ2NjI1MTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5NDY5MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9zcmhfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmM9MzQyPXN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzIte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTY1ND1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkwLVxcdFxcdC8qIHNlZ21lbnQgcm91dGluZyAqL1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2OTE6XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTItXFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTc6NDUuNjQwNjEzNTMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4Mzk0MTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIGZvciBDb25maWd1cmFibGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIFJlY2VwdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgYGlwdjZfc3JoX3JjdmAgaXNuJ3QgY29udHJvbGxlZCBieSBzb21lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBwcmFjdGljZSwgcmlnaHQ/IFlvdSBhbHdheXMgd2FudCB0byBlbGltaW5hdGUgdGhlIG9idmlvdXMgcG9zc2liaWxpdGllcywgbGlrZSBhIGRpc2FibGVkIGZlYXR1cmUsIGJlZm9yZSB5b3UgZGl2ZSBpbnRvIG1vcmUgY29tcGxleCBwcm9ibGVtcy4gSXQncyBlc3BlY2lhbGx5IGNydWNpYWwgd2l0aCBzb21ldGhpbmcgbGlrZSBJUHY2IHNlZ21lbnQgcm91dGluZywgd2hlcmUgYSBtaXNjb25maWd1cmF0aW9uIGNvdWxkIGVhc2lseSBiZSB0aGUgcm9vdCBjYXVzZS4gVGhpcyBjb3VsZCBiZSBhIGdsb2JhbCBzZXR0aW5nLCBhIHBlci1pbnRlcmZhY2Ugc2V0dGluZywgbWF5YmUgZXZlbiBzb21ldGhpbmcgYXBwbGllZCB2aWEgYSBwb2xpY3kgbWFwLiBJIG5lZWQgdG8ga25vdyB0aGUgcG90ZW50aWFsIGZvciBleHRlcm5hbCBmYWN0b3JzLiBXaGF0IGFyZSB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBiZSBpbiBwbGF5IGZvciBgaXB2Nl9zcmhfcmN2YD8gSSBuZWVkIHRvIGNoZWNrIGFsbCB0aGUgbGlrZWx5IHN1c3BlY3RzLiBUaGVuLCBhbmQgb25seSB0aGVuLCBjYW4gSSByZWFsbHkgc3RhcnQgdG8gbmFycm93IGRvd24gd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLiBUaGF0J3MgbXkgbmV4dCBsb2dpY2FsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxNzo0OC42MjQ1NjM0MDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4OTY2NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JUFY2X1NFRzZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTI0PWlwdjYtJChDT05GSUdfTkVUTEFCRUwpICs9IGNhbGlwc28ub1xcbm5ldC9pcHY2L01ha2VmaWxlOjI1OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSArPSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXFxubmV0L2lwdjYvTWFrZWZpbGU6MjY6aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfSE1BQykgKz0gc2VnNl9obWFjLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0yNy1pcHY2LSQoQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMKSArPSBycGxfaXB0dW5uZWwub1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0xODE9c3RhdGljIHN0cnVjdCBpcHY2X2RldmNvbmYgaXB2Nl9kZXZjb25mIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIyOS1cXHQuc2VnNl9lbmFibGVkXFx0XFx0PSAwLFxcbm5ldC9pcHY2L2FkZHJjb25mLmM6MjMwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIzMS1cXHQuc2VnNl9yZXF1aXJlX2htYWNcXHQ9IDAsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTQtXFx0LnNlZzZfZW5hYmxlZFxcdFxcdD0gMCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI5NTojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTYtXFx0LnNlZzZfcmVxdWlyZV9obWFjXFx0PSAwLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz01NjYyPXN0YXRpYyB2b2lkIGlwdjZfc3RvcmVfZGV2Y29uZihjb25zdCBzdHJ1Y3QgaXB2Nl9kZXZjb25mICpjbmYsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MzYtXFx0YXJyYXlbREVWQ09ORl9TRUc2X0VOQUJMRURdID0gUkVBRF9PTkNFKGNuZi1cXHUwMDNlc2VnNl9lbmFibGVkKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU3Mzc6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczOC1cXHRhcnJheVtERVZDT05GX1NFRzZfUkVRVUlSRV9ITUFDXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZXNlZzZfcmVxdWlyZV9obWFjKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Njg2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhZGRyY29uZl9zeXNjdGxbXSA9IHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIzOS1cXHR9LFxcbm5ldC9pcHY2L2FkZHJjb25mLmM6NzI0MDojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvYWRkcmNvbmYuYy03MjQxLVxcdHtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy00Ny0jaW5jbHVkZSBcXHUwMDNjbmV0L3NlZzYuaFxcdTAwM2VcXG5uZXQvaXB2Ni9leHRoZHJzLmM6NDg6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L2V4dGhkcnMuYy00OS0jaW5jbHVkZSBcXHUwMDNjbmV0L3NlZzZfaG1hYy5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTM3MT1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTM5NS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6Mzk2OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzk3LVxcdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKSB7XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9MTEyNT1zdGF0aWMgdTggaXB2Nl9wdXNoX3J0aGRyNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBwcm90byxcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xMTUzLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzoxMTU0OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMTE1NS1cXHRpZiAoc3JfaGFzX2htYWMoc3JfcGhkcikpIHtcXG4tLVxcbm5ldC9pcHY2L3NlZzYuYz0xNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHNlZzZfZ2VubF9wb2xpY3lbU0VHNl9BVFRSX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2lwdjYvc2VnNi5jLTE1MC1cXG5uZXQvaXB2Ni9zZWc2LmM6MTUxOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2LmMtMTUyLVxcbi0tXFxubmV0L2lwdjYvc2VnNi5jPTI2Nj1zdGF0aWMgaW50IHNlZzZfZ2VubF9nZXRfdHVuc3JjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvaXB2Ni9zZWc2LmMtMjk5LVxcbm5ldC9pcHY2L3NlZzYuYzozMDA6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzYuYy0zMDEtXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjUtI2luY2x1ZGUgXFx1MDAzY25ldC9kc3RfY2FjaGUuaFxcdTAwM2VcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6MjY6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfaXB0dW5uZWwuYy0yNy0jaW5jbHVkZSBcXHUwMDNjbmV0L3NlZzZfaG1hYy5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTEzOT1zdGF0aWMgaW50IF9fc2VnNl9kb19zcmhfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfc3JfaGRyICpvc3JoLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTE5OS1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6MjAwOiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMjAxLVxcdGlmIChzcl9oYXNfaG1hYyhpc3JoKSkge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jPTIyMz1zdGF0aWMgaW50IHNlZzZfZG9fc3JoX2VuY2FwX3JlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTMyNi1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6MzI3OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzI4LVxcdGlmICh1bmxpa2VseSghc2tpcF9zcmggXFx1MDAyNlxcdTAwMjYgc3JfaGFzX2htYWMoaXNyaCkpKSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM9MzQzPXN0YXRpYyBpbnQgX19zZWc2X2RvX3NyaF9pbmxpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZfc3JfaGRyICpvc3JoLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9pcHR1bm5lbC5jLTM3OC1cXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmM6Mzc5OiNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9zZWc2X2lwdHVubmVsLmMtMzgwLVxcdGlmIChzcl9oYXNfaG1hYyhpc3JoKSkge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI3LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXBfdHVubmVscy5oXFx1MDAzZVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyODojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI5LSNpbmNsdWRlIFxcdTAwM2NuZXQvc2VnNl9obWFjLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjE2PXN0YXRpYyBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKmdldF9hbmRfdmFsaWRhdGVfc3JoKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjIzLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMjQ6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMjUtXFx0aWYgKCFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjMyPXN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjQwLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDE6I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDItXFx0aWYgKHNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTc0Mj1zdGF0aWMgaW50IGVuZF9mbHY4OTg2X2NvcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc1My1cXHRwaW5mbyA9IHNlZzZfZ2V0X3NyaF9wa3RpbmZvKHNyaCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjc1NDojaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTc1NS1cXHRpZiAoc3JoIFxcdTAwMjZcXHUwMDI2ICFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE3OjQ4LjczMzUzNTY0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDA4OTcxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHNlZWluZyBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAgYW5kIGBDT05GSUdfSVBWNl9TRUc2X0hNQUNgIHBvcCB1cC4gVGhpcyBtYWtlcyBtZSB3b25kZXIuLi4gaXMgdGhlcmUgYSBtb3JlIGdlbmVyYWwgYENPTkZJR19JUFY2X1NFRzZgIG9wdGlvbj8gSXQgd291bGQgYmUgd2VpcmQgdG8gaGF2ZSB0aGUgc3BlY2lmaWMgb25lcyB3aXRob3V0IGEgYnJvYWRlciBlbmFibGluZyBmbGFnLiBCZXN0IHRvIGNoZWNrIHRoZSBzb3VyY2UuIExldCdzIGRpZyBpbnRvIGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQgZ2V0IHRoZSB3aG9sZSBwaWN0dXJlIG9mIHdoYXQncyBhdmFpbGFibGUgdGhlcmUuIEl0J2xsIGdpdmUgYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgd2hvbGUgSVB2NiBzZWdtZW50IHJvdXRpbmcgZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTc1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTc6NTIuMTc0NDM1NjE5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDg1MDYzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9TRUc2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTc6NTIuMjM1MjkyOTY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDc1OTc0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBTUkggUmVjZXB0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaXB2Nl9zcmhfcmN2YCDigJMgYW5kIHRoYXQncyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gUmlnaHQsIHNvIGl0J3MgcHJvYmFibHkgaGFuZGxpbmcgdGhlIHJlY2VwdGlvbiBvZiBTb3VyY2UgUm91dGluZyBIZWFkZXIgKFNSSCkgZXh0ZW5zaW9uIGhlYWRlcnMgd2l0aGluIElQdjYgcGFja2V0cy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCBpcyB0aGlzIGNvZGUgcGF0aCBldmVuICpjb21waWxlZCogdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXM/IE9yIGlzIGl0IGNvbmRpdGlvbmFsaXplZCBzb21laG93PyBJIG5lZWQgdG8gY2hlY2sgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGRpc2FibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYG5ldC9pcHY2L2V4dGhkcnMuY2AgaXRzZWxmLCBhbmQgSSdsbCBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgaXB2Nl9zcmhfcmN2YCBmdW5jdGlvbiBkZWZpbml0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGAjaWZkZWZgIGJsb2NrcywgYENPTkZJR19gIG9wdGlvbnMsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBjb250cm9scyB3aGV0aGVyIHRoaXMgY29kZSBpcyBpbmNsdWRlZCBpbiB0aGUga2VybmVsIGltYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucyAqZmlyc3QqIGJlZm9yZSBJIGNhbiBwcm9jZWVkIHdpdGggdW5kZXJzdGFuZGluZyB0aGUgYWN0dWFsIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTc6NTYuMTgyODkzMzEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTcyMzQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3NyaF9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuYz0zNDI9c3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTM3MC1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6MzcxOnN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvZXh0aGRycy5jLTM3Mi17XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9NjU0PXN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTAtXFx0XFx0Lyogc2VnbWVudCByb3V0aW5nICovXFxubmV0L2lwdjYvZXh0aGRycy5jOjY5MTpcXHRcXHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYik7XFxubmV0L2lwdjYvZXh0aGRycy5jLTY5Mi1cXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxNzo1Ni4yNDg2MjAxM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIwNjgzNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIEhlYWRlciBSZWNlaXZlcioqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24sIGFuZCBpdCdzIHN0cmlraW5nIG1lIHRoYXQgaXQgc2VlbXMgdG8gYmUgY29uc2lzdGVudGx5IGNvbXBpbGVkIHdoZW5ldmVyIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBgQ09ORklHX0lQVjZgLCBpcyBlbmFibGVkLiBUaGF0J3MgYSBwYXR0ZXJuIHRoYXQgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGlzLlxuXG5NeSBpbml0aWFsIGFzc3VtcHRpb24gbWlnaHQgYmUgY29ycmVjdCwgYnV0IEkgc2hvdWxkbid0IGp1bXAgdG8gY29uY2x1c2lvbnMuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhlIGNvZGUgc3Vycm91bmRpbmcgYGlwdjZfc3JoX3JjdmAuIExldCdzIGNvbmZpcm0gd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHdyYXBwZWQgaW5zaWRlIGFueSBjb25kaXRpb25hbCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgYCNpZmRlZmAgc3RhdGVtZW50cywgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkgbmVlZCB0byBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlcmUncyBhIG1vcmUgbnVhbmNlZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbnZvbHZlZCwgcG90ZW50aWFsbHkgdGllZCB0byBhbm90aGVyIGZlYXR1cmUgZmxhZyBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZy4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxODowMC4zNjkzMDY4MDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdCAqL1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gMzUzOlxcdFxcdGFkZHIgPSBoZHItXFx1MDAzZXNlZ21lbnRzICsgaGRyLVxcdTAwM2VzZWdtZW50c19sZWZ0O1xcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQrKztcXG4gMzU2OlxcdFxcdGZyb20gPSAqKF9fYmUzMiAqKWhkcjtcXG4gMzU3OlxcdFxcbiAzNTg6XFx0XFx0aGRyLVxcdTAwM2VzZWdtZW50c19sZWZ0LS07XFxuIDM1OTpcXHRcXHR0byA9ICooX19iZTMyICopaGRyO1xcbiAzNjA6XFx0XFxuIDM2MTpcXHRcXHQvKiB1cGRhdGUgc2tiIGNzdW0gd2l0aCBkaWZmIHJlc3VsdGluZyBmcm9tIHNlZ19sZWZ0IGRlY3JlbWVudCAqL1xcbiAzNjI6XFx0XFxuIDM2MzpcXHRcXHR1cGRhdGVfY3N1bV9kaWZmNChza2IsIGZyb20sIHRvKTtcXG4gMzY0OlxcdFxcbiAzNjU6XFx0XFx0LyogY29tcHV0ZSBjc3VtIGRpZmYgYmV0d2VlbiBjdXJyZW50IGFuZCBuZXh0IHNlZ21lbnQgYW5kIHVwZGF0ZSAqL1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHR1cGRhdGVfY3N1bV9kaWZmMTYoc2tiLCAoX19iZTMyICopKFxcdTAwMjZpcHY2X2hkcihza2IpLVxcdTAwM2VkYWRkciksXFxuIDM2ODpcXHRcXHRcXHRcXHQgICAoX19iZTMyICopYWRkcik7XFxuIDM2OTpcXHR9XFxuIDM3MDpcXHRcXG4gMzcxOlxcdHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuIDM3MjpcXHR7XFxuIDM3MzpcXHRcXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuIDM3NDpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gMzc1OlxcdFxcdHN0cnVjdCBpcHY2X3NyX2hkciAqaGRyO1xcbiAzNzY6XFx0XFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcXG4gMzc3OlxcdFxcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjtcXG4gMzc4OlxcdFxcdGludCBhY2NlcHRfc2VnNjtcXG4gMzc5OlxcdFxcbiAzODA6XFx0XFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG4gMzgzOlxcdFxcdGlmICghaWRldikge1xcbiAzODQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM4NTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDM4NjpcXHRcXHR9XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdGFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXFx1MDAzZXNlZzZfZW5hYmxlZCksXFxuIDM4OTpcXHRcXHRcXHRcXHQgIFJFQURfT05DRShpZGV2LVxcdTAwM2VjbmYuc2VnNl9lbmFibGVkKSk7XFxuIDM5MDpcXHRcXG4gMzkxOlxcdFxcdGlmICghYWNjZXB0X3NlZzYpIHtcXG4gMzkyOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzOTM6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAzOTQ6XFx0XFx0fVxcbiAzOTU6XFx0XFxuIDM5NjpcXHQjaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxuIDM5NzpcXHRcXHRpZiAoIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSkge1xcbiAzOTg6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM5OTpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDQwMDpcXHRcXHR9XFxuIDQwMTpcXHQjZW5kaWZcXG4gNDAyOlxcdFxcbiA0MDM6XFx0bG9vcGVkX2JhY2s6XFxuIDQwNDpcXHRcXHRpZiAoaGRyLVxcdTAwM2VzZWdtZW50c19sZWZ0ID09IDApIHtcXG4gNDA1OlxcdFxcdFxcdGlmIChoZHItXFx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY2IHx8IGhkci1cXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjQpIHtcXG4gNDA2OlxcdFxcdFxcdFxcdGludCBvZmZzZXQgPSAoaGRyLVxcdTAwM2VoZHJsZW4gKyAxKSBcXHUwMDNjXFx1MDAzYyAzO1xcbiA0MDc6XFx0XFxuIDQwODpcXHRcXHRcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSxcXG4gNDA5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSk7XFxuIDQxMDpcXHRcXHRcXHRcXHRza2JfcHVsbChza2IsIG9mZnNldCk7XFxuIDQxMTpcXHRcXHRcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLFxcbiA0MTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgb2Zmc2V0KTtcXG4gNDEzOlxcdFxcbiA0MTQ6XFx0XFx0XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDQxNTpcXHRcXHRcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiA0MTY6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcXG4gNDE3OlxcdFxcdFxcdFxcdGlmIChoZHItXFx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY0KVxcbiA0MTg6XFx0XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcXG4gNDE5OlxcdFxcdFxcdFxcdF9fc2tiX3R1bm5lbF9yeChza2IsIHNrYi1cXHUwMDNlZGV2LCBuZXQpO1xcbiA0MjA6XFx0XFxuIDQyMTpcXHRcXHRcXHRcXHRuZXRpZl9yeChza2IpO1xcbiA0MjI6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0MjM6XFx0XFx0XFx0fVxcbiA0MjQ6XFx0XFxuIDQyNTpcXHRcXHRcXHRvcHQtXFx1MDAzZXNyY3J0ID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpO1xcbiA0MjY6XFx0XFx0XFx0b3B0LVxcdTAwM2VsYXN0b3B0ID0gb3B0LVxcdTAwM2VzcmNydDtcXG4gNDI3OlxcdFxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSAoaGRyLVxcdTAwM2VoZHJsZW4gKyAxKSBcXHUwMDNjXFx1MDAzYyAzO1xcbiA0Mjg6XFx0XFx0XFx0b3B0LVxcdTAwM2VuaG9mZiA9IChcXHUwMDI2aGRyLVxcdTAwM2VuZXh0aGRyKSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gNDMxOlxcdFxcdH1cXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0aWYgKGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCBcXHUwMDNlPSAoaGRyLVxcdTAwM2VoZHJsZW4gXFx1MDAzZVxcdTAwM2UgMSkpIHtcXG4gNDM0OlxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gNDM1OlxcdFxcdFxcdGljbXB2Nl9wYXJhbV9wcm9iKHNrYiwgSUNNUFY2X0hEUl9GSUVMRCxcXG4gNDM2OlxcdFxcdFxcdFxcdFxcdCAgKChcXHUwMDI2aGRyLVxcdTAwM2VzZWdtZW50c19sZWZ0KSAtXFxuIDQzNzpcXHRcXHRcXHRcXHRcXHQgICBza2JfbmV0d29ya19oZWFkZXIoc2tiKSkpO1xcbiA0Mzg6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0Mzk6XFx0XFx0fVxcbiA0NDA6XFx0XFxuIDQ0MTpcXHRcXHRpZiAoc2tiX2Nsb25lZChza2IpKSB7XFxuIDQ0MjpcXHRcXHRcXHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7XFxuIDQ0MzpcXHRcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcXG4gNDQ0OlxcdFxcdFxcdFxcdFxcdFxcdElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTtcXG4gNDQ1OlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA0NDY6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0NDc6XFx0XFx0XFx0fVxcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXHRcXHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MDAuMzY5NDc3ODk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTI4NTQ4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJUHY2IENvbmZpZ3VyYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSdzIGJlaGF2aW9yIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaWYgYENPTkZJR19JUFY2YCBpcyBvbiwgY29tcGlsYXRpb24gaGFwcGVucy4gVGhhdCdzIGV4cGVjdGVkLiBCdXQgaGFuZyBvbiwgdGhpcyBgYWNjZXB0X3NlZzZgIGZ1bmN0aW9uLi4uIHRoYXTigJlzIG5vdCBxdWl0ZSByaWdodC4gSXQgbG9va3MgbGlrZSBpdCAqbmVlZHMqIGBzZWc2X2VuYWJsZWRgIHRvIGJlIHNldC4gQW5kIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYHNlZzZfZW5hYmxlZGAgaXMgcGFydCBvZiBgaXB2Nl9kZXZjb25mYC4gTm93IEkgaGF2ZSB0byBhc2sgbXlzZWxmLCBpcyB0aGF0IGFsd2F5cyBnb2luZyB0byBiZSBwcmVzZW50PyBJJ2QgYmV0dGVyIGRvdWJsZSBjaGVjayB0aGF0IGBzZWc2X2VuYWJsZWRgIGlzIGFsd2F5cyBkZWZpbmVkLiBMZXQgbWUganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L2lwdjYuaGAgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdCwgb3RoZXJ3aXNlLCB0aGlzIGNvdWxkIGJlIGEgbmFzdHkgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODg3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxODowNS40ODIzMzU5NjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODcwNTI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2VuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9pcHY2LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9pcHY2Lmg9MTM9c3RydWN0IGlwdjZfZGV2Y29uZiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC03OS1cXHRfX3MzMlxcdFxcdGtlZXBfYWRkcl9vbl9kb3duO1xcbmluY2x1ZGUvbGludXgvaXB2Ni5oOjgwOlxcdF9fczMyXFx0XFx0c2VnNl9lbmFibGVkO1xcbmluY2x1ZGUvbGludXgvaXB2Ni5oLTgxLSNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MDYuMjQxMDQ1NDM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjk1MDI1NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgc2VnNl9lbmFibGVkYCBmbGFnLiBJdCBzZWVtcyBsaWtlIGl0J3MgKmFsd2F5cyogcHJlc2VudCwgcmVnYXJkbGVzcy4gVGhhdCBpbXBsaWVzIGBpcHY2X3NyaF9yY3ZgIGlzIGFsd2F5cyBjb21waWxlZCBpbiwgbWVhbmluZyBpdCdzIHRoZXJlIGFuZCByZWFjaGFibGUgaWYgYHNlZzZfZW5hYmxlZGAgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBzeXNjdGwgaW50ZXJmYWNlLiBIbW0sIHRoYXQgZmVlbHMgYSBiaXQgc3VycHJpc2luZy4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYHNlZzZfZW5hYmxlZGAgc3lzY3RsIHNldHRpbmcgaXMgKmFsd2F5cyogYXZhaWxhYmxlIGFzIEkgYmVsaWV2ZS4gV2hlcmUgd291bGQgdGhhdCBzZXR0aW5nIGJlIGRlZmluZWQ/IExldCBtZSBqdXN0IHF1aWNrbHkganVtcCBvdmVyIHRvIGBuZXQvaXB2Ni9hZGRyY29uZi5jYCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjY3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MTAuMzEwNTUxMjA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU5NTgzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVWQ09ORl9TRUc2X0VOQUJMRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvYWRkcmNvbmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jPTU2NjI9c3RhdGljIHZvaWQgaXB2Nl9zdG9yZV9kZXZjb25mKGNvbnN0IHN0cnVjdCBpcHY2X2RldmNvbmYgKmNuZixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczNS1cXHRhcnJheVtERVZDT05GX0tFRVBfQUREUl9PTl9ET1dOXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZWtlZXBfYWRkcl9vbl9kb3duKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU3MzY6XFx0YXJyYXlbREVWQ09ORl9TRUc2X0VOQUJMRURdID0gUkVBRF9PTkNFKGNuZi1cXHUwMDNlc2VnNl9lbmFibGVkKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MzctI2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxODoxMC40MjY1MTQ0M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTU4MzUxMjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBGb2N1cyBvbiBJUHY2IFNSSCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBjb25maXJtZWQ7IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGBpcHY2X3NyaF9yY3ZgIOKAkyBhbmQgeWVzLCBgaXB2Nl9zcmhfcmN2YCBpcyBpbmRlZWQgcmVhY2hhYmxlLiBUaGUgY2hhbmdlIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgc3dhcHMgYHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7YCBmb3IgYHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtgLiBJdCdzIGNsZWFybHkgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBza2Igb2Zmc2V0IGlzc3VlLiBUaGlzIGZlZWxzIHNpZ25pZmljYW50OyBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHdlIG5lZWQgdG8gZm9jdXMgb24uIFJpZ2h0LCBzbyBgaXB2Nl9zcmhfcmN2YCBpcyBzdGF0aWMuIEhtbSwgaXQncyBzdGF0aWMgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIFRoZSBtb3JlIGltcG9ydGFudCBxdWVzdGlvbiBpcywgd2hlcmUgaXMgaXQgY2FsbGVkIGZyb20/IEFoISBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGJ5IGBpcHY2X3J0aGRyX3JjdmAsIHdoaWNoLCB3YWl0IGEgbWludXRlLCBpcyBhbHNvIHN0YXRpYz8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2ODUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MTUuMzg0ODY5NTA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTk3MzY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3J0aGRyX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jPTQ4Nz1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy02NTMtLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpICovXFxubmV0L2lwdjYvZXh0aGRycy5jOjY1NDpzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjYvZXh0aGRycy5jLTY1NS17XFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9ODQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgcnRoZHJfcHJvdG9jb2wgPSB7XFxubmV0L2lwdjYvZXh0aGRycy5jOjg0MjpcXHQuaGFuZGxlclxcdD1cXHRpcHY2X3J0aGRyX3JjdixcXG5uZXQvaXB2Ni9leHRoZHJzLmMtODQzLVxcdC5mbGFnc1xcdFxcdD1cXHRJTkVUNl9QUk9UT19OT1BPTElDWSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MTUuNDQ0ODQ4ODhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIwMTMxNTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBSb3V0aW5nIEhlYWRlciBIYW5kbGVycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpcHY2X3J0aGRyX3JjdmAgYW5kIGBpcHY2X3NyaF9yY3ZgIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVzZSBhcmUgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBhbmQgaG93IHRoZXkncmUgaGFuZGxlZC4gVGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemUgcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYGlwdjZfcnRoZHJfcmN2YCBpcyBzdGF0aWMsIHdoaWNoIGluaXRpYWxseSByYWlzZXMgYSByZWQgZmxhZy4gSG93ZXZlciwgaXQncyByZWdpc3RlcmVkIGFzIGEgcHJvdG9jb2wgaGFuZGxlciwgbWVhbmluZyBpdHMgYWRkcmVzcyAqbXVzdCogYmUgdGFrZW4uIFRoZXJlZm9yZSwgaXQgKmNhbm5vdCogYmUgaW5saW5lZC4gVGhhdCBtYWtlcyBpdCBhIHZhbGlkIHN5bWJvbCB0byBjb25zaWRlci4gYHJ0aGRyX3Byb3RvY29sYCBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCBpcyB0aGUga2V5LlxuXG5Ob3csIGBpcHY2X3NyaF9yY3ZgIGlzIGFsc28gc3RhdGljLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBgaXB2Nl9ydGhkcl9yY3ZgLiBTaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYGlwdjZfc3JoX3JjdmAsIHRoYXQncyBhbiBpbXBvcnRhbnQgZGV0YWlsLiBHaXZlbiBpdHMgc2l6ZSwgaXQncyBwcm9iYWJseSAqbm90KiBpbmxpbmVkLCB0aG91Z2ggSSdsbCBuZWVkIHRvIGNvbmZpcm0uIFdoaWxlIGBpcHY2X3J0aGRyX3JjdmAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQsIEkgc2hvdWxkIGluY2x1ZGUgYm90aCBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnRoZHJfcmN2YCBpbiBteSBgRm9jdXNTeW1ib2xzYCBsaXN0IHRvIG1ha2Ugc3VyZSBJIGNvdmVyIGJvdGggY29kZSBwYXRocy5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLiBgQ09ORklHX0lQVjZgIGlzIG9idmlvdXNseSByZXF1aXJlZC4gSSB3YXMgY3VyaW91cyBhYm91dCBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAsIGJ1dCBJJ3ZlIGFscmVhZHkgY29uZmlybWVkIHRoZSBzeXNjdGwgYHNlZzZfZW5hYmxlZGAgaXMgYWx3YXlzIHByZXNlbnQuIFRoZW4gSSB3ZW50IHRvIHNlZSBpZiB0aGUgcHJlc2VuY2Ugb2YgYHNlZzZfZW5hYmxlZGAgaXMgc3VmZmljaWVudCB0byB0cmlnZ2VyIGBpcHY2X3NyaF9yY3ZgLiBJdCBzZWVtcyBgaXB2Nl9ydGhkcl9yY3ZgIGhhbmRsZXMgc2VnbWVudCByb3V0aW5nIGFuZCAqdGhlbiogY2FsbHMgYGlwdjZfc3JoX3JjdmAsIHdoZXJlIGBzZWc2X2VuYWJsZWRgIGlzIGFjdHVhbGx5IGNoZWNrZWQuIFRoZXJlZm9yZSwgbm8gYWRkaXRpb25hbCBjb25maWcgaXMgKnN0cmljdGx5KiBuZWNlc3NhcnkgYmV5b25kIGBDT05GSUdfSVBWNmAuIFN0aWxsLCB0aGVyZSBjb3VsZCBiZSBjb2RlIHBhdGhzIGFkZGVkIGJ5IGBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMYCBvciBgQ09ORklHX0lQVjZfU0VHNl9ITUFDYCwgc28gSSdsbCBxdWlja2x5IGdsYW5jZSBhdCBgbmV0L2lwdjYvS2NvbmZpZ2AganVzdCBpbiBjYXNlIHRvIG1ha2Ugc3VyZS4gSSdtIGdvaW5nIHRvIGFkZCB0aGVzZSB0byB0aGUgYEZvY3VzU3ltYm9sc2AgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MjQuNjQ2MTY3MDU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjgwOlxcdFxcdGJvb2wgXFxcIklQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG4gMjgxOlxcdFxcdGRlcGVuZHMgb24gSVBWNl9NUk9VVEVcXG4gMjgyOlxcdFxcdGhlbHBcXG4gMjgzOlxcdFxcdCAgU3VwcG9ydCBmb3IgSVB2NiBQSU0gbXVsdGljYXN0IHJvdXRpbmcgcHJvdG9jb2wgUElNLVNNdjIuXFxuIDI4NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI4NTpcXHRcXG4gMjg2OlxcdGNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG4gMjg3OlxcdFxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbiAyODg6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2XFxuIDI4OTpcXHRcXHRzZWxlY3QgTFdUVU5ORUxcXG4gMjkwOlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gMjkxOlxcdFxcdHNlbGVjdCBJUFY2X01VTFRJUExFX1RBQkxFU1xcbiAyOTI6XFx0XFx0aGVscFxcbiAyOTM6XFx0XFx0ICBTdXBwb3J0IGZvciBlbmNhcHN1bGF0aW9uIG9mIHBhY2tldHMgd2l0aGluIGFuIG91dGVyIElQdjZcXG4gMjk0OlxcdFxcdCAgaGVhZGVyIGFuZCBhIFNlZ21lbnQgUm91dGluZyBIZWFkZXIgdXNpbmcgdGhlIGxpZ2h0d2VpZ2h0XFxuIDI5NTpcXHRcXHQgIHR1bm5lbHMgbWVjaGFuaXNtLiBBbHNvIGVuYWJsZSBzdXBwb3J0IGZvciBhZHZhbmNlZCBsb2NhbFxcbiAyOTY6XFx0XFx0ICBwcm9jZXNzaW5nIG9mIFNSdjYgcGFja2V0cyBiYXNlZCBvbiB0aGVpciBhY3RpdmUgc2VnbWVudC5cXG4gMjk3OlxcdFxcbiAyOTg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyOTk6XFx0XFxuIDMwMDpcXHRjb25maWcgSVBWNl9TRUc2X0hNQUNcXG4gMzAxOlxcdFxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuIDMwMjpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMzAzOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTFcXG4gMzA0OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAzMDU6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gMzA2OlxcdFxcdGhlbHBcXG4gMzA3OlxcdFxcdCAgU3VwcG9ydCBmb3IgSE1BQyBzaWduYXR1cmUgZ2VuZXJhdGlvbiBhbmQgdmVyaWZpY2F0aW9uXFxuIDMwODpcXHRcXHQgIG9mIFNSLWVuYWJsZWQgcGFja2V0cy5cXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAzMTE6XFx0XFxuIDMxMjpcXHRjb25maWcgSVBWNl9TRUc2X0JQRlxcbiAzMTM6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAzMTQ6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X1NFRzZfTFdUVU5ORUxcXG4gMzE1OlxcdFxcdGRlcGVuZHMgb24gSVBWNiA9IHlcXG4gMzE2OlxcdFxcbiAzMTc6XFx0Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXFxuIDMxODpcXHRcXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuIDMxOTpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gMzIwOlxcdFxcdHNlbGVjdCBMV1RVTk5FTFxcbiAzMjE6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAzMjI6XFx0XFx0aGVscFxcbiAzMjM6XFx0XFx0ICBTdXBwb3J0IGZvciBSRkM2NTU0IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgdXNpbmcgdGhlIGxpZ2h0d2VpZ2h0XFxuIDMyNDpcXHRcXHQgIHR1bm5lbHMgbWVjaGFuaXNtLlxcbiAzMjU6XFx0XFxuIDMyNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDMyNzpcXHRcXG4gMzI4OlxcdGNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXFxuIDMyOTpcXHRcXHRib29sIFxcXCJJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE4OjI0LjY0NjIzNzIzNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzYzMTgyMjI2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgU1JIIFJlY2VpdmUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpcHY2X3NyaF9yY3ZgLCB3aGljaCBpcyB0aGUgaGVhcnQgb2YgSVB2NiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHByb2Nlc3NpbmcuIFRvIG1ha2Ugc3VyZSBJIGNvdmVyIGV2ZXJ5dGhpbmcsIEknbSBnb2luZyB0byBlbmFibGUgYElQVjZgLCBgSVBWNl9TRUc2X0xXVFVOTkVMYCwgYW5kIGBJUFY2X1NFRzZfSE1BQ2AuIE5vdywgYElQVjZfU0VHNl9MV1RVTk5FTGAgYWxzbyBwdWxscyBpbiBgc2VnNl9pcHR1bm5lbC5jYCBhbmQgYHNlZzZfbG9jYWwuY2AsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gVGhlIGFjdHVhbCBwYXRjaCBpcyBpbiBgZXh0aGRycy5jYCwgd2hpY2ggaXMgY29tcGlsZWQgaWYgYElQVjZgIGlzIHNldC4gIEJ1dCBlbmFibGluZyB0aGUgYFNFRzZgIGZlYXR1cmVzIHdpbGwgbGlrZWx5IGJlIGJlbmVmaWNpYWwgZm9yIG1vcmUgZ2VuZXJhbCBTUnY2IGZ1enppbmcuXG5cbkxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlIGNoYW5nZXM6XG5cbmBgYGNcbkBAIC00NTIsOCArNDUyLDYgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGhkci1cdTAwM2VzZWdtZW50c19sZWZ0LS07XG4gXHRhZGRyID0gaGRyLVx1MDAzZXNlZ21lbnRzICsgaGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQ7XG4gXG4tXHRza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xuLVxuIFx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpXG4gXHRcdHNlZzZfdXBkYXRlX2NzdW0oc2tiKTtcbiBcbkBAIC00NjIsNiArNDYwLDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlwNl9yb3V0ZV9pbnB1dChza2IpO1xuIFxuIFx0aWYgKHNrYl9kc3Qoc2tiKS1cdTAwM2VlcnJvcikge1xuK1x0XHRza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7XG4gXHRcdGRzdF9pbnB1dChza2IpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG5AQCAtNDc2LDEwICs0NzUsMTAgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0fVxuIFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuIFxuLVx0XHRza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xuIFx0XHRnb3RvIGxvb3BlZF9iYWNrO1xuIFx0fVxuIFxuK1x0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIFx0ZHN0X2lucHV0KHNrYik7XG4gXG4gXHRyZXR1cm4gLTE7XG5gYGBcblxuUmlnaHQsIGl0J3MgYSBjcml0aWNhbCBmaXgsIGNvcnJlY3RseSBhZGp1c3RpbmcgdGhlIGBza2JgIG9mZnNldCBiZWZvcmUgY2FsbGluZyBgZHN0X2lucHV0KClgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3RhY2sgYW5kIGlzIGVzc2VudGlhbCBmb3IgcmVsaWFibGUgb3BlcmF0aW9uIGFuZCB0aGVyZWZvcmUgZnV6emluZy5cblxuSSdtIGNvbmZpZGVudCBJIG5lZWQgdG8gaW5jbHVkZSBgaXB2Nl9zcmhfcmN2YCBhbmQgdGhlIGNhbGxlciBgaXB2Nl9ydGhkcl9yY3ZgLiBTaW5jZSB0aGV5IGFyZSBib3RoIGluIHRoZSBjcml0aWNhbCBwYXRoIHRvIGdldHRpbmcgSVB2NiB0cmFmZmljIHByb2Nlc3NlZCwgdGhleSBib3RoIG5lZWQgdG8gYmUgY292ZXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzQsIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MzguMjc4MDYyOTgyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NzQ2ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9ITUFDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9zcmhfcmN2XCIsXG4gICAgXCJpcHY2X3J0aGRyX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcmVjZWl2ZSBwYXRoIChgaXB2Nl9zcmhfcmN2YCkgdG8gY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYmAgbmV0d29yayBvZmZzZXQgYmVmb3JlIGNhbGxpbmcgYGRzdF9pbnB1dCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGhhbmRsZXMgSVB2NiBleHRlbnNpb24gaGVhZGVycywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIklQVjZfU0VHNl9ITUFDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9zcmhfcmN2XCIsXG4gICAgXCJpcHY2X3J0aGRyX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgKFNSSCkgcmVjZWl2ZSBwYXRoIChgaXB2Nl9zcmhfcmN2YCkgdG8gY29ycmVjdGx5IGFkanVzdCB0aGUgYHNrYmAgbmV0d29yayBvZmZzZXQgYmVmb3JlIGNhbGxpbmcgYGRzdF9pbnB1dCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGhhbmRsZXMgSVB2NiBleHRlbnNpb24gaGVhZGVycywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MTg6MzguNDE0ODE4NzE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAyNjkxNzI2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxMjoxODozOC40MTY2MjgzMDhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIwMjY3MzUyMjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgd2F5IGBza2ItXFx1MDAzZWRhdGFgIGlzIHJlc3RvcmVkIHRvIHRoZSBuZXR3b3JrIGhlYWRlciBpbiBgaXB2Nl9zcmhfcmN2KClgLiBJbnN0ZWFkIG9mIHB1c2hpbmcgYSBmaXhlZCBzaXplIChgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWApLCBpdCBwdXNoZXMgYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAgdG8gY29ycmVjdGx5IGFjY291bnQgZm9yIGFueSBleHRlbnNpb24gaGVhZGVycyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgYHNrYl9wdXNoYCBjb3VsZCBpbmNvcnJlY3RseSBhZGp1c3QgdGhlIGBza2ItXFx1MDAzZWRhdGFgIHBvaW50ZXIsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgb3IgaW5jb3JyZWN0IHBhY2tldCBwcm9jZXNzaW5nLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZWFlOTU2MGUzZTc3MDAzYzZlNzMzODU1NDlkMmQwMzJiZDY1OTRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTI6MTc6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbmluZGV4IDljNjc3ZWIxZDFhNjEuLjRjNDA3NTIwZTlkYWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcbisrKyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuQEAgLTQ1Miw4ICs0NTIsNiBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQtLTtcbiBcdGFkZHIgPSBoZHItXHUwMDNlc2VnbWVudHMgKyBoZHItXHUwMDNlc2VnbWVudHNfbGVmdDtcbiBcbi1cdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4tXG4gXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcbiBcdFx0c2VnNl91cGRhdGVfY3N1bShza2IpO1xuIFxuQEAgLTQ2Miw2ICs0NjAsNyBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aXA2X3JvdXRlX2lucHV0KHNrYik7XG4gXG4gXHRpZiAoc2tiX2RzdChza2IpLVx1MDAzZWVycm9yKSB7XG4rXHRcdHNrYl9wdXNoKHNrYiwgLXNrYl9uZXR3b3JrX29mZnNldChza2IpKTtcbiBcdFx0ZHN0X2lucHV0KHNrYik7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbkBAIC00NzYsMTAgKzQ3NSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHR9XG4gXHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gXG4tXHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gXHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gXHR9XG4gXG4rXHRza2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7XG4gXHRkc3RfaW5wdXQoc2tiKTtcbiBcbiBcdHJldHVybiAtMTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjE4OjM4LjQxNjYyOTc5OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMzMDM1Nzc0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHY2IFNSSCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9pcHY2L2V4dGhkcnMuY2AsIHNwZWNpZmljYWxseSB0aGUgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlcyBhcmUgYXJvdW5kIGBza2JfcHVzaGAgYW5kIGBza2JfcHVsbGAuIEkgc2VlIHRoYXQgdGhleSdyZSByZW1vdmluZyBgc2tiX3B1c2hgIG9mIHRoZSBJUHY2IGhlYWRlciBzaXplIGFuZCBhZGRpbmcgYHNrYl9wdXNoYCBvZiB0aGUgKm5lZ2F0aXZlKiBuZXR3b3JrIG9mZnNldCBpbiBhIGNvdXBsZSBvZiBwbGFjZXMuIFRoZXkncmUgYWxzbyByZW1vdmluZyB0aGUgY29ycmVzcG9uZGluZyBgc2tiX3B1bGxgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIChTUkgpIHdpdGhpbiBJUHY2IHBhY2tldHMuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB3aXRoIG1lbW9yeSBzYWZldHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaW50cm9kdWNlcyBhbnkgcmlza3Mgb2Ygb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHVzZS1hZnRlci1mcmVlLCBvciBldmVuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBMZXQncyBzZWUuLi4gdGhlIHVzZSBvZiBgc2tiX3B1c2hgIGFuZCBgc2tiX3B1bGxgIGFyZSB0aGUgY29yZSBvZiB0aGlzLiBUaGV5J3JlIG1vZGlmeWluZyB0aGUgYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyIGFuZCBgc2tiLVx1MDAzZWxlbmAuXG5cbk5vdywgaWYgYHNrYl9wdXNoYCBwdXNoZXMgaW50byBzb21lIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCB0aGVuIHRoYXQgbWVtb3J5IGlzIHNlbnQgdG8gdXNlciBzcGFjZSBvciByZWFkLCB0aGF0J3MgYSBwcm9ibGVtLiBCdXQgd2FpdCwgYHNrYl9wdXNoYCAqanVzdCogbW92ZXMgYHNrYi1cdTAwM2VkYXRhYCBiYWNrd2FyZC4gVGhlIG1lbW9yeSBiZWluZyBtb3ZlZCBvdmVyIGlzICp1c3VhbGx5KiB0aGUgcGFja2V0IGhlYWRlciwgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiByZWNlaXZlZCBvciBhbGxvY2F0ZWQuIEl0J3MgZXNzZW50aWFsbHkgcmVzdG9yaW5nIHRoZSBoZWFkZXIgcG9pbnRlci4gT2theSwgc28gaWYgaXQgcHVzaGVzICp0b28gbXVjaCosIHdlIG1pZ2h0IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCBpbiBtb3N0IGNhc2VzLCBgc2tiX3B1c2hgIGlzIHVzZWQgdG8gcmVzdG9yZSB0aGUgaGVhZGVyIHBvaW50ZXIgYXMgaXQgd2FzIGJlZm9yZSBzb21lIG9wZXJhdGlvbiBvbiB0aGUgcGFja2V0LlxuXG5Ib2xkIG9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIHVzZSBvZiBgLXNrYl9uZXR3b3JrX29mZnNldChza2IpYC4gVGhhdCdzIGltcG9ydGFudC4gTGV0J3MgZmlndXJlIHRoaXMgb3V0Li4uIElmIGBza2JfbmV0d29ya19vZmZzZXQoc2tiKWAgaXMgbmVnYXRpdmUsIHRoZW4gdGhhdCdzIHBvc2l0aXZlLiBXYWl0LCBpc24ndCBpdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBza2ItXHUwMDNlbmV0d29ya19oZWFkZXJgIGFuZCBgc2tiLVx1MDAzZWRhdGFgPyBOb3QgYHNrYi1cdTAwM2VtYWNfaGVhZGVyYCwgSSByZW1lbWJlciBpdCBub3cuIFNvLCAgYC1za2JfbmV0d29ya19vZmZzZXQoc2tiKWAgaXMgYHNrYi1cdTAwM2VkYXRhIC0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyYC4gUmlnaHQsIGlmIGBza2ItXHUwMDNlZGF0YWAgaXMgKmFmdGVyKiBgc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyYCwgdGhlIHJlc3VsdCBpcyBwb3NpdGl2ZSwgYW5kIGBza2JfcHVzaGAgaXMgbW92aW5nIGBza2ItXHUwMDNlZGF0YWAgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIG5ldHdvcmsgaGVhZGVyLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGF0J3MgYSBzdGFuZGFyZCB3YXkgdG8gcmVzdG9yZSB0aGUgbmV0d29yayBoZWFkZXIgcG9pbnRlci5cblxuU28sIGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZT8gTm8sIEkgZG9uJ3QgdGhpbmsgc28uIGBza2JfcHVzaGAgYW5kIGBza2JfcHVsbGAgYXJlIGp1c3QgbWFuaXB1bGF0aW5nIHBvaW50ZXJzICp3aXRoaW4qIHRoZSBhbGxvY2F0ZWQgYHNrYmAgYnVmZmVyLiBUaGUgYnVmZmVyIGl0c2VsZiBjb250YWlucyB0aGUgcGFja2V0IHdlIHJlY2VpdmVkLiBJZiB0aGVyZSBpcyBhIGJ1ZyBoZXJlLCBpdCdzIG1vcmUgbGlrZWx5IHRvIGJlIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZSBpc3N1ZSwgd2hpY2ggc2hvdWxkIGhvcGVmdWxseSBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgbG9naWMgZXJyb3JzLlxuXG5MZXQgbWUgdGhpbmsuLi4gaXQncyBwcm9iYWJseSBmaXhpbmcgYW4gaXNzdWUgd2hlcmUgYHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSlgIHdhcyBiZWluZyB1c2VkLCBidXQgdGhlIG5ldHdvcmsgaGVhZGVyIHdhc24ndCAqZXhhY3RseSogdGhhdCBzaXplIOKAkyBpdCBjb3VsZCBiZSBiaWdnZXIsIHdpdGggZXh0ZW5zaW9uIGhlYWRlcnMuIEJ5IHVzaW5nIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgLCB0aGUgcGF0Y2ggY29ycmVjdGx5IHJlc3RvcmVzIHRoZSBuZXR3b3JrIGhlYWRlciBwb2ludGVyIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVyZSB3ZXJlIGV4dGVuc2lvbiBoZWFkZXJzIG9yIG5vdC4gVGhhdCBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZywgd2hpY2ggYXJlIHRoZSBtYWluIGNvbmNlcm5zLiBJdCdzIG5vdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCBhbGwsIHRoZW4uXG5cbkFscmlnaHQsIHNlZW1zIHNvbGlkLiBMZXQncyBkb3VibGUtY2hlY2sgdGhlIGBpcHY2X3NyaF9yY3ZgIGltcGxlbWVudGF0aW9uIHRvIHZlcmlmeSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MjA6MzEuNzIwMjEyNjg0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI0NTUzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9zcmhfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmM9MzQyPXN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzIte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTY1ND1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkwLVxcdFxcdC8qIHNlZ21lbnQgcm91dGluZyAqL1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2OTE6XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTItXFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTI6MjA6MzEuODIyNjc2ODk2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NjEyNzM4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHlldCBwb3RlbnRpYWxseSBuYXN0eSwgYnVnLiBJdCBzZWVtcyB0aGUgb3JpZ2luYWwgY29kZSBpbiBgaXB2Nl9zcmhfcmN2KClgIHVzZWQgYHNrYl9wdXNoYCB3aXRoIGEgZml4ZWQgc2l6ZeKAlGBzaXplb2Yoc3RydWN0IGlwdjZoZHIpYOKAlGJ1dCB0aGF0J3MgZmxhd2VkLiBJZiB0aGVyZSBhcmUgSVB2NiBleHRlbnNpb24gaGVhZGVycyBpbnZvbHZlZCwgdGhhdCBmaXhlZCBzaXplIGlzIGxpa2VseSB3cm9uZywgYW5kIHRoZSBgc2tiLVx1MDAzZWRhdGFgIHBvaW50ZXIgZ2V0cyBtaXNhZGp1c3RlZC4gVGhhdCdzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFuIG91dC1vZi1ib3VuZHMgb3IgbG9naWMgZXJyb3IuXG5cbk5vdywgZnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBpcyAqZXhhY3RseSogdGhlIGtpbmQgb2YgYnVnIHRoYXQgS0FTQU4gZXhjZWxzIGF0IGNhdGNoaW5nLiBJZiBgc2tiX3B1c2hgIGlzIHB1c2hpbmcgdG9vIGZhciBhbmQgdGhlIGNvZGUgbGF0ZXIgdHJpZXMgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLCBLQVNBTiB3aWxsIGZsYWcgaXQgaW1tZWRpYXRlbHkuIFRoYXQncyB0aGUgaWRlYWwgc2l0dWF0aW9uLlxuXG5LTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzbid0IHJlbGV2YW50IGhlcmUuIFdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgYWxsb2NhdGVkIG9yIGV4cG9zZWQuIFRoZSBwYXRjaCdzIGZpeCBpbnZvbHZlcyAqaG93KiB0aGUgZXhpc3RpbmcgYnVmZmVyIGlzIGFkanVzdGVkIGFuZCBwcm9jZXNzZWQuIE5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbm90aGluZyBsaWtlIHRoYXQuIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOYCB0byBmYWxzZS4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoZSBqb2IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjIsIk91dHB1dFRva2VucyI6MTkyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDEyOjIwOjM4LjY4Mzk1Mzk4OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBgc2tiLVxcdTAwM2VkYXRhYCBpcyByZXN0b3JlZCB0byB0aGUgbmV0d29yayBoZWFkZXIgaW4gYGlwdjZfc3JoX3JjdigpYC4gSW5zdGVhZCBvZiBwdXNoaW5nIGEgZml4ZWQgc2l6ZSAoYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgKSwgaXQgcHVzaGVzIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBhbnkgZXh0ZW5zaW9uIGhlYWRlcnMgdGhhdCBtaWdodCBiZSBwcmVzZW50LiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBza2JfcHVzaGAgY291bGQgaW5jb3JyZWN0bHkgYWRqdXN0IHRoZSBgc2tiLVxcdTAwM2VkYXRhYCBwb2ludGVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHdheSBgc2tiLVxcdTAwM2VkYXRhYCBpcyByZXN0b3JlZCB0byB0aGUgbmV0d29yayBoZWFkZXIgaW4gYGlwdjZfc3JoX3JjdigpYC4gSW5zdGVhZCBvZiBwdXNoaW5nIGEgZml4ZWQgc2l6ZSAoYHNpemVvZihzdHJ1Y3QgaXB2NmhkcilgKSwgaXQgcHVzaGVzIGAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYilgIHRvIGNvcnJlY3RseSBhY2NvdW50IGZvciBhbnkgZXh0ZW5zaW9uIGhlYWRlcnMgdGhhdCBtaWdodCBiZSBwcmVzZW50LiBUaGlzIGZpeGVzIGEgYnVnIHdoZXJlIGBza2JfcHVzaGAgY291bGQgaW5jb3JyZWN0bHkgYWRqdXN0IHRoZSBgc2tiLVxcdTAwM2VkYXRhYCBwb2ludGVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIG9yIGluY29ycmVjdCBwYWNrZXQgcHJvY2Vzc2luZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3csIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfqw7v[1] Phase: Succeeded StartedAt: 2026-08-17 12:20:49 +0000 UTC FinishedAt: 2026-08-17 12:20:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 12:20:49 +0000 UTC FinishedAt: 2026-08-17 12:20:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2] Phase: Succeeded StartedAt: 2026-08-17 12:20:49 +0000 UTC FinishedAt: 2026-08-17 16:02:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 12:20:49 +0000 UTC FinishedAt: 2026-08-17 16:02:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 12:20:49 +0000 UTC FinishedAt: 2026-08-17 12:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 12:20:49 +0000 UTC FinishedAt: 2026-08-17 12:20:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfqw7v/series-workflowfqw7v-convert-artifact-1154267800/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 12:21:00 +0000 UTC FinishedAt: 2026-08-17 12:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 12:21:00 +0000 UTC FinishedAt: 2026-08-17 12:37:26 +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:*26286324-2836-4d3b-8982-61dd3ec37cdc,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-workflowfqw7v/series-workflowfqw7v-convert-artifact-1154267800/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": "1666ab9c-c61f-4101-a797-b25449d93e13", "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-workflowfqw7v/series-workflowfqw7v-build-action-2734421966/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 12:21:00 +0000 UTC FinishedAt: 2026-08-17 12:37:16 +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:*26286324-2836-4d3b-8982-61dd3ec37cdc,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-workflowfqw7v/series-workflowfqw7v-convert-artifact-1154267800/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": "1666ab9c-c61f-4101-a797-b25449d93e13", "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-workflowfqw7v/series-workflowfqw7v-build-action-2734421966/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 12:37:26 +0000 UTC FinishedAt: 2026-08-17 12:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 12:37:26 +0000 UTC FinishedAt: 2026-08-17 12:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 12:37:26 +0000 UTC FinishedAt: 2026-08-17 12:37:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 12:37:26 +0000 UTC FinishedAt: 2026-08-17 12:37:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfqw7v/series-workflowfqw7v-convert-artifact-3331037951/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 12:37:47 +0000 UTC FinishedAt: 2026-08-17 12:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 12:37:47 +0000 UTC FinishedAt: 2026-08-17 12:39:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1666ab9c-c61f-4101-a797-b25449d93e13,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-workflowfqw7v/series-workflowfqw7v-build-action-2734421966/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-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 12:39:49 +0000 UTC FinishedAt: 2026-08-17 12:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 12:39:49 +0000 UTC FinishedAt: 2026-08-17 12:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 12:39:49 +0000 UTC FinishedAt: 2026-08-17 12:57:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 12:39:49 +0000 UTC FinishedAt: 2026-08-17 12:57:30 +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:*26286324-2836-4d3b-8982-61dd3ec37cdc,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-workflowfqw7v/series-workflowfqw7v-convert-artifact-3331037951/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": "9d7bd89b-f58a-4a34-9630-897c140d18a8", "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-workflowfqw7v/series-workflowfqw7v-build-action-580804883/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 12:39:49 +0000 UTC FinishedAt: 2026-08-17 12:57: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:*26286324-2836-4d3b-8982-61dd3ec37cdc,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-workflowfqw7v/series-workflowfqw7v-convert-artifact-3331037951/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": "9d7bd89b-f58a-4a34-9630-897c140d18a8", "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-workflowfqw7v/series-workflowfqw7v-build-action-580804883/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 12:57:30 +0000 UTC FinishedAt: 2026-08-17 12:57:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 12:57:30 +0000 UTC FinishedAt: 2026-08-17 12:57:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 12:57:30 +0000 UTC FinishedAt: 2026-08-17 12:59:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 12:57:30 +0000 UTC FinishedAt: 2026-08-17 12:59:24 +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:*9d7bd89b-f58a-4a34-9630-897c140d18a8,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-workflowfqw7v/series-workflowfqw7v-build-action-580804883/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-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 12:59:34 +0000 UTC FinishedAt: 2026-08-17 16:02:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 12:59:34 +0000 UTC FinishedAt: 2026-08-17 16:02:16 +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":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"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:*1666ab9c-c61f-4101-a797-b25449d93e13,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9d7bd89b-f58a-4a34-9630-897c140d18a8,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-workflowfqw7v/series-workflowfqw7v-build-action-2734421966/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-workflowfqw7v/series-workflowfqw7v-build-action-580804883/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 12:59:34 +0000 UTC FinishedAt: 2026-08-17 12:59:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 12:59:34 +0000 UTC FinishedAt: 2026-08-17 12:59:39 +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":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"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-workflowfqw7v/series-workflowfqw7v-convert-artifact-2924622232/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 12:59:34 +0000 UTC FinishedAt: 2026-08-17 12:59:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 12:59:34 +0000 UTC FinishedAt: 2026-08-17 12:59:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 12:59:34 +0000 UTC FinishedAt: 2026-08-17 12:59:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 12:59:44 +0000 UTC FinishedAt: 2026-08-17 16:02:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfqw7v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_srh_rcv","ipv6_rthdr_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_SEG6_LWTUNNEL","IPV6_SEG6_HMAC"],"series_id":"222029a2-23a5-41e9-bb54-0d5cc8412bfb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 12:59:44 +0000 UTC FinishedAt: 2026-08-17 16:02:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1666ab9c-c61f-4101-a797-b25449d93e13,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9d7bd89b-f58a-4a34-9630-897c140d18a8,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-workflowfqw7v/series-workflowfqw7v-build-action-2734421966/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-workflowfqw7v/series-workflowfqw7v-build-action-580804883/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-workflowfqw7v/series-workflowfqw7v-convert-artifact-2924622232/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,}