Name: series-workflow2r2mh Phase: Succeeded StartedAt: 2026-09-06 18:58:29 +0000 UTC FinishedAt: 2026-09-06 22:57:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[0] Phase: Succeeded StartedAt: 2026-09-06 18:58:29 +0000 UTC FinishedAt: 2026-09-06 19:19:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 18:58:29 +0000 UTC FinishedAt: 2026-09-06 19:19:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VSOCK", "VSOCKETS", "EVENTFD", "VHOST", "VIRTIO_VSOCKETS_COMMON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VSOCK", "VSOCKETS", "EVENTFD", "VHOST", "VIRTIO_VSOCKETS_COMMON" ], "series_id": "894c8666-db3c-4885-981f-0e353bc11b27" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_transport_do_send_pkt", "vhost_vsock_flush_used", "vhost_vsock_add_used", "vhost_transport_send_pkt", "vhost_transport_send_pkt_work", "vhost_vsock_handle_rx_kick" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O0VWRU5URkQmIzM0OywKICAgICYjMzQ7VkhPU1QmIzM0OywKICAgICYjMzQ7VklSVElPX1ZTT0NLRVRTX0NPTU1PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCYjMzQ7LAogICAgJiMzNDt2aG9zdF92c29ja19mbHVzaF91c2VkJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX2FkZF91c2VkJiMzNDssCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9zZW5kX3BrdCYjMzQ7LAogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29yayYjMzQ7LAogICAgJiMzNDt2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgYmF0Y2hpbmcgb2YgdXNlZCByaW5nIHVwZGF0ZXMgaW4gdmhvc3QtdnNvY2sgKHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCkgYnkgYWNjdW11bGF0aW5nIHVzZWQgZGVzY3JpcHRvcnMgaW4gdGhlIHByZWFsbG9jYXRlZCB2aXJ0cXVldWUgYXJyYXlzICh2cS1cdTAwM2VoZWFkcyBhbmQgdnEtXHUwMDNlbmhlYWRzKSBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgdmhvc3RfYWRkX3VzZWRfbigpIGluc3RlYWQgb2YgaW5kaXZpZHVhbCB2aG9zdF9hZGRfdXNlZCgpIGNhbGxzLlxuXG4tIEtNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4gIDEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrOiBFYWNoIHVzZWQgZGVzY3JpcHRvciBlbGVtZW50IGluIHZxLVx1MDAzZWhlYWRzIChzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtKSBjb250YWlucyBvbmx5IHR3byAzMi1iaXQgZmllbGRzIChpZCBhbmQgbGVuKSB3aXRob3V0IGFueSBzdHJ1Y3R1cmUgcGFkZGluZy4gQm90aCBmaWVsZHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHZxLVx1MDAzZW5oZWFkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB2aG9zdF92c29ja19hZGRfdXNlZCgpIGZvciBlYWNoIGluZGV4IGJlZm9yZSBiZWluZyBmbHVzaGVkIGFuZCBjb3BpZWQgdG8gdGhlIGd1ZXN0JiMzOTtzIHVzZWQgcmluZyB2aWEgdmhvc3RfcHV0X3VzZWQoKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgcmVhZCBvciBsZWFrZWQuXG4gIDIuIE1lbW9yeSBCb3VuZHMgYW5kIEludGVncml0eTogQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgcGF0Y2ggd291bGQgcmVsYXRlIHRvIGFycmF5IGluZGV4aW5nLCBib3VuZHMgbGltaXRzICh2cS1cdTAwM2VkZXYtXHUwMDNlaW92X2xpbWl0KSwgb3IgdmlydHF1ZXVlIHN5bmNocm9uaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4gKGZvciBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKSwgYW5kIHZpcnRpbyBwcm90b2NvbCBjaGVja3MuXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZXNjcmlwdG9yIGJhdGNoaW5nIGluIHRoZSB2aG9zdC12c29jayBkcml2ZXIgKGRyaXZlcnMvdmhvc3QvdnNvY2suYykgZm9yIHBhY2tldCB0cmFuc21pc3Npb24sIHJlcGxhY2luZyBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkIGNhbGxzIHdpdGggYmF0Y2hlZCB2aG9zdF9hZGRfdXNlZF9uIGNhbGxzLiBJdCBpbnRyb2R1Y2VzIG5ldyBidWZmZXIgYWNjdW11bGF0aW9uLCBhcnJheSBpbmRleGluZywgYW5kIGJhdGNoIGxpbWl0L2ZsdXNoaW5nIGxvZ2ljIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBhY2Nlc3NpYmxlIHZpYSAvZGV2L3Zob3N0LXZzb2NrIGFuZCBBRl9WU09DSyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODZmZDA3ZThmZDc2NWE5MzEzMmIzZjg4YzliMzVkNzYxMzU5ZWQ3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTk6MTc6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jXG5pbmRleCA5YWFhYjZiYjgwNjFjLi43YTEzYWJlNzMzNDUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbkBAIC0xMDMsMTIgJiM0MzsxMDMsMzUgQEAgc3RhdGljIGJvb2wgdmhvc3RfdHJhbnNwb3J0X2hhc19yZW1vdGVfY2lkKHN0cnVjdCB2c29ja19zb2NrICp2c2ssIHUzMiBjaWQpXG4gXHRyZXR1cm4gZm91bmQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCB1c2VkX2NvdW50KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF1c2VkX2NvdW50KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cdTAwM2VoZWFkcywgdnEtXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4mIzQzO1x0XHRcdFx0IHVuc2lnbmVkIGludCB1c2VkX2NvdW50LFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSBcdTAwMjZ2cS1cdTAwM2VoZWFkc1t1c2VkX2NvdW50XTtcbiYjNDM7XG4mIzQzO1x0dXNlZC1cdTAwM2VpZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTtcbiYjNDM7XHR1c2VkLVx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xuJiM0MztcdHZxLVx1MDAzZW5oZWFkc1t1c2VkX2NvdW50XSA9IDE7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdFx0XHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4ge1xuIFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xuIFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCB1c2VkX2NvdW50ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDtcbiBcdGJvb2wgYWRkZWQgPSBmYWxzZTtcbiBcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xuIFxuQEAgLTEyMCw2ICYjNDM7MTQzLDExIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0LyogS2VlcCB0aGUgYmF0Y2ggd2l0aGluIHRoZSB1c2VkIHJpbmcgYW5kIHRoZSBzY3JhdGNoIGFycmF5cy4gKi9cbiYjNDM7XHR1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS1cdTAwM2VudW0sIHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQpO1xuJiM0MztcdGlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHQvKiBBdm9pZCBmdXJ0aGVyIHZtZXhpdHMsIHdlJiMzOTtyZSBhbHJlYWR5IHByb2Nlc3NpbmcgdGhlIHZpcnRxdWV1ZSAqL1xuIFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cSk7XG4gXG5AQCAtMTUwLDYgJiM0MzsxNzgsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXG4gXHRcdGlmIChoZWFkID09IHZxLVx1MDAzZW51bSkge1xuIFx0XHRcdHZpcnRpb192c29ja19za2JfcXVldWVfaGVhZChcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIEZsdXNoIGNvbXBsZXRlZCBidWZmZXJzIGJlZm9yZSByZS1lbmFibGluZyBub3RpZmljYXRpb25zLiAqL1xuJiM0MztcdFx0XHRpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHtcbiYjNDM7XHRcdFx0XHRhZGRlZCA9IHRydWU7XG4mIzQzO1x0XHRcdFx0dXNlZF9jb3VudCA9IDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4gXHRcdFx0LyogV2UgY2Fubm90IGZpbmlzaCB5ZXQgaWYgbW9yZSBidWZmZXJzIHNudWNrIGluIHdoaWxlXG4gXHRcdFx0ICogcmUtZW5hYmxpbmcgbm90aWZ5LlxuIFx0XHRcdCAqL1xuQEAgLTIzMCw4ICYjNDM7MjY1LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHQgKi9cbiBcdFx0dmlydGlvX3RyYW5zcG9ydF9kZWxpdmVyX3RhcF9wa3Qoc2tiKTtcbiBcbi1cdFx0dmhvc3RfYWRkX3VzZWQodnEsIGhlYWQsIHNpemVvZigqaGRyKSAmIzQzOyBwYXlsb2FkX2xlbik7XG4tXHRcdGFkZGVkID0gdHJ1ZTtcbiYjNDM7XHRcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCB1c2VkX2NvdW50LCBoZWFkLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZW9mKCpoZHIpICYjNDM7IHBheWxvYWRfbGVuKTtcbiYjNDM7XHRcdHVzZWRfY291bnQmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdCkge1xuJiM0MztcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCB1c2VkX2NvdW50KTtcbiYjNDM7XHRcdFx0dXNlZF9jb3VudCA9IDA7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgJiM0Mzs9IHBheWxvYWRfbGVuO1xuIFx0XHR0b3RhbF9sZW4gJiM0Mzs9IHBheWxvYWRfbGVuO1xuQEAgLTI2NCw2ICYjNDM7MzA0LDkgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0dmlydGlvX3RyYW5zcG9ydF9jb25zdW1lX3NrYl9zZW50KHNrYiwgdHJ1ZSk7XG4gXHRcdH1cbiBcdH0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgJiM0MzsmIzQzO3BrdHMsIHRvdGFsX2xlbikpKTtcbiYjNDM7XG4mIzQzO1x0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCk7XG4mIzQzO1xuIFx0aWYgKGFkZGVkKVxuIFx0XHR2aG9zdF9zaWduYWwoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7RVZFTlRGRCYjMzQ7LAogICAgJiMzNDtWSE9TVCYjMzQ7LAogICAgJiMzNDtWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0JiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX2ZsdXNoX3VzZWQmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfYWRkX3VzZWQmIzM0OywKICAgICYjMzQ7dmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0JiMzNDssCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgZGVzY3JpcHRvciBiYXRjaGluZyBpbiB0aGUgdmhvc3QtdnNvY2sgZHJpdmVyIChkcml2ZXJzL3Zob3N0L3Zzb2NrLmMpIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLCByZXBsYWNpbmcgaW5kaXZpZHVhbCB2aG9zdF9hZGRfdXNlZCBjYWxscyB3aXRoIGJhdGNoZWQgdmhvc3RfYWRkX3VzZWRfbiBjYWxscy4gSXQgaW50cm9kdWNlcyBuZXcgYnVmZmVyIGFjY3VtdWxhdGlvbiwgYXJyYXkgaW5kZXhpbmcsIGFuZCBiYXRjaCBsaW1pdC9mbHVzaGluZyBsb2dpYyBpbiByZWFjaGFibGUga2VybmVsIGNvZGUgYWNjZXNzaWJsZSB2aWEgL2Rldi92aG9zdC12c29jayBhbmQgQUZfVlNPQ0sgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2ZmQwN2U4ZmQ3NjVhOTMxMzJiM2Y4OGM5YjM1ZDc2MTM1OWVkNzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE5OjE3OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jCmluZGV4IDlhYWFiNmJiODA2MWMuLjdhMTNhYmU3MzM0NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMKQEAgLTEwMywxMiAmIzQzOzEwMywzNSBAQCBzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZCkKIAlyZXR1cm4gZm91bmQ7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLAomIzQzOwkJCQkgICB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCkKJiM0Mzt7CiYjNDM7CWlmICghdXNlZF9jb3VudCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJdmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtJmd0O2hlYWRzLCB2cS0mZ3Q7bmhlYWRzLCB1c2VkX2NvdW50KTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLAomIzQzOwkJCQkgdW5zaWduZWQgaW50IHVzZWRfY291bnQsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSAmYW1wO3ZxLSZndDtoZWFkc1t1c2VkX2NvdW50XTsKJiM0MzsKJiM0MzsJdXNlZC0mZ3Q7aWQgPSBjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCk7CiYjNDM7CXVzZWQtJmd0O2xlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pOwomIzQzOwl2cS0mZ3Q7bmhlYWRzW3VzZWRfY291bnRdID0gMTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZAogdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJCQkgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpCiB7CiAJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSAmYW1wO3Zzb2NrLSZndDt2cXNbVlNPQ0tfVlFfVFhdOwogCWludCBwa3RzID0gMCwgdG90YWxfbGVuID0gMDsKJiM0MzsJdW5zaWduZWQgaW50IHVzZWRfY291bnQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDsKIAlib29sIGFkZGVkID0gZmFsc2U7CiAJYm9vbCByZXN0YXJ0X3R4ID0gZmFsc2U7CiAKQEAgLTEyMCw2ICYjNDM7MTQzLDExIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCWlmICghdnFfbWV0YV9wcmVmZXRjaCh2cSkpCiAJCWdvdG8gb3V0OwogCiYjNDM7CS8qIEtlZXAgdGhlIGJhdGNoIHdpdGhpbiB0aGUgdXNlZCByaW5nIGFuZCB0aGUgc2NyYXRjaCBhcnJheXMuICovCiYjNDM7CXVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLSZndDtudW0sIHZxLSZndDtkZXYtJmd0O2lvdl9saW1pdCk7CiYjNDM7CWlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAkvKiBBdm9pZCBmdXJ0aGVyIHZtZXhpdHMsIHdlJiMzOTtyZSBhbHJlYWR5IHByb2Nlc3NpbmcgdGhlIHZpcnRxdWV1ZSAqLwogCXZob3N0X2Rpc2FibGVfbm90aWZ5KCZhbXA7dnNvY2stJmd0O2RldiwgdnEpOwogCkBAIC0xNTAsNiAmIzQzOzE3OCwxMyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAogCQlpZiAoaGVhZCA9PSB2cS0mZ3Q7bnVtKSB7CiAJCQl2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoJmFtcDt2c29jay0mZ3Q7c2VuZF9wa3RfcXVldWUsIHNrYik7CiYjNDM7CiYjNDM7CQkJLyogRmx1c2ggY29tcGxldGVkIGJ1ZmZlcnMgYmVmb3JlIHJlLWVuYWJsaW5nIG5vdGlmaWNhdGlvbnMuICovCiYjNDM7CQkJaWYgKHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpKSB7CiYjNDM7CQkJCWFkZGVkID0gdHJ1ZTsKJiM0MzsJCQkJdXNlZF9jb3VudCA9IDA7CiYjNDM7CQkJfQomIzQzOwogCQkJLyogV2UgY2Fubm90IGZpbmlzaCB5ZXQgaWYgbW9yZSBidWZmZXJzIHNudWNrIGluIHdoaWxlCiAJCQkgKiByZS1lbmFibGluZyBub3RpZnkuCiAJCQkgKi8KQEAgLTIzMCw4ICYjNDM7MjY1LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCQkgKi8KIAkJdmlydGlvX3RyYW5zcG9ydF9kZWxpdmVyX3RhcF9wa3Qoc2tiKTsKIAotCQl2aG9zdF9hZGRfdXNlZCh2cSwgaGVhZCwgc2l6ZW9mKCpoZHIpICYjNDM7IHBheWxvYWRfbGVuKTsKLQkJYWRkZWQgPSB0cnVlOwomIzQzOwkJdmhvc3RfdnNvY2tfYWRkX3VzZWQodnEsIHVzZWRfY291bnQsIGhlYWQsCiYjNDM7CQkJCSAgICAgc2l6ZW9mKCpoZHIpICYjNDM7IHBheWxvYWRfbGVuKTsKJiM0MzsJCXVzZWRfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJaWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdCkgewomIzQzOwkJCWFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpOwomIzQzOwkJCXVzZWRfY291bnQgPSAwOwomIzQzOwkJfQogCiAJCVZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS0mZ3Q7b2Zmc2V0ICYjNDM7PSBwYXlsb2FkX2xlbjsKIAkJdG90YWxfbGVuICYjNDM7PSBwYXlsb2FkX2xlbjsKQEAgLTI2NCw2ICYjNDM7MzA0LDkgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJCQl2aXJ0aW9fdHJhbnNwb3J0X2NvbnN1bWVfc2tiX3NlbnQoc2tiLCB0cnVlKTsKIAkJfQogCX0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgJiM0MzsmIzQzO3BrdHMsIHRvdGFsX2xlbikpKTsKJiM0MzsKJiM0MzsJYWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCk7CiYjNDM7CiAJaWYgKGFkZGVkKQogCQl2aG9zdF9zaWduYWwoJmFtcDt2c29jay0mZ3Q7ZGV2LCB2cSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzMwoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBOZWVkIGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgcGF0Y2ggc2VyaWVzIGFuZCBuZWVkIHRvIGRlY2lkZSBpZiBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIgZnV6emluZy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AuIFJpZ2h0IGF3YXksIHRoYXQgcmFpc2VzIGEgZmxhZyDigJMgdmhvc3QgYW5kIHZzb2NrIGFsd2F5cyBtYWtlIG1lIHBheSBhdHRlbnRpb24uIFRoZXkmIzM5O3JlIG9mdGVuIHRvdWNoeSBhcmVhcyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBpc3N1ZXMuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgLCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCBhbmQgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRob3NlIG5hbWVzIGFyZSBpbnRlcmVzdGluZzsgdGhlICYjMzQ7dXNlZCYjMzQ7IGFuZCAmIzM0O3NlbmQmIzM0OyBoaW50cyBhdCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFja2V0IHByb2Nlc3NpbmcsIHdoaWNoIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLgoKQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNvbnRleHQuIFRpbWUgdG8gcHVsbCBvdXQgdGhlIHRvb2xzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IganVzdCBtYW51YWxseSBleGFtaW5lIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIGFuZCBgZHJpdmVycy92aG9zdC9LY29uZmlnYC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMsIGFuZCB0aGUgb3ZlcmFsbCBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgZmluZGluZyBvdXQgd2hhdCBvcHRpb25zIGNvbnRyb2wgdGhhdCB2c29jayBzdHVmZiBpcyBpbXBvcnRhbnQuIElmIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgdGhhdCYjMzk7cyBhIGRpZmZlcmVudCBzdG9yeSB0aGFuIHNvbWV0aGluZyBvYnNjdXJlLiBBZnRlciB0aGUgcXVpY2sgY2hlY2ssIEkmIzM5O2xsIGtub3cgaWYgZnV6emluZyBpcyB3b3J0aCB0aGUgZWZmb3J0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAxMDE6XHRcdGZvdW5kID0gISF2aG9zdF92c29ja19nZXQoY2lkLCBuZXQpO1xuIDEwMjpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMTAzOlx0XHRyZXR1cm4gZm91bmQ7XG4gMTA0Olx0fVxuIDEwNTpcdFxuIDEwNjpcdHN0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4gMTA3Olx0XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudClcbiAxMDg6XHR7XG4gMTA5Olx0XHRpZiAoIXVzZWRfY291bnQpXG4gMTEwOlx0XHRcdHJldHVybiBmYWxzZTtcbiAxMTE6XHRcbiAxMTI6XHRcdHZob3N0X2FkZF91c2VkX24odnEsIHZxLVx1MDAzZWhlYWRzLCB2cS1cdTAwM2VuaGVhZHMsIHVzZWRfY291bnQpO1xuIDExMzpcdFx0cmV0dXJuIHRydWU7XG4gMTE0Olx0fVxuIDExNTpcdFxuIDExNjpcdHN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuIDExNzpcdFx0XHRcdFx0IHVuc2lnbmVkIGludCB1c2VkX2NvdW50LFxuIDExODpcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBoZWFkLCB1bnNpZ25lZCBpbnQgbGVuKVxuIDExOTpcdHtcbiAxMjA6XHRcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSBcdTAwMjZ2cS1cdTAwM2VoZWFkc1t1c2VkX2NvdW50XTtcbiAxMjE6XHRcbiAxMjI6XHRcdHVzZWQtXHUwMDNlaWQgPSBjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCk7XG4gMTIzOlx0XHR1c2VkLVx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xuIDEyNDpcdFx0dnEtXHUwMDNlbmhlYWRzW3VzZWRfY291bnRdID0gMTtcbiAxMjU6XHR9XG4gMTI2Olx0XG4gMTI3Olx0c3RhdGljIHZvaWRcbiAxMjg6XHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiAxMjk6XHRcdFx0XHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4gMTMwOlx0e1xuIDEzMTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xuIDEzMjpcdFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xuIDEzMzpcdFx0dW5zaWduZWQgaW50IHVzZWRfY291bnQgPSAwO1xuIDEzNDpcdFx0dW5zaWduZWQgaW50IHVzZWRfbGltaXQ7XG4gMTM1Olx0XHRib29sIGFkZGVkID0gZmFsc2U7XG4gMTM2Olx0XHRib29sIHJlc3RhcnRfdHggPSBmYWxzZTtcbiAxMzc6XHRcbiAxMzg6XHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIDEzOTpcdFxuIDE0MDpcdFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXG4gMTQxOlx0XHRcdGdvdG8gb3V0O1xuIDE0MjpcdFxuIDE0MzpcdFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcbiAxNDQ6XHRcdFx0Z290byBvdXQ7XG4gMTQ1Olx0XG4gMTQ2Olx0XHQvKiBLZWVwIHRoZSBiYXRjaCB3aXRoaW4gdGhlIHVzZWQgcmluZyBhbmQgdGhlIHNjcmF0Y2ggYXJyYXlzLiAqL1xuIDE0NzpcdFx0dXNlZF9saW1pdCA9IG1pbl90KHVuc2lnbmVkIGludCwgdnEtXHUwMDNlbnVtLCB2cS1cdTAwM2VkZXYtXHUwMDNlaW92X2xpbWl0KTtcbiAxNDg6XHRcdGlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpXG4gMTQ5Olx0XHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9WU09DSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU1LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjU2OmNvbmZpZyBWSE9TVF9WU09DS1xuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVx0dHJpc3RhdGUgXCYjMzQ7dmhvc3QgdmlydGlvLXZzb2NrIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIEtjb25maWcgZm9yIFZIT1NUX1ZTT0NLKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgVkhPU1RfVlNPQ0sgaXMgZW5hYmxlZCBvciwgYXQgbGVhc3QsIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbi4gQmVmb3JlIEkgc3RhcnQgZGVidWdnaW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gdmlydHVhbCBzb2NrZXRzLCB0aGUgS2NvbmZpZyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBrbm93IHdoZXJlIHRvIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBidWlsdC1pbiBtb2R1bGUsIG9yIGlzIHRoaXMgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIHNldD8gSSYjMzk7bGwgcXVpY2tseSBzY2FuIHRoZSBkZXBlbmRlbmNpZXMsIGFueSByZWxldmFudCAjaWZkZWZzLCBhbmQgbWF5YmUgZXZlbiBsb29rIGZvciBjb21tZW50cyBhYm91dCBpdHMgaW50ZW5kZWQgdXNlIGNhc2VzIG9yIGtub3duIGxpbWl0YXRpb25zLiBFbnN1cmluZyB0aGF0IHRoZSBtb2R1bGUgb3IgYnVpbHQtaW4gZnVuY3Rpb25hbGl0eSBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBpcyBwYXJhbW91bnQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICYjMzQ7dHJhY2VycyYjMzQ7IGluIHRoZSBjb25maWd1cmF0aW9uLCBzbyBJIGNhbiBmaW5kIG15IG5leHQgc3RlcHMuIFRoaXMgaXMgYSBmb3VuZGF0aW9uYWwgc3RlcCBiZWZvcmUgSSB3YXN0ZSB0aW1lIG9uIG1vcmUgY29tcGxpY2F0ZWQgZGVidWdnaW5nIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTU6XHRcbiAgNTY6XHRjb25maWcgVkhPU1RfVlNPQ0tcbiAgNTc6XHRcdHRyaXN0YXRlIFwmIzM0O3Zob3N0IHZpcnRpby12c29jayBkcml2ZXJcJiMzNDtcbiAgNTg6XHRcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IEVWRU5URkRcbiAgNTk6XHRcdHNlbGVjdCBWSE9TVFxuICA2MDpcdFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbiAgNjE6XHRcdGRlZmF1bHQgblxuICA2MjpcdFx0aGVscFxuICA2MzpcdFx0VGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgQUZfVlNPQ0tcbiAgNjQ6XHRcdHNvY2tldHMgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBndWVzdHMuICBUaGUgZ3Vlc3RzIG11c3QgaGF2ZSB0aGVcbiAgNjU6XHRcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXG4gIDY2Olx0XG4gIDY3Olx0XHRUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXG4gIDY4Olx0XHR2aG9zdF92c29jay5cbiAgNjk6XHRcbiAgNzA6XHRjb25maWcgVkhPU1RfVkRQQVxuICA3MTpcdFx0dHJpc3RhdGUgXCYjMzQ7Vmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcJiMzNDtcbiAgNzI6XHRcdGRlcGVuZHMgb24gRVZFTlRGRFxuICA3MzpcdFx0c2VsZWN0IFZIT1NUXG4gIDc0Olx0XHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXG4gIDc1Olx0XHRkZXBlbmRzIG9uIFZEUEFcbiAgNzY6XHRcdGhlbHBcbiAgNzc6XHRcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxuICA3ODpcdFx0ICBndWVzdCB2aXJ0aW8gZGV2aWNlcyB3aXRoIHRoZSB2RFBBLWJhc2VkIGJhY2tlbmRzLlxuICA3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHZob3N0LXZzb2NrIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHZob3N0LXZzb2NrIGltcGxlbWVudGF0aW9uIGluIExpbnV4LiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGFjY2Vzc2VkIOKAkyBpcyBpdCB0aHJvdWdoIGEgY2hhcmFjdGVyIGRldmljZSBsaWtlIGAvZGV2L3Zob3N0LXZzb2NrYCwgaW9jdGxzLCBvciB0aGUgc3RhbmRhcmQgc29ja2V0IGludGVyZmFjZT8gSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIGEgY29tYmluYXRpb24gb2YgdGhpbmdzLCBnaXZlbiB0aGUgdmlydHVhbCBuYXR1cmUuIFRpbWUgdG8gZGlnIGluLiBJJiMzOTtsbCBzdGFydCBieSB0cmFjaW5nIHRoZSBkYXRhIHBhdGggZm9yIHBhY2tldCBzZW5kaW5nLiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgdGhhdCBpbiB0aGUgYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AgZmlsZS4gTGV0JiMzOTtzIHBpbnBvaW50IHdoZXJlIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGlzIGNhbGxlZDsgdGhhdCBzaG91bGQgYmUgdGhlIGVudHJ5IHBvaW50IGludG8gdGhlIHRyYW5zcG9ydCBsYXllciBmcm9tIHRoZSB2aG9zdCBkcml2ZXIuIFRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgdG8gc3RhcnQgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYz0xMjc9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMjg6dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTI5LVx0XHRcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzIwPXN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMjctXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzI4Olx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzI5LX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzMyPXZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTM1NS1cdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozNTY6XHQgKiB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QoKSB3aWxsIGNoZWNrIGl0IHVuZGVyIHRoZSBtdXRleCBhbnl3YXkuXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzU3LVx0ICovXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTY0ND1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjUwLVxuZHJpdmVycy92aG9zdC92c29jay5jOjY1MTpcdHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCh2c29jaywgdnEpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTY1Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlZob3N0LVZTb2NrIE9wdGltaXphdGlvbiBBbmFseXNpcyoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGhlcmUgaXMgYWJvdXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGluIGB2aG9zdC12c29ja2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHBhY2tldCBwcm9jZXNzaW5nIGlzIGhhbmRsZWQuIEluc3RlYWQgb2YgbWFraW5nIGluZGl2aWR1YWwsIGNvc3RseSBjYWxscyB0byBgdmhvc3RfYWRkX3VzZWRgIGZvciBldmVyeSBzaW5nbGUgcGFja2V0LCB3aGljaCwgZnJhbmtseSwgc2VlbXMgaW5lZmZpY2llbnQsIHRoZSBpbXBsZW1lbnRhdGlvbiBub3cgYmF0Y2hlcyB0aGVzZSB1cGRhdGVzLiBJdCBsb29rcyBsaWtlIHRoZSBzeXN0ZW0gYWNjdW11bGF0ZXMgcGFja2V0IGRlc2NyaXB0b3JzIGludG8gYSBgdnEtJmd0O2hlYWRzYCBhcnJheS4gVGhlbiwgdGhlc2UgYXJlIGZsdXNoZWQgaW4gYSBtb3JlIGVmZmljaWVudCBtYW5uZXIgdXNpbmcgYHZob3N0X2FkZF91c2VkX25gIHdoZW4gZWl0aGVyIGEgY2VydGFpbiBgdXNlZF9saW1pdGAgaXMgcmVhY2hlZCwgb3Igd2hlbiB0aGUgZW50aXJlIHByb2Nlc3NpbmcgbG9vcCBjb21wbGV0ZXMsIG9yIHJ1bnMgb3V0IG9mIGJ1ZmZlcnMuIFRoaXMgYmF0Y2hpbmcgc3RyYXRlZ3kgc2hvdWxkIHNpZ25pZmljYW50bHkgcmVkdWNlIHRoZSBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggdGhlIHJpbmcgdXBkYXRlcy4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IHN5emthbGxlciwgaGF2ZSBwcm9wZXIgYWNjZXNzIHRvIGAvZGV2L3Zob3N0LXZzb2NrYC4gVGhpcyBpcyBhIGNyaXRpY2FsIHByZXJlcXVpc2l0ZSwgb2YgY291cnNlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLCB0byBlbnN1cmUgdGhhdCB0aGUgY2hhcmFjdGVyIGRldmljZSBvciBtaXNjZGV2aWNlIHJlZ2lzdHJhdGlvbiBpcyBzZXQgdXAgY29ycmVjdGx5IGFuZCBwZXJtaXNzaW9ucyBhcmUgc2V0LiBHb3R0YSBtYWtlIHN1cmUgd2UgY2FuIGFjdHVhbGx5ICp1c2UqIHRoZSBibGFzdGVkIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaXNjX3JlZ2lzdGVyfGZpbGVfb3BlcmF0aW9uc3x2aG9zdF92c29jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzEtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzI6c3RhdGljIGNvbnN0IGludCB2aG9zdF92c29ja19iaXRzW10gPSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzMtXHRWSE9TVF9GRUFUVVJFUyxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzctXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6Mzg6I2RlZmluZSBWSE9TVF9WU09DS19GRUFUVVJFUyBWSE9TVF9GRUFUVVJFU19VNjQodmhvc3RfdnNvY2tfYml0cywgMClcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zOS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz00MD1lbnVtIHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDMtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NDQ6LyogVXNlZCB0byB0cmFjayBhbGwgdGhlIHZob3N0X3Zzb2NrIGluc3RhbmNlcyBvbiB0aGUgc3lzdGVtLiAqL1xuZHJpdmVycy92aG9zdC92c29jay5jOjQ1OnN0YXRpYyBERUZJTkVfTVVURVgodmhvc3RfdnNvY2tfbXV0ZXgpO1xuZHJpdmVycy92aG9zdC92c29jay5jOjQ2OnN0YXRpYyBERUZJTkVfUkVBRF9NT1NUTFlfSEFTSFRBQkxFKHZob3N0X3Zzb2NrX2hhc2gsIDgpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTQ3LVxuZHJpdmVycy92aG9zdC92c29jay5jOjQ4OnN0cnVjdCB2aG9zdF92c29jayB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDktXHRzdHJ1Y3Qgdmhvc3RfZGV2IGRldjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTMtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTQ6XHQvKiBMaW5rIHRvIGdsb2JhbCB2aG9zdF92c29ja19oYXNoLCB3cml0ZXMgdXNlIHZob3N0X3Zzb2NrX211dGV4ICovXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTUtXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBoYXNoO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz02Nj1zdGF0aWMgdTMyIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKHZvaWQpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTcwLVxuZHJpdmVycy92aG9zdC92c29jay5jOjcxOi8qIENhbGxlcnMgbXVzdCBiZSBpbiBhbiBSQ1UgcmVhZCBzZWN0aW9uIG9yIGhvbGQgdGhlIHZob3N0X3Zzb2NrX211dGV4LlxuZHJpdmVycy92aG9zdC92c29jay5jLTcyLSAqIFRoZSByZXR1cm4gdmFsdWUgY2FuIG9ubHkgYmUgZGVyZWZlcmVuY2VkIHdoaWxlIHdpdGhpbiB0aGUgc2VjdGlvbi5cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03My0gKi9cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NDpzdGF0aWMgc3RydWN0IHZob3N0X3Zzb2NrICp2aG9zdF92c29ja19nZXQodTMyIGd1ZXN0X2NpZCwgc3RydWN0IG5ldCAqbmV0KVxuZHJpdmVycy92aG9zdC92c29jay5jLTc1LXtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NjpcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzctXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6Nzg6XHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlX3JjdSh2aG9zdF92c29ja19oYXNoLCB2c29jaywgaGFzaCwgZ3Vlc3RfY2lkLFxuZHJpdmVycy92aG9zdC92c29jay5jOjc5Olx0XHRcdFx0ICAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnZob3N0X3Zzb2NrX211dGV4KSkge1xuZHJpdmVycy92aG9zdC92c29jay5jLTgwLVx0XHR1MzIgb3RoZXJfY2lkID0gdnNvY2stXHUwMDNlZ3Vlc3RfY2lkO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05ND1zdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAwLVx0cmN1X3JlYWRfbG9jaygpO1xuZHJpdmVycy92aG9zdC92c29jay5jOjEwMTpcdGZvdW5kID0gISF2aG9zdF92c29ja19nZXQoY2lkLCBuZXQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwMi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDUtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA2OnN0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA3LVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IHVzZWRfY291bnQpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTExNS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMTY6c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTE3LVx0XHRcdFx0IHVuc2lnbmVkIGludCB1c2VkX2NvdW50LFxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0xMjc9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMjg6dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTI5LVx0XHRcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTgyLVx0XHRcdC8qIEZsdXNoIGNvbXBsZXRlZCBidWZmZXJzIGJlZm9yZSByZS1lbmFibGluZyBub3RpZmljYXRpb25zLiAqL1xuZHJpdmVycy92aG9zdC92c29jay5jOjE4MzpcdFx0XHRpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xODQtXHRcdFx0XHRhZGRlZCA9IHRydWU7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTI2Ny1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoyNjg6XHRcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCB1c2VkX2NvdW50LCBoZWFkLFxuZHJpdmVycy92aG9zdC92c29jay5jLTI2OS1cdFx0XHRcdCAgICAgc2l6ZW9mKCpoZHIpICYjNDM7IHBheWxvYWRfbGVuKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMjcxLVx0XHRpZiAodXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0KSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MjcyOlx0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTI3My1cdFx0XHR1c2VkX2NvdW50ID0gMDtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzA3LVxuZHJpdmVycy92aG9zdC92c29jay5jOjMwODpcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTMwOS1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzIwPXN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMjItXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjM6XHRzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrO1xuZHJpdmVycy92aG9zdC92c29jay5jLTMyNC1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjU6XHR2c29jayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdnNvY2ssIHNlbmRfcGt0X3dvcmspO1xuZHJpdmVycy92aG9zdC92c29jay5jLTMyNi1cdHZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzMyPXZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTMzNC1cdHN0cnVjdCB2aXJ0aW9fdnNvY2tfaGRyICpoZHIgPSB2aXJ0aW9fdnNvY2tfaGRyKHNrYik7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzM1Olx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jaztcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMzYtXHRpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzM5LVxuZHJpdmVycy92aG9zdC92c29jay5jOjM0MDpcdC8qIEZpbmQgdGhlIHZob3N0X3Zzb2NrIGFjY29yZGluZyB0byBndWVzdCBjb250ZXh0IGlkICAqL1xuZHJpdmVycy92aG9zdC92c29jay5jOjM0MTpcdHZzb2NrID0gdmhvc3RfdnNvY2tfZ2V0KGxlNjRfdG9fY3B1KGhkci1cdTAwM2Vkc3RfY2lkKSwgbmV0KTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNDItXHRpZiAoIXZzb2NrKSB7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTM3NT12aG9zdF90cmFuc3BvcnRfY2FuY2VsX3BrdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxuZHJpdmVycy92aG9zdC92c29jay5jLTM3Ni17XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6Mzc3Olx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jaztcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNzgtXHRpbnQgY250ID0gMDtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzgyLVxuZHJpdmVycy92aG9zdC92c29jay5jOjM4MzpcdC8qIEZpbmQgdGhlIHZob3N0X3Zzb2NrIGFjY29yZGluZyB0byBndWVzdCBjb250ZXh0IGlkICAqL1xuZHJpdmVycy92aG9zdC92c29jay5jOjM4NDpcdHZzb2NrID0gdmhvc3RfdnNvY2tfZ2V0KHZzay1cdTAwM2VyZW1vdGVfYWRkci5zdm1fY2lkLFxuZHJpdmVycy92aG9zdC92c29jay5jLTM4NS1cdFx0XHRcdHNvY2tfbmV0KHNrX3Zzb2NrKHZzaykpKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NDA2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NDA3OnZob3N0X3Zzb2NrX2FsbG9jX3NrYihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00MDgtXHRcdCAgICAgIHVuc2lnbmVkIGludCBvdXQsIHVuc2lnbmVkIGludCBpbilcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDY3LS8qIElzIHRoZXJlIHNwYWNlIGxlZnQgZm9yIHJlcGxpZXMgdG8gcnggcGFja2V0cz8gKi9cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo0Njg6c3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfbW9yZV9yZXBsaWVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDY5LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NTQ4PXN0YXRpYyBib29sIHZob3N0X3RyYW5zcG9ydF9zZXFwYWNrZXRfYWxsb3coc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTUxLVx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tfdnNvY2sodnNrKSk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTUyOlx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jaztcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NTMtXHRib29sIHNlcXBhY2tldF9hbGxvdyA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NTUtXHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTU2Olx0dnNvY2sgPSB2aG9zdF92c29ja19nZXQocmVtb3RlX2NpZCwgbmV0KTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NTctXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTU2NS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1NjY6c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfaGFuZGxlX3R4X2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTY3LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTY5LVx0XHRcdFx0XHRcdCAgcG9sbC53b3JrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1NzA6XHRzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrID0gY29udGFpbmVyX29mKHZxLVx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Zzb2NrLFxuZHJpdmVycy92aG9zdC92c29jay5jLTU3MS1cdFx0XHRcdFx0XHQgZGV2KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTg4LVxuZHJpdmVycy92aG9zdC92c29jay5jOjU4OTpcdFx0aWYgKCF2aG9zdF92c29ja19tb3JlX3JlcGxpZXModnNvY2spKSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTkwLVx0XHRcdC8qIFN0b3AgdHggdW50aWwgdGhlIGRldmljZSBwcm9jZXNzZXMgYWxyZWFkeVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MDktXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NjEwOlx0XHRza2IgPSB2aG9zdF92c29ja19hbGxvY19za2IodnEsIG91dCwgaW4pO1xuZHJpdmVycy92aG9zdC92c29jay5jLTYxMS1cdFx0aWYgKCFza2IpIHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjQzLVxuZHJpdmVycy92aG9zdC92c29jay5jOjY0NDpzdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDUte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDctXHRcdFx0XHRcdFx0cG9sbC53b3JrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2NDg6XHRzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrID0gY29udGFpbmVyX29mKHZxLVx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Zzb2NrLFxuZHJpdmVycy92aG9zdC92c29jay5jLTY0OS1cdFx0XHRcdFx0XHQgZGV2KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjUzLVxuZHJpdmVycy92aG9zdC92c29jay5jOjY1NDpzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0YXJ0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjU1LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzA5LVxuZHJpdmVycy92aG9zdC92c29jay5jOjcxMDpzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MTEte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MzUtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzM2OnN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2ZyZWUoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03Mzcte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NDAtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzQxOnN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzQyLXtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NDMtXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzO1xuZHJpdmVycy92aG9zdC92c29jay5jOjc0NDpcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzQ1LVx0c3RydWN0IG5ldCAqbmV0O1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NzAtXHR2cXNbVlNPQ0tfVlFfUlhdID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NzE6XHR2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdLmhhbmRsZV9raWNrID0gdmhvc3RfdnNvY2tfaGFuZGxlX3R4X2tpY2s7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzcyOlx0dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXS5oYW5kbGVfa2ljayA9IHZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrO1xuZHJpdmVycy92aG9zdC92c29jay5jLTc3My1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzgzLW91dDpcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3ODQ6XHR2aG9zdF92c29ja19mcmVlKHZzb2NrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03ODUtXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03ODctXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6Nzg4OnN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2ZsdXNoKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzg5LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzkyLVxuZHJpdmVycy92aG9zdC92c29jay5jOjc5MzpzdGF0aWMgdm9pZCB2aG9zdF92c29ja19yZXNldF9vcnBoYW5zKHN0cnVjdCBzb2NrICpzaylcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03OTQte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MDQtXHQvKiBJZiB0aGUgcGVlciBpcyBzdGlsbCB2YWxpZCwgbm8gbmVlZCB0byByZXNldCBjb25uZWN0aW9uICovXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODA1Olx0aWYgKHZob3N0X3Zzb2NrX2dldCh2c2stXHUwMDNlcmVtb3RlX2FkZHIuc3ZtX2NpZCwgc29ja19uZXQoc2spKSkge1xuZHJpdmVycy92aG9zdC92c29jay5jLTgwNi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTgyNC1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4MjU6c3RhdGljIGludCB2aG9zdF92c29ja19kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MjYte1xuZHJpdmVycy92aG9zdC92c29jay5jOjgyNzpcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2sgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MjgtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODI5Olx0bXV0ZXhfbG9jayhcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODMwLVx0aWYgKHZzb2NrLVx1MDAzZWd1ZXN0X2NpZClcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MzEtXHRcdGhhc2hfZGVsX3JjdShcdTAwMjZ2c29jay1cdTAwM2VoYXNoKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4MzI6XHRtdXRleF91bmxvY2soXHUwMDI2dmhvc3RfdnNvY2tfbXV0ZXgpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTgzMy1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODM5LVx0dnNvY2tfZm9yX2VhY2hfY29ubmVjdGVkX3NvY2tldChcdTAwMjZ2aG9zdF90cmFuc3BvcnQudHJhbnNwb3J0LFxuZHJpdmVycy92aG9zdC92c29jay5jOjg0MDpcdFx0XHRcdFx0dmhvc3RfdnNvY2tfcmVzZXRfb3JwaGFucyk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODQxLVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDMtXHQgKiBuZWVkIHRvIHN0b3AgdGhlIHZzb2NrIGRldmljZSBpbiBhbnkgY2FzZS5cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4NDQ6XHQgKiB2aG9zdF92c29ja19zdG9wKCkgY2FuIG5vdCBmYWlsIGluIHRoaXMgY2FzZSwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG9cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDUtXHQgKiBjaGVjayB0aGUgcmV0dXJuIGNvZGUuXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODQ2LVx0ICovXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODQ3Olx0dmhvc3RfdnNvY2tfc3RvcCh2c29jaywgZmFsc2UpO1xuZHJpdmVycy92aG9zdC92c29jay5jOjg0ODpcdHZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDktXHR2aG9zdF9kZXZfc3RvcChcdTAwMjZ2c29jay1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NTUtXHRrZnJlZSh2c29jay1cdTAwM2VkZXYudnFzKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4NTY6XHR2aG9zdF92c29ja19mcmVlKHZzb2NrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NTctXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODU5LVxuZHJpdmVycy92aG9zdC92c29jay5jOjg2MDpzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3NldF9jaWQoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgdTY0IGd1ZXN0X2NpZClcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NjEte1xuZHJpdmVycy92aG9zdC92c29jay5jOjg2MjpcdHN0cnVjdCB2aG9zdF92c29jayAqb3RoZXI7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODYzLVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NzktXHQvKiBSZWZ1c2UgaWYgQ0lEIGlzIGFscmVhZHkgaW4gdXNlICovXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODgwOlx0bXV0ZXhfbG9jayhcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODgxOlx0b3RoZXIgPSB2aG9zdF92c29ja19nZXQoZ3Vlc3RfY2lkLCB2c29jay1cdTAwM2VuZXQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTg4Mi1cdGlmIChvdGhlciBcdTAwMjZcdTAwMjYgb3RoZXIgIT0gdnNvY2spIHtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4ODM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODg0LVx0XHRyZXR1cm4gLUVBRERSSU5VU0U7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTg5MC1cdHZzb2NrLVx1MDAzZWd1ZXN0X2NpZCA9IGd1ZXN0X2NpZDtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4OTE6XHRoYXNoX2FkZF9yY3Uodmhvc3RfdnNvY2tfaGFzaCwgXHUwMDI2dnNvY2stXHUwMDNlaGFzaCwgdnNvY2stXHUwMDNlZ3Vlc3RfY2lkKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4OTI6XHRtdXRleF91bmxvY2soXHUwMDI2dmhvc3RfdnNvY2tfbXV0ZXgpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTg5My1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODk2LVxuZHJpdmVycy92aG9zdC92c29jay5jOjg5NzpzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCB1NjQgZmVhdHVyZXMpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODk4LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTMxLVxuZHJpdmVycy92aG9zdC92c29jay5jOjkzMjpzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05MzMtXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy92aG9zdC92c29jay5jLTkzNC17XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTM1Olx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jayA9IGYtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy92aG9zdC92c29jay5jLTkzNi1cdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NDUtXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTQ2Olx0XHRyZXR1cm4gdmhvc3RfdnNvY2tfc2V0X2NpZCh2c29jaywgZ3Vlc3RfY2lkKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NDctXHRjYXNlIFZIT1NUX1ZTT0NLX1NFVF9SVU5OSU5HOlxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NTAtXHRcdGlmIChzdGFydClcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5NTE6XHRcdFx0cmV0dXJuIHZob3N0X3Zzb2NrX3N0YXJ0KHZzb2NrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NTItXHRcdGVsc2VcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5NTM6XHRcdFx0cmV0dXJuIHZob3N0X3Zzb2NrX3N0b3AodnNvY2ssIHRydWUpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTk1NC1cdGNhc2UgVkhPU1RfR0VUX0ZFQVRVUkVTOlxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NjEtXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTYyOlx0XHRyZXR1cm4gdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzKHZzb2NrLCBmZWF0dXJlcyk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTYzLVx0Y2FzZSBWSE9TVF9HRVRfQkFDS0VORF9GRUFUVVJFUzpcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTgwLVx0XHRlbHNlXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTgxOlx0XHRcdHZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05ODItXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05ODYtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTg3OnN0YXRpYyBzc2l6ZV90IHZob3N0X3Zzb2NrX2Nocl9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuZHJpdmVycy92aG9zdC92c29jay5jLTk4OC17XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTg5LVx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTkwOlx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jayA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy92aG9zdC92c29jay5jLTk5MS1cdHN0cnVjdCB2aG9zdF9kZXYgKmRldiA9IFx1MDAyNnZzb2NrLVx1MDAzZWRldjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTk2LVxuZHJpdmVycy92aG9zdC92c29jay5jOjk5NzpzdGF0aWMgc3NpemVfdCB2aG9zdF92c29ja19jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTk4LVx0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDAtXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDAxOlx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jayA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDItXHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYgPSBcdTAwMjZ2c29jay1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDYtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAwNzpzdGF0aWMgX19wb2xsX3Qgdmhvc3RfdnNvY2tfY2hyX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAwOC17XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAwOTpcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2sgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDEwLVx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gXHUwMDI2dnNvY2stXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDE0LVxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMTU6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdnNvY2tfZm9wcyA9IHtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDE2LVx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAxNzpcdC5vcGVuICAgICAgICAgICA9IHZob3N0X3Zzb2NrX2Rldl9vcGVuLFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMTg6XHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF92c29ja19kZXZfcmVsZWFzZSxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDE5LVx0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMjA6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF92c29ja19kZXZfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyMS1cdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAyMjpcdC5yZWFkX2l0ZXIgICAgICA9IHZob3N0X3Zzb2NrX2Nocl9yZWFkX2l0ZXIsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAyMzpcdC53cml0ZV9pdGVyICAgICA9IHZob3N0X3Zzb2NrX2Nocl93cml0ZV9pdGVyLFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMjQ6XHQucG9sbCAgICAgICAgICAgPSB2aG9zdF92c29ja19jaHJfcG9sbCxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDI1LX07XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyNi1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDI3OnN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB2aG9zdF92c29ja19taXNjID0ge1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwMjgtXHQubWlub3IgPSBWSE9TVF9WU09DS19NSU5PUixcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDI5LVx0Lm5hbWUgPSBcJiMzNDt2aG9zdC12c29ja1wmIzM0OyxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDMwOlx0LmZvcHMgPSBcdTAwMjZ2aG9zdF92c29ja19mb3BzLFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMzEtfTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDMyLVxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMzM6c3RhdGljIGludCBfX2luaXQgdmhvc3RfdnNvY2tfaW5pdCh2b2lkKVxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMzQte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDQxLVxuZHJpdmVycy92aG9zdC92c29jay5jOjEwNDI6XHRyZXQgPSBtaXNjX3JlZ2lzdGVyKFx1MDAyNnZob3N0X3Zzb2NrX21pc2MpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwNDMtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTEwNTAtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA1MTpzdGF0aWMgdm9pZCBfX2V4aXQgdmhvc3RfdnNvY2tfZXhpdCh2b2lkKVxuZHJpdmVycy92aG9zdC92c29jay5jLTEwNTIte1xuZHJpdmVycy92aG9zdC92c29jay5jOjEwNTM6XHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dmhvc3RfdnNvY2tfbWlzYyk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1NC1cdHZzb2NrX2NvcmVfdW5yZWdpc3RlcihcdTAwMjZ2aG9zdF90cmFuc3BvcnQudHJhbnNwb3J0KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1Ni1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDU3Om1vZHVsZV9pbml0KHZob3N0X3Zzb2NrX2luaXQpO1xuZHJpdmVycy92aG9zdC92c29jay5jOjEwNTg6bW9kdWxlX2V4aXQodmhvc3RfdnNvY2tfZXhpdCk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1OS1NT0RVTEVfTElDRU5TRShcJiMzNDtHUEwgdjJcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ3NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXZzb2NrIFBhdGNoOiBBIERlZXBlciBEaXZlKioKCk9rYXksIHNvIGB2aG9zdC12c29ja2AgcmVnaXN0ZXJzIGEgbWlzYyBkZXZpY2UgYXQgYC9kZXYvdmhvc3QtdnNvY2tgIGFuZCBpbnRlcmFjdHMgd2l0aCBBRl9WU09DSyBzb2NrZXRzIHRocm91Z2ggdGhlIGB2c29ja19jb3JlYC4gTWFrZXMgc2Vuc2UsIHRoaXMgaXMgYSBzdGFuZGFyZCBzZXR1cCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBJIGtub3cgU3l6a2FsbGVyIGhhcyBmdWxsIHN1cHBvcnQgZm9yIGl0LgoKTGV0JiMzOTtzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgcGF0Y2guIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLCBzcGVjaWZpY2FsbHkgaG93IHRoZSB2aXJ0cXVldWUgcmluZyBlbGVtZW50cyBhcmUgaGFuZGxlZC4gQmVmb3JlLCBpdCB3YXMgYSBzaW1wbGUgYHZob3N0X2FkZF91c2VkYCBjYWxsLiBOb3csIGl0JiMzOTtzIGEgYml0IG1vcmUgaW52b2x2ZWQuIEl0JiMzOTtzIGJhdGNoaW5nIGRlc2NyaXB0b3JzIHVzaW5nIGB2aG9zdF92c29ja19hZGRfdXNlZGAgaW50byBgdnEtJmd0O2hlYWRzYCBhbmQgdGhlbiBmbHVzaGluZyB0aGVtIHdpdGggYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgLiBUaGlzIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBmdW5jdGlvbiB0aGVuIGNhbGxzIGB2aG9zdF9hZGRfdXNlZF9uYCwgd2hpY2ggcHJvYmFibHkgcGVyZm9ybXMgdGhlIGFjdHVhbCByaW5nIHVwZGF0ZXMuCgpUaGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGNoZWNrcyBmb3IgYHVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLSZndDtudW0sIHZxLSZndDtkZXYtJmd0O2lvdl9saW1pdCk7YCBhbmQgZmx1c2hlcyB3aGVuIGNlcnRhaW4gY29uZGl0aW9ucyBhcmUgbWV0OiB3aGVuIGB1c2VkX2NvdW50ID09IHVzZWRfbGltaXRgLCB3aGVuIGBoZWFkID09IHZxLSZndDtudW1gIGJlZm9yZSByZS1lbmFibGluZyBub3RpZnksIGFuZCBhdCB0aGUgdmVyeSBlbmQgb2YgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gb3B0aW1pemluZyB0aGUgZmx1c2ggb3BlcmF0aW9uIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgZGVzY3JpcHRvcnMgYW5kIEkvTyBsaW1pdHMuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyBtb2RpZmllZC4gSXQgbG9va3MgbGlrZSBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAgYW5kIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYXJlIGJlaW5nIGludHJvZHVjZWQgYXMgc3RhdGljIGhlbHBlcnMgaW4gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AsIGFsb25nIHdpdGggdGhlIGNvcmUgY2hhbmdlIGluIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gbG9vayBhdCB0aGUgZW50cnkgcG9pbnRzL2NhbGxlcnMgb2YgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAsIHN1Y2ggYXMgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrYCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAsIGB2aG9zdF92c29ja19oYW5kbGVfcnhfa2lja2AsIGFuZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYC4KCk9rYXksIHRoZSBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBpcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoYXQgYHZzb2NrLmNgIGZpbGUuIFRoaXMgaXMgZ29vZCB0byBrbm93LCBhbmQgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBmcm9tIHRoaXMgY2hhbmdlIGluIG90aGVyIG1vZHVsZXMgYnkgY2hlY2tpbmcgYW55IG1vZHVsZSBkZXBlbmRlbmNpZXMuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLCBlc3BlY2lhbGx5IGFyb3VuZCBsaW5lcyAzMTAtMzcwLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHZzb2NrIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzEwOlx0XHRpZiAoYWRkZWQpXG4gMzExOlx0XHRcdHZob3N0X3NpZ25hbChcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiAzMTI6XHRcbiAzMTM6XHRvdXQ6XG4gMzE0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIDMxNTpcdFxuIDMxNjpcdFx0aWYgKHJlc3RhcnRfdHgpXG4gMzE3Olx0XHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2dHhfdnEtXHUwMDNlcG9sbCk7XG4gMzE4Olx0fVxuIDMxOTpcdFxuIDMyMDpcdHN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuIDMyMTpcdHtcbiAzMjI6XHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xuIDMyMzpcdFx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jaztcbiAzMjQ6XHRcbiAzMjU6XHRcdHZzb2NrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92c29jaywgc2VuZF9wa3Rfd29yayk7XG4gMzI2Olx0XHR2cSA9IFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF07XG4gMzI3Olx0XG4gMzI4Olx0XHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QodnNvY2ssIHZxKTtcbiAzMjk6XHR9XG4gMzMwOlx0XG4gMzMxOlx0c3RhdGljIGludFxuIDMzMjpcdHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXG4gMzMzOlx0e1xuIDMzNDpcdFx0c3RydWN0IHZpcnRpb192c29ja19oZHIgKmhkciA9IHZpcnRpb192c29ja19oZHIoc2tiKTtcbiAzMzU6XHRcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XG4gMzM2Olx0XHRpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbiAzMzc6XHRcbiAzMzg6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzMzk6XHRcbiAzNDA6XHRcdC8qIEZpbmQgdGhlIHZob3N0X3Zzb2NrIGFjY29yZGluZyB0byBndWVzdCBjb250ZXh0IGlkICAqL1xuIDM0MTpcdFx0dnNvY2sgPSB2aG9zdF92c29ja19nZXQobGU2NF90b19jcHUoaGRyLVx1MDAzZWRzdF9jaWQpLCBuZXQpO1xuIDM0MjpcdFx0aWYgKCF2c29jaykge1xuIDM0MzpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzNDQ6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMzQ1Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDM0NjpcdFx0fVxuIDM0NzpcdFxuIDM0ODpcdFx0LyogRmFzdC1mYWlsIGlmIHRoZSBndWVzdCBoYXNuJiMzOTt0IGVuYWJsZWQgdGhlIFJYIHZxIHlldC4gUXVldWluZyB0aGUgcGFja2V0XG4gMzQ5Olx0XHQgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdFxuIDM1MDpcdFx0ICogd2l0aGluIHRoZSB0aW1lb3V0LCBpdCYjMzk7bGwgaW1tZWRpYXRlbHkgcmVwbHkgd2l0aCBSU1QsIGJlY2F1c2UgdGhlcmUmIzM5O3Mgbm9cbiAzNTE6XHRcdCAqIGxpc3RlbmVyIG9uIHRoZSBwb3J0IHlldC5cbiAzNTI6XHRcdCAqXG4gMzUzOlx0XHQgKiB2aG9zdF92cV9nZXRfYmFja2VuZCgpIHdpdGhvdXQgdnEtXHUwMDNlbXV0ZXggaXMgYWNjZXB0YWJsZSBoZXJlOiBsb2NraW5nXG4gMzU0Olx0XHQgKiB0aGUgbXV0ZXggd291bGQgYmUgdG9vIGV4cGVuc2l2ZSBpbiB0aGlzIGhvdCBwYXRoLCBhbmQgd2UgYWxyZWFkeSBoYXZlXG4gMzU1Olx0XHQgKiBhbGwgdGhlIG91dGNvbWVzIGNvdmVyZWQ6IGlmIHRoZSBiYWNrZW5kIGJlY29tZXMgTlVMTCByaWdodCBhZnRlciB0aGUgY2hlY2ssXG4gMzU2Olx0XHQgKiB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QoKSB3aWxsIGNoZWNrIGl0IHVuZGVyIHRoZSBtdXRleCBhbnl3YXkuXG4gMzU3Olx0XHQgKi9cbiAzNTg6XHRcdGlmICh1bmxpa2VseSghZGF0YV9yYWNlKHZob3N0X3ZxX2dldF9iYWNrZW5kKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF0pKSkpIHtcbiAzNTk6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzYwOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM2MTpcdFx0XHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcbiAzNjI6XHRcdH1cbiAzNjM6XHRcbiAzNjQ6XHRcdGlmICh2aXJ0aW9fdnNvY2tfc2tiX3JlcGx5KHNrYikpXG4gMzY1Olx0XHRcdGF0b21pY19pbmMoXHUwMDI2dnNvY2stXHUwMDNlcXVldWVkX3JlcGxpZXMpO1xuIDM2NjpcdFxuIDM2NzpcdFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV90YWlsKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlLCBza2IpO1xuIDM2ODpcdFx0dmhvc3RfdnFfd29ya19xdWV1ZShcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdLCBcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF93b3JrKTtcbiAzNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NDMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmFjaW5nIHRoZSBEYXRhIEZsb3cgb2YgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCBmdW5jdGlvbiB3b3Jrcy4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyByZWdpc3RlcmVkIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGBzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCB2aG9zdF90cmFuc3BvcnRgLCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgdGhhdCBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIGhhbmRsaW5nIHRyYW5zcG9ydCBsb2dpYywgYW5kIHRoaXMgaXMgdXNlZCBieSB0aGUgYHZzb2NrX2NvcmVgIG1vZHVsZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR0ZXIuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHZob3N0X3RyYW5zcG9ydGAgaXRzZWxmLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFuZCB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBzdHJ1Y3QmIzM5O3MgZGVmaW5pdGlvbiBzaG91bGQgZ2l2ZSBtZSBtb3JlIGNvbnRleHQgZm9yIHdoYXQgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3RyYW5zcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jPTQ4PXN0cnVjdCB2aG9zdF92c29jayB7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTY1LVxuZHJpdmVycy92aG9zdC92c29jay5jOjY2OnN0YXRpYyB1MzIgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQodm9pZClcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02Ny17XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTc0PXN0YXRpYyBzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZob3N0X3Zzb2NrX2dldCh1MzIgZ3Vlc3RfY2lkLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTkzLVxuZHJpdmVycy92aG9zdC92c29jay5jOjk0OnN0YXRpYyBib29sIHZob3N0X3RyYW5zcG9ydF9oYXNfcmVtb3RlX2NpZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkKVxuZHJpdmVycy92aG9zdC92c29jay5jLTk1LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTI3PXN0YXRpYyB2b2lkXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTI4OnZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuZHJpdmVycy92aG9zdC92c29jay5jLTEyOS1cdFx0XHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTMxOS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjA6c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzIxLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzI3LVxuZHJpdmVycy92aG9zdC92c29jay5jOjMyODpcdHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCh2c29jaywgdnEpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTMyOS19XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTMzMT1zdGF0aWMgaW50XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzMyOnZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzMzLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzU1LVx0ICogYWxsIHRoZSBvdXRjb21lcyBjb3ZlcmVkOiBpZiB0aGUgYmFja2VuZCBiZWNvbWVzIE5VTEwgcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLFxuZHJpdmVycy92aG9zdC92c29jay5jOjM1NjpcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNTctXHQgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9Mzc0PXN0YXRpYyBpbnRcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozNzU6dmhvc3RfdHJhbnNwb3J0X2NhbmNlbF9wa3Qoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNzYte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz00Njg9c3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfbW9yZV9yZXBsaWVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTQ3OC1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo0Nzk6c3RhdGljIGJvb2wgdmhvc3RfdHJhbnNwb3J0X21zZ3plcm9jb3B5X2FsbG93KHZvaWQpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDgwLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDgzLVxuZHJpdmVycy92aG9zdC92c29jay5jOjQ4NDpzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfc2VxcGFja2V0X2FsbG93KHN0cnVjdCB2c29ja19zb2NrICp2c2ssXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDg1LVx0XHRcdFx0XHQgICAgdTMyIHJlbW90ZV9jaWQpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz00ODc9c3RhdGljIGJvb2xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo0ODg6dmhvc3RfdHJhbnNwb3J0X3N0cmVhbV9hbGxvdyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkLCB1MzIgcG9ydClcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00ODkte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00OTItXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NDkzOnN0YXRpYyBzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCB2aG9zdF90cmFuc3BvcnQgPSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDk0LVx0LnRyYW5zcG9ydCA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDk2LVxuZHJpdmVycy92aG9zdC92c29jay5jOjQ5NzpcdFx0LmdldF9sb2NhbF9jaWQgICAgICAgICAgICA9IHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkLFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ5ODpcdFx0Lmhhc19yZW1vdGVfY2lkICAgICAgICAgICA9IHZob3N0X3RyYW5zcG9ydF9oYXNfcmVtb3RlX2NpZCxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00OTktXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTUwNC1cdFx0LnNodXRkb3duICAgICAgICAgICAgICAgICA9IHZpcnRpb190cmFuc3BvcnRfc2h1dGRvd24sXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTA1Olx0XHQuY2FuY2VsX3BrdCAgICAgICAgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X2NhbmNlbF9wa3QsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTA2LVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MTctXHRcdC5zdHJlYW1faXNfYWN0aXZlICAgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X3N0cmVhbV9pc19hY3RpdmUsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTE4Olx0XHQuc3RyZWFtX2FsbG93ICAgICAgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X3N0cmVhbV9hbGxvdyxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MTktXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTUyMS1cdFx0LnNlcXBhY2tldF9lbnF1ZXVlICAgICAgICA9IHZpcnRpb190cmFuc3BvcnRfc2VxcGFja2V0X2VucXVldWUsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTIyOlx0XHQuc2VxcGFja2V0X2FsbG93ICAgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X3NlcXBhY2tldF9hbGxvdyxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MjMtXHRcdC5zZXFwYWNrZXRfaGFzX2RhdGEgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X3NlcXBhY2tldF9oYXNfZGF0YSxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MjQtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTI1Olx0XHQubXNnemVyb2NvcHlfYWxsb3cgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X21zZ3plcm9jb3B5X2FsbG93LFxuZHJpdmVycy92aG9zdC92c29jay5jLTUyNi1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTQ0LVxuZHJpdmVycy92aG9zdC92c29jay5jOjU0NTpcdC5zZW5kX3BrdCA9IHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdCxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NDYtfTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NDctXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTQ4OnN0YXRpYyBib29sIHZob3N0X3RyYW5zcG9ydF9zZXFwYWNrZXRfYWxsb3coc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NDktXHRcdFx0XHRcdCAgICB1MzIgcmVtb3RlX2NpZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NTY2PXN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2hhbmRsZV90eF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MjUtXHRcdCAgICBsZTY0X3RvX2NwdShoZHItXHUwMDNlZHN0X2NpZCkgPT1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2MjY6XHRcdCAgICB2aG9zdF90cmFuc3BvcnRfZ2V0X2xvY2FsX2NpZCgpKVxuZHJpdmVycy92aG9zdC92c29jay5jOjYyNzpcdFx0XHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KFx1MDAyNnZob3N0X3RyYW5zcG9ydCwgc2tiLFxuZHJpdmVycy92aG9zdC92c29jay5jLTYyOC1cdFx0XHRcdFx0XHQgIHZzb2NrLVx1MDAzZW5ldCk7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTY0ND1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjUwLVxuZHJpdmVycy92aG9zdC92c29jay5jOjY1MTpcdHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCh2c29jaywgdnEpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTY1Mi19XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTc0MT1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NzktXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3ODA6XHR2aG9zdF93b3JrX2luaXQoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3Rfd29yaywgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmspO1xuZHJpdmVycy92aG9zdC92c29jay5jLTc4MS1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz04MjU9c3RhdGljIGludCB2aG9zdF92c29ja19kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODM4LVx0ICogaW5lZmZpY2llbnQuICBSb29tIGZvciBpbXByb3ZlbWVudCBoZXJlLiAqL1xuZHJpdmVycy92aG9zdC92c29jay5jOjgzOTpcdHZzb2NrX2Zvcl9lYWNoX2Nvbm5lY3RlZF9zb2NrZXQoXHUwMDI2dmhvc3RfdHJhbnNwb3J0LnRyYW5zcG9ydCxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDAtXHRcdFx0XHRcdHZob3N0X3Zzb2NrX3Jlc2V0X29ycGhhbnMpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0xMDMzPXN0YXRpYyBpbnQgX19pbml0IHZob3N0X3Zzb2NrX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAzNi1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDM3Olx0cmV0ID0gdnNvY2tfY29yZV9yZWdpc3RlcihcdTAwMjZ2aG9zdF90cmFuc3BvcnQudHJhbnNwb3J0LFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMzgtXHRcdFx0XHQgIFZTT0NLX1RSQU5TUE9SVF9GX0gyRyk7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTEwNDMtXHRpZiAocmV0KSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA0NDpcdFx0dnNvY2tfY29yZV91bnJlZ2lzdGVyKFx1MDAyNnZob3N0X3RyYW5zcG9ydC50cmFuc3BvcnQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwNDUtXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTEwNTE9c3RhdGljIHZvaWQgX19leGl0IHZob3N0X3Zzb2NrX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1My1cdG1pc2NfZGVyZWdpc3RlcihcdTAwMjZ2aG9zdF92c29ja19taXNjKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDU0Olx0dnNvY2tfY29yZV91bnJlZ2lzdGVyKFx1MDAyNnZob3N0X3RyYW5zcG9ydC50cmFuc3BvcnQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwNTUtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogdmhvc3QtdnNvY2sgQmF0Y2hpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBuZXcgdmhvc3QtdnNvY2sgYmF0Y2hpbmcgcGF0Y2ggaXMgKmFic29sdXRlbHkqIHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbi4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3M6CgpGaXJzdCwgYWNjZXNzaWJpbGl0eS4gQ2FuIHdlIGFjdHVhbGx5IGhpdCB0aGlzIG1vZGlmaWVkIGNvZGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwPyBBYnNvbHV0ZWx5LCB5ZXMuIFFFTVUgb3IgdXNlcnNwYWNlIHJ1bm5pbmcgaW4gYSBWTSBzaG91bGQgaGF2ZSBubyBwcm9ibGVtIGludGVyYWN0aW5nIHdpdGggYC9kZXYvdmhvc3QtdnNvY2tgLiBXZSBjYW4gc2V0IHVwIHRoZSB2aXJ0cXVldWVzIHVzaW5nIHRoZSBzdGFuZGFyZCBpb2N0bHMg4oCTIGBWSE9TVF9TRVRfVlJJTkdfQkFTRWAsIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCwgZXRjLiDigJMgYW5kIHRoZW4gc2VuZCBkYXRhIHVzaW5nIEFGX1ZTT0NLIHNvY2tldHMgb3IgdHJpZ2dlciB2aXJ0cXVldWUga2lja3MuIEFsbCBvZiB0aGF0IGxlYWRzIHRvIHRoZSBjcnVjaWFsIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludC4KClNlY29uZCwgd2hhdCYjMzk7cyAqYWN0dWFsbHkqIGNoYW5naW5nIHdpdGggdGhpcyBwYXRjaD8gSXQmIzM5O3MgZnVuZGFtZW50YWxseSBhYm91dCBob3cgdXNlZCByaW5nIGVudHJpZXMgYXJlIGhhbmRsZWQgaW4gdmhvc3QtdnNvY2sgd2l0aGluIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLiBJbnN0ZWFkIG9mIGluZGl2aWR1YWwgYHZob3N0X2FkZF91c2VkYCBjYWxscywgdGhlIHBhdGNoIGludHJvZHVjZXMgYmF0Y2hlZCB1cGRhdGVzIHVzaW5nIGB2aG9zdF9hZGRfdXNlZF9uYCB0aHJvdWdoIGhlbHBlciBmdW5jdGlvbnMgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgLiBUaGlzIHRvdWNoZXMgYSBsb3Qgb2YgaW1wb3J0YW50IHBpZWNlczogcmluZyBpbmRleGluZywgZGVzY3JpcHRvciB1cGRhdGVzLCBiYXRjaCBzaXplIGxpbWl0cyBkZWZpbmVkIGJ5IGB1c2VkX2xpbWl0YCwgbm90aWZ5aW5nIHRoZSBndWVzdCwgYW5kIGZsdXNoaW5nIHRoZSBidWZmZXJzLgoKVGhpcmQsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIHdoeSBpcyB0aGlzIHNvIHJpcGUgZm9yIGZ1enppbmc/IEJlY2F1c2UgdGhlIHZlcnkgbmF0dXJlIG9mIGJhdGNoaW5nIGNoYW5nZXMsIGxpa2UgbW9kaWZpY2F0aW9ucyB0byB0aGUgdmlydHF1ZXVlL2Rlc2NyaXB0b3IgYnVmZmVyIGhhbmRsaW5nIGFuZCBiYXRjaGluZyBsb2dpYywgc2NyZWFtICYjMzQ7b2ZmLWJ5LW9uZSBlcnJvcnMsJiMzNDsgJiMzNDtsb3N0IHdha2V1cHMsJiMzNDsgJiMzNDtyaW5nIGJ1ZmZlciBjb3JydXB0aW9uLCYjMzQ7IGFuZCAmIzM0O291dC1vZi1ib3VuZHMgYWNjZXNzJiMzNDsgaW4gdGhlIGBoZWFkc2AgYXJyYXlzLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgYXJlYSB3aGVyZSBhIGZ1enplciBjYW4gcmVhbGx5IHNoaW5lLgoKRmluYWxseSwgd2hhdCBhcmUgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uPyBJIG5lZWQgdG8gZm9jdXMgb246CiogICBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCAodGhlIGNvcmUgZnVuY3Rpb24pCiogICBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAgKGZsdXNoaW5nIHRoZSBidWZmZXIpCiogICBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIChhZGRpbmcgdXNlZCBlbnRyaWVzIHRvIHRoZSBidWZmZXIpCiogICBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmtgIChyZWxhdGVkIHRvIHBhY2tldCBzZW5kaW5nKQoqICAgYHZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrYCAoaGFuZGxpbmcgaW5jb21pbmcga2ljaykKCkFuZCwgc2luY2UgYHZob3N0X2FkZF91c2VkX25gIGlzIGFjdHVhbGx5IGluIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgLCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBpdCB0byBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgaXQgd29ya3MgYW5kIGhvdyBpdCBtaWdodCBiZSBpbnRlcmFjdGluZyB3aXRoIHRoZSByZXN0IG9mIHRoZSB2c29jayBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0YXJnZXRpbmcgdGhlIGZ1enppbmcgY2FtcGFpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X2FkZF91c2VkX24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zMDA4PWludCB2aG9zdF9hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdW5zaWduZWQgaW50IGhlYWQsIGludCBsZW4pXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMTUtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzAxNjpcdHJldHVybiB2aG9zdF9hZGRfdXNlZF9uKHZxLCBcdTAwMjZoZWFkcywgXHUwMDI2bmhlYWRzLCAxKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDE3LX1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zMDE4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2FkZF91c2VkKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDE5LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwMjA6c3RhdGljIGludCBfX3Zob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzAyMS1cdFx0XHQgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNTEtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzA1MjpzdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25fb29vKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNTMtXHRcdFx0XHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA2MC1cdGlmIChuIFx1MDAzYyBjb3VudCkge1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwNjE6XHRcdHIgPSBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBuKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDYyLVx0XHRpZiAociBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA2Ni1cdH1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDY3Olx0cmV0dXJuIF9fdmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIGNvdW50KTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDY4LX1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDY5LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwNzA6c3RhdGljIGludCB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNzEtXHRcdFx0XHQgICAgIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTE5LSAqIHdhbnQgdG8gbm90aWZ5IHRoZSBndWVzdCwgdXNpbmcgZXZlbnRmZC4gKi9cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTIwOmludCB2aG9zdF9hZGRfdXNlZF9uKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTIxLVx0XHQgICAgIHUxNiAqbmhlYWRzLCB1bnNpZ25lZCBjb3VudClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzEyNi1cdGlmICghaW5fb3JkZXIgfHwgIW5oZWFkcylcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTI3Olx0XHRyID0gdmhvc3RfYWRkX3VzZWRfbl9vb28odnEsIGhlYWRzLCBjb3VudCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzEyOC1cdGVsc2VcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTI5Olx0XHRyID0gdmhvc3RfYWRkX3VzZWRfbl9pbl9vcmRlcih2cSwgaGVhZHMsIG5oZWFkcywgY291bnQpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMzAtXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxNTAtfVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxNTE6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWRfbik7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzE1Mi1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzIxMD12b2lkIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMyMTUte1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjMyMTY6XHR2aG9zdF9hZGRfdXNlZF9uKHZxLCBoZWFkcywgbmhlYWRzLCBjb3VudCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzIxNy1cdHZob3N0X3NpZ25hbChkZXYsIHZxKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjQ4PWludCB2aG9zdF9hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNDk6aW50IHZob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNTAtXHRcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTA2PXN0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTExMS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMTI6XHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cdTAwM2VoZWFkcywgdnEtXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMTMtXHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MDMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLY29uZmlnIERlcGVuZGVuY2llcyAtIFZIT1NUX1ZTT0NLKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgVkhPU1RfVlNPQ0tgLiBGaXJzdCwgYSBxdWljayBzYW5pdHkgY2hlY2s6IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgVkhPU1RfVlNPQ0tgIGlzIHByb3Blcmx5IHNldCB1cC4gUmlnaHQsIHNvIGBWSE9TVF9WU09DS2AgZGVwZW5kcyBvbiBgVlNPQ0tFVFNgIGFuZCBgRVZFTlRGRGAuIE1ha2VzIHNlbnNlIOKAkyB3ZSBuZWVkIHRoZSBjb3JlIHZzb2NrIGZ1bmN0aW9uYWxpdHkgYW5kIGEgd2F5IHRvIHNpZ25hbCBldmVudHMuIEl0IGFsc28gKnNlbGVjdHMqIGBWSE9TVGAgYW5kIGBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYCwgaW1wbHlpbmcgdGhhdCBpdCYjMzk7cyBidWlsZGluZyB1cG9uIHRob3NlIGZ1bmRhbWVudGFsIGNvbXBvbmVudHMuIE5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBhbGwgcGxheWluZyBuaWNlbHkgdG9nZXRoZXIsIEkmIzM5O2xsIG5lZWQgdG8gZ28gYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggYG5ldC92bXdfdnNvY2svS2NvbmZpZ2AgdG8gY29uZmlybSBldmVyeXRoaW5nIG9uIHRoZSB2c29jayBzaWRlIGlzIGluIG9yZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVlNPQ0tFVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnLTUtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Njpjb25maWcgVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXQgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMTgtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MTk6Y29uZmlnIFZTT0NLRVRTX0RJQUdcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yOC1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyOTpjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNzgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgRXZlbnRmZCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gR2l2ZW4gd2hhdCBJJiMzOTttIHdvcmtpbmcgb24sIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBFVkVOVEZEYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3b3VsZCBsaWtlbHkgcmVzaWRlIGVpdGhlciB3aXRoaW4gdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIHNpbmNlIGl0IG1pZ2h0IGJlIGEgY29yZSBrZXJuZWwgZmVhdHVyZSwgb3IgcG90ZW50aWFsbHkgd2l0aGluIGBmcy9LY29uZmlnYCBpZiBpdCYjMzk7cyBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0gb3Igc29tZSByZWxhdGVkIGluZnJhc3RydWN0dXJlLiBJ4oCZbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgdHdvIGxvY2F0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyBpdCYjMzk7cyBlbmFibGVkIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVZFTlRGRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkyMz1jb25maWcgVElNRVJGRFxuLS1cbmluaXQvS2NvbmZpZy0xOTMxLVxuaW5pdC9LY29uZmlnOjE5MzI6Y29uZmlnIEVWRU5URkRcbmluaXQvS2NvbmZpZy0xOTMzLVx0Ym9vbCBcJiMzNDtFbmFibGUgZXZlbnRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyNwoJCQkJCQkJb3V0cHV0OiAyMjgKCQkJCQkJCXRob3VnaHRzOiA0NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFZob3N0LVZTT0NLIERyaXZlciBNb2RpZmljYXRpb24gZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZy4gV2UmIzM5O3JlIG1vZGlmeWluZyB0aGUgdmlydHF1ZXVlIHBhY2tldCB0cmFuc21pc3Npb24gaW4gdGhlIHZob3N0LXZzb2NrIGRyaXZlci4gRXNzZW50aWFsbHksIHdlJiMzOTtyZSBtb3ZpbmcgZnJvbSBhIHBlci1wYWNrZXQgYHZob3N0X2FkZF91c2VkYCBhcHByb2FjaCB0byB1c2luZyBgdmhvc3RfYWRkX3VzZWRfbmAgZm9yIGJhdGNoZWQgZGVzY3JpcHRvciByaW5nIHVwZGF0ZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgYmVjYXVzZSBpdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgYmF0Y2ggbGltaXRzIChgdXNlZF9saW1pdGApLCBhcnJheSBpbmRleCBtYW5hZ2VtZW50LCBhbmQgdGhlIGNydWNpYWwgYmF0Y2ggZmx1c2hpbmcgcHJvY2VkdXJlcyBoYW5kbGVkIGJ5IGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYC4KCkJhc2VkIG9uIHRoaXMgY2hhbmdlLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogd2UgY2FuIGV4ZXJjaXNlIHRoaXMgbmV3IGJhdGNoaW5nIGxvZ2ljIGVmZmVjdGl2ZWx5IGJ5IGZ1enppbmcgQUZfVlNPQ0sgc29ja2V0IG9wZXJhdGlvbnMgYW5kIGludGVyYWN0aW5nIHdpdGggYC9kZXYvdmhvc3QtdnNvY2tgIGlvY3RscyB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIGFyZSBtb3N0IGxpa2VseSB0byBlbWVyZ2UuCgpUbyBlbmFibGUgdGhpcyBmdXp6aW5nLCB3ZSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbnM6IGBWSE9TVF9WU09DS2AsIGBWU09DS0VUU2AsIGBFVkVOVEZEYCwgYFZIT1NUYCwgYW5kIGBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYC4gVGhlc2UgYXJlIHRoZSBtaW5pbXVtIG5lZWRlZCB0byBnZXQgZXZlcnl0aGluZyB0byB3b3JrLgoKTXkgZm9jdXMgc3ltYm9scyBhcmUgdGhlc2Uga2V5IGZ1bmN0aW9uczogYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAsIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCwgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAsIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29ya2AsIGFuZCBgdmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2tgLiBXZSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gdGhlc2UuIEFjdHVhbGx5LCBJIHNob3VsZCBhbHNvIG5vdGUgdGhhdCBgdmhvc3RfYWRkX3VzZWRfbmAgaW4gYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AgaXMgaW1wb3J0YW50LCB0aG91Z2ggSSYjMzk7bGwga2VlcCB0aGUgZm9jdXMgcHJpbWFyaWx5IG9uIHRoZSB2c29jay1zcGVjaWZpYyBvbmVzIGZvciBub3cuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGVzZSBmaW5kaW5ncy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDssCiAgICAmIzM0O1ZIT1NUJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUU19DT01NT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZmx1c2hfdXNlZCYjMzQ7LAogICAgJiMzNDt2aG9zdF92c29ja19hZGRfdXNlZCYjMzQ7LAogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3QmIzM0OywKICAgICYjMzQ7dmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZXNjcmlwdG9yIGJhdGNoaW5nIGluIHRoZSB2aG9zdC12c29jayBkcml2ZXIgKGRyaXZlcnMvdmhvc3QvdnNvY2suYykgZm9yIHBhY2tldCB0cmFuc21pc3Npb24sIHJlcGxhY2luZyBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkIGNhbGxzIHdpdGggYmF0Y2hlZCB2aG9zdF9hZGRfdXNlZF9uIGNhbGxzLiBJdCBpbnRyb2R1Y2VzIG5ldyBidWZmZXIgYWNjdW11bGF0aW9uLCBhcnJheSBpbmRleGluZywgYW5kIGJhdGNoIGxpbWl0L2ZsdXNoaW5nIGxvZ2ljIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBhY2Nlc3NpYmxlIHZpYSAvZGV2L3Zob3N0LXZzb2NrIGFuZCBBRl9WU09DSyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDssCiAgICAmIzM0O1ZIT1NUJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUU19DT01NT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZmx1c2hfdXNlZCYjMzQ7LAogICAgJiMzNDt2aG9zdF92c29ja19hZGRfdXNlZCYjMzQ7LAogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3QmIzM0OywKICAgICYjMzQ7dmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZXNjcmlwdG9yIGJhdGNoaW5nIGluIHRoZSB2aG9zdC12c29jayBkcml2ZXIgKGRyaXZlcnMvdmhvc3QvdnNvY2suYykgZm9yIHBhY2tldCB0cmFuc21pc3Npb24sIHJlcGxhY2luZyBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkIGNhbGxzIHdpdGggYmF0Y2hlZCB2aG9zdF9hZGRfdXNlZF9uIGNhbGxzLiBJdCBpbnRyb2R1Y2VzIG5ldyBidWZmZXIgYWNjdW11bGF0aW9uLCBhcnJheSBpbmRleGluZywgYW5kIGJhdGNoIGxpbWl0L2ZsdXNoaW5nIGxvZ2ljIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBhY2Nlc3NpYmxlIHZpYSAvZGV2L3Zob3N0LXZzb2NrIGFuZCBBRl9WU09DSyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBiYXRjaGluZyBvZiB1c2VkIHJpbmcgdXBkYXRlcyBpbiB2aG9zdC12c29jayAodmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KSBieSBhY2N1bXVsYXRpbmcgdXNlZCBkZXNjcmlwdG9ycyBpbiB0aGUgcHJlYWxsb2NhdGVkIHZpcnRxdWV1ZSBhcnJheXMgKHZxLVx1MDAzZWhlYWRzIGFuZCB2cS1cdTAwM2VuaGVhZHMpIGFuZCBmbHVzaGluZyB0aGVtIHZpYSB2aG9zdF9hZGRfdXNlZF9uKCkgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkKCkgY2FsbHMuXG5cbi0gS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbiAgMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWs6IEVhY2ggdXNlZCBkZXNjcmlwdG9yIGVsZW1lbnQgaW4gdnEtXHUwMDNlaGVhZHMgKHN0cnVjdCB2cmluZ191c2VkX2VsZW0pIGNvbnRhaW5zIG9ubHkgdHdvIDMyLWJpdCBmaWVsZHMgKGlkIGFuZCBsZW4pIHdpdGhvdXQgYW55IHN0cnVjdHVyZSBwYWRkaW5nLiBCb3RoIGZpZWxkcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdnEtXHUwMDNlbmhlYWRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHZob3N0X3Zzb2NrX2FkZF91c2VkKCkgZm9yIGVhY2ggaW5kZXggYmVmb3JlIGJlaW5nIGZsdXNoZWQgYW5kIGNvcGllZCB0byB0aGUgZ3Vlc3QmIzM5O3MgdXNlZCByaW5nIHZpYSB2aG9zdF9wdXRfdXNlZCgpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyByZWFkIG9yIGxlYWtlZC5cbiAgMi4gTWVtb3J5IEJvdW5kcyBhbmQgSW50ZWdyaXR5OiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gYXJyYXkgaW5kZXhpbmcsIGJvdW5kcyBsaW1pdHMgKHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQpLCBvciB2aXJ0cXVldWUgc3luY2hyb25pemF0aW9uIGxvZ2ljLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiAoZm9yIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzZXMpLCBhbmQgdmlydGlvIHByb3RvY29sIGNoZWNrcy5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODZmZDA3ZThmZDc2NWE5MzEzMmIzZjg4YzliMzVkNzYxMzU5ZWQ3NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTk6MTc6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMKaW5kZXggOWFhYWI2YmI4MDYxYy4uN2ExM2FiZTczMzQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suYwpAQCAtMTAzLDEyICYjNDM7MTAzLDM1IEBAIHN0YXRpYyBib29sIHZob3N0X3RyYW5zcG9ydF9oYXNfcmVtb3RlX2NpZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkKQogCXJldHVybiBmb3VuZDsKIH0KIAomIzQzO3N0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCB1c2VkX2NvdW50KQomIzQzO3sKJiM0MzsJaWYgKCF1c2VkX2NvdW50KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwl2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS0mZ3Q7aGVhZHMsIHZxLSZndDtuaGVhZHMsIHVzZWRfY291bnQpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCwKJiM0MzsJCQkJIHVuc2lnbmVkIGludCBoZWFkLCB1bnNpZ25lZCBpbnQgbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9ICZhbXA7dnEtJmd0O2hlYWRzW3VzZWRfY291bnRdOwomIzQzOwomIzQzOwl1c2VkLSZndDtpZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTsKJiM0MzsJdXNlZC0mZ3Q7bGVuID0gY3B1X3RvX3Zob3N0MzIodnEsIGxlbik7CiYjNDM7CXZxLSZndDtuaGVhZHNbdXNlZF9jb3VudF0gPSAxOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAkJCSAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKIHsKIAlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp0eF92cSA9ICZhbXA7dnNvY2stJmd0O3Zxc1tWU09DS19WUV9UWF07CiAJaW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCA9IDA7CiYjNDM7CXVuc2lnbmVkIGludCB1c2VkX2xpbWl0OwogCWJvb2wgYWRkZWQgPSBmYWxzZTsKIAlib29sIHJlc3RhcnRfdHggPSBmYWxzZTsKIApAQCAtMTIwLDYgJiM0MzsxNDMsMTEgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJaWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJLyogS2VlcCB0aGUgYmF0Y2ggd2l0aGluIHRoZSB1c2VkIHJpbmcgYW5kIHRoZSBzY3JhdGNoIGFycmF5cy4gKi8KJiM0MzsJdXNlZF9saW1pdCA9IG1pbl90KHVuc2lnbmVkIGludCwgdnEtJmd0O251bSwgdnEtJmd0O2Rldi0mZ3Q7aW92X2xpbWl0KTsKJiM0MzsJaWYgKHVubGlrZWx5KCF1c2VkX2xpbWl0KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCS8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UmIzM5O3JlIGFscmVhZHkgcHJvY2Vzc2luZyB0aGUgdmlydHF1ZXVlICovCiAJdmhvc3RfZGlzYWJsZV9ub3RpZnkoJmFtcDt2c29jay0mZ3Q7ZGV2LCB2cSk7CiAKQEAgLTE1MCw2ICYjNDM7MTc4LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCiAJCWlmIChoZWFkID09IHZxLSZndDtudW0pIHsKIAkJCXZpcnRpb192c29ja19za2JfcXVldWVfaGVhZCgmYW1wO3Zzb2NrLSZndDtzZW5kX3BrdF9xdWV1ZSwgc2tiKTsKJiM0MzsKJiM0MzsJCQkvKiBGbHVzaCBjb21wbGV0ZWQgYnVmZmVycyBiZWZvcmUgcmUtZW5hYmxpbmcgbm90aWZpY2F0aW9ucy4gKi8KJiM0MzsJCQlpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHsKJiM0MzsJCQkJYWRkZWQgPSB0cnVlOwomIzQzOwkJCQl1c2VkX2NvdW50ID0gMDsKJiM0MzsJCQl9CiYjNDM7CiAJCQkvKiBXZSBjYW5ub3QgZmluaXNoIHlldCBpZiBtb3JlIGJ1ZmZlcnMgc251Y2sgaW4gd2hpbGUKIAkJCSAqIHJlLWVuYWJsaW5nIG5vdGlmeS4KIAkJCSAqLwpAQCAtMjMwLDggJiM0MzsyNjUsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJCSAqLwogCQl2aXJ0aW9fdHJhbnNwb3J0X2RlbGl2ZXJfdGFwX3BrdChza2IpOwogCi0JCXZob3N0X2FkZF91c2VkKHZxLCBoZWFkLCBzaXplb2YoKmhkcikgJiM0MzsgcGF5bG9hZF9sZW4pOwotCQlhZGRlZCA9IHRydWU7CiYjNDM7CQl2aG9zdF92c29ja19hZGRfdXNlZCh2cSwgdXNlZF9jb3VudCwgaGVhZCwKJiM0MzsJCQkJICAgICBzaXplb2YoKmhkcikgJiM0MzsgcGF5bG9hZF9sZW4pOwomIzQzOwkJdXNlZF9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAodXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0KSB7CiYjNDM7CQkJYWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCk7CiYjNDM7CQkJdXNlZF9jb3VudCA9IDA7CiYjNDM7CQl9CiAKIAkJVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLSZndDtvZmZzZXQgJiM0Mzs9IHBheWxvYWRfbGVuOwogCQl0b3RhbF9sZW4gJiM0Mzs9IHBheWxvYWRfbGVuOwpAQCAtMjY0LDYgJiM0MzszMDQsOSBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAkJCXZpcnRpb190cmFuc3BvcnRfY29uc3VtZV9za2Jfc2VudChza2IsIHRydWUpOwogCQl9CiAJfSB3aGlsZShsaWtlbHkoIXZob3N0X2V4Y2VlZHNfd2VpZ2h0KHZxLCAmIzQzOyYjNDM7cGt0cywgdG90YWxfbGVuKSkpOwomIzQzOwomIzQzOwlhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCB1c2VkX2NvdW50KTsKJiM0MzsKIAlpZiAoYWRkZWQpCiAJCXZob3N0X3NpZ25hbCgmYW1wO3Zzb2NrLSZndDtkZXYsIHZxKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0IHZzb2NrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBzaW5jZSBpdCB0b3VjaGVzIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGZvY3VzaW5nIG9uIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGlzIGNydWNpYWw7IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdHVhbCBwYWNrZXQgc2VuZGluZyBsb2dpYyByZXNpZGVzLgoKTXkgYW5hbHlzaXMgdGVsbHMgbWUgdGhlIGZ1bmRhbWVudGFsIHNoaWZ0IGlzIGluIGhvdyB0aGUgdXNlZCByaW5nIGlzIHVwZGF0ZWQuIEluc3RlYWQgb2YgdGhlIHR5cGljYWwsIGltbWVkaWF0ZSBgdmhvc3RfYWRkX3VzZWRgIGNhbGwgZm9yIGVhY2ggaW5kaXZpZHVhbCBwYWNrZXQsIGl0IGFwcGVhcnMgd2UmIzM5O3JlIG5vdyAqYmF0Y2hpbmcqIHRoZXNlIHVwZGF0ZXMgd2l0aCBgdmhvc3RfYWRkX3VzZWRfbmAsIHVzaW5nIGB2cS0mZ3Q7aGVhZHNgLCBgdnEtJmd0O25oZWFkc2AsIGFuZCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCgpYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkKClgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgYmF0Y2hpbmcgY2FuIG9mdGVuIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgcmVkdWNpbmcgdGhlIG92ZXJoZWFkIG9mIHJlcGVhdGVkIHN5c3RlbSBjYWxscyBvciBtZW1vcnkgYmFycmllcnMgcmVsYXRlZCB0byByaW5nIHVwZGF0ZXMuCgpOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gSSB3YW50IHRvIHNlZSAqaG93KiB0aGlzIGB2aG9zdF9hZGRfdXNlZF9uYCBmdW5jdGlvbiwgYW5kIHRoZSBgdnEtJmd0O2hlYWRzYCBhbmQgYHZxLSZndDtuaGVhZHNgIHN0cnVjdHVyZXMsIGFyZSB1c2VkIGFjcm9zcyB0aGUgKmVudGlyZSogYGRyaXZlcnMvdmhvc3QvYCBkaXJlY3RvcnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBub3ZlbCBhcHByb2FjaCBvciBpZiBpdCYjMzk7cyBiYXNlZCBvbiBzb21lIGV4aXN0aW5nIHBhdHRlcm4uIEkmIzM5O2xsIHByb2JhYmx5IGZpcmUgdXAgYGdyZXBwZXJgIChvciB1c2UgYHJlYWQtZmlsZWAgaW4gYSBwaW5jaCkgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGl0cyB1c2UuIFRoaXMgd2lsbCByZXZlYWwgaWYgdGhpcyBpcyBhIHN0YW5kYXJkIHZob3N0IGlkaW9tIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dCBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSBwYXRjaCYjMzk7cyBwb3RlbnRpYWwgYmVuZWZpdHMgYW5kIGRyYXdiYWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfYWRkX3VzZWRfbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jPTMwMDg9aW50IHZob3N0X2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbilcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzAxNS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDE2Olx0cmV0dXJuIHZob3N0X2FkZF91c2VkX24odnEsIFx1MDAyNmhlYWRzLCBcdTAwMjZuaGVhZHMsIDEpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMTctfVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTMwMTg9RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWQpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMTktXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzAyMDpzdGF0aWMgaW50IF9fdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDIxLVx0XHRcdCAgICBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA1MS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDUyOnN0YXRpYyBpbnQgdmhvc3RfYWRkX3VzZWRfbl9vb28oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA1My1cdFx0XHRcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDYwLVx0aWYgKG4gXHUwMDNjIGNvdW50KSB7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzA2MTpcdFx0ciA9IF9fdmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIG4pO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjItXHRcdGlmIChyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDY2LVx0fVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwNjc6XHRyZXR1cm4gX192aG9zdF9hZGRfdXNlZF9uKHZxLCBoZWFkcywgY291bnQpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjgtfVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjktXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzA3MDpzdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25faW5fb3JkZXIoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA3MS1cdFx0XHRcdCAgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMTktICogd2FudCB0byBub3RpZnkgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqL1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxMjA6aW50IHZob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMjEtXHRcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTI2LVx0aWYgKCFpbl9vcmRlciB8fCAhbmhlYWRzKVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxMjc6XHRcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX29vbyh2cSwgaGVhZHMsIGNvdW50KTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTI4LVx0ZWxzZVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxMjk6XHRcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHZxLCBoZWFkcywgbmhlYWRzLCBjb3VudCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzEzMC1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzE1MC19XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzE1MTpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9hZGRfdXNlZF9uKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTUyLVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zMjEwPXZvaWQgdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbF9uKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzIxNS17XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzIxNjpcdHZob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBuaGVhZHMsIGNvdW50KTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMjE3LVx0dmhvc3Rfc2lnbmFsKGRldiwgdnEpO1xuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yNDg9aW50IHZob3N0X2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKiwgdW5zaWduZWQgaW50IGhlYWQsIGludCBsZW4pO1xuZHJpdmVycy92aG9zdC92aG9zdC5oOjI0OTppbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI1MC1cdFx0ICAgICB1MTYgKm5oZWFkcywgdW5zaWduZWQgY291bnQpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0xMDY9c3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTExLVxuZHJpdmVycy92aG9zdC92c29jay5jOjExMjpcdHZob3N0X2FkZF91c2VkX24odnEsIHZxLVx1MDAzZWhlYWRzLCB2cS1cdTAwM2VuaGVhZHMsIHVzZWRfY291bnQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTExMy1cdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODQ3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBWaG9zdCBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgYHZob3N0X2FkZF91c2VkX25gIGFuZCwgYnkgZXh0ZW5zaW9uLCB0aGUgYHZxLSZndDtoZWFkc2AgYW5kIGB2cS0mZ3Q7bmhlYWRzYCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB1dGlsaXplZCB0aHJvdWdob3V0IHRoZSBgdmhvc3RgIGRyaXZlciBlY29zeXN0ZW0uIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBoYW5kbGUgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQgaXMgdG8gZm9jdXMgb24gd2hlcmUgYHZxLSZndDtoZWFkc2AgaXMgZGlyZWN0bHkgYWNjZXNzZWQsIHNpbmNlIEkmIzM5O20gY29uY2VybmVkIGFib3V0IGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBTbywgSeKAmWxsIG5lZWQgdG8gZG8gYSBjb2RlIHNlYXJjaC4gSSYjMzk7bGwgaW5pdGlhdGUgYSBgZ3JlcGAgZm9yIGB2cS0mZ3Q7aGVhZHNgIHdpdGhpbiB0aGUgYGRyaXZlcnMvdmhvc3RgIGRpcmVjdG9yeS4gVGhpcyBzaG91bGQgaGVscCBtZSBxdWlja2x5IGlkZW50aWZ5IHRoZSBsaW5lcyB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIGJlaW5nIHJlZmVyZW5jZWQsIGFsbG93aW5nIG1lIHRvIGV4cGxvcmUgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2UgYmVoaW5kIGVhY2ggdXNlLWNhc2UuIFRoaXMgYXBwcm9hY2ggaXMgYSBzdHJhaWdodGZvcndhcmQgd2F5IHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjb2RlIGJhc2UuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgbW9yZSBjb21wbGV4IHBpY3R1cmUgb2YgdGhlIHVzZS1jYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnEtXHUwMDNlaGVhZHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MzcyPXN0YXRpYyB2b2lkIHZob3N0X3plcm9jb3B5X3NpZ25hbF91c2VkKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCxcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTM4MC1cdGZvciAoaSA9IG52cS1cdTAwM2Vkb25lX2lkeDsgaSAhPSBudnEtXHUwMDNldXBlbmRfaWR4OyBpID0gKGkgJiM0MzsgMSkgJSBVSU9fTUFYSU9WKSB7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjM4MTpcdFx0aWYgKHZxLVx1MDAzZWhlYWRzW2ldLmxlbiA9PSBWSE9TVF9ETUFfRkFJTEVEX0xFTilcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMzgyLVx0XHRcdHZob3N0X25ldF90eF9lcnIobmV0KTtcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MzgzOlx0XHRpZiAoVkhPU1RfRE1BX0lTX0RPTkUodnEtXHUwMDNlaGVhZHNbaV0ubGVuKSkge1xuZHJpdmVycy92aG9zdC9uZXQuYzozODQ6XHRcdFx0dnEtXHUwMDNlaGVhZHNbaV0ubGVuID0gVkhPU1RfRE1BX0NMRUFSX0xFTjtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMzg1LVx0XHRcdCYjNDM7JiM0MztqO1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMzkxLVx0XHR2aG9zdF9hZGRfdXNlZF9hbmRfc2lnbmFsX24odnEtXHUwMDNlZGV2LCB2cSxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MzkyOlx0XHRcdFx0XHQgICAgXHUwMDI2dnEtXHUwMDNlaGVhZHNbbnZxLVx1MDAzZWRvbmVfaWR4XSxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMzkzLVx0XHRcdFx0XHQgICAgTlVMTCwgYWRkKTtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTM5OT1zdGF0aWMgdm9pZCB2aG9zdF96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtNDE2LVx0Lyogc2V0IGxlbiB0byBtYXJrIHRoaXMgZGVzYyBidWZmZXJzIGRvbmUgRE1BICovXG5kcml2ZXJzL3Zob3N0L25ldC5jOjQxNzpcdHZxLVx1MDAzZWhlYWRzW3VidWYtXHUwMDNlZGVzY10ubGVuID0gc3VjY2VzcyA/XG5kcml2ZXJzL3Zob3N0L25ldC5jLTQxOC1cdFx0VkhPU1RfRE1BX0RPTkVfTEVOIDogVkhPU1RfRE1BX0ZBSUxFRF9MRU47XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz00NzU9c3RhdGljIHZvaWQgdmhvc3RfbmV0X3NpZ25hbF91c2VkKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEsXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy00ODMtXG5kcml2ZXJzL3Zob3N0L25ldC5jOjQ4NDpcdHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbihkZXYsIHZxLCB2cS1cdTAwM2VoZWFkcyxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtNDg1LVx0XHRcdFx0ICAgIHZxLVx1MDAzZW5oZWFkcywgY291bnQpO1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9NDg5PXN0YXRpYyB2b2lkIHZob3N0X3R4X2JhdGNoKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCxcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTUwMy1cdGlmIChpbl9vcmRlcikge1xuZHJpdmVycy92aG9zdC9uZXQuYzo1MDQ6XHRcdHZxLVx1MDAzZWhlYWRzWzBdLmxlbiA9IDA7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTUwNS1cdFx0dnEtXHUwMDNlbmhlYWRzWzBdID0gbnZxLVx1MDAzZWRvbmVfaWR4O1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9NzcwPXN0YXRpYyB2b2lkIGhhbmRsZV90eF9jb3B5KHN0cnVjdCB2aG9zdF9uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTg2MS1cdFx0aWYgKGluX29yZGVyKSB7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjg2MjpcdFx0XHR2cS1cdTAwM2VoZWFkc1swXS5pZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtODYzLVx0XHR9IGVsc2Uge1xuZHJpdmVycy92aG9zdC9uZXQuYzo4NjQ6XHRcdFx0dnEtXHUwMDNlaGVhZHNbbnZxLVx1MDAzZWRvbmVfaWR4XS5pZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmM6ODY1Olx0XHRcdHZxLVx1MDAzZWhlYWRzW252cS1cdTAwM2Vkb25lX2lkeF0ubGVuID0gMDtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtODY2LVx0XHR9XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz04NzM9c3RhdGljIHZvaWQgaGFuZGxlX3R4X3plcm9jb3B5KHN0cnVjdCB2aG9zdF9uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTkyNC1cdFx0XHR1YnVmID0gbnZxLVx1MDAzZXVidWZfaW5mbyAmIzQzOyBudnEtXHUwMDNldXBlbmRfaWR4O1xuZHJpdmVycy92aG9zdC9uZXQuYzo5MjU6XHRcdFx0dnEtXHUwMDNlaGVhZHNbbnZxLVx1MDAzZXVwZW5kX2lkeF0uaWQgPSBjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCk7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjkyNjpcdFx0XHR2cS1cdTAwM2VoZWFkc1tudnEtXHUwMDNldXBlbmRfaWR4XS5sZW4gPSBWSE9TVF9ETUFfSU5fUFJPR1JFU1M7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTkyNy1cdFx0XHR1YnVmLVx1MDAzZWN0eCA9IG52cS1cdTAwM2V1YnVmcztcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTk1NS1cdFx0XHRpZiAoemNvcHlfdXNlZCkge1xuZHJpdmVycy92aG9zdC9uZXQuYzo5NTY6XHRcdFx0XHRpZiAodnEtXHUwMDNlaGVhZHNbdWJ1Zi1cdTAwM2VkZXNjXS5sZW4gPT0gVkhPU1RfRE1BX0lOX1BST0dSRVNTKVxuZHJpdmVycy92aG9zdC9uZXQuYy05NTctXHRcdFx0XHRcdHZob3N0X25ldF91YnVmX3B1dCh1YnVmcyk7XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy05NjEtXHRcdFx0XHRlbHNlXG5kcml2ZXJzL3Zob3N0L25ldC5jOjk2MjpcdFx0XHRcdFx0dnEtXHUwMDNlaGVhZHNbdWJ1Zi1cdTAwM2VkZXNjXS5sZW4gPSBWSE9TVF9ETUFfRE9ORV9MRU47XG5kcml2ZXJzL3Zob3N0L25ldC5jLTk2My1cdFx0XHR9XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xMTQ5PXN0YXRpYyB2b2lkIGhhbmRsZV9yeChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMjA3LVx0XHR2aG9zdF9sZW4gPSBzb2NrX2xlbiAmIzQzOyB2aG9zdF9obGVuO1xuZHJpdmVycy92aG9zdC9uZXQuYzoxMjA4Olx0XHRoZWFkY291bnQgPSBnZXRfcnhfYnVmcyhudnEsIHZxLVx1MDAzZWhlYWRzICYjNDM7IGNvdW50LFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMjA5LVx0XHRcdFx0XHR2cS1cdTAwM2VuaGVhZHMgJiM0MzsgY291bnQsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTQ5Nz1zdGF0aWMgdm9pZCB2aG9zdF92cV9mcmVlX2lvdmVjcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNTAyLVx0dnEtXHUwMDNlbG9nID0gTlVMTDtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzo1MDM6XHRrZnJlZSh2cS1cdTAwM2VoZWFkcyk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NTA0Olx0dnEtXHUwMDNlaGVhZHMgPSBOVUxMO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTUwNS1cdGtmcmVlKHZxLVx1MDAzZW5oZWFkcyk7XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTUxMD1zdGF0aWMgbG9uZyB2aG9zdF9kZXZfYWxsb2NfaW92ZWNzKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNTE4LVx0XHR2cS1cdTAwM2Vsb2cgPSBrbWFsbG9jX29ianMoKnZxLVx1MDAzZWxvZywgZGV2LVx1MDAzZWlvdl9saW1pdCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NTE5Olx0XHR2cS1cdTAwM2VoZWFkcyA9IGttYWxsb2Nfb2JqcygqdnEtXHUwMDNlaGVhZHMsIGRldi1cdTAwM2Vpb3ZfbGltaXQpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTUyMC1cdFx0dnEtXHUwMDNlbmhlYWRzID0ga21hbGxvY19hcnJheShkZXYtXHUwMDNlaW92X2xpbWl0LCBzaXplb2YoKnZxLVx1MDAzZW5oZWFkcyksXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNTIxLVx0XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzo1MjI6XHRcdGlmICghdnEtXHUwMDNlaW5kaXJlY3QgfHwgIXZxLVx1MDAzZWxvZyB8fCAhdnEtXHUwMDNlaGVhZHMgfHwgIXZxLVx1MDAzZW5oZWFkcylcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy01MjMtXHRcdFx0Z290byBlcnJfbm9tZW07XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTU4MD12b2lkIHZob3N0X2Rldl9pbml0KHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNjEyLVx0XHR2cS1cdTAwM2VpbmRpcmVjdCA9IE5VTEw7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NjEzOlx0XHR2cS1cdTAwM2VoZWFkcyA9IE5VTEw7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNjE0LVx0XHR2cS1cdTAwM2VuaGVhZHMgPSBOVUxMO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0xMDY9c3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTExLVxuZHJpdmVycy92aG9zdC92c29jay5jOjExMjpcdHZob3N0X2FkZF91c2VkX24odnEsIHZxLVx1MDAzZWhlYWRzLCB2cS1cdTAwM2VuaGVhZHMsIHVzZWRfY291bnQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTExMy1cdHJldHVybiB0cnVlO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0xMTY9c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTExOS17XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTIwOlx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9IFx1MDAyNnZxLVx1MDAzZWhlYWRzW3VzZWRfY291bnRdO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEyMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB2aG9zdF9hZGRfdXNlZF9uIGFuZCB2aG9zdF92c29ja19hZGRfdXNlZCoqCgpPa2F5LCB0aW1lIHRvIHJlYWxseSBnZXQgaW50byB0aGUgd2VlZHMgb24gdGhlc2UgYHZob3N0YCBmdW5jdGlvbnMuIEkgd2FudCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGB2aG9zdF9hZGRfdXNlZF9uYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCB3b3JrIGludGVybmFsbHkuIE15IGFwcHJvYWNoIGlzIHRvIGxvb2sgYXQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGNsb3NlbHksIGFuZCBJJiMzOTtsbCBzdGFydCBieSByZWFkaW5nIHRoZSBjb2RlIGFyb3VuZCBlYWNoIGZ1bmN0aW9uLiBGb3IgYHZob3N0X2FkZF91c2VkX25gLCBJJiMzOTtsbCBiZSBsb29raW5nIGluIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgLCBmb2N1c2luZyBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCBpdHMgY29udGV4dC4gVGhlbiwgSSYjMzk7bGwgc3dpdGNoIG92ZXIgdG8gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AgdG8gc2VlIGhvdyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uLCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCBpcyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGRpZmZlcnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgdGhlaXIgaW50ZXJhY3Rpb24gYW5kIHVzYWdlIHdpdGhpbiB0aGUgb3ZlcmFsbCBgdmhvc3RgIGZyYW1ld29yay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzAwMDpcdHtcbjMwMDE6XHRcdHZxLVx1MDAzZW5leHRfYXZhaWxfaGVhZCAtPSBuZGVzYztcbjMwMDI6XHRcdHZxLVx1MDAzZWxhc3RfYXZhaWxfaWR4IC09IG5idWZzO1xuMzAwMzpcdH1cbjMwMDQ6XHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kaXNjYXJkX3ZxX2Rlc2MpO1xuMzAwNTpcdFxuMzAwNjpcdC8qIEFmdGVyIHdlJiMzOTt2ZSB1c2VkIG9uZSBvZiB0aGVpciBidWZmZXJzLCB3ZSB0ZWxsIHRoZW0gYWJvdXQgaXQuICBXZSYjMzk7bGwgdGhlblxuMzAwNzpcdCAqIHdhbnQgdG8gbm90aWZ5IHRoZSBndWVzdCwgdXNpbmcgZXZlbnRmZC4gKi9cbjMwMDg6XHRpbnQgdmhvc3RfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKVxuMzAwOTpcdHtcbjMwMTA6XHRcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gaGVhZHMgPSB7XG4zMDExOlx0XHRcdGNwdV90b192aG9zdDMyKHZxLCBoZWFkKSxcbjMwMTI6XHRcdFx0Y3B1X3RvX3Zob3N0MzIodnEsIGxlbilcbjMwMTM6XHRcdH07XG4zMDE0Olx0XHR1MTYgbmhlYWRzID0gMTtcbjMwMTU6XHRcbjMwMTY6XHRcdHJldHVybiB2aG9zdF9hZGRfdXNlZF9uKHZxLCBcdTAwMjZoZWFkcywgXHUwMDI2bmhlYWRzLCAxKTtcbjMwMTc6XHR9XG4zMDE4Olx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWQpO1xuMzAxOTpcdFxuMzAyMDpcdHN0YXRpYyBpbnQgX192aG9zdF9hZGRfdXNlZF9uKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuMzAyMTpcdFx0XHRcdCAgICBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbjMwMjI6XHRcdFx0XHQgICAgdW5zaWduZWQgY291bnQpXG4zMDIzOlx0e1xuMzAyNDpcdFx0dnJpbmdfdXNlZF9lbGVtX3QgX191c2VyICp1c2VkO1xuMzAyNTpcdFx0dTE2IG9sZCwgbmV3O1xuMzAyNjpcdFx0aW50IHN0YXJ0O1xuMzAyNzpcdFxuMzAyODpcdFx0c3RhcnQgPSB2cS1cdTAwM2VsYXN0X3VzZWRfaWR4IFx1MDAyNiAodnEtXHUwMDNlbnVtIC0gMSk7XG4zMDI5Olx0XHR1c2VkID0gdnEtXHUwMDNldXNlZC1cdTAwM2VyaW5nICYjNDM7IHN0YXJ0O1xuMzAzMDpcdFx0aWYgKHZob3N0X3B1dF91c2VkKHZxLCBoZWFkcywgc3RhcnQsIGNvdW50KSkge1xuMzAzMTpcdFx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhaWxlZCB0byB3cml0ZSB1c2VkXCYjMzQ7KTtcbjMwMzI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMDMzOlx0XHR9XG4zMDM0Olx0XHRpZiAodW5saWtlbHkodnEtXHUwMDNlbG9nX3VzZWQpKSB7XG4zMDM1Olx0XHRcdC8qIE1ha2Ugc3VyZSBkYXRhIGlzIHNlZW4gYmVmb3JlIGxvZy4gKi9cbjMwMzY6XHRcdFx0c21wX3dtYigpO1xuMzAzNzpcdFx0XHQvKiBMb2cgdXNlZCByaW5nIGVudHJ5IHdyaXRlLiAqL1xuMzAzODpcdFx0XHRsb2dfdXNlZCh2cSwgKCh2b2lkIF9fdXNlciAqKXVzZWQgLSAodm9pZCBfX3VzZXIgKil2cS1cdTAwM2V1c2VkKSxcbjMwMzk6XHRcdFx0XHQgY291bnQgKiBzaXplb2YgKnVzZWQpO1xuMzA0MDpcdFx0fVxuMzA0MTpcdFx0b2xkID0gdnEtXHUwMDNlbGFzdF91c2VkX2lkeDtcbjMwNDI6XHRcdG5ldyA9ICh2cS1cdTAwM2VsYXN0X3VzZWRfaWR4ICYjNDM7PSBjb3VudCk7XG4zMDQzOlx0XHQvKiBJZiB0aGUgZHJpdmVyIG5ldmVyIGJvdGhlcnMgdG8gc2lnbmFsIGluIGEgdmVyeSBsb25nIHdoaWxlLFxuMzA0NDpcdFx0ICogdXNlZCBpbmRleCBtaWdodCB3cmFwIGFyb3VuZC4gSWYgdGhhdCBoYXBwZW5zLCBpbnZhbGlkYXRlXG4zMDQ1Olx0XHQgKiBzaWduYWxsZWRfdXNlZCBpbmRleCB3ZSBzdG9yZWQuIFRPRE86IG1ha2Ugc3VyZSBkcml2ZXJcbjMwNDY6XHRcdCAqIHNpZ25hbHMgYXQgbGVhc3Qgb25jZSBpbiAyXjE2IGFuZCByZW1vdmUgdGhpcy4gKi9cbjMwNDc6XHRcdGlmICh1bmxpa2VseSgodTE2KShuZXcgLSB2cS1cdTAwM2VzaWduYWxsZWRfdXNlZCkgXHUwMDNjICh1MTYpKG5ldyAtIG9sZCkpKVxuMzA0ODpcdFx0XHR2cS1cdTAwM2VzaWduYWxsZWRfdXNlZF92YWxpZCA9IGZhbHNlO1xuMzA0OTpcdFx0cmV0dXJuIDA7XG4zMDUwOlx0fVxuMzA1MTpcdFxuMzA1MjpcdHN0YXRpYyBpbnQgdmhvc3RfYWRkX3VzZWRfbl9vb28oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4zMDUzOlx0XHRcdFx0XHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbjMwNTQ6XHRcdFx0XHRcdHVuc2lnbmVkIGNvdW50KVxuMzA1NTpcdHtcbjMwNTY6XHRcdGludCBzdGFydCwgbiwgcjtcbjMwNTc6XHRcbjMwNTg6XHRcdHN0YXJ0ID0gdnEtXHUwMDNlbGFzdF91c2VkX2lkeCBcdTAwMjYgKHZxLVx1MDAzZW51bSAtIDEpO1xuMzA1OTpcdFx0biA9IHZxLVx1MDAzZW51bSAtIHN0YXJ0O1xuMzA2MDpcdFx0aWYgKG4gXHUwMDNjIGNvdW50KSB7XG4zMDYxOlx0XHRcdHIgPSBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBuKTtcbjMwNjI6XHRcdFx0aWYgKHIgXHUwMDNjIDApXG4zMDYzOlx0XHRcdFx0cmV0dXJuIHI7XG4zMDY0Olx0XHRcdGhlYWRzICYjNDM7PSBuO1xuMzA2NTpcdFx0XHRjb3VudCAtPSBuO1xuMzA2NjpcdFx0fVxuMzA2NzpcdFx0cmV0dXJuIF9fdmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIGNvdW50KTtcbjMwNjg6XHR9XG4zMDY5Olx0XG4zMDcwOlx0c3RhdGljIGludCB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuMzA3MTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbjMwNzI6XHRcdFx0XHRcdCAgICAgY29uc3QgdTE2ICpuaGVhZHMsXG4zMDczOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGNvdW50KVxuMzA3NDpcdHtcbjMwNzU6XHRcdHZyaW5nX3VzZWRfZWxlbV90IF9fdXNlciAqdXNlZDtcbjMwNzY6XHRcdHUxNiBvbGQsIG5ldyA9IHZxLVx1MDAzZWxhc3RfdXNlZF9pZHg7XG4zMDc3Olx0XHRpbnQgc3RhcnQsIGk7XG4zMDc4Olx0XG4zMDc5Olx0XHRpZiAoIW5oZWFkcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkRpdmluZyBpbnRvIHZob3N0X2FkZF91c2VkX25faW5fb3JkZXIgYW5kIHZob3N0X2FkZF91c2VkX24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgcHJlY2lzZSByb2xlcyB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYHZob3N0X2FkZF91c2VkX25faW5fb3JkZXJgIGFuZCBgdmhvc3RfYWRkX3VzZWRfbmAgaW50ZXJhY3QuIEkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHRoZWlyIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLCBpZiBhbnkuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgYW55IHN1YnRsZSBkaWZmZXJlbmNlcywgYW5kIHdoaWNoIGNvbnRleHQgc2hvdWxkIGJlIHByZWZlcnJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwODA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMDgxOlx0XG4zMDgyOlx0XHRzdGFydCA9IHZxLVx1MDAzZWxhc3RfdXNlZF9pZHggXHUwMDI2ICh2cS1cdTAwM2VudW0gLSAxKTtcbjMwODM6XHRcdHVzZWQgPSB2cS1cdTAwM2V1c2VkLVx1MDAzZXJpbmcgJiM0Mzsgc3RhcnQ7XG4zMDg0Olx0XG4zMDg1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbjMwODY6XHRcdFx0aWYgKHZob3N0X3B1dF91c2VkKHZxLCBcdTAwMjZoZWFkc1tpXSwgc3RhcnQsIDEpKSB7XG4zMDg3Olx0XHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgdXNlZFwmIzM0Oyk7XG4zMDg4Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMDg5Olx0XHRcdH1cbjMwOTA6XHRcdFx0c3RhcnQgJiM0Mzs9IG5oZWFkc1tpXTtcbjMwOTE6XHRcdFx0bmV3ICYjNDM7PSBuaGVhZHNbaV07XG4zMDkyOlx0XHRcdGlmIChzdGFydCBcdTAwM2U9IHZxLVx1MDAzZW51bSlcbjMwOTM6XHRcdFx0XHRzdGFydCAtPSB2cS1cdTAwM2VudW07XG4zMDk0Olx0XHR9XG4zMDk1Olx0XG4zMDk2Olx0XHRpZiAodW5saWtlbHkodnEtXHUwMDNlbG9nX3VzZWQpKSB7XG4zMDk3Olx0XHRcdC8qIE1ha2Ugc3VyZSBkYXRhIGlzIHNlZW4gYmVmb3JlIGxvZy4gKi9cbjMwOTg6XHRcdFx0c21wX3dtYigpO1xuMzA5OTpcdFx0XHQvKiBMb2cgdXNlZCByaW5nIGVudHJ5IHdyaXRlLiAqL1xuMzEwMDpcdFx0XHRsb2dfdXNlZCh2cSwgKCh2b2lkIF9fdXNlciAqKXVzZWQgLSAodm9pZCBfX3VzZXIgKil2cS1cdTAwM2V1c2VkKSxcbjMxMDE6XHRcdFx0XHQgKHZxLVx1MDAzZW51bSAtIHN0YXJ0KSAqIHNpemVvZiAqdXNlZCk7XG4zMTAyOlx0XHRcdGlmIChzdGFydCAmIzQzOyBjb3VudCBcdTAwM2UgdnEtXHUwMDNlbnVtKVxuMzEwMzpcdFx0XHRcdGxvZ191c2VkKHZxLCAwLFxuMzEwNDpcdFx0XHRcdFx0IChzdGFydCAmIzQzOyBjb3VudCAtIHZxLVx1MDAzZW51bSkgKiBzaXplb2YgKnVzZWQpO1xuMzEwNTpcdFx0fVxuMzEwNjpcdFxuMzEwNzpcdFx0b2xkID0gdnEtXHUwMDNlbGFzdF91c2VkX2lkeDtcbjMxMDg6XHRcdHZxLVx1MDAzZWxhc3RfdXNlZF9pZHggPSBuZXc7XG4zMTA5Olx0XHQvKiBJZiB0aGUgZHJpdmVyIG5ldmVyIGJvdGhlcnMgdG8gc2lnbmFsIGluIGEgdmVyeSBsb25nIHdoaWxlLFxuMzExMDpcdFx0ICogdXNlZCBpbmRleCBtaWdodCB3cmFwIGFyb3VuZC4gSWYgdGhhdCBoYXBwZW5zLCBpbnZhbGlkYXRlXG4zMTExOlx0XHQgKiBzaWduYWxsZWRfdXNlZCBpbmRleCB3ZSBzdG9yZWQuIFRPRE86IG1ha2Ugc3VyZSBkcml2ZXJcbjMxMTI6XHRcdCAqIHNpZ25hbHMgYXQgbGVhc3Qgb25jZSBpbiAyXjE2IGFuZCByZW1vdmUgdGhpcy4gKi9cbjMxMTM6XHRcdGlmICh1bmxpa2VseSgodTE2KShuZXcgLSB2cS1cdTAwM2VzaWduYWxsZWRfdXNlZCkgXHUwMDNjICh1MTYpKG5ldyAtIG9sZCkpKVxuMzExNDpcdFx0XHR2cS1cdTAwM2VzaWduYWxsZWRfdXNlZF92YWxpZCA9IGZhbHNlO1xuMzExNTpcdFx0cmV0dXJuIDA7XG4zMTE2Olx0fVxuMzExNzpcdFxuMzExODpcdC8qIEFmdGVyIHdlJiMzOTt2ZSB1c2VkIG9uZSBvZiB0aGVpciBidWZmZXJzLCB3ZSB0ZWxsIHRoZW0gYWJvdXQgaXQuICBXZSYjMzk7bGwgdGhlblxuMzExOTpcdCAqIHdhbnQgdG8gbm90aWZ5IHRoZSBndWVzdCwgdXNpbmcgZXZlbnRmZC4gKi9cbjMxMjA6XHRpbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXG4zMTIxOlx0XHRcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KVxuMzEyMjpcdHtcbjMxMjM6XHRcdGJvb2wgaW5fb3JkZXIgPSB2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX0ZfSU5fT1JERVIpO1xuMzEyNDpcdFx0aW50IHI7XG4zMTI1Olx0XG4zMTI2Olx0XHRpZiAoIWluX29yZGVyIHx8ICFuaGVhZHMpXG4zMTI3Olx0XHRcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX29vbyh2cSwgaGVhZHMsIGNvdW50KTtcbjMxMjg6XHRcdGVsc2VcbjMxMjk6XHRcdFx0ciA9IHZob3N0X2FkZF91c2VkX25faW5fb3JkZXIodnEsIGhlYWRzLCBuaGVhZHMsIGNvdW50KTtcbjMxMzA6XHRcbjMxMzE6XHRcdGlmIChyIFx1MDAzYyAwKVxuMzEzMjpcdFx0XHRyZXR1cm4gcjtcbjMxMzM6XHRcbjMxMzQ6XHRcdC8qIE1ha2Ugc3VyZSBidWZmZXIgaXMgd3JpdHRlbiBiZWZvcmUgd2UgdXBkYXRlIGluZGV4LiAqL1xuMzEzNTpcdFx0c21wX3dtYigpO1xuMzEzNjpcdFx0aWYgKHZob3N0X3B1dF91c2VkX2lkeCh2cSkpIHtcbjMxMzc6XHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtGYWlsZWQgdG8gaW5jcmVtZW50IHVzZWQgaWR4XCYjMzQ7KTtcbjMxMzg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMTM5Olx0XHR9XG4zMTQwOlx0XHRpZiAodW5saWtlbHkodnEtXHUwMDNlbG9nX3VzZWQpKSB7XG4zMTQxOlx0XHRcdC8qIE1ha2Ugc3VyZSB1c2VkIGlkeCBpcyBzZWVuIGJlZm9yZSBsb2cuICovXG4zMTQyOlx0XHRcdHNtcF93bWIoKTtcbjMxNDM6XHRcdFx0LyogTG9nIHVzZWQgaW5kZXggdXBkYXRlLiAqL1xuMzE0NDpcdFx0XHRsb2dfdXNlZCh2cSwgb2Zmc2V0b2Yoc3RydWN0IHZyaW5nX3VzZWQsIGlkeCksXG4zMTQ1Olx0XHRcdFx0IHNpemVvZiB2cS1cdTAwM2V1c2VkLVx1MDAzZWlkeCk7XG4zMTQ2Olx0XHRcdGlmICh2cS1cdTAwM2Vsb2dfY3R4KVxuMzE0NzpcdFx0XHRcdGV2ZW50ZmRfc2lnbmFsKHZxLVx1MDAzZWxvZ19jdHgpO1xuMzE0ODpcdFx0fVxuMzE0OTpcdFx0cmV0dXJuIHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdnNvY2sgcGFja2V0cyBhcmUgYmVpbmcgc2VudC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZHJpdmVycy92aG9zdC92c29jay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgZnVuY3Rpb24uIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgcGFja2V0IHRyYW5zbWlzc2lvbiB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQgc2hvdWxkIHJlc2lkZS4gSSBleHBlY3QgdG8gZmluZCB0aGUgYWN0dWFsIG1lY2hhbmlzbSBmb3IgcHVzaGluZyB0aGUgZGF0YSBvbnRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgdGhlcmUuIEkmIzM5O20gbG9va2luZyBmb3IgZGV0YWlscyByZWdhcmRpbmcgaG93IHRoZSBwYWNrZXQgZGF0YSBpcyBjb25zdHJ1Y3RlZCAob3IgcmVmZXJlbmNlZCksIGFueSBidWZmZXIgbWFuYWdlbWVudCBpbnZvbHZlZCwgYW5kLCBjcnVjaWFsbHksIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIHZpcnRpbyBsYXllci4gSSBhbnRpY2lwYXRlIHRoZXJlJiMzOTtsbCBiZSBzb21lIGRhdGEgc3RydWN0dXJlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB2aG9zdCBzdHJ1Y3R1cmUgZm9yIHZzb2NrLCB0aGF0IGhvbGRzIHRoZSBwYWNrZXQgZGV0YWlscy4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBpbmNsdWRlcyBhbnkgcGFja2V0IHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGFzcGVjdHMgb3IgaWYgaXQgcmVsaWVzIG9uIG90aGVyIGNvbXBvbmVudHMgZm9yIHRoYXQgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBrZWVuIHRvIHNlZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYW55IHBvdGVudGlhbCBsb2NraW5nLCBhbmQgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBzZW5kIGZhaWx1cmVzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMTAxOlx0XHRmb3VuZCA9ICEhdmhvc3RfdnNvY2tfZ2V0KGNpZCwgbmV0KTtcbiAxMDI6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDEwMzpcdFx0cmV0dXJuIGZvdW5kO1xuIDEwNDpcdH1cbiAxMDU6XHRcbiAxMDY6XHRzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuIDEwNzpcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IHVzZWRfY291bnQpXG4gMTA4Olx0e1xuIDEwOTpcdFx0aWYgKCF1c2VkX2NvdW50KVxuIDExMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTExOlx0XG4gMTEyOlx0XHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cdTAwM2VoZWFkcywgdnEtXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcbiAxMTM6XHRcdHJldHVybiB0cnVlO1xuIDExNDpcdH1cbiAxMTU6XHRcbiAxMTY6XHRzdGF0aWMgdm9pZCB2aG9zdF92c29ja19hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbiAxMTc6XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCxcbiAxMTg6XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbilcbiAxMTk6XHR7XG4gMTIwOlx0XHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICp1c2VkID0gXHUwMDI2dnEtXHUwMDNlaGVhZHNbdXNlZF9jb3VudF07XG4gMTIxOlx0XG4gMTIyOlx0XHR1c2VkLVx1MDAzZWlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xuIDEyMzpcdFx0dXNlZC1cdTAwM2VsZW4gPSBjcHVfdG9fdmhvc3QzMih2cSwgbGVuKTtcbiAxMjQ6XHRcdHZxLVx1MDAzZW5oZWFkc1t1c2VkX2NvdW50XSA9IDE7XG4gMTI1Olx0fVxuIDEyNjpcdFxuIDEyNzpcdHN0YXRpYyB2b2lkXG4gMTI4Olx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gMTI5Olx0XHRcdFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuIDEzMDpcdHtcbiAxMzE6XHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR4X3ZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcbiAxMzI6XHRcdGludCBwa3RzID0gMCwgdG90YWxfbGVuID0gMDtcbiAxMzM6XHRcdHVuc2lnbmVkIGludCB1c2VkX2NvdW50ID0gMDtcbiAxMzQ6XHRcdHVuc2lnbmVkIGludCB1c2VkX2xpbWl0O1xuIDEzNTpcdFx0Ym9vbCBhZGRlZCA9IGZhbHNlO1xuIDEzNjpcdFx0Ym9vbCByZXN0YXJ0X3R4ID0gZmFsc2U7XG4gMTM3Olx0XG4gMTM4Olx0XHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiAxMzk6XHRcbiAxNDA6XHRcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxuIDE0MTpcdFx0XHRnb3RvIG91dDtcbiAxNDI6XHRcbiAxNDM6XHRcdGlmICghdnFfbWV0YV9wcmVmZXRjaCh2cSkpXG4gMTQ0Olx0XHRcdGdvdG8gb3V0O1xuIDE0NTpcdFxuIDE0NjpcdFx0LyogS2VlcCB0aGUgYmF0Y2ggd2l0aGluIHRoZSB1c2VkIHJpbmcgYW5kIHRoZSBzY3JhdGNoIGFycmF5cy4gKi9cbiAxNDc6XHRcdHVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVx1MDAzZW51bSwgdnEtXHUwMDNlZGV2LVx1MDAzZWlvdl9saW1pdCk7XG4gMTQ4Olx0XHRpZiAodW5saWtlbHkoIXVzZWRfbGltaXQpKVxuIDE0OTpcdFx0XHRnb3RvIG91dDtcbiAxNTA6XHRcbiAxNTE6XHRcdC8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UmIzM5O3JlIGFscmVhZHkgcHJvY2Vzc2luZyB0aGUgdmlydHF1ZXVlICovXG4gMTUyOlx0XHR2aG9zdF9kaXNhYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiAxNTM6XHRcbiAxNTQ6XHRcdGRvIHtcbiAxNTU6XHRcdFx0c3RydWN0IHZpcnRpb192c29ja19oZHIgKmhkcjtcbiAxNTY6XHRcdFx0c2l6ZV90IGlvdl9sZW4sIHBheWxvYWRfbGVuO1xuIDE1NzpcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgaW92X2l0ZXI7XG4gMTU4Olx0XHRcdHUzMiBmbGFnc190b19yZXN0b3JlID0gMDtcbiAxNTk6XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAxNjA6XHRcdFx0dW5zaWduZWQgb3V0LCBpbjtcbiAxNjE6XHRcdFx0c2l6ZV90IG5ieXRlcztcbiAxNjI6XHRcdFx0dTMyIG9mZnNldDtcbiAxNjM6XHRcdFx0aW50IGhlYWQ7XG4gMTY0Olx0XG4gMTY1Olx0XHRcdHNrYiA9IHZpcnRpb192c29ja19za2JfZGVxdWV1ZShcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF9xdWV1ZSk7XG4gMTY2Olx0XG4gMTY3Olx0XHRcdGlmICghc2tiKSB7XG4gMTY4Olx0XHRcdFx0dmhvc3RfZW5hYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiAxNjk6XHRcdFx0XHRicmVhaztcbiAxNzA6XHRcdFx0fVxuIDE3MTpcdFxuIDE3MjpcdFx0XHRoZWFkID0gdmhvc3RfZ2V0X3ZxX2Rlc2ModnEsIHZxLVx1MDAzZWlvdiwgQVJSQVlfU0laRSh2cS1cdTAwM2Vpb3YpLFxuIDE3MzpcdFx0XHRcdFx0XHQgXHUwMDI2b3V0LCBcdTAwMjZpbiwgTlVMTCwgTlVMTCk7XG4gMTc0Olx0XHRcdGlmIChoZWFkIFx1MDAzYyAwKSB7XG4gMTc1Olx0XHRcdFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV9oZWFkKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlLCBza2IpO1xuIDE3NjpcdFx0XHRcdGJyZWFrO1xuIDE3NzpcdFx0XHR9XG4gMTc4Olx0XG4gMTc5Olx0XHRcdGlmIChoZWFkID09IHZxLVx1MDAzZW51bSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY5NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgd2Fsa3Rocm91Z2gsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlIHNlZ21lbnQ6CgoqKkRpdmluZyBpbnRvIGB2c29jay5jYCDigJMgTGluZXMgMTgwLTMyMCoqCgpPa2F5LCB0aW1lIHRvIGdldCBiYWNrIHRvIGl0LiBJJiMzOTttIGZvY3VzaW5nIGluIG9uIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIG5vdywgc3BlY2lmaWNhbGx5IGJldHdlZW4gbGluZXMgMTgwIGFuZCAzMjAuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgdG8gY292ZXIgc29tZSBjcnVjaWFsIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0bywgd2VsbCwgc29tZXRoaW5nIHdpdGhpbiB0aGUgdnNvY2sgc3Vic3lzdGVtLiBCYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBpdCYjMzk7cyBwcm9iYWJseSBpbnZvbHZlZCB3aXRoIHZob3N0IGFuZCB2aXJ0aW8tdnNvY2suIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBwcm92aWRlIGRldGFpbHMgYWJvdXQgb25lIG9yIG1vcmUgb2Ygc2V2ZXJhbCBrZXkgYXJlYXM6IGRhdGEgdHJhbnNmZXJzLCByaW5nIGJ1ZmZlciBpbnRlcmFjdGlvbnMsIGNvbm5lY3Rpb24gc3RhdGUgbWFuYWdlbWVudCwgb3IgY29udHJvbCBwYXRoIHByb2Nlc3NpbmcuIEtub3dpbmcgdGhlIG92ZXJhbGwgY29udGV4dCBvZiB0aGUgY29kZSwgSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IHZpZ2lsYW50IGZvciBob3cgaXQgZGVhbHMgd2l0aCBkZXZpY2Ugb3BlcmF0aW9ucywgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBob3N0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBmaW5kISBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhcmVhcyB0aGF0IG1heSBiZW5lZml0IGZyb20gb3B0aW1pemF0aW9uLCBvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGFyZSBoYW5kbGVkIChvciwgdW5mb3J0dW5hdGVseSwgKm5vdCogaGFuZGxlZCkuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBhcmUgc29tZSBpbnRlcmVzdGluZyBjb21wbGV4aXRpZXMgdG8gdW5jb3ZlciBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0XHRcdHZpcnRpb192c29ja19za2JfcXVldWVfaGVhZChcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcbiAxODE6XHRcbiAxODI6XHRcdFx0XHQvKiBGbHVzaCBjb21wbGV0ZWQgYnVmZmVycyBiZWZvcmUgcmUtZW5hYmxpbmcgbm90aWZpY2F0aW9ucy4gKi9cbiAxODM6XHRcdFx0XHRpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHtcbiAxODQ6XHRcdFx0XHRcdGFkZGVkID0gdHJ1ZTtcbiAxODU6XHRcdFx0XHRcdHVzZWRfY291bnQgPSAwO1xuIDE4NjpcdFx0XHRcdH1cbiAxODc6XHRcbiAxODg6XHRcdFx0XHQvKiBXZSBjYW5ub3QgZmluaXNoIHlldCBpZiBtb3JlIGJ1ZmZlcnMgc251Y2sgaW4gd2hpbGVcbiAxODk6XHRcdFx0XHQgKiByZS1lbmFibGluZyBub3RpZnkuXG4gMTkwOlx0XHRcdFx0ICovXG4gMTkxOlx0XHRcdFx0aWYgKHVubGlrZWx5KHZob3N0X2VuYWJsZV9ub3RpZnkoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cSkpKSB7XG4gMTkyOlx0XHRcdFx0XHR2aG9zdF9kaXNhYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiAxOTM6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDE5NDpcdFx0XHRcdH1cbiAxOTU6XHRcdFx0XHRicmVhaztcbiAxOTY6XHRcdFx0fVxuIDE5NzpcdFxuIDE5ODpcdFx0XHRpZiAob3V0KSB7XG4gMTk5Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMjAwOlx0XHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtFeHBlY3RlZCAwIG91dHB1dCBidWZmZXJzLCBnb3QgJXVcXG5cJiMzNDssIG91dCk7XG4gMjAxOlx0XHRcdFx0YnJlYWs7XG4gMjAyOlx0XHRcdH1cbiAyMDM6XHRcbiAyMDQ6XHRcdFx0aW92X2xlbiA9IGlvdl9sZW5ndGgoXHUwMDI2dnEtXHUwMDNlaW92W291dF0sIGluKTtcbiAyMDU6XHRcdFx0aWYgKGlvdl9sZW4gXHUwMDNjIHNpemVvZigqaGRyKSkge1xuIDIwNjpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDIwNzpcdFx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7QnVmZmVyIGxlbiBbJXp1XSB0b28gc21hbGxcXG5cJiMzNDssIGlvdl9sZW4pO1xuIDIwODpcdFx0XHRcdGJyZWFrO1xuIDIwOTpcdFx0XHR9XG4gMjEwOlx0XG4gMjExOlx0XHRcdGlvdl9pdGVyX2luaXQoXHUwMDI2aW92X2l0ZXIsIElURVJfREVTVCwgXHUwMDI2dnEtXHUwMDNlaW92W291dF0sIGluLCBpb3ZfbGVuKTtcbiAyMTI6XHRcdFx0b2Zmc2V0ID0gVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldDtcbiAyMTM6XHRcdFx0cGF5bG9hZF9sZW4gPSBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0O1xuIDIxNDpcdFx0XHRoZHIgPSB2aXJ0aW9fdnNvY2tfaGRyKHNrYik7XG4gMjE1Olx0XG4gMjE2Olx0XHRcdC8qIElmIHRoZSBwYWNrZXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlXG4gMjE3Olx0XHRcdCAqIGJ1ZmZlciwgd2Ugc3BsaXQgaXQgdXNpbmcgbXVsdGlwbGUgYnVmZmVycy5cbiAyMTg6XHRcdFx0ICovXG4gMjE5Olx0XHRcdGlmIChwYXlsb2FkX2xlbiBcdTAwM2UgaW92X2xlbiAtIHNpemVvZigqaGRyKSkge1xuIDIyMDpcdFx0XHRcdHBheWxvYWRfbGVuID0gaW92X2xlbiAtIHNpemVvZigqaGRyKTtcbiAyMjE6XHRcbiAyMjI6XHRcdFx0XHQvKiBBcyB3ZSBhcmUgY29weWluZyBwaWVjZXMgb2YgbGFyZ2UgcGFja2V0JiMzOTtzIGJ1ZmZlciB0b1xuIDIyMzpcdFx0XHRcdCAqIHNtYWxsIHJ4IGJ1ZmZlcnMsIGhlYWRlcnMgb2YgcGFja2V0cyBpbiByeCBxdWV1ZSBhcmVcbiAyMjQ6XHRcdFx0XHQgKiBjcmVhdGVkIGR5bmFtaWNhbGx5IGFuZCBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBoZWFkZXJcbiAyMjU6XHRcdFx0XHQgKiBvZiBjdXJyZW50IHBhY2tldChleGNlcHQgbGVuZ3RoKS4gQnV0IGluIGNhc2Ugb2ZcbiAyMjY6XHRcdFx0XHQgKiBTT0NLX1NFUVBBQ0tFVCwgd2UgYWxzbyBtdXN0IGNsZWFyIG1lc3NhZ2UgZGVsaW1ldGVyXG4gMjI3Olx0XHRcdFx0ICogYml0IChWSVJUSU9fVlNPQ0tfU0VRX0VPTSkgYW5kIE1TR19FT1IgYml0XG4gMjI4Olx0XHRcdFx0ICogKFZJUlRJT19WU09DS19TRVFfRU9SKSBpZiBzZXQuIE90aGVyd2lzZSxcbiAyMjk6XHRcdFx0XHQgKiB0aGVyZSB3aWxsIGJlIHNlcXVlbmNlIG9mIHBhY2tldHMgd2l0aCB0aGVzZVxuIDIzMDpcdFx0XHRcdCAqIGJpdHMgc2V0LiBBZnRlciBpbml0aWFsaXplZCBoZWFkZXIgd2lsbCBiZSBjb3BpZWQgdG9cbiAyMzE6XHRcdFx0XHQgKiByeCBidWZmZXIsIHRoZXNlIHJlcXVpcmVkIGJpdHMgd2lsbCBiZSByZXN0b3JlZC5cbiAyMzI6XHRcdFx0XHQgKi9cbiAyMzM6XHRcdFx0XHRpZiAobGUzMl90b19jcHUoaGRyLVx1MDAzZWZsYWdzKSBcdTAwMjYgVklSVElPX1ZTT0NLX1NFUV9FT00pIHtcbiAyMzQ6XHRcdFx0XHRcdGhkci1cdTAwM2VmbGFncyBcdTAwMjY9IH5jcHVfdG9fbGUzMihWSVJUSU9fVlNPQ0tfU0VRX0VPTSk7XG4gMjM1Olx0XHRcdFx0XHRmbGFnc190b19yZXN0b3JlIHw9IFZJUlRJT19WU09DS19TRVFfRU9NO1xuIDIzNjpcdFxuIDIzNzpcdFx0XHRcdFx0aWYgKGxlMzJfdG9fY3B1KGhkci1cdTAwM2VmbGFncykgXHUwMDI2IFZJUlRJT19WU09DS19TRVFfRU9SKSB7XG4gMjM4Olx0XHRcdFx0XHRcdGhkci1cdTAwM2VmbGFncyBcdTAwMjY9IH5jcHVfdG9fbGUzMihWSVJUSU9fVlNPQ0tfU0VRX0VPUik7XG4gMjM5Olx0XHRcdFx0XHRcdGZsYWdzX3RvX3Jlc3RvcmUgfD0gVklSVElPX1ZTT0NLX1NFUV9FT1I7XG4gMjQwOlx0XHRcdFx0XHR9XG4gMjQxOlx0XHRcdFx0fVxuIDI0MjpcdFx0XHR9XG4gMjQzOlx0XG4gMjQ0Olx0XHRcdC8qIFNldCB0aGUgY29ycmVjdCBsZW5ndGggaW4gdGhlIGhlYWRlciAqL1xuIDI0NTpcdFx0XHRoZHItXHUwMDNlbGVuID0gY3B1X3RvX2xlMzIocGF5bG9hZF9sZW4pO1xuIDI0NjpcdFxuIDI0NzpcdFx0XHRuYnl0ZXMgPSBjb3B5X3RvX2l0ZXIoaGRyLCBzaXplb2YoKmhkciksIFx1MDAyNmlvdl9pdGVyKTtcbiAyNDg6XHRcdFx0aWYgKG5ieXRlcyAhPSBzaXplb2YoKmhkcikpIHtcbiAyNDk6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAyNTA6XHRcdFx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhdWx0ZWQgb24gY29weWluZyBwa3QgaGRyXFxuXCYjMzQ7KTtcbiAyNTE6XHRcdFx0XHRicmVhaztcbiAyNTI6XHRcdFx0fVxuIDI1MzpcdFxuIDI1NDpcdFx0XHRpZiAoc2tiX2NvcHlfZGF0YWdyYW1faXRlcihza2IsXG4gMjU1Olx0XHRcdFx0XHRcdCAgIG9mZnNldCxcbiAyNTY6XHRcdFx0XHRcdFx0ICAgXHUwMDI2aW92X2l0ZXIsXG4gMjU3Olx0XHRcdFx0XHRcdCAgIHBheWxvYWRfbGVuKSkge1xuIDI1ODpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDI1OTpcdFx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmF1bHRlZCBvbiBjb3B5aW5nIHBrdCBidWZcXG5cJiMzNDspO1xuIDI2MDpcdFx0XHRcdGJyZWFrO1xuIDI2MTpcdFx0XHR9XG4gMjYyOlx0XG4gMjYzOlx0XHRcdC8qIERlbGl2ZXIgdG8gbW9uaXRvcmluZyBkZXZpY2VzIGFsbCBwYWNrZXRzIHRoYXQgd2VcbiAyNjQ6XHRcdFx0ICogd2lsbCB0cmFuc21pdC5cbiAyNjU6XHRcdFx0ICovXG4gMjY2Olx0XHRcdHZpcnRpb190cmFuc3BvcnRfZGVsaXZlcl90YXBfcGt0KHNrYik7XG4gMjY3Olx0XG4gMjY4Olx0XHRcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCB1c2VkX2NvdW50LCBoZWFkLFxuIDI2OTpcdFx0XHRcdFx0ICAgICBzaXplb2YoKmhkcikgJiM0MzsgcGF5bG9hZF9sZW4pO1xuIDI3MDpcdFx0XHR1c2VkX2NvdW50JiM0MzsmIzQzOztcbiAyNzE6XHRcdFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdCkge1xuIDI3MjpcdFx0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xuIDI3MzpcdFx0XHRcdHVzZWRfY291bnQgPSAwO1xuIDI3NDpcdFx0XHR9XG4gMjc1Olx0XG4gMjc2Olx0XHRcdFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgJiM0Mzs9IHBheWxvYWRfbGVuO1xuIDI3NzpcdFx0XHR0b3RhbF9sZW4gJiM0Mzs9IHBheWxvYWRfbGVuO1xuIDI3ODpcdFxuIDI3OTpcdFx0XHQvKiBJZiB3ZSBkaWRuJiMzOTt0IHNlbmQgYWxsIHRoZSBwYXlsb2FkIHdlIGNhbiByZXF1ZXVlIHRoZSBwYWNrZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHZzb2NrLmM6IExpbmUgQ2hlY2sqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiBsaW5lcyAyODAgdG8gMzIwLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGlzIHNlY3Rpb24gb2YgY29kZT8gSXMgaXQgcmVsYXRlZCB0byBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGRhdGEgdHJhbnNmZXIsIGVycm9yIGhhbmRsaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gR2l2ZW4gdGhlIG1vZHVsZSwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB3ZSBhcmUgZGVhbGluZyB3aXRoIHRoZSB2aG9zdC12c29jayBzZXR1cCwgYnV0IHdpdGhvdXQgbW9yZSBjb250ZXh0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGlzIHVua25vd24uCgpJJiMzOTttIHByb2JhYmx5IGFmdGVyIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGEgc3VidGxlIGJ1Zywgb3IgYW4gYXJlYSBmb3Igb3B0aW1pemF0aW9uLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zLCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIGFuZCBhbnkgcG90ZW50aWFsbHkgY29tcGxleCBsb2dpYyB3aXRoaW4gdGhpcyByYW5nZS4gTWF5YmUgdGhlcmUmIzM5O3MgYSBsb2NrIGNvbnRlbnRpb24gaXNzdWUsIGFuIGluZWZmaWNpZW50IG1lbW9yeSBhbGxvY2F0aW9uLCBvciBhIHJhY2UgY29uZGl0aW9uIGx1cmtpbmcgd2l0aGluIHRob3NlIGxpbmVzLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGludGVyZXN0aW5nIGludGVyYWN0aW9uIHdpdGggdGhlIHZpcnRpbyBxdWV1ZXMgb3IgdGhlIGd1ZXN0LXNpZGUgdnNvY2sgZHJpdmVyIHRoYXQmIzM5O3Mgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiBhbnkgZnVuY3Rpb24gY2FsbHMsIGNvbW1lbnRzIChpZiBhbnkhKSwgYW5kIHZhcmlhYmxlIG5hbWVzLiBJIG5lZWQgdG8gcmVmcmVzaCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgdnNvY2sgZm9yIHRoaXMgbW9kdWxlIGFuZCBpZGVudGlmeSB3aGVyZSB0aGlzIGNvZGUgbGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFx0XHQgKiB0byBzZW5kIGl0IHdpdGggdGhlIG5leHQgYXZhaWxhYmxlIGJ1ZmZlci5cbiAyODE6XHRcdFx0ICovXG4gMjgyOlx0XHRcdGlmIChWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktXHUwMDNlb2Zmc2V0IFx1MDAzYyBza2ItXHUwMDNlbGVuKSB7XG4gMjgzOlx0XHRcdFx0aGRyLVx1MDAzZWZsYWdzIHw9IGNwdV90b19sZTMyKGZsYWdzX3RvX3Jlc3RvcmUpO1xuIDI4NDpcdFxuIDI4NTpcdFx0XHRcdC8qIFdlIGFyZSBxdWV1ZWluZyB0aGUgc2FtZSBza2IgdG8gaGFuZGxlXG4gMjg2Olx0XHRcdFx0ICogdGhlIHJlbWFpbmluZyBieXRlcywgYW5kIHdlIHdhbnQgdG8gZGVsaXZlciBpdFxuIDI4NzpcdFx0XHRcdCAqIHRvIG1vbml0b3JpbmcgZGV2aWNlcyBpbiB0aGUgbmV4dCBpdGVyYXRpb24uXG4gMjg4Olx0XHRcdFx0ICovXG4gMjg5Olx0XHRcdFx0dmlydGlvX3Zzb2NrX3NrYl9jbGVhcl90YXBfZGVsaXZlcmVkKHNrYik7XG4gMjkwOlx0XHRcdFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV9oZWFkKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlLCBza2IpO1xuIDI5MTpcdFx0XHR9IGVsc2Uge1xuIDI5MjpcdFx0XHRcdGlmICh2aXJ0aW9fdnNvY2tfc2tiX3JlcGx5KHNrYikpIHtcbiAyOTM6XHRcdFx0XHRcdGludCB2YWw7XG4gMjk0Olx0XG4gMjk1Olx0XHRcdFx0XHR2YWwgPSBhdG9taWNfZGVjX3JldHVybihcdTAwMjZ2c29jay1cdTAwM2VxdWV1ZWRfcmVwbGllcyk7XG4gMjk2Olx0XG4gMjk3Olx0XHRcdFx0XHQvKiBEbyB3ZSBoYXZlIHJlc291cmNlcyB0byByZXN1bWUgdHhcbiAyOTg6XHRcdFx0XHRcdCAqIHByb2Nlc3Npbmc/XG4gMjk5Olx0XHRcdFx0XHQgKi9cbiAzMDA6XHRcdFx0XHRcdGlmICh2YWwgJiM0MzsgMSA9PSB0eF92cS1cdTAwM2VudW0pXG4gMzAxOlx0XHRcdFx0XHRcdHJlc3RhcnRfdHggPSB0cnVlO1xuIDMwMjpcdFx0XHRcdH1cbiAzMDM6XHRcbiAzMDQ6XHRcdFx0XHR2aXJ0aW9fdHJhbnNwb3J0X2NvbnN1bWVfc2tiX3NlbnQoc2tiLCB0cnVlKTtcbiAzMDU6XHRcdFx0fVxuIDMwNjpcdFx0fSB3aGlsZShsaWtlbHkoIXZob3N0X2V4Y2VlZHNfd2VpZ2h0KHZxLCAmIzQzOyYjNDM7cGt0cywgdG90YWxfbGVuKSkpO1xuIDMwNzpcdFxuIDMwODpcdFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCk7XG4gMzA5Olx0XG4gMzEwOlx0XHRpZiAoYWRkZWQpXG4gMzExOlx0XHRcdHZob3N0X3NpZ25hbChcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiAzMTI6XHRcbiAzMTM6XHRvdXQ6XG4gMzE0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIDMxNTpcdFxuIDMxNjpcdFx0aWYgKHJlc3RhcnRfdHgpXG4gMzE3Olx0XHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2dHhfdnEtXHUwMDNlcG9sbCk7XG4gMzE4Olx0fVxuIDMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU3NwoJCQkJCQkJb3V0cHV0OiAzMTEKCQkJCQkJCXRob3VnaHRzOiAxMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFuYWx5c2lzOiB2aG9zdC12c29jayBQYXRjaCBSZXZpZXcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyB2aG9zdC12c29jayBwYXRjaCBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgS01TQU4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IHRyYWNlIHRoZSBkYXRhIGZsb3cgYW5kIGluaXRpYWxpemF0aW9uIHRvIGNvbmZpZGVudGx5IHJ1bGUgb3V0IGFueSBLTVNBTi1yZWxhdGVkIGNvbmNlcm5zLgoKSSBzZWUgbmV3IGZ1bmN0aW9ucyBiZWluZyBhZGRlZDogYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIGFuZCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLiBUaGUgcHVycG9zZSBpcyBjbGVhcmx5IHRvIG1hbmFnZSB0aGUgYHVzZWRgIHJpbmcsIGFjY3VtdWxhdGluZyBlbnRyaWVzIChkZXNjcmlwdG9yIElEcyBhbmQgbGVuZ3RocykgYW5kIHRoZW4gd3JpdGluZyB0aGVtIG91dCB0byB0aGUgZ3Vlc3QuIFRoZSBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBmdW5jdGlvbiBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBkYXRhIHRyYW5zbWlzc2lvbiBsb2dpYywgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLgoKTG9va2luZyBjbG9zZWx5IGF0IGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLCBJJiMzOTttIHRyYWNraW5nIHRoZSBgdXNlZF9jb3VudGAgdmFyaWFibGUuIEl0JiMzOTtzIGluY3JlbWVudGVkIGZvciBlYWNoIHBhY2tldCwgYW5kIHVzZWQgdG8gaW5kZXggaW50byBgdnEtJmd0O2hlYWRzYCAoYW4gYXJyYXkgb2YgYHZyaW5nX3VzZWRfZWxlbWAgc3RydWN0dXJlcykgYW5kIGB2cS0mZ3Q7bmhlYWRzYCAoYW4gYXJyYXkgb2YgZmxhZ3MpLiAgQ3J1Y2lhbGx5LCBJIGNvbmZpcm0gdGhhdCBlYWNoIGVsZW1lbnQgb2YgYHZxLSZndDtoZWFkc2AgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgaWRgIGFuZCBgbGVuYCB2YWx1ZXMgdmlhIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYmVmb3JlIHRoZSBgdXNlZF9jb3VudGAgaXMgaW5jcmVtZW50ZWQuICBUaGUgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIGZ1bmN0aW9uIGlzIHRoZW4gdHJpZ2dlcmVkIGVpdGhlciB3aGVuIGEgbGltaXQgaXMgcmVhY2hlZCBvciBhdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIHRoYXQgd3JpdGVzIHRoZSBhY2N1bXVsYXRlZCBlbnRyaWVzIG91dCB0byB0aGUgZ3Vlc3QmIzM5O3MgdXNlZCByaW5nLgoKTm93LCB0aGUgcG90ZW50aWFsIEtNU0FOIHBpdGZhbGxzLiAgV2UgbmVlZCB0byBzY3J1dGluaXplIGhvdyBhbmQgd2hlcmUgdGhlIGd1ZXN0IGNhbiBwb3RlbnRpYWxseSBvYnNlcnZlIHRoZSBkYXRhIHdpdGhpbiB0aGVzZSBzdHJ1Y3R1cmVzLiAgSSBpZGVudGlmeSB0aGF0IGB2cS0mZ3Q7aGVhZHNgIGlzIHVsdGltYXRlbHkgd3JpdHRlbiB0byB1c2Vyc3BhY2UgKHRoZSBndWVzdCYjMzk7cyBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgLiBCdXQsIGJlY2F1c2Ugb2YgdGhlIHN0cmljdCBpbml0aWFsaXphdGlvbiwgdGhlIHVzZXIgc3BhY2UgbWVtb3J5IGlzIGFsd2F5cyB3cml0dGVuIHdpdGggaW5pdGlhbGl6ZWQgZGF0YS4KCkkmIzM5O20gZm9jdXNlZCBvbiB0aGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIHdoaWNoIGlzIHVzZWQgZm9yIHRoZSBgaGVhZHNgIGFycmF5LiBJdCBpcyB0aGUgY3J1Y2lhbCBzdHJ1Y3QgZm9yIHRoZSB3cml0ZSB0byB0aGUgZ3Vlc3QmIzM5O3MgbWVtb3J5LiAgSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgc3RydWN0dXJlOiB0d28gMzItYml0IGludGVnZXJzLCBgaWRgIGFuZCBgbGVuYCwgd2l0aCBubyBwYWRkaW5nLiBUaGUgY29kZSBleHBsaWNpdGx5IGFzc2lnbnMgdmFsdWVzIHRvIGJvdGggYGlkYCBhbmQgYGxlbmAgYmVmb3JlIGFueSBwb3RlbnRpYWwgdXNlci1zcGFjZSBleHBvc3VyZS4gVGhlIGB2cS0mZ3Q7bmhlYWRzYCBhcnJheSBpcyBhIHNpbXBsZSBjb3VudGVyIGFycmF5IHdoaWNoIHRyYWNrcyBpZiBhIGhlYWQgZWxlbWVudCBoYXMgYmVlbiBwb3B1bGF0ZWQsIHNvIHRoaXMgc2hvdWxkIGFsc28gYmUgc2FmZWx5IGluaXRpYWxpemVkLgoKV2UmIzM5O3JlIGV4cGxpY2l0bHkgaW5pdGlhbGl6aW5nIGV2ZXJ5dGhpbmcuIFRoZSBjb2RlIGVuc3VyZXMgYm91bmRzIGNoZWNrcyBhbmQgbGltaXRzIG9uIGB1c2VkX2NvdW50YCB2aWEgYHVzZWRfbGltaXRgLiBJJiMzOTttIGNoZWNraW5nIGZvciBjb25kaXRpb25hbCBicmFuY2hlcyBkZXBlbmRpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlIGFyZW4mIzM5O3QgYW55LiBJJiMzOTttIGxvb2tpbmcgZm9yIGFsbG9jYXRpb25zIG9yIGNvcGllcyBvZiBzdHJ1Y3R1cmVzIHdoZXJlIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGNvcGllZCwgYnV0IEkgZG8gbm90IHNlZSBhbnkuIFRoZXJlJiMzOTtzIG5vdGhpbmcgYmVpbmcgY29waWVkIG91dCB0byB1c2VyIHNwYWNlIHRoYXQmIzM5O3MgcGFydGlhbGx5IGluaXRpYWxpemVkLgoKU28sIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhOgoKMS4gICoqU3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmc6KiogIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBoYXMgbm8gcGFkZGluZyBhbmQgdGhlIGBpZGAgYW5kIGBsZW5gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkICpiZWZvcmUqIHRoZSBkYXRhIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiAgTm8gaXNzdWVzIGhlcmUuCgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBOb3BlLiBFdmVyeXRoaW5nIGlzIGV4cGxpY2l0LgoKMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHJlYWQgbGF0ZXI6KiogIE5vdCBBcHBsaWNhYmxlLiBFdmVyeXRoaW5nIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuCgo0LiAgKipCb3VuZHMgY2hlY2tzLCBldGMuLCB0aGF0IG1pZ2h0IGxlYWQgdG8gYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqIE5vdCBBcHBsaWNhYmxlLiBUaGUgY29kZSB1c2VzIGB1c2VkX2xpbWl0YCB0byBwcmV2ZW50IGV4Y2VlZGluZyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXlzLCBhbmQgYHVzZWRfY291bnRgIGlzIHN0cmljdGx5IGluY3JlbWVudGVkLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgKm5vdCogYXBwZWFyIHRvIGludHJvZHVjZSBLTVNBTiB2dWxuZXJhYmlsaXRpZXMuIFRoZSBwb3RlbnRpYWwgcmlza3MgaGVyZSBhcmUgaW4gYm91bmRzIG92ZXJmbG93ICh3aGljaCBLQVNBTiB3b3VsZCBjYXRjaCkgb3IgaW4gbG9naWMgZXJyb3JzIChyYWNlcywgbWlzc2VkIG5vdGlmaWNhdGlvbnMsIHZpcnRpbyBwcm90b2NvbCBpc3N1ZXMpLCBidXQgbm9uZSBvZiB0aG9zZSBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiYjMzk7cyBwdXJwb3NlIGlzIHRvIGNhdGNoIHRoZSBsYXR0ZXIuIFdlIGhhdmUgc2FmZSBpbml0aWFsaXplZCBkYXRhLCBzbyB0aGUgcmlzayBpcyBuaWwuIEkmIzM5O20gY29tZm9ydGFibGUgc2F5aW5nIHRoYXQgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAgaGVyZSwgYW5kIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoYXQsIGFsb25nIHdpdGggYSBjbGVhciwgZGV0YWlsZWQgZXhwbGFuYXRpb24gZGlzdGluZ3Vpc2hpbmcgS01TQU4gZnJvbSBLQVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBiYXRjaGluZyBvZiB1c2VkIHJpbmcgdXBkYXRlcyBpbiB2aG9zdC12c29jayAodmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KSBieSBhY2N1bXVsYXRpbmcgdXNlZCBkZXNjcmlwdG9ycyBpbiB0aGUgcHJlYWxsb2NhdGVkIHZpcnRxdWV1ZSBhcnJheXMgKHZxLVx1MDAzZWhlYWRzIGFuZCB2cS1cdTAwM2VuaGVhZHMpIGFuZCBmbHVzaGluZyB0aGVtIHZpYSB2aG9zdF9hZGRfdXNlZF9uKCkgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkKCkgY2FsbHMuXG5cbi0gS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbiAgMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWs6IEVhY2ggdXNlZCBkZXNjcmlwdG9yIGVsZW1lbnQgaW4gdnEtXHUwMDNlaGVhZHMgKHN0cnVjdCB2cmluZ191c2VkX2VsZW0pIGNvbnRhaW5zIG9ubHkgdHdvIDMyLWJpdCBmaWVsZHMgKGlkIGFuZCBsZW4pIHdpdGhvdXQgYW55IHN0cnVjdHVyZSBwYWRkaW5nLiBCb3RoIGZpZWxkcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdnEtXHUwMDNlbmhlYWRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHZob3N0X3Zzb2NrX2FkZF91c2VkKCkgZm9yIGVhY2ggaW5kZXggYmVmb3JlIGJlaW5nIGZsdXNoZWQgYW5kIGNvcGllZCB0byB0aGUgZ3Vlc3QmIzM5O3MgdXNlZCByaW5nIHZpYSB2aG9zdF9wdXRfdXNlZCgpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyByZWFkIG9yIGxlYWtlZC5cbiAgMi4gTWVtb3J5IEJvdW5kcyBhbmQgSW50ZWdyaXR5OiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gYXJyYXkgaW5kZXhpbmcsIGJvdW5kcyBsaW1pdHMgKHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQpLCBvciB2aXJ0cXVldWUgc3luY2hyb25pemF0aW9uIGxvZ2ljLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiAoZm9yIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzZXMpLCBhbmQgdmlydGlvIHByb3RvY29sIGNoZWNrcy5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBiYXRjaGluZyBvZiB1c2VkIHJpbmcgdXBkYXRlcyBpbiB2aG9zdC12c29jayAodmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KSBieSBhY2N1bXVsYXRpbmcgdXNlZCBkZXNjcmlwdG9ycyBpbiB0aGUgcHJlYWxsb2NhdGVkIHZpcnRxdWV1ZSBhcnJheXMgKHZxLVx1MDAzZWhlYWRzIGFuZCB2cS1cdTAwM2VuaGVhZHMpIGFuZCBmbHVzaGluZyB0aGVtIHZpYSB2aG9zdF9hZGRfdXNlZF9uKCkgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkKCkgY2FsbHMuXG5cbi0gS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbiAgMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWs6IEVhY2ggdXNlZCBkZXNjcmlwdG9yIGVsZW1lbnQgaW4gdnEtXHUwMDNlaGVhZHMgKHN0cnVjdCB2cmluZ191c2VkX2VsZW0pIGNvbnRhaW5zIG9ubHkgdHdvIDMyLWJpdCBmaWVsZHMgKGlkIGFuZCBsZW4pIHdpdGhvdXQgYW55IHN0cnVjdHVyZSBwYWRkaW5nLiBCb3RoIGZpZWxkcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdnEtXHUwMDNlbmhlYWRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHZob3N0X3Zzb2NrX2FkZF91c2VkKCkgZm9yIGVhY2ggaW5kZXggYmVmb3JlIGJlaW5nIGZsdXNoZWQgYW5kIGNvcGllZCB0byB0aGUgZ3Vlc3QmIzM5O3MgdXNlZCByaW5nIHZpYSB2aG9zdF9wdXRfdXNlZCgpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyByZWFkIG9yIGxlYWtlZC5cbiAgMi4gTWVtb3J5IEJvdW5kcyBhbmQgSW50ZWdyaXR5OiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gYXJyYXkgaW5kZXhpbmcsIGJvdW5kcyBsaW1pdHMgKHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQpLCBvciB2aXJ0cXVldWUgc3luY2hyb25pemF0aW9uIGxvZ2ljLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiAoZm9yIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzZXMpLCBhbmQgdmlydGlvIHByb3RvY29sIGNoZWNrcy5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxNzozMi4yOTgxMzcxOTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc1NTQ0MjE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIkVWRU5URkRcIixcbiAgICBcIlZIT1NUXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF92c29ja19mbHVzaF91c2VkXCIsXG4gICAgXCJ2aG9zdF92c29ja19hZGRfdXNlZFwiLFxuICAgIFwidmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29ya1wiLFxuICAgIFwidmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgYmF0Y2hpbmcgb2YgdXNlZCByaW5nIHVwZGF0ZXMgaW4gdmhvc3QtdnNvY2sgKHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCkgYnkgYWNjdW11bGF0aW5nIHVzZWQgZGVzY3JpcHRvcnMgaW4gdGhlIHByZWFsbG9jYXRlZCB2aXJ0cXVldWUgYXJyYXlzICh2cS1cXHUwMDNlaGVhZHMgYW5kIHZxLVxcdTAwM2VuaGVhZHMpIGFuZCBmbHVzaGluZyB0aGVtIHZpYSB2aG9zdF9hZGRfdXNlZF9uKCkgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkKCkgY2FsbHMuXFxuXFxuLSBLTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxcbiAgMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWs6IEVhY2ggdXNlZCBkZXNjcmlwdG9yIGVsZW1lbnQgaW4gdnEtXFx1MDAzZWhlYWRzIChzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtKSBjb250YWlucyBvbmx5IHR3byAzMi1iaXQgZmllbGRzIChpZCBhbmQgbGVuKSB3aXRob3V0IGFueSBzdHJ1Y3R1cmUgcGFkZGluZy4gQm90aCBmaWVsZHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHZxLVxcdTAwM2VuaGVhZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gdmhvc3RfdnNvY2tfYWRkX3VzZWQoKSBmb3IgZWFjaCBpbmRleCBiZWZvcmUgYmVpbmcgZmx1c2hlZCBhbmQgY29waWVkIHRvIHRoZSBndWVzdCdzIHVzZWQgcmluZyB2aWEgdmhvc3RfcHV0X3VzZWQoKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgcmVhZCBvciBsZWFrZWQuXFxuICAyLiBNZW1vcnkgQm91bmRzIGFuZCBJbnRlZ3JpdHk6IEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byBhcnJheSBpbmRleGluZywgYm91bmRzIGxpbWl0cyAodnEtXFx1MDAzZWRldi1cXHUwMDNlaW92X2xpbWl0KSwgb3IgdmlydHF1ZXVlIHN5bmNocm9uaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4gKGZvciBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKSwgYW5kIHZpcnRpbyBwcm90b2NvbCBjaGVja3MuXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgZGVzY3JpcHRvciBiYXRjaGluZyBpbiB0aGUgdmhvc3QtdnNvY2sgZHJpdmVyIChkcml2ZXJzL3Zob3N0L3Zzb2NrLmMpIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLCByZXBsYWNpbmcgaW5kaXZpZHVhbCB2aG9zdF9hZGRfdXNlZCBjYWxscyB3aXRoIGJhdGNoZWQgdmhvc3RfYWRkX3VzZWRfbiBjYWxscy4gSXQgaW50cm9kdWNlcyBuZXcgYnVmZmVyIGFjY3VtdWxhdGlvbiwgYXJyYXkgaW5kZXhpbmcsIGFuZCBiYXRjaCBsaW1pdC9mbHVzaGluZyBsb2dpYyBpbiByZWFjaGFibGUga2VybmVsIGNvZGUgYWNjZXNzaWJsZSB2aWEgL2Rldi92aG9zdC12c29jayBhbmQgQUZfVlNPQ0sgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTc6MzIuMjk4MTQzNTI1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc3NDAwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NmZkMDdlOGZkNzY1YTkzMTMyYjNmODhjOWIzNWQ3NjEzNTllZDc1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTk6MTc6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jXFxuaW5kZXggOWFhYWI2YmI4MDYxYy4uN2ExM2FiZTczMzQ1MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcXG5AQCAtMTAzLDEyICsxMDMsMzUgQEAgc3RhdGljIGJvb2wgdmhvc3RfdHJhbnNwb3J0X2hhc19yZW1vdGVfY2lkKHN0cnVjdCB2c29ja19zb2NrICp2c2ssIHUzMiBjaWQpXFxuIFxcdHJldHVybiBmb3VuZDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHVzZWRfY291bnQpXFxuK3tcXG4rXFx0aWYgKCF1c2VkX2NvdW50KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cXHUwMDNlaGVhZHMsIHZxLVxcdTAwM2VuaGVhZHMsIHVzZWRfY291bnQpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuK1xcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCxcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBoZWFkLCB1bnNpZ25lZCBpbnQgbGVuKVxcbit7XFxuK1xcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSBcXHUwMDI2dnEtXFx1MDAzZWhlYWRzW3VzZWRfY291bnRdO1xcbitcXG4rXFx0dXNlZC1cXHUwMDNlaWQgPSBjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCk7XFxuK1xcdHVzZWQtXFx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xcbitcXHR2cS1cXHUwMDNlbmhlYWRzW3VzZWRfY291bnRdID0gMTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp0eF92cSA9IFxcdTAwMjZ2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcXG4gXFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xcbitcXHR1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCB1c2VkX2xpbWl0O1xcbiBcXHRib29sIGFkZGVkID0gZmFsc2U7XFxuIFxcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xcbiBcXG5AQCAtMTIwLDYgKzE0MywxMSBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gXFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHQvKiBLZWVwIHRoZSBiYXRjaCB3aXRoaW4gdGhlIHVzZWQgcmluZyBhbmQgdGhlIHNjcmF0Y2ggYXJyYXlzLiAqL1xcbitcXHR1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS1cXHUwMDNlbnVtLCB2cS1cXHUwMDNlZGV2LVxcdTAwM2Vpb3ZfbGltaXQpO1xcbitcXHRpZiAodW5saWtlbHkoIXVzZWRfbGltaXQpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdC8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UncmUgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB2aXJ0cXVldWUgKi9cXG4gXFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gXFxuQEAgLTE1MCw2ICsxNzgsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuIFxcbiBcXHRcXHRpZiAoaGVhZCA9PSB2cS1cXHUwMDNlbnVtKSB7XFxuIFxcdFxcdFxcdHZpcnRpb192c29ja19za2JfcXVldWVfaGVhZChcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3F1ZXVlLCBza2IpO1xcbitcXG4rXFx0XFx0XFx0LyogRmx1c2ggY29tcGxldGVkIGJ1ZmZlcnMgYmVmb3JlIHJlLWVuYWJsaW5nIG5vdGlmaWNhdGlvbnMuICovXFxuK1xcdFxcdFxcdGlmICh2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCB1c2VkX2NvdW50KSkge1xcbitcXHRcXHRcXHRcXHRhZGRlZCA9IHRydWU7XFxuK1xcdFxcdFxcdFxcdHVzZWRfY291bnQgPSAwO1xcbitcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHQvKiBXZSBjYW5ub3QgZmluaXNoIHlldCBpZiBtb3JlIGJ1ZmZlcnMgc251Y2sgaW4gd2hpbGVcXG4gXFx0XFx0XFx0ICogcmUtZW5hYmxpbmcgbm90aWZ5LlxcbiBcXHRcXHRcXHQgKi9cXG5AQCAtMjMwLDggKzI2NSwxMyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdHZpcnRpb190cmFuc3BvcnRfZGVsaXZlcl90YXBfcGt0KHNrYik7XFxuIFxcbi1cXHRcXHR2aG9zdF9hZGRfdXNlZCh2cSwgaGVhZCwgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4pO1xcbi1cXHRcXHRhZGRlZCA9IHRydWU7XFxuK1xcdFxcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCB1c2VkX2NvdW50LCBoZWFkLFxcbitcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqaGRyKSArIHBheWxvYWRfbGVuKTtcXG4rXFx0XFx0dXNlZF9jb3VudCsrO1xcbitcXHRcXHRpZiAodXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0KSB7XFxuK1xcdFxcdFxcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xcbitcXHRcXHRcXHR1c2VkX2NvdW50ID0gMDtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0VklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQgKz0gcGF5bG9hZF9sZW47XFxuIFxcdFxcdHRvdGFsX2xlbiArPSBwYXlsb2FkX2xlbjtcXG5AQCAtMjY0LDYgKzMwNCw5IEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxcbiBcXHRcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X2NvbnN1bWVfc2tiX3NlbnQoc2tiLCB0cnVlKTtcXG4gXFx0XFx0fVxcbiBcXHR9IHdoaWxlKGxpa2VseSghdmhvc3RfZXhjZWVkc193ZWlnaHQodnEsICsrcGt0cywgdG90YWxfbGVuKSkpO1xcbitcXG4rXFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCk7XFxuK1xcbiBcXHRpZiAoYWRkZWQpXFxuIFxcdFxcdHZob3N0X3NpZ25hbChcXHUwMDI2dnNvY2stXFx1MDAzZWRldiwgdnEpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTc6MzIuNzU2NDE0MDM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTExMjAyMzUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIkVWRU5URkRcIixcbiAgICBcIlZIT1NUXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF92c29ja19mbHVzaF91c2VkXCIsXG4gICAgXCJ2aG9zdF92c29ja19hZGRfdXNlZFwiLFxuICAgIFwidmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29ya1wiLFxuICAgIFwidmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGRlc2NyaXB0b3IgYmF0Y2hpbmcgaW4gdGhlIHZob3N0LXZzb2NrIGRyaXZlciAoZHJpdmVycy92aG9zdC92c29jay5jKSBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgcmVwbGFjaW5nIGluZGl2aWR1YWwgdmhvc3RfYWRkX3VzZWQgY2FsbHMgd2l0aCBiYXRjaGVkIHZob3N0X2FkZF91c2VkX24gY2FsbHMuIEl0IGludHJvZHVjZXMgbmV3IGJ1ZmZlciBhY2N1bXVsYXRpb24sIGFycmF5IGluZGV4aW5nLCBhbmQgYmF0Y2ggbGltaXQvZmx1c2hpbmcgbG9naWMgaW4gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGFjY2Vzc2libGUgdmlhIC9kZXYvdmhvc3QtdnNvY2sgYW5kIEFGX1ZTT0NLIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODZmZDA3ZThmZDc2NWE5MzEzMmIzZjg4YzliMzVkNzYxMzU5ZWQ3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTk6MTc6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbmluZGV4IDlhYWFiNmJiODA2MWMuLjdhMTNhYmU3MzM0NTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbisrKyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuQEAgLTEwMywxMiArMTAzLDM1IEBAIHN0YXRpYyBib29sIHZob3N0X3RyYW5zcG9ydF9oYXNfcmVtb3RlX2NpZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkKVxuIFx0cmV0dXJuIGZvdW5kO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IHVzZWRfY291bnQpXG4re1xuK1x0aWYgKCF1c2VkX2NvdW50KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cdTAwM2VoZWFkcywgdnEtXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCB2aG9zdF92c29ja19hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbitcdFx0XHRcdCB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCxcbitcdFx0XHRcdCB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbilcbit7XG4rXHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICp1c2VkID0gXHUwMDI2dnEtXHUwMDNlaGVhZHNbdXNlZF9jb3VudF07XG4rXG4rXHR1c2VkLVx1MDAzZWlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xuK1x0dXNlZC1cdTAwM2VsZW4gPSBjcHVfdG9fdmhvc3QzMih2cSwgbGVuKTtcbitcdHZxLVx1MDAzZW5oZWFkc1t1c2VkX2NvdW50XSA9IDE7XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR4X3ZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcbiBcdGludCBwa3RzID0gMCwgdG90YWxfbGVuID0gMDtcbitcdHVuc2lnbmVkIGludCB1c2VkX2NvdW50ID0gMDtcbitcdHVuc2lnbmVkIGludCB1c2VkX2xpbWl0O1xuIFx0Ym9vbCBhZGRlZCA9IGZhbHNlO1xuIFx0Ym9vbCByZXN0YXJ0X3R4ID0gZmFsc2U7XG4gXG5AQCAtMTIwLDYgKzE0MywxMSBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdGlmICghdnFfbWV0YV9wcmVmZXRjaCh2cSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LyogS2VlcCB0aGUgYmF0Y2ggd2l0aGluIHRoZSB1c2VkIHJpbmcgYW5kIHRoZSBzY3JhdGNoIGFycmF5cy4gKi9cbitcdHVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVx1MDAzZW51bSwgdnEtXHUwMDNlZGV2LVx1MDAzZWlvdl9saW1pdCk7XG4rXHRpZiAodW5saWtlbHkoIXVzZWRfbGltaXQpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdC8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UncmUgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB2aXJ0cXVldWUgKi9cbiBcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFxuQEAgLTE1MCw2ICsxNzgsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXG4gXHRcdGlmIChoZWFkID09IHZxLVx1MDAzZW51bSkge1xuIFx0XHRcdHZpcnRpb192c29ja19za2JfcXVldWVfaGVhZChcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcbitcbitcdFx0XHQvKiBGbHVzaCBjb21wbGV0ZWQgYnVmZmVycyBiZWZvcmUgcmUtZW5hYmxpbmcgbm90aWZpY2F0aW9ucy4gKi9cbitcdFx0XHRpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHtcbitcdFx0XHRcdGFkZGVkID0gdHJ1ZTtcbitcdFx0XHRcdHVzZWRfY291bnQgPSAwO1xuK1x0XHRcdH1cbitcbiBcdFx0XHQvKiBXZSBjYW5ub3QgZmluaXNoIHlldCBpZiBtb3JlIGJ1ZmZlcnMgc251Y2sgaW4gd2hpbGVcbiBcdFx0XHQgKiByZS1lbmFibGluZyBub3RpZnkuXG4gXHRcdFx0ICovXG5AQCAtMjMwLDggKzI2NSwxMyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdFx0ICovXG4gXHRcdHZpcnRpb190cmFuc3BvcnRfZGVsaXZlcl90YXBfcGt0KHNrYik7XG4gXG4tXHRcdHZob3N0X2FkZF91c2VkKHZxLCBoZWFkLCBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbik7XG4tXHRcdGFkZGVkID0gdHJ1ZTtcbitcdFx0dmhvc3RfdnNvY2tfYWRkX3VzZWQodnEsIHVzZWRfY291bnQsIGhlYWQsXG4rXHRcdFx0XHQgICAgIHNpemVvZigqaGRyKSArIHBheWxvYWRfbGVuKTtcbitcdFx0dXNlZF9jb3VudCsrO1xuK1x0XHRpZiAodXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0KSB7XG4rXHRcdFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCk7XG4rXHRcdFx0dXNlZF9jb3VudCA9IDA7XG4rXHRcdH1cbiBcbiBcdFx0VklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldCArPSBwYXlsb2FkX2xlbjtcbiBcdFx0dG90YWxfbGVuICs9IHBheWxvYWRfbGVuO1xuQEAgLTI2NCw2ICszMDQsOSBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdFx0XHR2aXJ0aW9fdHJhbnNwb3J0X2NvbnN1bWVfc2tiX3NlbnQoc2tiLCB0cnVlKTtcbiBcdFx0fVxuIFx0fSB3aGlsZShsaWtlbHkoIXZob3N0X2V4Y2VlZHNfd2VpZ2h0KHZxLCArK3BrdHMsIHRvdGFsX2xlbikpKTtcbitcbitcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xuK1xuIFx0aWYgKGFkZGVkKVxuIFx0XHR2aG9zdF9zaWduYWwoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cSk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxNzozMi43NTY0MTU0NjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTMyOTk3OTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBOZWVkIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMga2VybmVsIHBhdGNoIHNlcmllcyBhbmQgbmVlZCB0byBkZWNpZGUgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIgZnV6emluZy4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy92aG9zdC92c29jay5jYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnIOKAkyB2aG9zdCBhbmQgdnNvY2sgYWx3YXlzIG1ha2UgbWUgcGF5IGF0dGVudGlvbi4gVGhleSdyZSBvZnRlbiB0b3VjaHkgYXJlYXMgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgaXNzdWVzLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgLCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCBhbmQgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRob3NlIG5hbWVzIGFyZSBpbnRlcmVzdGluZzsgdGhlIFwidXNlZFwiIGFuZCBcInNlbmRcIiBoaW50cyBhdCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFja2V0IHByb2Nlc3NpbmcsIHdoaWNoIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLlxuXG5CZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29udGV4dC4gVGltZSB0byBwdWxsIG91dCB0aGUgdG9vbHMuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIG9yIGp1c3QgbWFudWFsbHkgZXhhbWluZSBgZHJpdmVycy92aG9zdC92c29jay5jYCBhbmQgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBhbmQgdGhlIG92ZXJhbGwgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGZpbmRpbmcgb3V0IHdoYXQgb3B0aW9ucyBjb250cm9sIHRoYXQgdnNvY2sgc3R1ZmYgaXMgaW1wb3J0YW50LiBJZiBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgdGhhdCdzIGEgZGlmZmVyZW50IHN0b3J5IHRoYW4gc29tZXRoaW5nIG9ic2N1cmUuIEFmdGVyIHRoZSBxdWljayBjaGVjaywgSSdsbCBrbm93IGlmIGZ1enppbmcgaXMgd29ydGggdGhlIGVmZm9ydCFcblxuXG4iLCJJbnB1dFRva2VucyI6MzgzMywiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjQ0LjA4NjQwMDAzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMTAxOlxcdFxcdGZvdW5kID0gISF2aG9zdF92c29ja19nZXQoY2lkLCBuZXQpO1xcbiAxMDI6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDEwMzpcXHRcXHRyZXR1cm4gZm91bmQ7XFxuIDEwNDpcXHR9XFxuIDEwNTpcXHRcXG4gMTA2OlxcdHN0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudClcXG4gMTA4OlxcdHtcXG4gMTA5OlxcdFxcdGlmICghdXNlZF9jb3VudClcXG4gMTEwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtXFx1MDAzZWhlYWRzLCB2cS1cXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcXG4gMTEzOlxcdFxcdHJldHVybiB0cnVlO1xcbiAxMTQ6XFx0fVxcbiAxMTU6XFx0XFxuIDExNjpcXHRzdGF0aWMgdm9pZCB2aG9zdF92c29ja19hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCxcXG4gMTE4OlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbilcXG4gMTE5OlxcdHtcXG4gMTIwOlxcdFxcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSBcXHUwMDI2dnEtXFx1MDAzZWhlYWRzW3VzZWRfY291bnRdO1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHR1c2VkLVxcdTAwM2VpZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTtcXG4gMTIzOlxcdFxcdHVzZWQtXFx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xcbiAxMjQ6XFx0XFx0dnEtXFx1MDAzZW5oZWFkc1t1c2VkX2NvdW50XSA9IDE7XFxuIDEyNTpcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdHN0YXRpYyB2b2lkXFxuIDEyODpcXHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gMTI5OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4gMTMwOlxcdHtcXG4gMTMxOlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR4X3ZxID0gXFx1MDAyNnZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xcbiAxMzI6XFx0XFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xcbiAxMzM6XFx0XFx0dW5zaWduZWQgaW50IHVzZWRfY291bnQgPSAwO1xcbiAxMzQ6XFx0XFx0dW5zaWduZWQgaW50IHVzZWRfbGltaXQ7XFxuIDEzNTpcXHRcXHRib29sIGFkZGVkID0gZmFsc2U7XFxuIDEzNjpcXHRcXHRib29sIHJlc3RhcnRfdHggPSBmYWxzZTtcXG4gMTM3OlxcdFxcbiAxMzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXFxuIDE0MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcXG4gMTQ0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNDU6XFx0XFxuIDE0NjpcXHRcXHQvKiBLZWVwIHRoZSBiYXRjaCB3aXRoaW4gdGhlIHVzZWQgcmluZyBhbmQgdGhlIHNjcmF0Y2ggYXJyYXlzLiAqL1xcbiAxNDc6XFx0XFx0dXNlZF9saW1pdCA9IG1pbl90KHVuc2lnbmVkIGludCwgdnEtXFx1MDAzZW51bSwgdnEtXFx1MDAzZWRldi1cXHUwMDNlaW92X2xpbWl0KTtcXG4gMTQ4OlxcdFxcdGlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpXFxuIDE0OTpcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTc6NDQuMDg2NTEwNTc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODE5NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9WU09DS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz00Nj1jb25maWcgVkhPU1RfU0NTSVxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU1LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1Njpjb25maWcgVkhPU1RfVlNPQ0tcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXFx0dHJpc3RhdGUgXFxcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjQ0LjEzMzMzNTg1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NDk2ODIwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgVkhPU1RfVlNPQ0sqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIFZIT1NUX1ZTT0NLIGlzIGVuYWJsZWQgb3IsIGF0IGxlYXN0LCBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24uIEJlZm9yZSBJIHN0YXJ0IGRlYnVnZ2luZyBhbnl0aGluZyByZWxhdGVkIHRvIHZpcnR1YWwgc29ja2V0cywgdGhlIEtjb25maWcgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkga25vdyB3aGVyZSB0byBsb29rLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBidWlsdC1pbiBtb2R1bGUsIG9yIGlzIHRoaXMgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIHNldD8gSSdsbCBxdWlja2x5IHNjYW4gdGhlIGRlcGVuZGVuY2llcywgYW55IHJlbGV2YW50ICNpZmRlZnMsIGFuZCBtYXliZSBldmVuIGxvb2sgZm9yIGNvbW1lbnRzIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgY2FzZXMgb3Iga25vd24gbGltaXRhdGlvbnMuIEVuc3VyaW5nIHRoYXQgdGhlIG1vZHVsZSBvciBidWlsdC1pbiBmdW5jdGlvbmFsaXR5IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGlzIHBhcmFtb3VudC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcInRyYWNlcnNcIiBpbiB0aGUgY29uZmlndXJhdGlvbiwgc28gSSBjYW4gZmluZCBteSBuZXh0IHN0ZXBzLiBUaGlzIGlzIGEgZm91bmRhdGlvbmFsIHN0ZXAgYmVmb3JlIEkgd2FzdGUgdGltZSBvbiBtb3JlIGNvbXBsaWNhdGVkIGRlYnVnZ2luZyBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxNzo0Ni41ODMwMjA2NDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgVkhPU1RfVlNPQ0tcXG4gIDU3OlxcdFxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcXHUwMDI2XFx1MDAyNiBFVkVOVEZEXFxuICA1OTpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDYwOlxcdFxcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXFxuICA2MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDYyOlxcdFxcdGhlbHBcXG4gIDYzOlxcdFxcdFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIHRoZSBob3N0IGtlcm5lbCB0byBwcm92aWRlIEFGX1ZTT0NLXFxuICA2NDpcXHRcXHRzb2NrZXRzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggZ3Vlc3RzLiAgVGhlIGd1ZXN0cyBtdXN0IGhhdmUgdGhlXFxuICA2NTpcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHRUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICA2ODpcXHRcXHR2aG9zdF92c29jay5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0Y29uZmlnIFZIT1NUX1ZEUEFcXG4gIDcxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFxcXCJcXG4gIDcyOlxcdFxcdGRlcGVuZHMgb24gRVZFTlRGRFxcbiAgNzM6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA3NDpcXHRcXHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXFxuICA3NTpcXHRcXHRkZXBlbmRzIG9uIFZEUEFcXG4gIDc2OlxcdFxcdGhlbHBcXG4gIDc3OlxcdFxcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxcbiAgNzg6XFx0XFx0ICBndWVzdCB2aXJ0aW8gZGV2aWNlcyB3aXRoIHRoZSB2RFBBLWJhc2VkIGJhY2tlbmRzLlxcbiAgNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjQ2LjU4MzA5Mjc5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNzg3OTgwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB2aG9zdC12c29jayBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHZob3N0LXZzb2NrIGltcGxlbWVudGF0aW9uIGluIExpbnV4LiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgYWNjZXNzZWQg4oCTIGlzIGl0IHRocm91Z2ggYSBjaGFyYWN0ZXIgZGV2aWNlIGxpa2UgYC9kZXYvdmhvc3QtdnNvY2tgLCBpb2N0bHMsIG9yIHRoZSBzdGFuZGFyZCBzb2NrZXQgaW50ZXJmYWNlPyBJJ20gYmV0dGluZyBpdCdzIGEgY29tYmluYXRpb24gb2YgdGhpbmdzLCBnaXZlbiB0aGUgdmlydHVhbCBuYXR1cmUuIFRpbWUgdG8gZGlnIGluLiBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGRhdGEgcGF0aCBmb3IgcGFja2V0IHNlbmRpbmcuIEkgc2hvdWxkIGJlIGFibGUgdG8gZmluZCB0aGF0IGluIHRoZSBgZHJpdmVycy92aG9zdC92c29jay5jYCBmaWxlLiBMZXQncyBwaW5wb2ludCB3aGVyZSBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBpcyBjYWxsZWQ7IHRoYXQgc2hvdWxkIGJlIHRoZSBlbnRyeSBwb2ludCBpbnRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgZnJvbSB0aGUgdmhvc3QgZHJpdmVyLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kIHRvIHN0YXJ0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjUwLjg2MTg5NDA2MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU5NDU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTI3PXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEyODp2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTI5LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMjA9c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzI3LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjg6XFx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyOS19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzMyPXZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzU1LVxcdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzU2OlxcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzU3LVxcdCAqL1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTY0ND1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NTAtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjY1MTpcXHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QodnNvY2ssIHZxKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjUyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTc6NTAuOTA4NDk0MzU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjczOTA1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipWaG9zdC1WU29jayBPcHRpbWl6YXRpb24gQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGhlcmUgaXMgYWJvdXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGluIGB2aG9zdC12c29ja2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHBhY2tldCBwcm9jZXNzaW5nIGlzIGhhbmRsZWQuIEluc3RlYWQgb2YgbWFraW5nIGluZGl2aWR1YWwsIGNvc3RseSBjYWxscyB0byBgdmhvc3RfYWRkX3VzZWRgIGZvciBldmVyeSBzaW5nbGUgcGFja2V0LCB3aGljaCwgZnJhbmtseSwgc2VlbXMgaW5lZmZpY2llbnQsIHRoZSBpbXBsZW1lbnRhdGlvbiBub3cgYmF0Y2hlcyB0aGVzZSB1cGRhdGVzLiBJdCBsb29rcyBsaWtlIHRoZSBzeXN0ZW0gYWNjdW11bGF0ZXMgcGFja2V0IGRlc2NyaXB0b3JzIGludG8gYSBgdnEtXHUwMDNlaGVhZHNgIGFycmF5LiBUaGVuLCB0aGVzZSBhcmUgZmx1c2hlZCBpbiBhIG1vcmUgZWZmaWNpZW50IG1hbm5lciB1c2luZyBgdmhvc3RfYWRkX3VzZWRfbmAgd2hlbiBlaXRoZXIgYSBjZXJ0YWluIGB1c2VkX2xpbWl0YCBpcyByZWFjaGVkLCBvciB3aGVuIHRoZSBlbnRpcmUgcHJvY2Vzc2luZyBsb29wIGNvbXBsZXRlcywgb3IgcnVucyBvdXQgb2YgYnVmZmVycy4gVGhpcyBiYXRjaGluZyBzdHJhdGVneSBzaG91bGQgc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmluZyB1cGRhdGVzLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBzeXprYWxsZXIsIGhhdmUgcHJvcGVyIGFjY2VzcyB0byBgL2Rldi92aG9zdC12c29ja2AuIFRoaXMgaXMgYSBjcml0aWNhbCBwcmVyZXF1aXNpdGUsIG9mIGNvdXJzZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLCB0byBlbnN1cmUgdGhhdCB0aGUgY2hhcmFjdGVyIGRldmljZSBvciBtaXNjZGV2aWNlIHJlZ2lzdHJhdGlvbiBpcyBzZXQgdXAgY29ycmVjdGx5IGFuZCBwZXJtaXNzaW9ucyBhcmUgc2V0LiBHb3R0YSBtYWtlIHN1cmUgd2UgY2FuIGFjdHVhbGx5ICp1c2UqIHRoZSBibGFzdGVkIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDg2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjUzLjc3NTg4NzIxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MjEwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlzY19yZWdpc3RlcnxmaWxlX29wZXJhdGlvbnN8dmhvc3RfdnNvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92c29jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzI6c3RhdGljIGNvbnN0IGludCB2aG9zdF92c29ja19iaXRzW10gPSB7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMzLVxcdFZIT1NUX0ZFQVRVUkVTLFxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTM3LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozODojZGVmaW5lIFZIT1NUX1ZTT0NLX0ZFQVRVUkVTIFZIT1NUX0ZFQVRVUkVTX1U2NCh2aG9zdF92c29ja19iaXRzLCAwKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zOS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NDA9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDMtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ0Oi8qIFVzZWQgdG8gdHJhY2sgYWxsIHRoZSB2aG9zdF92c29jayBpbnN0YW5jZXMgb24gdGhlIHN5c3RlbS4gKi9cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NDU6c3RhdGljIERFRklORV9NVVRFWCh2aG9zdF92c29ja19tdXRleCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ2OnN0YXRpYyBERUZJTkVfUkVBRF9NT1NUTFlfSEFTSFRBQkxFKHZob3N0X3Zzb2NrX2hhc2gsIDgpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00Ny1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NDg6c3RydWN0IHZob3N0X3Zzb2NrIHtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDktXFx0c3RydWN0IHZob3N0X2RldiBkZXY7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTMtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjU0OlxcdC8qIExpbmsgdG8gZ2xvYmFsIHZob3N0X3Zzb2NrX2hhc2gsIHdyaXRlcyB1c2Ugdmhvc3RfdnNvY2tfbXV0ZXggKi9cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTUtXFx0c3RydWN0IGhsaXN0X25vZGUgaGFzaDtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz02Nj1zdGF0aWMgdTMyIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzAtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjcxOi8qIENhbGxlcnMgbXVzdCBiZSBpbiBhbiBSQ1UgcmVhZCBzZWN0aW9uIG9yIGhvbGQgdGhlIHZob3N0X3Zzb2NrX211dGV4LlxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03Mi0gKiBUaGUgcmV0dXJuIHZhbHVlIGNhbiBvbmx5IGJlIGRlcmVmZXJlbmNlZCB3aGlsZSB3aXRoaW4gdGhlIHNlY3Rpb24uXFxuZHJpdmVycy92aG9zdC92c29jay5jLTczLSAqL1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NDpzdGF0aWMgc3RydWN0IHZob3N0X3Zzb2NrICp2aG9zdF92c29ja19nZXQodTMyIGd1ZXN0X2NpZCwgc3RydWN0IG5ldCAqbmV0KVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NS17XFxuZHJpdmVycy92aG9zdC92c29jay5jOjc2OlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTc3LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3ODpcXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlX3JjdSh2aG9zdF92c29ja19oYXNoLCB2c29jaywgaGFzaCwgZ3Vlc3RfY2lkLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3OTpcXHRcXHRcXHRcXHQgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnZob3N0X3Zzb2NrX211dGV4KSkge1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MC1cXHRcXHR1MzIgb3RoZXJfY2lkID0gdnNvY2stXFx1MDAzZWd1ZXN0X2NpZDtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05ND1zdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDAtXFx0cmN1X3JlYWRfbG9jaygpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDE6XFx0Zm91bmQgPSAhIXZob3N0X3Zzb2NrX2dldChjaWQsIG5ldCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDUtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwNjpzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDctXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHVzZWRfY291bnQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTE1LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMTY6c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC92c29jay5jLTExNy1cXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHVzZWRfY291bnQsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTI3PXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEyODp2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTI5LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xODItXFx0XFx0XFx0LyogRmx1c2ggY29tcGxldGVkIGJ1ZmZlcnMgYmVmb3JlIHJlLWVuYWJsaW5nIG5vdGlmaWNhdGlvbnMuICovXFxuZHJpdmVycy92aG9zdC92c29jay5jOjE4MzpcXHRcXHRcXHRpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTg0LVxcdFxcdFxcdFxcdGFkZGVkID0gdHJ1ZTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0yNjctXFxuZHJpdmVycy92aG9zdC92c29jay5jOjI2ODpcXHRcXHR2aG9zdF92c29ja19hZGRfdXNlZCh2cSwgdXNlZF9jb3VudCwgaGVhZCxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMjY5LVxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4pO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTI3MS1cXHRcXHRpZiAodXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0KSB7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjI3MjpcXHRcXHRcXHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCB1c2VkX2NvdW50KTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMjczLVxcdFxcdFxcdHVzZWRfY291bnQgPSAwO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMwNy1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzA4OlxcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMDktXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzIwPXN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyMi1cXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzIzOlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyNC1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzI1OlxcdHZzb2NrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92c29jaywgc2VuZF9wa3Rfd29yayk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyNi1cXHR2cSA9IFxcdTAwMjZ2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMzI9dmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMzQtXFx0c3RydWN0IHZpcnRpb192c29ja19oZHIgKmhkciA9IHZpcnRpb192c29ja19oZHIoc2tiKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzM1OlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMzNi1cXHRpbnQgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzM5LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozNDA6XFx0LyogRmluZCB0aGUgdmhvc3RfdnNvY2sgYWNjb3JkaW5nIHRvIGd1ZXN0IGNvbnRleHQgaWQgICovXFxuZHJpdmVycy92aG9zdC92c29jay5jOjM0MTpcXHR2c29jayA9IHZob3N0X3Zzb2NrX2dldChsZTY0X3RvX2NwdShoZHItXFx1MDAzZWRzdF9jaWQpLCBuZXQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNDItXFx0aWYgKCF2c29jaykge1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTM3NT12aG9zdF90cmFuc3BvcnRfY2FuY2VsX3BrdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNzYte1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozNzc6XFx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jaztcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzc4LVxcdGludCBjbnQgPSAwO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTM4Mi1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzgzOlxcdC8qIEZpbmQgdGhlIHZob3N0X3Zzb2NrIGFjY29yZGluZyB0byBndWVzdCBjb250ZXh0IGlkICAqL1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozODQ6XFx0dnNvY2sgPSB2aG9zdF92c29ja19nZXQodnNrLVxcdTAwM2VyZW1vdGVfYWRkci5zdm1fY2lkLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zODUtXFx0XFx0XFx0XFx0c29ja19uZXQoc2tfdnNvY2sodnNrKSkpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTQwNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo0MDc6dmhvc3RfdnNvY2tfYWxsb2Nfc2tiKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00MDgtXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG91dCwgdW5zaWduZWQgaW50IGluKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTQ2Ny0vKiBJcyB0aGVyZSBzcGFjZSBsZWZ0IGZvciByZXBsaWVzIHRvIHJ4IHBhY2tldHM/ICovXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ2ODpzdGF0aWMgYm9vbCB2aG9zdF92c29ja19tb3JlX3JlcGxpZXMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDY5LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz01NDg9c3RhdGljIGJvb2wgdmhvc3RfdHJhbnNwb3J0X3NlcXBhY2tldF9hbGxvdyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTU1MS1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza192c29jayh2c2spKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTUyOlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTU1My1cXHRib29sIHNlcXBhY2tldF9hbGxvdyA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTU1NS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjU1NjpcXHR2c29jayA9IHZob3N0X3Zzb2NrX2dldChyZW1vdGVfY2lkLCBuZXQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NTctXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTY1LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1NjY6c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfaGFuZGxlX3R4X2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuZHJpdmVycy92aG9zdC92c29jay5jLTU2Ny17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgcG9sbC53b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTcwOlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2sgPSBjb250YWluZXJfb2YodnEtXFx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Zzb2NrLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NzEtXFx0XFx0XFx0XFx0XFx0XFx0IGRldik7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTg4LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1ODk6XFx0XFx0aWYgKCF2aG9zdF92c29ja19tb3JlX3JlcGxpZXModnNvY2spKSB7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTU5MC1cXHRcXHRcXHQvKiBTdG9wIHR4IHVudGlsIHRoZSBkZXZpY2UgcHJvY2Vzc2VzIGFscmVhZHlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MDktXFxuZHJpdmVycy92aG9zdC92c29jay5jOjYxMDpcXHRcXHRza2IgPSB2aG9zdF92c29ja19hbGxvY19za2IodnEsIG91dCwgaW4pO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MTEtXFx0XFx0aWYgKCFza2IpIHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDMtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjY0NDpzdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjQ1LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDctXFx0XFx0XFx0XFx0XFx0XFx0cG9sbC53b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NjQ4OlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2sgPSBjb250YWluZXJfb2YodnEtXFx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Zzb2NrLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDktXFx0XFx0XFx0XFx0XFx0XFx0IGRldik7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjUzLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2NTQ6c3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NTUte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTcwOS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzEwOnN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MTEte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTczNS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzM2OnN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2ZyZWUoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzM3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NDAtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjc0MTpzdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NDIte1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NDMtXFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzQ0OlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTc0NS1cXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzcwLVxcdHZxc1tWU09DS19WUV9SWF0gPSBcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9SWF07XFxuZHJpdmVycy92aG9zdC92c29jay5jOjc3MTpcXHR2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXS5oYW5kbGVfa2ljayA9IHZob3N0X3Zzb2NrX2hhbmRsZV90eF9raWNrO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NzI6XFx0dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9SWF0uaGFuZGxlX2tpY2sgPSB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljaztcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzczLVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTc4My1vdXQ6XFxuZHJpdmVycy92aG9zdC92c29jay5jOjc4NDpcXHR2aG9zdF92c29ja19mcmVlKHZzb2NrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzg1LVxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzg3LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3ODg6c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfZmx1c2goc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzg5LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03OTItXFxuZHJpdmVycy92aG9zdC92c29jay5jOjc5MzpzdGF0aWMgdm9pZCB2aG9zdF92c29ja19yZXNldF9vcnBoYW5zKHN0cnVjdCBzb2NrICpzaylcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzk0LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MDQtXFx0LyogSWYgdGhlIHBlZXIgaXMgc3RpbGwgdmFsaWQsIG5vIG5lZWQgdG8gcmVzZXQgY29ubmVjdGlvbiAqL1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4MDU6XFx0aWYgKHZob3N0X3Zzb2NrX2dldCh2c2stXFx1MDAzZXJlbW90ZV9hZGRyLnN2bV9jaWQsIHNvY2tfbmV0KHNrKSkpIHtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODA2LVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTgyNC1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODI1OnN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy92aG9zdC92c29jay5jLTgyNi17XFxuZHJpdmVycy92aG9zdC92c29jay5jOjgyNzpcXHRzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MjgtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjgyOTpcXHRtdXRleF9sb2NrKFxcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTgzMC1cXHRpZiAodnNvY2stXFx1MDAzZWd1ZXN0X2NpZClcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODMxLVxcdFxcdGhhc2hfZGVsX3JjdShcXHUwMDI2dnNvY2stXFx1MDAzZWhhc2gpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4MzI6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTgzMy1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MzktXFx0dnNvY2tfZm9yX2VhY2hfY29ubmVjdGVkX3NvY2tldChcXHUwMDI2dmhvc3RfdHJhbnNwb3J0LnRyYW5zcG9ydCxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODQwOlxcdFxcdFxcdFxcdFxcdHZob3N0X3Zzb2NrX3Jlc2V0X29ycGhhbnMpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDEtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODQzLVxcdCAqIG5lZWQgdG8gc3RvcCB0aGUgdnNvY2sgZGV2aWNlIGluIGFueSBjYXNlLlxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4NDQ6XFx0ICogdmhvc3RfdnNvY2tfc3RvcCgpIGNhbiBub3QgZmFpbCBpbiB0aGlzIGNhc2UsIHNvIHdlIGRvbid0IG5lZWQgdG9cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODQ1LVxcdCAqIGNoZWNrIHRoZSByZXR1cm4gY29kZS5cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODQ2LVxcdCAqL1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4NDc6XFx0dmhvc3RfdnNvY2tfc3RvcCh2c29jaywgZmFsc2UpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4NDg6XFx0dmhvc3RfdnNvY2tfZmx1c2godnNvY2spO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDktXFx0dmhvc3RfZGV2X3N0b3AoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTg1NS1cXHRrZnJlZSh2c29jay1cXHUwMDNlZGV2LnZxcyk7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjg1NjpcXHR2aG9zdF92c29ja19mcmVlKHZzb2NrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODU3LVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTg1OS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODYwOnN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc2V0X2NpZChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCB1NjQgZ3Vlc3RfY2lkKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NjEte1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4NjI6XFx0c3RydWN0IHZob3N0X3Zzb2NrICpvdGhlcjtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODYzLVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTg3OS1cXHQvKiBSZWZ1c2UgaWYgQ0lEIGlzIGFscmVhZHkgaW4gdXNlICovXFxuZHJpdmVycy92aG9zdC92c29jay5jOjg4MDpcXHRtdXRleF9sb2NrKFxcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjg4MTpcXHRvdGhlciA9IHZob3N0X3Zzb2NrX2dldChndWVzdF9jaWQsIHZzb2NrLVxcdTAwM2VuZXQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04ODItXFx0aWYgKG90aGVyIFxcdTAwMjZcXHUwMDI2IG90aGVyICE9IHZzb2NrKSB7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjg4MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZob3N0X3Zzb2NrX211dGV4KTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODg0LVxcdFxcdHJldHVybiAtRUFERFJJTlVTRTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04OTAtXFx0dnNvY2stXFx1MDAzZWd1ZXN0X2NpZCA9IGd1ZXN0X2NpZDtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODkxOlxcdGhhc2hfYWRkX3JjdSh2aG9zdF92c29ja19oYXNoLCBcXHUwMDI2dnNvY2stXFx1MDAzZWhhc2gsIHZzb2NrLVxcdTAwM2VndWVzdF9jaWQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4OTI6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTg5My1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04OTYtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjg5NzpzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCB1NjQgZmVhdHVyZXMpXFxuZHJpdmVycy92aG9zdC92c29jay5jLTg5OC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTMxLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5MzI6c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuZHJpdmVycy92aG9zdC92c29jay5jLTkzMy1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05MzQte1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5MzU6XFx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jayA9IGYtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTM2LVxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTk0NS1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTQ2OlxcdFxcdHJldHVybiB2aG9zdF92c29ja19zZXRfY2lkKHZzb2NrLCBndWVzdF9jaWQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NDctXFx0Y2FzZSBWSE9TVF9WU09DS19TRVRfUlVOTklORzpcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NTAtXFx0XFx0aWYgKHN0YXJ0KVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5NTE6XFx0XFx0XFx0cmV0dXJuIHZob3N0X3Zzb2NrX3N0YXJ0KHZzb2NrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTUyLVxcdFxcdGVsc2VcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTUzOlxcdFxcdFxcdHJldHVybiB2aG9zdF92c29ja19zdG9wKHZzb2NrLCB0cnVlKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTU0LVxcdGNhc2UgVkhPU1RfR0VUX0ZFQVRVUkVTOlxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTk2MS1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTYyOlxcdFxcdHJldHVybiB2aG9zdF92c29ja19zZXRfZmVhdHVyZXModnNvY2ssIGZlYXR1cmVzKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTYzLVxcdGNhc2UgVkhPU1RfR0VUX0JBQ0tFTkRfRkVBVFVSRVM6XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTgwLVxcdFxcdGVsc2VcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTgxOlxcdFxcdFxcdHZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTgyLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dnNvY2stXFx1MDAzZWRldi5tdXRleCk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTg2LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5ODc6c3RhdGljIHNzaXplX3Qgdmhvc3RfdnNvY2tfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuZHJpdmVycy92aG9zdC92c29jay5jLTk4OC17XFxuZHJpdmVycy92aG9zdC92c29jay5jLTk4OS1cXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHA7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjk5MDpcXHRzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05OTEtXFx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTk2LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5OTc6c3RhdGljIHNzaXplX3Qgdmhvc3RfdnNvY2tfY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05OTgtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDAtXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDAxOlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2sgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDItXFx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAwNi1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAwNzpzdGF0aWMgX19wb2xsX3Qgdmhvc3RfdnNvY2tfY2hyX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDgte1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDA5OlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2sgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMTAtXFx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAxNC1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAxNTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF92c29ja19mb3BzID0ge1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDE2LVxcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDE3OlxcdC5vcGVuICAgICAgICAgICA9IHZob3N0X3Zzb2NrX2Rldl9vcGVuLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDE4OlxcdC5yZWxlYXNlICAgICAgICA9IHZob3N0X3Zzb2NrX2Rldl9yZWxlYXNlLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDE5LVxcdC5sbHNlZWtcXHRcXHQ9IG5vb3BfbGxzZWVrLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDIwOlxcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Zzb2NrX2Rldl9pb2N0bCxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyMS1cXHQuY29tcGF0X2lvY3RsICAgPSBjb21wYXRfcHRyX2lvY3RsLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDIyOlxcdC5yZWFkX2l0ZXIgICAgICA9IHZob3N0X3Zzb2NrX2Nocl9yZWFkX2l0ZXIsXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMjM6XFx0LndyaXRlX2l0ZXIgICAgID0gdmhvc3RfdnNvY2tfY2hyX3dyaXRlX2l0ZXIsXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMjQ6XFx0LnBvbGwgICAgICAgICAgID0gdmhvc3RfdnNvY2tfY2hyX3BvbGwsXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMjUtfTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyNi1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAyNzpzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugdmhvc3RfdnNvY2tfbWlzYyA9IHtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyOC1cXHQubWlub3IgPSBWSE9TVF9WU09DS19NSU5PUixcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyOS1cXHQubmFtZSA9IFxcXCJ2aG9zdC12c29ja1xcXCIsXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMzA6XFx0LmZvcHMgPSBcXHUwMDI2dmhvc3RfdnNvY2tfZm9wcyxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAzMS19O1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDMyLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDMzOnN0YXRpYyBpbnQgX19pbml0IHZob3N0X3Zzb2NrX2luaXQodm9pZClcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAzNC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA0MS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA0MjpcXHRyZXQgPSBtaXNjX3JlZ2lzdGVyKFxcdTAwMjZ2aG9zdF92c29ja19taXNjKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA0My1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1MC1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA1MTpzdGF0aWMgdm9pZCBfX2V4aXQgdmhvc3RfdnNvY2tfZXhpdCh2b2lkKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDUyLXtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA1MzpcXHRtaXNjX2RlcmVnaXN0ZXIoXFx1MDAyNnZob3N0X3Zzb2NrX21pc2MpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDU0LVxcdHZzb2NrX2NvcmVfdW5yZWdpc3RlcihcXHUwMDI2dmhvc3RfdHJhbnNwb3J0LnRyYW5zcG9ydCk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1Ni1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA1Nzptb2R1bGVfaW5pdCh2aG9zdF92c29ja19pbml0KTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA1ODptb2R1bGVfZXhpdCh2aG9zdF92c29ja19leGl0KTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1OS1NT0RVTEVfTElDRU5TRShcXFwiR1BMIHYyXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjUzLjgyMTYxNTU5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTcxNzkxMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdmhvc3QtdnNvY2sgUGF0Y2g6IEEgRGVlcGVyIERpdmUqKlxuXG5Pa2F5LCBzbyBgdmhvc3QtdnNvY2tgIHJlZ2lzdGVycyBhIG1pc2MgZGV2aWNlIGF0IGAvZGV2L3Zob3N0LXZzb2NrYCBhbmQgaW50ZXJhY3RzIHdpdGggQUZfVlNPQ0sgc29ja2V0cyB0aHJvdWdoIHRoZSBgdnNvY2tfY29yZWAuIE1ha2VzIHNlbnNlLCB0aGlzIGlzIGEgc3RhbmRhcmQgc2V0dXAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBhbmQgSSBrbm93IFN5emthbGxlciBoYXMgZnVsbCBzdXBwb3J0IGZvciBpdC5cblxuTGV0J3MgZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBwYXRjaC4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAsIHNwZWNpZmljYWxseSBob3cgdGhlIHZpcnRxdWV1ZSByaW5nIGVsZW1lbnRzIGFyZSBoYW5kbGVkLiBCZWZvcmUsIGl0IHdhcyBhIHNpbXBsZSBgdmhvc3RfYWRkX3VzZWRgIGNhbGwuIE5vdywgaXQncyBhIGJpdCBtb3JlIGludm9sdmVkLiBJdCdzIGJhdGNoaW5nIGRlc2NyaXB0b3JzIHVzaW5nIGB2aG9zdF92c29ja19hZGRfdXNlZGAgaW50byBgdnEtXHUwMDNlaGVhZHNgIGFuZCB0aGVuIGZsdXNoaW5nIHRoZW0gd2l0aCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAuIFRoaXMgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIGZ1bmN0aW9uIHRoZW4gY2FsbHMgYHZob3N0X2FkZF91c2VkX25gLCB3aGljaCBwcm9iYWJseSBwZXJmb3JtcyB0aGUgYWN0dWFsIHJpbmcgdXBkYXRlcy5cblxuVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBjaGVja3MgZm9yIGB1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS1cdTAwM2VudW0sIHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQpO2AgYW5kIGZsdXNoZXMgd2hlbiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIG1ldDogd2hlbiBgdXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0YCwgd2hlbiBgaGVhZCA9PSB2cS1cdTAwM2VudW1gIGJlZm9yZSByZS1lbmFibGluZyBub3RpZnksIGFuZCBhdCB0aGUgdmVyeSBlbmQgb2YgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gb3B0aW1pemluZyB0aGUgZmx1c2ggb3BlcmF0aW9uIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgZGVzY3JpcHRvcnMgYW5kIEkvTyBsaW1pdHMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIGFuZCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIGFyZSBiZWluZyBpbnRyb2R1Y2VkIGFzIHN0YXRpYyBoZWxwZXJzIGluIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLCBhbG9uZyB3aXRoIHRoZSBjb3JlIGNoYW5nZSBpbiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YC4gSSdsbCBhbHNvIHdhbnQgdG8gbG9vayBhdCB0aGUgZW50cnkgcG9pbnRzL2NhbGxlcnMgb2YgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAsIHN1Y2ggYXMgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrYCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAsIGB2aG9zdF92c29ja19oYW5kbGVfcnhfa2lja2AsIGFuZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYC5cblxuT2theSwgdGhlIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGlzIGEgYHN0YXRpY2AgZnVuY3Rpb24sIHNvIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGF0IGB2c29jay5jYCBmaWxlLiBUaGlzIGlzIGdvb2QgdG8ga25vdywgYW5kIEkgc2hvdWxkIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgZnJvbSB0aGlzIGNoYW5nZSBpbiBvdGhlciBtb2R1bGVzIGJ5IGNoZWNraW5nIGFueSBtb2R1bGUgZGVwZW5kZW5jaWVzLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AsIGVzcGVjaWFsbHkgYXJvdW5kIGxpbmVzIDMxMC0zNzAuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDc3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjU4Ljc5MzQwOTE2MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92c29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxMDpcXHRcXHRpZiAoYWRkZWQpXFxuIDMxMTpcXHRcXHRcXHR2aG9zdF9zaWduYWwoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0b3V0OlxcbiAzMTQ6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRpZiAocmVzdGFydF90eClcXG4gMzE3OlxcdFxcdFxcdHZob3N0X3BvbGxfcXVldWUoXFx1MDAyNnR4X3ZxLVxcdTAwM2Vwb2xsKTtcXG4gMzE4OlxcdH1cXG4gMzE5OlxcdFxcbiAzMjA6XFx0c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuIDMyMTpcXHR7XFxuIDMyMjpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcXG4gMzIzOlxcdFxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdHZzb2NrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92c29jaywgc2VuZF9wa3Rfd29yayk7XFxuIDMyNjpcXHRcXHR2cSA9IFxcdTAwMjZ2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XFxuIDMyOTpcXHR9XFxuIDMzMDpcXHRcXG4gMzMxOlxcdHN0YXRpYyBpbnRcXG4gMzMyOlxcdHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuIDMzMzpcXHR7XFxuIDMzNDpcXHRcXHRzdHJ1Y3QgdmlydGlvX3Zzb2NrX2hkciAqaGRyID0gdmlydGlvX3Zzb2NrX2hkcihza2IpO1xcbiAzMzU6XFx0XFx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jaztcXG4gMzM2OlxcdFxcdGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHQvKiBGaW5kIHRoZSB2aG9zdF92c29jayBhY2NvcmRpbmcgdG8gZ3Vlc3QgY29udGV4dCBpZCAgKi9cXG4gMzQxOlxcdFxcdHZzb2NrID0gdmhvc3RfdnNvY2tfZ2V0KGxlNjRfdG9fY3B1KGhkci1cXHUwMDNlZHN0X2NpZCksIG5ldCk7XFxuIDM0MjpcXHRcXHRpZiAoIXZzb2NrKSB7XFxuIDM0MzpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzQ0OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzNDU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDM0NjpcXHRcXHR9XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qIEZhc3QtZmFpbCBpZiB0aGUgZ3Vlc3QgaGFzbid0IGVuYWJsZWQgdGhlIFJYIHZxIHlldC4gUXVldWluZyB0aGUgcGFja2V0XFxuIDM0OTpcXHRcXHQgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdFxcbiAzNTA6XFx0XFx0ICogd2l0aGluIHRoZSB0aW1lb3V0LCBpdCdsbCBpbW1lZGlhdGVseSByZXBseSB3aXRoIFJTVCwgYmVjYXVzZSB0aGVyZSdzIG5vXFxuIDM1MTpcXHRcXHQgKiBsaXN0ZW5lciBvbiB0aGUgcG9ydCB5ZXQuXFxuIDM1MjpcXHRcXHQgKlxcbiAzNTM6XFx0XFx0ICogdmhvc3RfdnFfZ2V0X2JhY2tlbmQoKSB3aXRob3V0IHZxLVxcdTAwM2VtdXRleCBpcyBhY2NlcHRhYmxlIGhlcmU6IGxvY2tpbmdcXG4gMzU0OlxcdFxcdCAqIHRoZSBtdXRleCB3b3VsZCBiZSB0b28gZXhwZW5zaXZlIGluIHRoaXMgaG90IHBhdGgsIGFuZCB3ZSBhbHJlYWR5IGhhdmVcXG4gMzU1OlxcdFxcdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcXG4gMzU2OlxcdFxcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cXG4gMzU3OlxcdFxcdCAqL1xcbiAzNTg6XFx0XFx0aWYgKHVubGlrZWx5KCFkYXRhX3JhY2Uodmhvc3RfdnFfZ2V0X2JhY2tlbmQoXFx1MDAyNnZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdKSkpKSB7XFxuIDM1OTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzYwOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzNjE6XFx0XFx0XFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XFxuIDM2MjpcXHRcXHR9XFxuIDM2MzpcXHRcXG4gMzY0OlxcdFxcdGlmICh2aXJ0aW9fdnNvY2tfc2tiX3JlcGx5KHNrYikpXFxuIDM2NTpcXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZ2c29jay1cXHUwMDNlcXVldWVkX3JlcGxpZXMpO1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcXG4gMzY4OlxcdFxcdHZob3N0X3ZxX3dvcmtfcXVldWUoXFx1MDAyNnZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdLCBcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3dvcmspO1xcbiAzNjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjU4Ljc5MzU0NDY5MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDYwNDE1MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIERhdGEgRmxvdyBvZiBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCBmdW5jdGlvbiB3b3Jrcy4gSXQgc2VlbXMgbGlrZSBpdCdzIHJlZ2lzdGVyZWQgc29tZXdoZXJlIHdpdGhpbiB0aGUgYHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0IHZob3N0X3RyYW5zcG9ydGAsIHdoaWNoIG1ha2VzIHNlbnNlLCBhcyB0aGF0IG5hbWUgc3VnZ2VzdHMgaXQncyBoYW5kbGluZyB0cmFuc3BvcnQgbG9naWMsIGFuZCB0aGlzIGlzIHVzZWQgYnkgdGhlIGB2c29ja19jb3JlYCBtb2R1bGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR0ZXIuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgdmhvc3RfdHJhbnNwb3J0YCBpdHNlbGYuIExldCdzIHNlZSBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgc3RydWN0J3MgZGVmaW5pdGlvbiBzaG91bGQgZ2l2ZSBtZSBtb3JlIGNvbnRleHQgZm9yIHdoYXQgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODowMS4yNTM5NjI1NzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODc4NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3RyYW5zcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suYz00OD1zdHJ1Y3Qgdmhvc3RfdnNvY2sge1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTY1LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2NjpzdGF0aWMgdTMyIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKHZvaWQpXFxuZHJpdmVycy92aG9zdC92c29jay5jLTY3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz03ND1zdGF0aWMgc3RydWN0IHZob3N0X3Zzb2NrICp2aG9zdF92c29ja19nZXQodTMyIGd1ZXN0X2NpZCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTkzLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5NDpzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTUte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTEyNz1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMjg6dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEyOS1cXHRcXHRcXHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzE5LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjA6c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyMS17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzI3LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjg6XFx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyOS19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzMxPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzMyOnZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMzMy17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzU1LVxcdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzU2OlxcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzU3LVxcdCAqL1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTM3ND1zdGF0aWMgaW50XFxuZHJpdmVycy92aG9zdC92c29jay5jOjM3NTp2aG9zdF90cmFuc3BvcnRfY2FuY2VsX3BrdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNzYte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTQ2OD1zdGF0aWMgYm9vbCB2aG9zdF92c29ja19tb3JlX3JlcGxpZXMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00NzgtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ3OTpzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfbXNnemVyb2NvcHlfYWxsb3codm9pZClcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDgwLXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00ODMtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ4NDpzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfc2VxcGFja2V0X2FsbG93KHN0cnVjdCB2c29ja19zb2NrICp2c2ssXFxuZHJpdmVycy92aG9zdC92c29jay5jLTQ4NS1cXHRcXHRcXHRcXHRcXHQgICAgdTMyIHJlbW90ZV9jaWQpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTQ4Nz1zdGF0aWMgYm9vbFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo0ODg6dmhvc3RfdHJhbnNwb3J0X3N0cmVhbV9hbGxvdyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkLCB1MzIgcG9ydClcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDg5LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00OTItXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ5MzpzdGF0aWMgc3RydWN0IHZpcnRpb190cmFuc3BvcnQgdmhvc3RfdHJhbnNwb3J0ID0ge1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00OTQtXFx0LnRyYW5zcG9ydCA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00OTYtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ5NzpcXHRcXHQuZ2V0X2xvY2FsX2NpZCAgICAgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQsXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ5ODpcXHRcXHQuaGFzX3JlbW90ZV9jaWQgICAgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X2hhc19yZW1vdGVfY2lkLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00OTktXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTA0LVxcdFxcdC5zaHV0ZG93biAgICAgICAgICAgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X3NodXRkb3duLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1MDU6XFx0XFx0LmNhbmNlbF9wa3QgICAgICAgICAgICAgICA9IHZob3N0X3RyYW5zcG9ydF9jYW5jZWxfcGt0LFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MDYtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTE3LVxcdFxcdC5zdHJlYW1faXNfYWN0aXZlICAgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X3N0cmVhbV9pc19hY3RpdmUsXFxuZHJpdmVycy92aG9zdC92c29jay5jOjUxODpcXHRcXHQuc3RyZWFtX2FsbG93ICAgICAgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X3N0cmVhbV9hbGxvdyxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTE5LVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTUyMS1cXHRcXHQuc2VxcGFja2V0X2VucXVldWUgICAgICAgID0gdmlydGlvX3RyYW5zcG9ydF9zZXFwYWNrZXRfZW5xdWV1ZSxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTIyOlxcdFxcdC5zZXFwYWNrZXRfYWxsb3cgICAgICAgICAgPSB2aG9zdF90cmFuc3BvcnRfc2VxcGFja2V0X2FsbG93LFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MjMtXFx0XFx0LnNlcXBhY2tldF9oYXNfZGF0YSAgICAgICA9IHZpcnRpb190cmFuc3BvcnRfc2VxcGFja2V0X2hhc19kYXRhLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MjQtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjUyNTpcXHRcXHQubXNnemVyb2NvcHlfYWxsb3cgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X21zZ3plcm9jb3B5X2FsbG93LFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MjYtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTQ0LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1NDU6XFx0LnNlbmRfcGt0ID0gdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0LFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NDYtfTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTQ3LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1NDg6c3RhdGljIGJvb2wgdmhvc3RfdHJhbnNwb3J0X3NlcXBhY2tldF9hbGxvdyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NDktXFx0XFx0XFx0XFx0XFx0ICAgIHUzMiByZW1vdGVfY2lkKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTU2Nj1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfdHhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MjUtXFx0XFx0ICAgIGxlNjRfdG9fY3B1KGhkci1cXHUwMDNlZHN0X2NpZCkgPT1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NjI2OlxcdFxcdCAgICB2aG9zdF90cmFuc3BvcnRfZ2V0X2xvY2FsX2NpZCgpKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2Mjc6XFx0XFx0XFx0dmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChcXHUwMDI2dmhvc3RfdHJhbnNwb3J0LCBza2IsXFxuZHJpdmVycy92aG9zdC92c29jay5jLTYyOC1cXHRcXHRcXHRcXHRcXHRcXHQgIHZzb2NrLVxcdTAwM2VuZXQpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTY0ND1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NTAtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjY1MTpcXHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QodnNvY2ssIHZxKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjUyLX1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz03NDE9c3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NzktXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzgwOlxcdHZob3N0X3dvcmtfaW5pdChcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3dvcmssIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzgxLVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTgyNT1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTgzOC1cXHQgKiBpbmVmZmljaWVudC4gIFJvb20gZm9yIGltcHJvdmVtZW50IGhlcmUuICovXFxuZHJpdmVycy92aG9zdC92c29jay5jOjgzOTpcXHR2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KFxcdTAwMjZ2aG9zdF90cmFuc3BvcnQudHJhbnNwb3J0LFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDAtXFx0XFx0XFx0XFx0XFx0dmhvc3RfdnNvY2tfcmVzZXRfb3JwaGFucyk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTAzMz1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF92c29ja19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAzNi1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAzNzpcXHRyZXQgPSB2c29ja19jb3JlX3JlZ2lzdGVyKFxcdTAwMjZ2aG9zdF90cmFuc3BvcnQudHJhbnNwb3J0LFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDM4LVxcdFxcdFxcdFxcdCAgVlNPQ0tfVFJBTlNQT1JUX0ZfSDJHKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDQzLVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA0NDpcXHRcXHR2c29ja19jb3JlX3VucmVnaXN0ZXIoXFx1MDAyNnZob3N0X3RyYW5zcG9ydC50cmFuc3BvcnQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDQ1LVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTA1MT1zdGF0aWMgdm9pZCBfX2V4aXQgdmhvc3RfdnNvY2tfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwNTMtXFx0bWlzY19kZXJlZ2lzdGVyKFxcdTAwMjZ2aG9zdF92c29ja19taXNjKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA1NDpcXHR2c29ja19jb3JlX3VucmVnaXN0ZXIoXFx1MDAyNnZob3N0X3RyYW5zcG9ydC50cmFuc3BvcnQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDU1LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE4OjAxLjI5OTg0NzE5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzA0OTc2NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IHZob3N0LXZzb2NrIEJhdGNoaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIG5ldyB2aG9zdC12c29jayBiYXRjaGluZyBwYXRjaCBpcyAqYWJzb2x1dGVseSogd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG5GaXJzdCwgYWNjZXNzaWJpbGl0eS4gQ2FuIHdlIGFjdHVhbGx5IGhpdCB0aGlzIG1vZGlmaWVkIGNvZGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwPyBBYnNvbHV0ZWx5LCB5ZXMuIFFFTVUgb3IgdXNlcnNwYWNlIHJ1bm5pbmcgaW4gYSBWTSBzaG91bGQgaGF2ZSBubyBwcm9ibGVtIGludGVyYWN0aW5nIHdpdGggYC9kZXYvdmhvc3QtdnNvY2tgLiBXZSBjYW4gc2V0IHVwIHRoZSB2aXJ0cXVldWVzIHVzaW5nIHRoZSBzdGFuZGFyZCBpb2N0bHMg4oCTIGBWSE9TVF9TRVRfVlJJTkdfQkFTRWAsIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCwgZXRjLiDigJMgYW5kIHRoZW4gc2VuZCBkYXRhIHVzaW5nIEFGX1ZTT0NLIHNvY2tldHMgb3IgdHJpZ2dlciB2aXJ0cXVldWUga2lja3MuIEFsbCBvZiB0aGF0IGxlYWRzIHRvIHRoZSBjcnVjaWFsIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LlxuXG5TZWNvbmQsIHdoYXQncyAqYWN0dWFsbHkqIGNoYW5naW5nIHdpdGggdGhpcyBwYXRjaD8gSXQncyBmdW5kYW1lbnRhbGx5IGFib3V0IGhvdyB1c2VkIHJpbmcgZW50cmllcyBhcmUgaGFuZGxlZCBpbiB2aG9zdC12c29jayB3aXRoaW4gYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAuIEluc3RlYWQgb2YgaW5kaXZpZHVhbCBgdmhvc3RfYWRkX3VzZWRgIGNhbGxzLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGVkIHVwZGF0ZXMgdXNpbmcgYHZob3N0X2FkZF91c2VkX25gIHRocm91Z2ggaGVscGVyIGZ1bmN0aW9ucyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIGFuZCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAuIFRoaXMgdG91Y2hlcyBhIGxvdCBvZiBpbXBvcnRhbnQgcGllY2VzOiByaW5nIGluZGV4aW5nLCBkZXNjcmlwdG9yIHVwZGF0ZXMsIGJhdGNoIHNpemUgbGltaXRzIGRlZmluZWQgYnkgYHVzZWRfbGltaXRgLCBub3RpZnlpbmcgdGhlIGd1ZXN0LCBhbmQgZmx1c2hpbmcgdGhlIGJ1ZmZlcnMuXG5cblRoaXJkLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCB3aHkgaXMgdGhpcyBzbyByaXBlIGZvciBmdXp6aW5nPyBCZWNhdXNlIHRoZSB2ZXJ5IG5hdHVyZSBvZiBiYXRjaGluZyBjaGFuZ2VzLCBsaWtlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHZpcnRxdWV1ZS9kZXNjcmlwdG9yIGJ1ZmZlciBoYW5kbGluZyBhbmQgYmF0Y2hpbmcgbG9naWMsIHNjcmVhbSBcIm9mZi1ieS1vbmUgZXJyb3JzLFwiIFwibG9zdCB3YWtldXBzLFwiIFwicmluZyBidWZmZXIgY29ycnVwdGlvbixcIiBhbmQgXCJvdXQtb2YtYm91bmRzIGFjY2Vzc1wiIGluIHRoZSBgaGVhZHNgIGFycmF5cy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGFyZWEgd2hlcmUgYSBmdXp6ZXIgY2FuIHJlYWxseSBzaGluZS5cblxuRmluYWxseSwgd2hhdCBhcmUgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uPyBJIG5lZWQgdG8gZm9jdXMgb246XG4qICAgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgKHRoZSBjb3JlIGZ1bmN0aW9uKVxuKiAgIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCAoZmx1c2hpbmcgdGhlIGJ1ZmZlcilcbiogICBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIChhZGRpbmcgdXNlZCBlbnRyaWVzIHRvIHRoZSBidWZmZXIpXG4qICAgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrYCAocmVsYXRlZCB0byBwYWNrZXQgc2VuZGluZylcbiogICBgdmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2tgIChoYW5kbGluZyBpbmNvbWluZyBraWNrKVxuXG5BbmQsIHNpbmNlIGB2aG9zdF9hZGRfdXNlZF9uYCBpcyBhY3R1YWxseSBpbiBgZHJpdmVycy92aG9zdC92aG9zdC5jYCwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgaXQgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IGl0IHdvcmtzIGFuZCBob3cgaXQgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdGFyZ2V0aW5nIHRoZSBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI1NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODowNy4wMDQ4MjcxNzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjg3NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2FkZF91c2VkX25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzAwOD1pbnQgdmhvc3RfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMTUtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwMTY6XFx0cmV0dXJuIHZob3N0X2FkZF91c2VkX24odnEsIFxcdTAwMjZoZWFkcywgXFx1MDAyNm5oZWFkcywgMSk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMTctfVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zMDE4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2FkZF91c2VkKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzAxOS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzAyMDpzdGF0aWMgaW50IF9fdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzAyMS1cXHRcXHRcXHQgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA1MS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzA1MjpzdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25fb29vKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDUzLVxcdFxcdFxcdFxcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjAtXFx0aWYgKG4gXFx1MDAzYyBjb3VudCkge1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDYxOlxcdFxcdHIgPSBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBuKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA2Mi1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA2Ni1cXHR9XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwNjc6XFx0cmV0dXJuIF9fdmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIGNvdW50KTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA2OC19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjktXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwNzA6c3RhdGljIGludCB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDcxLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzExOS0gKiB3YW50IHRvIG5vdGlmeSB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxMjA6aW50IHZob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTIxLVxcdFxcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMjYtXFx0aWYgKCFpbl9vcmRlciB8fCAhbmhlYWRzKVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTI3OlxcdFxcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX29vbyh2cSwgaGVhZHMsIGNvdW50KTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzEyOC1cXHRlbHNlXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxMjk6XFx0XFx0ciA9IHZob3N0X2FkZF91c2VkX25faW5fb3JkZXIodnEsIGhlYWRzLCBuaGVhZHMsIGNvdW50KTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzEzMC1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTUwLX1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzE1MTpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9hZGRfdXNlZF9uKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzE1Mi1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zMjEwPXZvaWQgdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbF9uKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMjE1LXtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzIxNjpcXHR2aG9zdF9hZGRfdXNlZF9uKHZxLCBoZWFkcywgbmhlYWRzLCBjb3VudCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMyMTctXFx0dmhvc3Rfc2lnbmFsKGRldiwgdnEpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI0OD1pbnQgdmhvc3RfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLCB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbik7XFxuZHJpdmVycy92aG9zdC92aG9zdC5oOjI0OTppbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNTAtXFx0XFx0ICAgICB1MTYgKm5oZWFkcywgdW5zaWduZWQgY291bnQpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTEwNj1zdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTExMS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTEyOlxcdHZob3N0X2FkZF91c2VkX24odnEsIHZxLVxcdTAwM2VoZWFkcywgdnEtXFx1MDAzZW5oZWFkcywgdXNlZF9jb3VudCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTExMy1cXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MDcuMDg4NTIwNjIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTEwNDEzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2NvbmZpZyBEZXBlbmRlbmNpZXMgLSBWSE9TVF9WU09DSyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBWSE9TVF9WU09DS2AuIEZpcnN0LCBhIHF1aWNrIHNhbml0eSBjaGVjazogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBWSE9TVF9WU09DS2AgaXMgcHJvcGVybHkgc2V0IHVwLiBSaWdodCwgc28gYFZIT1NUX1ZTT0NLYCBkZXBlbmRzIG9uIGBWU09DS0VUU2AgYW5kIGBFVkVOVEZEYC4gTWFrZXMgc2Vuc2Ug4oCTIHdlIG5lZWQgdGhlIGNvcmUgdnNvY2sgZnVuY3Rpb25hbGl0eSBhbmQgYSB3YXkgdG8gc2lnbmFsIGV2ZW50cy4gSXQgYWxzbyAqc2VsZWN0cyogYFZIT1NUYCBhbmQgYFZJUlRJT19WU09DS0VUU19DT01NT05gLCBpbXBseWluZyB0aGF0IGl0J3MgYnVpbGRpbmcgdXBvbiB0aG9zZSBmdW5kYW1lbnRhbCBjb21wb25lbnRzLiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWxsIHBsYXlpbmcgbmljZWx5IHRvZ2V0aGVyLCBJJ2xsIG5lZWQgdG8gZ28gYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggYG5ldC92bXdfdnNvY2svS2NvbmZpZ2AgdG8gY29uZmlybSBldmVyeXRoaW5nIG9uIHRoZSB2c29jayBzaWRlIGlzIGluIG9yZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYwMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE4OjA5LjIzOTU2NDQ2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1Mjc3MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZTT0NLRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWctNS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Njpjb25maWcgVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXQgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMTgtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjE5OmNvbmZpZyBWU09DS0VUU19ESUFHXFxubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjgtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjI5OmNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIGxvb3BiYWNrIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MDkuMzA4MDk5MTkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzI5NTExNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEV2ZW50ZmQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBHaXZlbiB3aGF0IEknbSB3b3JraW5nIG9uLCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgRVZFTlRGRGAgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd291bGQgbGlrZWx5IHJlc2lkZSBlaXRoZXIgd2l0aGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCBzaW5jZSBpdCBtaWdodCBiZSBhIGNvcmUga2VybmVsIGZlYXR1cmUsIG9yIHBvdGVudGlhbGx5IHdpdGhpbiBgZnMvS2NvbmZpZ2AgaWYgaXQncyBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0gb3Igc29tZSByZWxhdGVkIGluZnJhc3RydWN0dXJlLiBJ4oCZbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgdHdvIGxvY2F0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyBpdCdzIGVuYWJsZWQgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDc4LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MTEuNzQxMDUyMzI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUzNDExODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFVkVOVEZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTIzPWNvbmZpZyBUSU1FUkZEXFxuLS1cXG5pbml0L0tjb25maWctMTkzMS1cXG5pbml0L0tjb25maWc6MTkzMjpjb25maWcgRVZFTlRGRFxcbmluaXQvS2NvbmZpZy0xOTMzLVxcdGJvb2wgXFxcIkVuYWJsZSBldmVudGZkKCkgc3lzdGVtIGNhbGxcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODoxMy40OTQ0NzE3NDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI5NjkxMzEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVmhvc3QtVlNPQ0sgRHJpdmVyIE1vZGlmaWNhdGlvbiBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLiBXZSdyZSBtb2RpZnlpbmcgdGhlIHZpcnRxdWV1ZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSB2aG9zdC12c29jayBkcml2ZXIuIEVzc2VudGlhbGx5LCB3ZSdyZSBtb3ZpbmcgZnJvbSBhIHBlci1wYWNrZXQgYHZob3N0X2FkZF91c2VkYCBhcHByb2FjaCB0byB1c2luZyBgdmhvc3RfYWRkX3VzZWRfbmAgZm9yIGJhdGNoZWQgZGVzY3JpcHRvciByaW5nIHVwZGF0ZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgYmVjYXVzZSBpdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgYmF0Y2ggbGltaXRzIChgdXNlZF9saW1pdGApLCBhcnJheSBpbmRleCBtYW5hZ2VtZW50LCBhbmQgdGhlIGNydWNpYWwgYmF0Y2ggZmx1c2hpbmcgcHJvY2VkdXJlcyBoYW5kbGVkIGJ5IGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYC5cblxuQmFzZWQgb24gdGhpcyBjaGFuZ2UsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB3ZSBjYW4gZXhlcmNpc2UgdGhpcyBuZXcgYmF0Y2hpbmcgbG9naWMgZWZmZWN0aXZlbHkgYnkgZnV6emluZyBBRl9WU09DSyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBgL2Rldi92aG9zdC12c29ja2AgaW9jdGxzIHdpdGhpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIGlzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXRpZXMgYXJlIG1vc3QgbGlrZWx5IHRvIGVtZXJnZS5cblxuVG8gZW5hYmxlIHRoaXMgZnV6emluZywgd2UnbGwgbmVlZCB0byBlbmFibGUgYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbnM6IGBWSE9TVF9WU09DS2AsIGBWU09DS0VUU2AsIGBFVkVOVEZEYCwgYFZIT1NUYCwgYW5kIGBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYC4gVGhlc2UgYXJlIHRoZSBtaW5pbXVtIG5lZWRlZCB0byBnZXQgZXZlcnl0aGluZyB0byB3b3JrLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZSB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCwgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgLCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrYCwgYW5kIGB2aG9zdF92c29ja19oYW5kbGVfcnhfa2lja2AuIFdlIG5lZWQgdG8ga2VlcCBhIGNsb3NlIGV5ZSBvbiB0aGVzZS4gQWN0dWFsbHksIEkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IGB2aG9zdF9hZGRfdXNlZF9uYCBpbiBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBpcyBpbXBvcnRhbnQsIHRob3VnaCBJJ2xsIGtlZXAgdGhlIGZvY3VzIHByaW1hcmlseSBvbiB0aGUgdnNvY2stc3BlY2lmaWMgb25lcyBmb3Igbm93LlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoZXNlIGZpbmRpbmdzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMjcsIk91dHB1dFRva2VucyI6MjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE4OjE3Ljc5MTM4NzQ5MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDQ3MTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIkVWRU5URkRcIixcbiAgICBcIlZIT1NUXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF92c29ja19mbHVzaF91c2VkXCIsXG4gICAgXCJ2aG9zdF92c29ja19hZGRfdXNlZFwiLFxuICAgIFwidmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29ya1wiLFxuICAgIFwidmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGRlc2NyaXB0b3IgYmF0Y2hpbmcgaW4gdGhlIHZob3N0LXZzb2NrIGRyaXZlciAoZHJpdmVycy92aG9zdC92c29jay5jKSBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgcmVwbGFjaW5nIGluZGl2aWR1YWwgdmhvc3RfYWRkX3VzZWQgY2FsbHMgd2l0aCBiYXRjaGVkIHZob3N0X2FkZF91c2VkX24gY2FsbHMuIEl0IGludHJvZHVjZXMgbmV3IGJ1ZmZlciBhY2N1bXVsYXRpb24sIGFycmF5IGluZGV4aW5nLCBhbmQgYmF0Y2ggbGltaXQvZmx1c2hpbmcgbG9naWMgaW4gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGFjY2Vzc2libGUgdmlhIC9kZXYvdmhvc3QtdnNvY2sgYW5kIEFGX1ZTT0NLIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVlNPQ0tcIixcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJFVkVOVEZEXCIsXG4gICAgXCJWSE9TVFwiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTX0NPTU1PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdFwiLFxuICAgIFwidmhvc3RfdnNvY2tfZmx1c2hfdXNlZFwiLFxuICAgIFwidmhvc3RfdnNvY2tfYWRkX3VzZWRcIixcbiAgICBcInZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdFwiLFxuICAgIFwidmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmtcIixcbiAgICBcInZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZXNjcmlwdG9yIGJhdGNoaW5nIGluIHRoZSB2aG9zdC12c29jayBkcml2ZXIgKGRyaXZlcnMvdmhvc3QvdnNvY2suYykgZm9yIHBhY2tldCB0cmFuc21pc3Npb24sIHJlcGxhY2luZyBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkIGNhbGxzIHdpdGggYmF0Y2hlZCB2aG9zdF9hZGRfdXNlZF9uIGNhbGxzLiBJdCBpbnRyb2R1Y2VzIG5ldyBidWZmZXIgYWNjdW11bGF0aW9uLCBhcnJheSBpbmRleGluZywgYW5kIGJhdGNoIGxpbWl0L2ZsdXNoaW5nIGxvZ2ljIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBhY2Nlc3NpYmxlIHZpYSAvZGV2L3Zob3N0LXZzb2NrIGFuZCBBRl9WU09DSyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODoxNy44Njg0NDIwMzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMTg1MTI3OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MTcuODY4OTkyMTk3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzExODQ1NzMwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgYmF0Y2hpbmcgb2YgdXNlZCByaW5nIHVwZGF0ZXMgaW4gdmhvc3QtdnNvY2sgKHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCkgYnkgYWNjdW11bGF0aW5nIHVzZWQgZGVzY3JpcHRvcnMgaW4gdGhlIHByZWFsbG9jYXRlZCB2aXJ0cXVldWUgYXJyYXlzICh2cS1cXHUwMDNlaGVhZHMgYW5kIHZxLVxcdTAwM2VuaGVhZHMpIGFuZCBmbHVzaGluZyB0aGVtIHZpYSB2aG9zdF9hZGRfdXNlZF9uKCkgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkKCkgY2FsbHMuXFxuXFxuLSBLTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxcbiAgMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWs6IEVhY2ggdXNlZCBkZXNjcmlwdG9yIGVsZW1lbnQgaW4gdnEtXFx1MDAzZWhlYWRzIChzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtKSBjb250YWlucyBvbmx5IHR3byAzMi1iaXQgZmllbGRzIChpZCBhbmQgbGVuKSB3aXRob3V0IGFueSBzdHJ1Y3R1cmUgcGFkZGluZy4gQm90aCBmaWVsZHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHZxLVxcdTAwM2VuaGVhZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gdmhvc3RfdnNvY2tfYWRkX3VzZWQoKSBmb3IgZWFjaCBpbmRleCBiZWZvcmUgYmVpbmcgZmx1c2hlZCBhbmQgY29waWVkIHRvIHRoZSBndWVzdCdzIHVzZWQgcmluZyB2aWEgdmhvc3RfcHV0X3VzZWQoKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgcmVhZCBvciBsZWFrZWQuXFxuICAyLiBNZW1vcnkgQm91bmRzIGFuZCBJbnRlZ3JpdHk6IEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byBhcnJheSBpbmRleGluZywgYm91bmRzIGxpbWl0cyAodnEtXFx1MDAzZWRldi1cXHUwMDNlaW92X2xpbWl0KSwgb3IgdmlydHF1ZXVlIHN5bmNocm9uaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4gKGZvciBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKSwgYW5kIHZpcnRpbyBwcm90b2NvbCBjaGVja3MuXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2ZmQwN2U4ZmQ3NjVhOTMxMzJiM2Y4OGM5YjM1ZDc2MTM1OWVkNzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE5OjE3OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jXG5pbmRleCA5YWFhYjZiYjgwNjFjLi43YTEzYWJlNzMzNDUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbkBAIC0xMDMsMTIgKzEwMywzNSBAQCBzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcbiBcdHJldHVybiBmb3VuZDtcbiB9XG4gXG4rc3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCB1c2VkX2NvdW50KVxuK3tcbitcdGlmICghdXNlZF9jb3VudClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0dmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtXHUwMDNlaGVhZHMsIHZxLVx1MDAzZW5oZWFkcywgdXNlZF9jb3VudCk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IHVzZWRfY291bnQsXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IGhlYWQsIHVuc2lnbmVkIGludCBsZW4pXG4re1xuK1x0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9IFx1MDAyNnZxLVx1MDAzZWhlYWRzW3VzZWRfY291bnRdO1xuK1xuK1x0dXNlZC1cdTAwM2VpZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTtcbitcdHVzZWQtXHUwMDNlbGVuID0gY3B1X3RvX3Zob3N0MzIodnEsIGxlbik7XG4rXHR2cS1cdTAwM2VuaGVhZHNbdXNlZF9jb3VudF0gPSAxO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHRcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp0eF92cSA9IFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9UWF07XG4gXHRpbnQgcGt0cyA9IDAsIHRvdGFsX2xlbiA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDtcbiBcdGJvb2wgYWRkZWQgPSBmYWxzZTtcbiBcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xuIFxuQEAgLTEyMCw2ICsxNDMsMTEgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRpZiAoIXZxX21ldGFfcHJlZmV0Y2godnEpKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdC8qIEtlZXAgdGhlIGJhdGNoIHdpdGhpbiB0aGUgdXNlZCByaW5nIGFuZCB0aGUgc2NyYXRjaCBhcnJheXMuICovXG4rXHR1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS1cdTAwM2VudW0sIHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQpO1xuK1x0aWYgKHVubGlrZWx5KCF1c2VkX2xpbWl0KSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHQvKiBBdm9pZCBmdXJ0aGVyIHZtZXhpdHMsIHdlJ3JlIGFscmVhZHkgcHJvY2Vzc2luZyB0aGUgdmlydHF1ZXVlICovXG4gXHR2aG9zdF9kaXNhYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiBcbkBAIC0xNTAsNiArMTc4LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFxuIFx0XHRpZiAoaGVhZCA9PSB2cS1cdTAwM2VudW0pIHtcbiBcdFx0XHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3RfcXVldWUsIHNrYik7XG4rXG4rXHRcdFx0LyogRmx1c2ggY29tcGxldGVkIGJ1ZmZlcnMgYmVmb3JlIHJlLWVuYWJsaW5nIG5vdGlmaWNhdGlvbnMuICovXG4rXHRcdFx0aWYgKHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpKSB7XG4rXHRcdFx0XHRhZGRlZCA9IHRydWU7XG4rXHRcdFx0XHR1c2VkX2NvdW50ID0gMDtcbitcdFx0XHR9XG4rXG4gXHRcdFx0LyogV2UgY2Fubm90IGZpbmlzaCB5ZXQgaWYgbW9yZSBidWZmZXJzIHNudWNrIGluIHdoaWxlXG4gXHRcdFx0ICogcmUtZW5hYmxpbmcgbm90aWZ5LlxuIFx0XHRcdCAqL1xuQEAgLTIzMCw4ICsyNjUsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdCAqL1xuIFx0XHR2aXJ0aW9fdHJhbnNwb3J0X2RlbGl2ZXJfdGFwX3BrdChza2IpO1xuIFxuLVx0XHR2aG9zdF9hZGRfdXNlZCh2cSwgaGVhZCwgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4pO1xuLVx0XHRhZGRlZCA9IHRydWU7XG4rXHRcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCB1c2VkX2NvdW50LCBoZWFkLFxuK1x0XHRcdFx0ICAgICBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbik7XG4rXHRcdHVzZWRfY291bnQrKztcbitcdFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdCkge1xuK1x0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xuK1x0XHRcdHVzZWRfY291bnQgPSAwO1xuK1x0XHR9XG4gXG4gXHRcdFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgKz0gcGF5bG9hZF9sZW47XG4gXHRcdHRvdGFsX2xlbiArPSBwYXlsb2FkX2xlbjtcbkBAIC0yNjQsNiArMzA0LDkgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0dmlydGlvX3RyYW5zcG9ydF9jb25zdW1lX3NrYl9zZW50KHNrYiwgdHJ1ZSk7XG4gXHRcdH1cbiBcdH0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgKytwa3RzLCB0b3RhbF9sZW4pKSk7XG4rXG4rXHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCB1c2VkX2NvdW50KTtcbitcbiBcdGlmIChhZGRlZClcbiBcdFx0dmhvc3Rfc2lnbmFsKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MTcuODY4OTkzNDE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0NDk0NDYyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdCB2c29jayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZSBhbmQgaXRzIGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IHNpbmNlIGl0IHRvdWNoZXMgYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AuIFRoZSBmYWN0IHRoYXQgaXQncyBmb2N1c2luZyBvbiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBpcyBjcnVjaWFsOyB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBwYWNrZXQgc2VuZGluZyBsb2dpYyByZXNpZGVzLlxuXG5NeSBhbmFseXNpcyB0ZWxscyBtZSB0aGUgZnVuZGFtZW50YWwgc2hpZnQgaXMgaW4gaG93IHRoZSB1c2VkIHJpbmcgaXMgdXBkYXRlZC4gSW5zdGVhZCBvZiB0aGUgdHlwaWNhbCwgaW1tZWRpYXRlIGB2aG9zdF9hZGRfdXNlZGAgY2FsbCBmb3IgZWFjaCBpbmRpdmlkdWFsIHBhY2tldCwgaXQgYXBwZWFycyB3ZSdyZSBub3cgKmJhdGNoaW5nKiB0aGVzZSB1cGRhdGVzIHdpdGggYHZob3N0X2FkZF91c2VkX25gLCB1c2luZyBgdnEtXHUwMDNlaGVhZHNgLCBgdnEtXHUwMDNlbmhlYWRzYCwgYW5kIGB2aG9zdF92c29ja19mbHVzaF91c2VkKClgIGFuZCBgdmhvc3RfdnNvY2tfYWRkX3VzZWQoKWAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBiYXRjaGluZyBjYW4gb2Z0ZW4gaW1wcm92ZSBwZXJmb3JtYW5jZSBieSByZWR1Y2luZyB0aGUgb3ZlcmhlYWQgb2YgcmVwZWF0ZWQgc3lzdGVtIGNhbGxzIG9yIG1lbW9yeSBiYXJyaWVycyByZWxhdGVkIHRvIHJpbmcgdXBkYXRlcy5cblxuTm93LCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgZGVlcGVyIGludmVzdGlnYXRpb24uIEkgd2FudCB0byBzZWUgKmhvdyogdGhpcyBgdmhvc3RfYWRkX3VzZWRfbmAgZnVuY3Rpb24sIGFuZCB0aGUgYHZxLVx1MDAzZWhlYWRzYCBhbmQgYHZxLVx1MDAzZW5oZWFkc2Agc3RydWN0dXJlcywgYXJlIHVzZWQgYWNyb3NzIHRoZSAqZW50aXJlKiBgZHJpdmVycy92aG9zdC9gIGRpcmVjdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIG5vdmVsIGFwcHJvYWNoIG9yIGlmIGl0J3MgYmFzZWQgb24gc29tZSBleGlzdGluZyBwYXR0ZXJuLiBJJ2xsIHByb2JhYmx5IGZpcmUgdXAgYGdyZXBwZXJgIChvciB1c2UgYHJlYWQtZmlsZWAgaW4gYSBwaW5jaCkgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGl0cyB1c2UuIFRoaXMgd2lsbCByZXZlYWwgaWYgdGhpcyBpcyBhIHN0YW5kYXJkIHZob3N0IGlkaW9tIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dCBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSBwYXRjaCdzIHBvdGVudGlhbCBiZW5lZml0cyBhbmQgZHJhd2JhY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MjYuMzE4NDQxOTk5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE2MTIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9hZGRfdXNlZF9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jPTMwMDg9aW50IHZob3N0X2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDE1LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDE2OlxcdHJldHVybiB2aG9zdF9hZGRfdXNlZF9uKHZxLCBcXHUwMDI2aGVhZHMsIFxcdTAwMjZuaGVhZHMsIDEpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDE3LX1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzAxOD1FWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9hZGRfdXNlZCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMTktXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwMjA6c3RhdGljIGludCBfX3Zob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMjEtXFx0XFx0XFx0ICAgIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNTEtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwNTI6c3RhdGljIGludCB2aG9zdF9hZGRfdXNlZF9uX29vbyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA1My1cXHRcXHRcXHRcXHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDYwLVxcdGlmIChuIFxcdTAwM2MgY291bnQpIHtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzA2MTpcXHRcXHRyID0gX192aG9zdF9hZGRfdXNlZF9uKHZxLCBoZWFkcywgbik7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjItXFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjYtXFx0fVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDY3OlxcdHJldHVybiBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBjb3VudCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjgtfVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDY5LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDcwOnN0YXRpYyBpbnQgdmhvc3RfYWRkX3VzZWRfbl9pbl9vcmRlcihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA3MS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMTktICogd2FudCB0byBub3RpZnkgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqL1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTIwOmludCB2aG9zdF9hZGRfdXNlZF9uKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzEyMS1cXHRcXHQgICAgIHUxNiAqbmhlYWRzLCB1bnNpZ25lZCBjb3VudClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTI2LVxcdGlmICghaW5fb3JkZXIgfHwgIW5oZWFkcylcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzEyNzpcXHRcXHRyID0gdmhvc3RfYWRkX3VzZWRfbl9vb28odnEsIGhlYWRzLCBjb3VudCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMjgtXFx0ZWxzZVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTI5OlxcdFxcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHZxLCBoZWFkcywgbmhlYWRzLCBjb3VudCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMzAtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzE1MC19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxNTE6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWRfbik7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxNTItXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzIxMD12b2lkIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzIxNS17XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMyMTY6XFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIG5oZWFkcywgY291bnQpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMjE3LVxcdHZob3N0X3NpZ25hbChkZXYsIHZxKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yNDg9aW50IHZob3N0X2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKiwgdW5zaWduZWQgaW50IGhlYWQsIGludCBsZW4pO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNDk6aW50IHZob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjUwLVxcdFxcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0xMDY9c3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMTEtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjExMjpcXHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cXHUwMDNlaGVhZHMsIHZxLVxcdTAwM2VuaGVhZHMsIHVzZWRfY291bnQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMTMtXFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE4OjI2LjM2MzYwODU4N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODY4NjI5MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVmhvc3QgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgYHZob3N0X2FkZF91c2VkX25gIGFuZCwgYnkgZXh0ZW5zaW9uLCB0aGUgYHZxLVx1MDAzZWhlYWRzYCBhbmQgYHZxLVx1MDAzZW5oZWFkc2Agc3RydWN0dXJlcyBhcmUgYmVpbmcgdXRpbGl6ZWQgdGhyb3VnaG91dCB0aGUgYHZob3N0YCBkcml2ZXIgZWNvc3lzdGVtLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBoYW5kbGUgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCdzIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgYmVzdCBzdGFydGluZyBwb2ludCBpcyB0byBmb2N1cyBvbiB3aGVyZSBgdnEtXHUwMDNlaGVhZHNgIGlzIGRpcmVjdGx5IGFjY2Vzc2VkLCBzaW5jZSBJJ20gY29uY2VybmVkIGFib3V0IGhvdyBpdCdzIGJlaW5nIHVzZWQuIFNvLCBJ4oCZbGwgbmVlZCB0byBkbyBhIGNvZGUgc2VhcmNoLiBJJ2xsIGluaXRpYXRlIGEgYGdyZXBgIGZvciBgdnEtXHUwMDNlaGVhZHNgIHdpdGhpbiB0aGUgYGRyaXZlcnMvdmhvc3RgIGRpcmVjdG9yeS4gVGhpcyBzaG91bGQgaGVscCBtZSBxdWlja2x5IGlkZW50aWZ5IHRoZSBsaW5lcyB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIGJlaW5nIHJlZmVyZW5jZWQsIGFsbG93aW5nIG1lIHRvIGV4cGxvcmUgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2UgYmVoaW5kIGVhY2ggdXNlLWNhc2UuIFRoaXMgYXBwcm9hY2ggaXMgYSBzdHJhaWdodGZvcndhcmQgd2F5IHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjb2RlIGJhc2UuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgbW9yZSBjb21wbGV4IHBpY3R1cmUgb2YgdGhlIHVzZS1jYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg0NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE4OjI4LjIzMjI0MDc0OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNzA4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnEtXFx1MDAzZWhlYWRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuYz0zNzI9c3RhdGljIHZvaWQgdmhvc3RfemVyb2NvcHlfc2lnbmFsX3VzZWQoc3RydWN0IHZob3N0X25ldCAqbmV0LFxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0zODAtXFx0Zm9yIChpID0gbnZxLVxcdTAwM2Vkb25lX2lkeDsgaSAhPSBudnEtXFx1MDAzZXVwZW5kX2lkeDsgaSA9IChpICsgMSkgJSBVSU9fTUFYSU9WKSB7XFxuZHJpdmVycy92aG9zdC9uZXQuYzozODE6XFx0XFx0aWYgKHZxLVxcdTAwM2VoZWFkc1tpXS5sZW4gPT0gVkhPU1RfRE1BX0ZBSUxFRF9MRU4pXFxuZHJpdmVycy92aG9zdC9uZXQuYy0zODItXFx0XFx0XFx0dmhvc3RfbmV0X3R4X2VycihuZXQpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MzgzOlxcdFxcdGlmIChWSE9TVF9ETUFfSVNfRE9ORSh2cS1cXHUwMDNlaGVhZHNbaV0ubGVuKSkge1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6Mzg0OlxcdFxcdFxcdHZxLVxcdTAwM2VoZWFkc1tpXS5sZW4gPSBWSE9TVF9ETUFfQ0xFQVJfTEVOO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMzg1LVxcdFxcdFxcdCsrajtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMzkxLVxcdFxcdHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbih2cS1cXHUwMDNlZGV2LCB2cSxcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjM5MjpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnZxLVxcdTAwM2VoZWFkc1tudnEtXFx1MDAzZWRvbmVfaWR4XSxcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTM5My1cXHRcXHRcXHRcXHRcXHQgICAgTlVMTCwgYWRkKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9Mzk5PXN0YXRpYyB2b2lkIHZob3N0X3plcm9jb3B5X2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTQxNi1cXHQvKiBzZXQgbGVuIHRvIG1hcmsgdGhpcyBkZXNjIGJ1ZmZlcnMgZG9uZSBETUEgKi9cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjQxNzpcXHR2cS1cXHUwMDNlaGVhZHNbdWJ1Zi1cXHUwMDNlZGVzY10ubGVuID0gc3VjY2VzcyA/XFxuZHJpdmVycy92aG9zdC9uZXQuYy00MTgtXFx0XFx0VkhPU1RfRE1BX0RPTkVfTEVOIDogVkhPU1RfRE1BX0ZBSUxFRF9MRU47XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTQ3NT1zdGF0aWMgdm9pZCB2aG9zdF9uZXRfc2lnbmFsX3VzZWQoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtNDgzLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6NDg0OlxcdHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbihkZXYsIHZxLCB2cS1cXHUwMDNlaGVhZHMsXFxuZHJpdmVycy92aG9zdC9uZXQuYy00ODUtXFx0XFx0XFx0XFx0ICAgIHZxLVxcdTAwM2VuaGVhZHMsIGNvdW50KTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9NDg5PXN0YXRpYyB2b2lkIHZob3N0X3R4X2JhdGNoKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtNTAzLVxcdGlmIChpbl9vcmRlcikge1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6NTA0OlxcdFxcdHZxLVxcdTAwM2VoZWFkc1swXS5sZW4gPSAwO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtNTA1LVxcdFxcdHZxLVxcdTAwM2VuaGVhZHNbMF0gPSBudnEtXFx1MDAzZWRvbmVfaWR4O1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz03NzA9c3RhdGljIHZvaWQgaGFuZGxlX3R4X2NvcHkoc3RydWN0IHZob3N0X25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy04NjEtXFx0XFx0aWYgKGluX29yZGVyKSB7XFxuZHJpdmVycy92aG9zdC9uZXQuYzo4NjI6XFx0XFx0XFx0dnEtXFx1MDAzZWhlYWRzWzBdLmlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtODYzLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy92aG9zdC9uZXQuYzo4NjQ6XFx0XFx0XFx0dnEtXFx1MDAzZWhlYWRzW252cS1cXHUwMDNlZG9uZV9pZHhdLmlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6ODY1OlxcdFxcdFxcdHZxLVxcdTAwM2VoZWFkc1tudnEtXFx1MDAzZWRvbmVfaWR4XS5sZW4gPSAwO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtODY2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9ODczPXN0YXRpYyB2b2lkIGhhbmRsZV90eF96ZXJvY29weShzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTkyNC1cXHRcXHRcXHR1YnVmID0gbnZxLVxcdTAwM2V1YnVmX2luZm8gKyBudnEtXFx1MDAzZXVwZW5kX2lkeDtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjkyNTpcXHRcXHRcXHR2cS1cXHUwMDNlaGVhZHNbbnZxLVxcdTAwM2V1cGVuZF9pZHhdLmlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6OTI2OlxcdFxcdFxcdHZxLVxcdTAwM2VoZWFkc1tudnEtXFx1MDAzZXVwZW5kX2lkeF0ubGVuID0gVkhPU1RfRE1BX0lOX1BST0dSRVNTO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtOTI3LVxcdFxcdFxcdHVidWYtXFx1MDAzZWN0eCA9IG52cS1cXHUwMDNldWJ1ZnM7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTk1NS1cXHRcXHRcXHRpZiAoemNvcHlfdXNlZCkge1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6OTU2OlxcdFxcdFxcdFxcdGlmICh2cS1cXHUwMDNlaGVhZHNbdWJ1Zi1cXHUwMDNlZGVzY10ubGVuID09IFZIT1NUX0RNQV9JTl9QUk9HUkVTUylcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTk1Ny1cXHRcXHRcXHRcXHRcXHR2aG9zdF9uZXRfdWJ1Zl9wdXQodWJ1ZnMpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy05NjEtXFx0XFx0XFx0XFx0ZWxzZVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6OTYyOlxcdFxcdFxcdFxcdFxcdHZxLVxcdTAwM2VoZWFkc1t1YnVmLVxcdTAwM2VkZXNjXS5sZW4gPSBWSE9TVF9ETUFfRE9ORV9MRU47XFxuZHJpdmVycy92aG9zdC9uZXQuYy05NjMtXFx0XFx0XFx0fVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xMTQ5PXN0YXRpYyB2b2lkIGhhbmRsZV9yeChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEyMDctXFx0XFx0dmhvc3RfbGVuID0gc29ja19sZW4gKyB2aG9zdF9obGVuO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTIwODpcXHRcXHRoZWFkY291bnQgPSBnZXRfcnhfYnVmcyhudnEsIHZxLVxcdTAwM2VoZWFkcyArIGNvdW50LFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTIwOS1cXHRcXHRcXHRcXHRcXHR2cS1cXHUwMDNlbmhlYWRzICsgY291bnQsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9NDk3PXN0YXRpYyB2b2lkIHZob3N0X3ZxX2ZyZWVfaW92ZWNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTUwMi1cXHR2cS1cXHUwMDNlbG9nID0gTlVMTDtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NTAzOlxcdGtmcmVlKHZxLVxcdTAwM2VoZWFkcyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjUwNDpcXHR2cS1cXHUwMDNlaGVhZHMgPSBOVUxMO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy01MDUtXFx0a2ZyZWUodnEtXFx1MDAzZW5oZWFkcyk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9NTEwPXN0YXRpYyBsb25nIHZob3N0X2Rldl9hbGxvY19pb3ZlY3Moc3RydWN0IHZob3N0X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTUxOC1cXHRcXHR2cS1cXHUwMDNlbG9nID0ga21hbGxvY19vYmpzKCp2cS1cXHUwMDNlbG9nLCBkZXYtXFx1MDAzZWlvdl9saW1pdCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjUxOTpcXHRcXHR2cS1cXHUwMDNlaGVhZHMgPSBrbWFsbG9jX29ianMoKnZxLVxcdTAwM2VoZWFkcywgZGV2LVxcdTAwM2Vpb3ZfbGltaXQpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy01MjAtXFx0XFx0dnEtXFx1MDAzZW5oZWFkcyA9IGttYWxsb2NfYXJyYXkoZGV2LVxcdTAwM2Vpb3ZfbGltaXQsIHNpemVvZigqdnEtXFx1MDAzZW5oZWFkcyksXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTUyMS1cXHRcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NTIyOlxcdFxcdGlmICghdnEtXFx1MDAzZWluZGlyZWN0IHx8ICF2cS1cXHUwMDNlbG9nIHx8ICF2cS1cXHUwMDNlaGVhZHMgfHwgIXZxLVxcdTAwM2VuaGVhZHMpXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTUyMy1cXHRcXHRcXHRnb3RvIGVycl9ub21lbTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz01ODA9dm9pZCB2aG9zdF9kZXZfaW5pdChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNjEyLVxcdFxcdHZxLVxcdTAwM2VpbmRpcmVjdCA9IE5VTEw7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjYxMzpcXHRcXHR2cS1cXHUwMDNlaGVhZHMgPSBOVUxMO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy02MTQtXFx0XFx0dnEtXFx1MDAzZW5oZWFkcyA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTA2PXN0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTExLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMTI6XFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtXFx1MDAzZWhlYWRzLCB2cS1cXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTEzLVxcdHJldHVybiB0cnVlO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTExNj1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMTkte1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMjA6XFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9IFxcdTAwMjZ2cS1cXHUwMDNlaGVhZHNbdXNlZF9jb3VudF07XFxuZHJpdmVycy92aG9zdC92c29jay5jLTEyMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MjguMjc4MzE3Nzk1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MjkzMjEyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHZob3N0X2FkZF91c2VkX24gYW5kIHZob3N0X3Zzb2NrX2FkZF91c2VkKipcblxuT2theSwgdGltZSB0byByZWFsbHkgZ2V0IGludG8gdGhlIHdlZWRzIG9uIHRoZXNlIGB2aG9zdGAgZnVuY3Rpb25zLiBJIHdhbnQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgdmhvc3RfYWRkX3VzZWRfbmAgYW5kIGB2aG9zdF92c29ja19hZGRfdXNlZGAgd29yayBpbnRlcm5hbGx5LiBNeSBhcHByb2FjaCBpcyB0byBsb29rIGF0IHRoZWlyIGltcGxlbWVudGF0aW9ucyBjbG9zZWx5LCBhbmQgSSdsbCBzdGFydCBieSByZWFkaW5nIHRoZSBjb2RlIGFyb3VuZCBlYWNoIGZ1bmN0aW9uLiBGb3IgYHZob3N0X2FkZF91c2VkX25gLCBJJ2xsIGJlIGxvb2tpbmcgaW4gYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AsIGZvY3VzaW5nIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIGl0cyBjb250ZXh0LiBUaGVuLCBJJ2xsIHN3aXRjaCBvdmVyIHRvIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIHRvIHNlZSBob3cgdGhlIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiwgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCwgaXMgaW1wbGVtZW50ZWQgYW5kIGhvdyBpdCBkaWZmZXJzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZWlyIGludGVyYWN0aW9uIGFuZCB1c2FnZSB3aXRoaW4gdGhlIG92ZXJhbGwgYHZob3N0YCBmcmFtZXdvcmsuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTc2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MzAuODA3NjQyMTQ0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzAwMDpcXHR7XFxuMzAwMTpcXHRcXHR2cS1cXHUwMDNlbmV4dF9hdmFpbF9oZWFkIC09IG5kZXNjO1xcbjMwMDI6XFx0XFx0dnEtXFx1MDAzZWxhc3RfYXZhaWxfaWR4IC09IG5idWZzO1xcbjMwMDM6XFx0fVxcbjMwMDQ6XFx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGlzY2FyZF92cV9kZXNjKTtcXG4zMDA1OlxcdFxcbjMwMDY6XFx0LyogQWZ0ZXIgd2UndmUgdXNlZCBvbmUgb2YgdGhlaXIgYnVmZmVycywgd2UgdGVsbCB0aGVtIGFib3V0IGl0LiAgV2UnbGwgdGhlblxcbjMwMDc6XFx0ICogd2FudCB0byBub3RpZnkgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqL1xcbjMwMDg6XFx0aW50IHZob3N0X2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbilcXG4zMDA5OlxcdHtcXG4zMDEwOlxcdFxcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gaGVhZHMgPSB7XFxuMzAxMTpcXHRcXHRcXHRjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCksXFxuMzAxMjpcXHRcXHRcXHRjcHVfdG9fdmhvc3QzMih2cSwgbGVuKVxcbjMwMTM6XFx0XFx0fTtcXG4zMDE0OlxcdFxcdHUxNiBuaGVhZHMgPSAxO1xcbjMwMTU6XFx0XFxuMzAxNjpcXHRcXHRyZXR1cm4gdmhvc3RfYWRkX3VzZWRfbih2cSwgXFx1MDAyNmhlYWRzLCBcXHUwMDI2bmhlYWRzLCAxKTtcXG4zMDE3OlxcdH1cXG4zMDE4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2FkZF91c2VkKTtcXG4zMDE5OlxcdFxcbjMwMjA6XFx0c3RhdGljIGludCBfX3Zob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuMzAyMTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuMzAyMjpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgY291bnQpXFxuMzAyMzpcXHR7XFxuMzAyNDpcXHRcXHR2cmluZ191c2VkX2VsZW1fdCBfX3VzZXIgKnVzZWQ7XFxuMzAyNTpcXHRcXHR1MTYgb2xkLCBuZXc7XFxuMzAyNjpcXHRcXHRpbnQgc3RhcnQ7XFxuMzAyNzpcXHRcXG4zMDI4OlxcdFxcdHN0YXJ0ID0gdnEtXFx1MDAzZWxhc3RfdXNlZF9pZHggXFx1MDAyNiAodnEtXFx1MDAzZW51bSAtIDEpO1xcbjMwMjk6XFx0XFx0dXNlZCA9IHZxLVxcdTAwM2V1c2VkLVxcdTAwM2VyaW5nICsgc3RhcnQ7XFxuMzAzMDpcXHRcXHRpZiAodmhvc3RfcHV0X3VzZWQodnEsIGhlYWRzLCBzdGFydCwgY291bnQpKSB7XFxuMzAzMTpcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYWlsZWQgdG8gd3JpdGUgdXNlZFxcXCIpO1xcbjMwMzI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMzAzMzpcXHRcXHR9XFxuMzAzNDpcXHRcXHRpZiAodW5saWtlbHkodnEtXFx1MDAzZWxvZ191c2VkKSkge1xcbjMwMzU6XFx0XFx0XFx0LyogTWFrZSBzdXJlIGRhdGEgaXMgc2VlbiBiZWZvcmUgbG9nLiAqL1xcbjMwMzY6XFx0XFx0XFx0c21wX3dtYigpO1xcbjMwMzc6XFx0XFx0XFx0LyogTG9nIHVzZWQgcmluZyBlbnRyeSB3cml0ZS4gKi9cXG4zMDM4OlxcdFxcdFxcdGxvZ191c2VkKHZxLCAoKHZvaWQgX191c2VyICopdXNlZCAtICh2b2lkIF9fdXNlciAqKXZxLVxcdTAwM2V1c2VkKSxcXG4zMDM5OlxcdFxcdFxcdFxcdCBjb3VudCAqIHNpemVvZiAqdXNlZCk7XFxuMzA0MDpcXHRcXHR9XFxuMzA0MTpcXHRcXHRvbGQgPSB2cS1cXHUwMDNlbGFzdF91c2VkX2lkeDtcXG4zMDQyOlxcdFxcdG5ldyA9ICh2cS1cXHUwMDNlbGFzdF91c2VkX2lkeCArPSBjb3VudCk7XFxuMzA0MzpcXHRcXHQvKiBJZiB0aGUgZHJpdmVyIG5ldmVyIGJvdGhlcnMgdG8gc2lnbmFsIGluIGEgdmVyeSBsb25nIHdoaWxlLFxcbjMwNDQ6XFx0XFx0ICogdXNlZCBpbmRleCBtaWdodCB3cmFwIGFyb3VuZC4gSWYgdGhhdCBoYXBwZW5zLCBpbnZhbGlkYXRlXFxuMzA0NTpcXHRcXHQgKiBzaWduYWxsZWRfdXNlZCBpbmRleCB3ZSBzdG9yZWQuIFRPRE86IG1ha2Ugc3VyZSBkcml2ZXJcXG4zMDQ2OlxcdFxcdCAqIHNpZ25hbHMgYXQgbGVhc3Qgb25jZSBpbiAyXjE2IGFuZCByZW1vdmUgdGhpcy4gKi9cXG4zMDQ3OlxcdFxcdGlmICh1bmxpa2VseSgodTE2KShuZXcgLSB2cS1cXHUwMDNlc2lnbmFsbGVkX3VzZWQpIFxcdTAwM2MgKHUxNikobmV3IC0gb2xkKSkpXFxuMzA0ODpcXHRcXHRcXHR2cS1cXHUwMDNlc2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTtcXG4zMDQ5OlxcdFxcdHJldHVybiAwO1xcbjMwNTA6XFx0fVxcbjMwNTE6XFx0XFxuMzA1MjpcXHRzdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25fb29vKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbjMwNTM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuMzA1NDpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBjb3VudClcXG4zMDU1OlxcdHtcXG4zMDU2OlxcdFxcdGludCBzdGFydCwgbiwgcjtcXG4zMDU3OlxcdFxcbjMwNTg6XFx0XFx0c3RhcnQgPSB2cS1cXHUwMDNlbGFzdF91c2VkX2lkeCBcXHUwMDI2ICh2cS1cXHUwMDNlbnVtIC0gMSk7XFxuMzA1OTpcXHRcXHRuID0gdnEtXFx1MDAzZW51bSAtIHN0YXJ0O1xcbjMwNjA6XFx0XFx0aWYgKG4gXFx1MDAzYyBjb3VudCkge1xcbjMwNjE6XFx0XFx0XFx0ciA9IF9fdmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIG4pO1xcbjMwNjI6XFx0XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjMwNjM6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuMzA2NDpcXHRcXHRcXHRoZWFkcyArPSBuO1xcbjMwNjU6XFx0XFx0XFx0Y291bnQgLT0gbjtcXG4zMDY2OlxcdFxcdH1cXG4zMDY3OlxcdFxcdHJldHVybiBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBjb3VudCk7XFxuMzA2ODpcXHR9XFxuMzA2OTpcXHRcXG4zMDcwOlxcdHN0YXRpYyBpbnQgdmhvc3RfYWRkX3VzZWRfbl9pbl9vcmRlcihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4zMDcxOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuMzA3MjpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHUxNiAqbmhlYWRzLFxcbjMwNzM6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBjb3VudClcXG4zMDc0OlxcdHtcXG4zMDc1OlxcdFxcdHZyaW5nX3VzZWRfZWxlbV90IF9fdXNlciAqdXNlZDtcXG4zMDc2OlxcdFxcdHUxNiBvbGQsIG5ldyA9IHZxLVxcdTAwM2VsYXN0X3VzZWRfaWR4O1xcbjMwNzc6XFx0XFx0aW50IHN0YXJ0LCBpO1xcbjMwNzg6XFx0XFxuMzA3OTpcXHRcXHRpZiAoIW5oZWFkcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MzAuODA3ODYzMTY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjE4MzAxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpdmluZyBpbnRvIHZob3N0X2FkZF91c2VkX25faW5fb3JkZXIgYW5kIHZob3N0X2FkZF91c2VkX24qKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIHByZWNpc2Ugcm9sZXMgd2l0aGluIHRoZSB2aG9zdCBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgYHZob3N0X2FkZF91c2VkX25faW5fb3JkZXJgIGFuZCBgdmhvc3RfYWRkX3VzZWRfbmAgaW50ZXJhY3QuIEkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHRoZWlyIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLCBpZiBhbnkuIEknbGwgbmVlZCB0byByZW1lbWJlciBhbnkgc3VidGxlIGRpZmZlcmVuY2VzLCBhbmQgd2hpY2ggY29udGV4dCBzaG91bGQgYmUgcHJlZmVycmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODA3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODozMi44Njk2OTYwNDNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDgwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDgwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMwODE6XFx0XFxuMzA4MjpcXHRcXHRzdGFydCA9IHZxLVxcdTAwM2VsYXN0X3VzZWRfaWR4IFxcdTAwMjYgKHZxLVxcdTAwM2VudW0gLSAxKTtcXG4zMDgzOlxcdFxcdHVzZWQgPSB2cS1cXHUwMDNldXNlZC1cXHUwMDNlcmluZyArIHN0YXJ0O1xcbjMwODQ6XFx0XFxuMzA4NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKykge1xcbjMwODY6XFx0XFx0XFx0aWYgKHZob3N0X3B1dF91c2VkKHZxLCBcXHUwMDI2aGVhZHNbaV0sIHN0YXJ0LCAxKSkge1xcbjMwODc6XFx0XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmFpbGVkIHRvIHdyaXRlIHVzZWRcXFwiKTtcXG4zMDg4OlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjMwODk6XFx0XFx0XFx0fVxcbjMwOTA6XFx0XFx0XFx0c3RhcnQgKz0gbmhlYWRzW2ldO1xcbjMwOTE6XFx0XFx0XFx0bmV3ICs9IG5oZWFkc1tpXTtcXG4zMDkyOlxcdFxcdFxcdGlmIChzdGFydCBcXHUwMDNlPSB2cS1cXHUwMDNlbnVtKVxcbjMwOTM6XFx0XFx0XFx0XFx0c3RhcnQgLT0gdnEtXFx1MDAzZW51bTtcXG4zMDk0OlxcdFxcdH1cXG4zMDk1OlxcdFxcbjMwOTY6XFx0XFx0aWYgKHVubGlrZWx5KHZxLVxcdTAwM2Vsb2dfdXNlZCkpIHtcXG4zMDk3OlxcdFxcdFxcdC8qIE1ha2Ugc3VyZSBkYXRhIGlzIHNlZW4gYmVmb3JlIGxvZy4gKi9cXG4zMDk4OlxcdFxcdFxcdHNtcF93bWIoKTtcXG4zMDk5OlxcdFxcdFxcdC8qIExvZyB1c2VkIHJpbmcgZW50cnkgd3JpdGUuICovXFxuMzEwMDpcXHRcXHRcXHRsb2dfdXNlZCh2cSwgKCh2b2lkIF9fdXNlciAqKXVzZWQgLSAodm9pZCBfX3VzZXIgKil2cS1cXHUwMDNldXNlZCksXFxuMzEwMTpcXHRcXHRcXHRcXHQgKHZxLVxcdTAwM2VudW0gLSBzdGFydCkgKiBzaXplb2YgKnVzZWQpO1xcbjMxMDI6XFx0XFx0XFx0aWYgKHN0YXJ0ICsgY291bnQgXFx1MDAzZSB2cS1cXHUwMDNlbnVtKVxcbjMxMDM6XFx0XFx0XFx0XFx0bG9nX3VzZWQodnEsIDAsXFxuMzEwNDpcXHRcXHRcXHRcXHRcXHQgKHN0YXJ0ICsgY291bnQgLSB2cS1cXHUwMDNlbnVtKSAqIHNpemVvZiAqdXNlZCk7XFxuMzEwNTpcXHRcXHR9XFxuMzEwNjpcXHRcXG4zMTA3OlxcdFxcdG9sZCA9IHZxLVxcdTAwM2VsYXN0X3VzZWRfaWR4O1xcbjMxMDg6XFx0XFx0dnEtXFx1MDAzZWxhc3RfdXNlZF9pZHggPSBuZXc7XFxuMzEwOTpcXHRcXHQvKiBJZiB0aGUgZHJpdmVyIG5ldmVyIGJvdGhlcnMgdG8gc2lnbmFsIGluIGEgdmVyeSBsb25nIHdoaWxlLFxcbjMxMTA6XFx0XFx0ICogdXNlZCBpbmRleCBtaWdodCB3cmFwIGFyb3VuZC4gSWYgdGhhdCBoYXBwZW5zLCBpbnZhbGlkYXRlXFxuMzExMTpcXHRcXHQgKiBzaWduYWxsZWRfdXNlZCBpbmRleCB3ZSBzdG9yZWQuIFRPRE86IG1ha2Ugc3VyZSBkcml2ZXJcXG4zMTEyOlxcdFxcdCAqIHNpZ25hbHMgYXQgbGVhc3Qgb25jZSBpbiAyXjE2IGFuZCByZW1vdmUgdGhpcy4gKi9cXG4zMTEzOlxcdFxcdGlmICh1bmxpa2VseSgodTE2KShuZXcgLSB2cS1cXHUwMDNlc2lnbmFsbGVkX3VzZWQpIFxcdTAwM2MgKHUxNikobmV3IC0gb2xkKSkpXFxuMzExNDpcXHRcXHRcXHR2cS1cXHUwMDNlc2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTtcXG4zMTE1OlxcdFxcdHJldHVybiAwO1xcbjMxMTY6XFx0fVxcbjMxMTc6XFx0XFxuMzExODpcXHQvKiBBZnRlciB3ZSd2ZSB1c2VkIG9uZSBvZiB0aGVpciBidWZmZXJzLCB3ZSB0ZWxsIHRoZW0gYWJvdXQgaXQuICBXZSdsbCB0aGVuXFxuMzExOTpcXHQgKiB3YW50IHRvIG5vdGlmeSB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovXFxuMzEyMDpcXHRpbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuMzEyMTpcXHRcXHRcXHQgICAgIHUxNiAqbmhlYWRzLCB1bnNpZ25lZCBjb3VudClcXG4zMTIyOlxcdHtcXG4zMTIzOlxcdFxcdGJvb2wgaW5fb3JkZXIgPSB2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX0ZfSU5fT1JERVIpO1xcbjMxMjQ6XFx0XFx0aW50IHI7XFxuMzEyNTpcXHRcXG4zMTI2OlxcdFxcdGlmICghaW5fb3JkZXIgfHwgIW5oZWFkcylcXG4zMTI3OlxcdFxcdFxcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX29vbyh2cSwgaGVhZHMsIGNvdW50KTtcXG4zMTI4OlxcdFxcdGVsc2VcXG4zMTI5OlxcdFxcdFxcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHZxLCBoZWFkcywgbmhlYWRzLCBjb3VudCk7XFxuMzEzMDpcXHRcXG4zMTMxOlxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG4zMTMyOlxcdFxcdFxcdHJldHVybiByO1xcbjMxMzM6XFx0XFxuMzEzNDpcXHRcXHQvKiBNYWtlIHN1cmUgYnVmZmVyIGlzIHdyaXR0ZW4gYmVmb3JlIHdlIHVwZGF0ZSBpbmRleC4gKi9cXG4zMTM1OlxcdFxcdHNtcF93bWIoKTtcXG4zMTM2OlxcdFxcdGlmICh2aG9zdF9wdXRfdXNlZF9pZHgodnEpKSB7XFxuMzEzNzpcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYWlsZWQgdG8gaW5jcmVtZW50IHVzZWQgaWR4XFxcIik7XFxuMzEzODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zMTM5OlxcdFxcdH1cXG4zMTQwOlxcdFxcdGlmICh1bmxpa2VseSh2cS1cXHUwMDNlbG9nX3VzZWQpKSB7XFxuMzE0MTpcXHRcXHRcXHQvKiBNYWtlIHN1cmUgdXNlZCBpZHggaXMgc2VlbiBiZWZvcmUgbG9nLiAqL1xcbjMxNDI6XFx0XFx0XFx0c21wX3dtYigpO1xcbjMxNDM6XFx0XFx0XFx0LyogTG9nIHVzZWQgaW5kZXggdXBkYXRlLiAqL1xcbjMxNDQ6XFx0XFx0XFx0bG9nX3VzZWQodnEsIG9mZnNldG9mKHN0cnVjdCB2cmluZ191c2VkLCBpZHgpLFxcbjMxNDU6XFx0XFx0XFx0XFx0IHNpemVvZiB2cS1cXHUwMDNldXNlZC1cXHUwMDNlaWR4KTtcXG4zMTQ2OlxcdFxcdFxcdGlmICh2cS1cXHUwMDNlbG9nX2N0eClcXG4zMTQ3OlxcdFxcdFxcdFxcdGV2ZW50ZmRfc2lnbmFsKHZxLVxcdTAwM2Vsb2dfY3R4KTtcXG4zMTQ4OlxcdFxcdH1cXG4zMTQ5OlxcdFxcdHJldHVybiByO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODozMi44Njk5MjQ0MDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5NzYyNjMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgKipcblxuT2theSwgc28gd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB2c29jayBwYWNrZXRzIGFyZSBiZWluZyBzZW50LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBmdW5jdGlvbi4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHBhY2tldCB0cmFuc21pc3Npb24gd2l0aGluIHRoZSB2aG9zdCBjb250ZXh0IHNob3VsZCByZXNpZGUuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBtZWNoYW5pc20gZm9yIHB1c2hpbmcgdGhlIGRhdGEgb250byB0aGUgdHJhbnNwb3J0IGxheWVyIHRoZXJlLiBJJ20gbG9va2luZyBmb3IgZGV0YWlscyByZWdhcmRpbmcgaG93IHRoZSBwYWNrZXQgZGF0YSBpcyBjb25zdHJ1Y3RlZCAob3IgcmVmZXJlbmNlZCksIGFueSBidWZmZXIgbWFuYWdlbWVudCBpbnZvbHZlZCwgYW5kLCBjcnVjaWFsbHksIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIHZpcnRpbyBsYXllci4gSSBhbnRpY2lwYXRlIHRoZXJlJ2xsIGJlIHNvbWUgZGF0YSBzdHJ1Y3R1cmUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHZob3N0IHN0cnVjdHVyZSBmb3IgdnNvY2ssIHRoYXQgaG9sZHMgdGhlIHBhY2tldCBkZXRhaWxzLiBMZXQncyBzZWUgaWYgdGhlIGNvZGUgaW5jbHVkZXMgYW55IHBhY2tldCBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBhc3BlY3RzIG9yIGlmIGl0IHJlbGllcyBvbiBvdGhlciBjb21wb25lbnRzIGZvciB0aGF0IGZ1bmN0aW9uYWxpdHkuIEknbSBrZWVuIHRvIHNlZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYW55IHBvdGVudGlhbCBsb2NraW5nLCBhbmQgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBzZW5kIGZhaWx1cmVzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE4OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MzUuMzY3NTUzOTE0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMTAxOlxcdFxcdGZvdW5kID0gISF2aG9zdF92c29ja19nZXQoY2lkLCBuZXQpO1xcbiAxMDI6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDEwMzpcXHRcXHRyZXR1cm4gZm91bmQ7XFxuIDEwNDpcXHR9XFxuIDEwNTpcXHRcXG4gMTA2OlxcdHN0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudClcXG4gMTA4OlxcdHtcXG4gMTA5OlxcdFxcdGlmICghdXNlZF9jb3VudClcXG4gMTEwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtXFx1MDAzZWhlYWRzLCB2cS1cXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcXG4gMTEzOlxcdFxcdHJldHVybiB0cnVlO1xcbiAxMTQ6XFx0fVxcbiAxMTU6XFx0XFxuIDExNjpcXHRzdGF0aWMgdm9pZCB2aG9zdF92c29ja19hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCxcXG4gMTE4OlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbilcXG4gMTE5OlxcdHtcXG4gMTIwOlxcdFxcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSBcXHUwMDI2dnEtXFx1MDAzZWhlYWRzW3VzZWRfY291bnRdO1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHR1c2VkLVxcdTAwM2VpZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTtcXG4gMTIzOlxcdFxcdHVzZWQtXFx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xcbiAxMjQ6XFx0XFx0dnEtXFx1MDAzZW5oZWFkc1t1c2VkX2NvdW50XSA9IDE7XFxuIDEyNTpcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdHN0YXRpYyB2b2lkXFxuIDEyODpcXHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gMTI5OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4gMTMwOlxcdHtcXG4gMTMxOlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR4X3ZxID0gXFx1MDAyNnZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xcbiAxMzI6XFx0XFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xcbiAxMzM6XFx0XFx0dW5zaWduZWQgaW50IHVzZWRfY291bnQgPSAwO1xcbiAxMzQ6XFx0XFx0dW5zaWduZWQgaW50IHVzZWRfbGltaXQ7XFxuIDEzNTpcXHRcXHRib29sIGFkZGVkID0gZmFsc2U7XFxuIDEzNjpcXHRcXHRib29sIHJlc3RhcnRfdHggPSBmYWxzZTtcXG4gMTM3OlxcdFxcbiAxMzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXFxuIDE0MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcXG4gMTQ0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNDU6XFx0XFxuIDE0NjpcXHRcXHQvKiBLZWVwIHRoZSBiYXRjaCB3aXRoaW4gdGhlIHVzZWQgcmluZyBhbmQgdGhlIHNjcmF0Y2ggYXJyYXlzLiAqL1xcbiAxNDc6XFx0XFx0dXNlZF9saW1pdCA9IG1pbl90KHVuc2lnbmVkIGludCwgdnEtXFx1MDAzZW51bSwgdnEtXFx1MDAzZWRldi1cXHUwMDNlaW92X2xpbWl0KTtcXG4gMTQ4OlxcdFxcdGlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpXFxuIDE0OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTUwOlxcdFxcbiAxNTE6XFx0XFx0LyogQXZvaWQgZnVydGhlciB2bWV4aXRzLCB3ZSdyZSBhbHJlYWR5IHByb2Nlc3NpbmcgdGhlIHZpcnRxdWV1ZSAqL1xcbiAxNTI6XFx0XFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ZG8ge1xcbiAxNTU6XFx0XFx0XFx0c3RydWN0IHZpcnRpb192c29ja19oZHIgKmhkcjtcXG4gMTU2OlxcdFxcdFxcdHNpemVfdCBpb3ZfbGVuLCBwYXlsb2FkX2xlbjtcXG4gMTU3OlxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciBpb3ZfaXRlcjtcXG4gMTU4OlxcdFxcdFxcdHUzMiBmbGFnc190b19yZXN0b3JlID0gMDtcXG4gMTU5OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDE2MDpcXHRcXHRcXHR1bnNpZ25lZCBvdXQsIGluO1xcbiAxNjE6XFx0XFx0XFx0c2l6ZV90IG5ieXRlcztcXG4gMTYyOlxcdFxcdFxcdHUzMiBvZmZzZXQ7XFxuIDE2MzpcXHRcXHRcXHRpbnQgaGVhZDtcXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0XFx0c2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKFxcdTAwMjZ2c29jay1cXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRcXHRpZiAoIXNrYikge1xcbiAxNjg6XFx0XFx0XFx0XFx0dmhvc3RfZW5hYmxlX25vdGlmeShcXHUwMDI2dnNvY2stXFx1MDAzZWRldiwgdnEpO1xcbiAxNjk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE3MDpcXHRcXHRcXHR9XFxuIDE3MTpcXHRcXG4gMTcyOlxcdFxcdFxcdGhlYWQgPSB2aG9zdF9nZXRfdnFfZGVzYyh2cSwgdnEtXFx1MDAzZWlvdiwgQVJSQVlfU0laRSh2cS1cXHUwMDNlaW92KSxcXG4gMTczOlxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2b3V0LCBcXHUwMDI2aW4sIE5VTEwsIE5VTEwpO1xcbiAxNzQ6XFx0XFx0XFx0aWYgKGhlYWQgXFx1MDAzYyAwKSB7XFxuIDE3NTpcXHRcXHRcXHRcXHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcXG4gMTc2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNzc6XFx0XFx0XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHRcXHRpZiAoaGVhZCA9PSB2cS1cXHUwMDNlbnVtKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE4OjM1LjM2NzcwNTk4NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzE5ODQzMDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCB3YWxrdGhyb3VnaCwgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGUgc2VnbWVudDpcblxuKipEaXZpbmcgaW50byBgdnNvY2suY2Ag4oCTIExpbmVzIDE4MC0zMjAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBiYWNrIHRvIGl0LiBJJ20gZm9jdXNpbmcgaW4gb24gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2Agbm93LCBzcGVjaWZpY2FsbHkgYmV0d2VlbiBsaW5lcyAxODAgYW5kIDMyMC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB0byBjb3ZlciBzb21lIGNydWNpYWwgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvLCB3ZWxsLCBzb21ldGhpbmcgd2l0aGluIHRoZSB2c29jayBzdWJzeXN0ZW0uIEJhc2VkIG9uIHRoZSBmaWxlIG5hbWUsIGl0J3MgcHJvYmFibHkgaW52b2x2ZWQgd2l0aCB2aG9zdCBhbmQgdmlydGlvLXZzb2NrLiBJJ20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBwcm92aWRlIGRldGFpbHMgYWJvdXQgb25lIG9yIG1vcmUgb2Ygc2V2ZXJhbCBrZXkgYXJlYXM6IGRhdGEgdHJhbnNmZXJzLCByaW5nIGJ1ZmZlciBpbnRlcmFjdGlvbnMsIGNvbm5lY3Rpb24gc3RhdGUgbWFuYWdlbWVudCwgb3IgY29udHJvbCBwYXRoIHByb2Nlc3NpbmcuIEtub3dpbmcgdGhlIG92ZXJhbGwgY29udGV4dCBvZiB0aGUgY29kZSwgSSdsbCBiZSBwYXJ0aWN1bGFybHkgdmlnaWxhbnQgZm9yIGhvdyBpdCBkZWFscyB3aXRoIGRldmljZSBvcGVyYXRpb25zLCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3QuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgZmluZCEgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhcmVhcyB0aGF0IG1heSBiZW5lZml0IGZyb20gb3B0aW1pemF0aW9uLCBvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGFyZSBoYW5kbGVkIChvciwgdW5mb3J0dW5hdGVseSwgKm5vdCogaGFuZGxlZCkuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBhcmUgc29tZSBpbnRlcmVzdGluZyBjb21wbGV4aXRpZXMgdG8gdW5jb3ZlciBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MzcuNjg3NTUxNDM2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHRcXHRcXHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0XFx0XFx0LyogRmx1c2ggY29tcGxldGVkIGJ1ZmZlcnMgYmVmb3JlIHJlLWVuYWJsaW5nIG5vdGlmaWNhdGlvbnMuICovXFxuIDE4MzpcXHRcXHRcXHRcXHRpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHtcXG4gMTg0OlxcdFxcdFxcdFxcdFxcdGFkZGVkID0gdHJ1ZTtcXG4gMTg1OlxcdFxcdFxcdFxcdFxcdHVzZWRfY291bnQgPSAwO1xcbiAxODY6XFx0XFx0XFx0XFx0fVxcbiAxODc6XFx0XFxuIDE4ODpcXHRcXHRcXHRcXHQvKiBXZSBjYW5ub3QgZmluaXNoIHlldCBpZiBtb3JlIGJ1ZmZlcnMgc251Y2sgaW4gd2hpbGVcXG4gMTg5OlxcdFxcdFxcdFxcdCAqIHJlLWVuYWJsaW5nIG5vdGlmeS5cXG4gMTkwOlxcdFxcdFxcdFxcdCAqL1xcbiAxOTE6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KHZob3N0X2VuYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKSkpIHtcXG4gMTkyOlxcdFxcdFxcdFxcdFxcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2LCB2cSk7XFxuIDE5MzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMTk0OlxcdFxcdFxcdFxcdH1cXG4gMTk1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxOTY6XFx0XFx0XFx0fVxcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHRcXHRpZiAob3V0KSB7XFxuIDE5OTpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMjAwOlxcdFxcdFxcdFxcdHZxX2Vycih2cSwgXFxcIkV4cGVjdGVkIDAgb3V0cHV0IGJ1ZmZlcnMsIGdvdCAldVxcXFxuXFxcIiwgb3V0KTtcXG4gMjAxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMDI6XFx0XFx0XFx0fVxcbiAyMDM6XFx0XFxuIDIwNDpcXHRcXHRcXHRpb3ZfbGVuID0gaW92X2xlbmd0aChcXHUwMDI2dnEtXFx1MDAzZWlvdltvdXRdLCBpbik7XFxuIDIwNTpcXHRcXHRcXHRpZiAoaW92X2xlbiBcXHUwMDNjIHNpemVvZigqaGRyKSkge1xcbiAyMDY6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDIwNzpcXHRcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJCdWZmZXIgbGVuIFslenVdIHRvbyBzbWFsbFxcXFxuXFxcIiwgaW92X2xlbik7XFxuIDIwODpcXHRcXHRcXHRcXHRicmVhaztcXG4gMjA5OlxcdFxcdFxcdH1cXG4gMjEwOlxcdFxcbiAyMTE6XFx0XFx0XFx0aW92X2l0ZXJfaW5pdChcXHUwMDI2aW92X2l0ZXIsIElURVJfREVTVCwgXFx1MDAyNnZxLVxcdTAwM2Vpb3Zbb3V0XSwgaW4sIGlvdl9sZW4pO1xcbiAyMTI6XFx0XFx0XFx0b2Zmc2V0ID0gVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQ7XFxuIDIxMzpcXHRcXHRcXHRwYXlsb2FkX2xlbiA9IHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0O1xcbiAyMTQ6XFx0XFx0XFx0aGRyID0gdmlydGlvX3Zzb2NrX2hkcihza2IpO1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRcXHQvKiBJZiB0aGUgcGFja2V0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZVxcbiAyMTc6XFx0XFx0XFx0ICogYnVmZmVyLCB3ZSBzcGxpdCBpdCB1c2luZyBtdWx0aXBsZSBidWZmZXJzLlxcbiAyMTg6XFx0XFx0XFx0ICovXFxuIDIxOTpcXHRcXHRcXHRpZiAocGF5bG9hZF9sZW4gXFx1MDAzZSBpb3ZfbGVuIC0gc2l6ZW9mKCpoZHIpKSB7XFxuIDIyMDpcXHRcXHRcXHRcXHRwYXlsb2FkX2xlbiA9IGlvdl9sZW4gLSBzaXplb2YoKmhkcik7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdFxcdFxcdC8qIEFzIHdlIGFyZSBjb3B5aW5nIHBpZWNlcyBvZiBsYXJnZSBwYWNrZXQncyBidWZmZXIgdG9cXG4gMjIzOlxcdFxcdFxcdFxcdCAqIHNtYWxsIHJ4IGJ1ZmZlcnMsIGhlYWRlcnMgb2YgcGFja2V0cyBpbiByeCBxdWV1ZSBhcmVcXG4gMjI0OlxcdFxcdFxcdFxcdCAqIGNyZWF0ZWQgZHluYW1pY2FsbHkgYW5kIGFyZSBpbml0aWFsaXplZCB3aXRoIGhlYWRlclxcbiAyMjU6XFx0XFx0XFx0XFx0ICogb2YgY3VycmVudCBwYWNrZXQoZXhjZXB0IGxlbmd0aCkuIEJ1dCBpbiBjYXNlIG9mXFxuIDIyNjpcXHRcXHRcXHRcXHQgKiBTT0NLX1NFUVBBQ0tFVCwgd2UgYWxzbyBtdXN0IGNsZWFyIG1lc3NhZ2UgZGVsaW1ldGVyXFxuIDIyNzpcXHRcXHRcXHRcXHQgKiBiaXQgKFZJUlRJT19WU09DS19TRVFfRU9NKSBhbmQgTVNHX0VPUiBiaXRcXG4gMjI4OlxcdFxcdFxcdFxcdCAqIChWSVJUSU9fVlNPQ0tfU0VRX0VPUikgaWYgc2V0LiBPdGhlcndpc2UsXFxuIDIyOTpcXHRcXHRcXHRcXHQgKiB0aGVyZSB3aWxsIGJlIHNlcXVlbmNlIG9mIHBhY2tldHMgd2l0aCB0aGVzZVxcbiAyMzA6XFx0XFx0XFx0XFx0ICogYml0cyBzZXQuIEFmdGVyIGluaXRpYWxpemVkIGhlYWRlciB3aWxsIGJlIGNvcGllZCB0b1xcbiAyMzE6XFx0XFx0XFx0XFx0ICogcnggYnVmZmVyLCB0aGVzZSByZXF1aXJlZCBiaXRzIHdpbGwgYmUgcmVzdG9yZWQuXFxuIDIzMjpcXHRcXHRcXHRcXHQgKi9cXG4gMjMzOlxcdFxcdFxcdFxcdGlmIChsZTMyX3RvX2NwdShoZHItXFx1MDAzZWZsYWdzKSBcXHUwMDI2IFZJUlRJT19WU09DS19TRVFfRU9NKSB7XFxuIDIzNDpcXHRcXHRcXHRcXHRcXHRoZHItXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5jcHVfdG9fbGUzMihWSVJUSU9fVlNPQ0tfU0VRX0VPTSk7XFxuIDIzNTpcXHRcXHRcXHRcXHRcXHRmbGFnc190b19yZXN0b3JlIHw9IFZJUlRJT19WU09DS19TRVFfRU9NO1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHRcXHRcXHRcXHRpZiAobGUzMl90b19jcHUoaGRyLVxcdTAwM2VmbGFncykgXFx1MDAyNiBWSVJUSU9fVlNPQ0tfU0VRX0VPUikge1xcbiAyMzg6XFx0XFx0XFx0XFx0XFx0XFx0aGRyLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+Y3B1X3RvX2xlMzIoVklSVElPX1ZTT0NLX1NFUV9FT1IpO1xcbiAyMzk6XFx0XFx0XFx0XFx0XFx0XFx0ZmxhZ3NfdG9fcmVzdG9yZSB8PSBWSVJUSU9fVlNPQ0tfU0VRX0VPUjtcXG4gMjQwOlxcdFxcdFxcdFxcdFxcdH1cXG4gMjQxOlxcdFxcdFxcdFxcdH1cXG4gMjQyOlxcdFxcdFxcdH1cXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0XFx0LyogU2V0IHRoZSBjb3JyZWN0IGxlbmd0aCBpbiB0aGUgaGVhZGVyICovXFxuIDI0NTpcXHRcXHRcXHRoZHItXFx1MDAzZWxlbiA9IGNwdV90b19sZTMyKHBheWxvYWRfbGVuKTtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0XFx0bmJ5dGVzID0gY29weV90b19pdGVyKGhkciwgc2l6ZW9mKCpoZHIpLCBcXHUwMDI2aW92X2l0ZXIpO1xcbiAyNDg6XFx0XFx0XFx0aWYgKG5ieXRlcyAhPSBzaXplb2YoKmhkcikpIHtcXG4gMjQ5OlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAyNTA6XFx0XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmF1bHRlZCBvbiBjb3B5aW5nIHBrdCBoZHJcXFxcblxcXCIpO1xcbiAyNTE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI1MjpcXHRcXHRcXHR9XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdFxcdGlmIChza2JfY29weV9kYXRhZ3JhbV9pdGVyKHNrYixcXG4gMjU1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCxcXG4gMjU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZpb3ZfaXRlcixcXG4gMjU3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHBheWxvYWRfbGVuKSkge1xcbiAyNTg6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDI1OTpcXHRcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYXVsdGVkIG9uIGNvcHlpbmcgcGt0IGJ1ZlxcXFxuXFxcIik7XFxuIDI2MDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMjYxOlxcdFxcdFxcdH1cXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0XFx0LyogRGVsaXZlciB0byBtb25pdG9yaW5nIGRldmljZXMgYWxsIHBhY2tldHMgdGhhdCB3ZVxcbiAyNjQ6XFx0XFx0XFx0ICogd2lsbCB0cmFuc21pdC5cXG4gMjY1OlxcdFxcdFxcdCAqL1xcbiAyNjY6XFx0XFx0XFx0dmlydGlvX3RyYW5zcG9ydF9kZWxpdmVyX3RhcF9wa3Qoc2tiKTtcXG4gMjY3OlxcdFxcbiAyNjg6XFx0XFx0XFx0dmhvc3RfdnNvY2tfYWRkX3VzZWQodnEsIHVzZWRfY291bnQsIGhlYWQsXFxuIDI2OTpcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqaGRyKSArIHBheWxvYWRfbGVuKTtcXG4gMjcwOlxcdFxcdFxcdHVzZWRfY291bnQrKztcXG4gMjcxOlxcdFxcdFxcdGlmICh1c2VkX2NvdW50ID09IHVzZWRfbGltaXQpIHtcXG4gMjcyOlxcdFxcdFxcdFxcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xcbiAyNzM6XFx0XFx0XFx0XFx0dXNlZF9jb3VudCA9IDA7XFxuIDI3NDpcXHRcXHRcXHR9XFxuIDI3NTpcXHRcXG4gMjc2OlxcdFxcdFxcdFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cXHUwMDNlb2Zmc2V0ICs9IHBheWxvYWRfbGVuO1xcbiAyNzc6XFx0XFx0XFx0dG90YWxfbGVuICs9IHBheWxvYWRfbGVuO1xcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHRcXHQvKiBJZiB3ZSBkaWRuJ3Qgc2VuZCBhbGwgdGhlIHBheWxvYWQgd2UgY2FuIHJlcXVldWUgdGhlIHBhY2tldFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODozNy42ODc2NzQxOTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM5MzQ0Njk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB2c29jay5jOiBMaW5lIENoZWNrKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBgZHJpdmVycy92aG9zdC92c29jay5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGxpbmVzIDI4MCB0byAzMjAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFdoYXQncyBoYXBwZW5pbmcgaW4gdGhpcyBzZWN0aW9uIG9mIGNvZGU/IElzIGl0IHJlbGF0ZWQgdG8gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBkYXRhIHRyYW5zZmVyLCBlcnJvciBoYW5kbGluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEdpdmVuIHRoZSBtb2R1bGUsIGl0J3MgaGlnaGx5IGxpa2VseSB3ZSBhcmUgZGVhbGluZyB3aXRoIHRoZSB2aG9zdC12c29jayBzZXR1cCwgYnV0IHdpdGhvdXQgbW9yZSBjb250ZXh0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGlzIHVua25vd24uXG5cbkknbSBwcm9iYWJseSBhZnRlciBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBhIHN1YnRsZSBidWcsIG9yIGFuIGFyZWEgZm9yIG9wdGltaXphdGlvbi4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zLCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIGFuZCBhbnkgcG90ZW50aWFsbHkgY29tcGxleCBsb2dpYyB3aXRoaW4gdGhpcyByYW5nZS4gTWF5YmUgdGhlcmUncyBhIGxvY2sgY29udGVudGlvbiBpc3N1ZSwgYW4gaW5lZmZpY2llbnQgbWVtb3J5IGFsbG9jYXRpb24sIG9yIGEgcmFjZSBjb25kaXRpb24gbHVya2luZyB3aXRoaW4gdGhvc2UgbGluZXMuIFBlcmhhcHMgdGhlcmUncyBhbiBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB2aXJ0aW8gcXVldWVzIG9yIHRoZSBndWVzdC1zaWRlIHZzb2NrIGRyaXZlciB0aGF0J3Mgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIGFueSBmdW5jdGlvbiBjYWxscywgY29tbWVudHMgKGlmIGFueSEpLCBhbmQgdmFyaWFibGUgbmFtZXMuIEkgbmVlZCB0byByZWZyZXNoIHRoZSBpbm5lciB3b3JraW5ncyBvZiB2c29jayBmb3IgdGhpcyBtb2R1bGUgYW5kIGlkZW50aWZ5IHdoZXJlIHRoaXMgY29kZSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6NDAuMDgxMTI0NTk0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjgwOlxcdFxcdFxcdCAqIHRvIHNlbmQgaXQgd2l0aCB0aGUgbmV4dCBhdmFpbGFibGUgYnVmZmVyLlxcbiAyODE6XFx0XFx0XFx0ICovXFxuIDI4MjpcXHRcXHRcXHRpZiAoVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQgXFx1MDAzYyBza2ItXFx1MDAzZWxlbikge1xcbiAyODM6XFx0XFx0XFx0XFx0aGRyLVxcdTAwM2VmbGFncyB8PSBjcHVfdG9fbGUzMihmbGFnc190b19yZXN0b3JlKTtcXG4gMjg0OlxcdFxcbiAyODU6XFx0XFx0XFx0XFx0LyogV2UgYXJlIHF1ZXVlaW5nIHRoZSBzYW1lIHNrYiB0byBoYW5kbGVcXG4gMjg2OlxcdFxcdFxcdFxcdCAqIHRoZSByZW1haW5pbmcgYnl0ZXMsIGFuZCB3ZSB3YW50IHRvIGRlbGl2ZXIgaXRcXG4gMjg3OlxcdFxcdFxcdFxcdCAqIHRvIG1vbml0b3JpbmcgZGV2aWNlcyBpbiB0aGUgbmV4dCBpdGVyYXRpb24uXFxuIDI4ODpcXHRcXHRcXHRcXHQgKi9cXG4gMjg5OlxcdFxcdFxcdFxcdHZpcnRpb192c29ja19za2JfY2xlYXJfdGFwX2RlbGl2ZXJlZChza2IpO1xcbiAyOTA6XFx0XFx0XFx0XFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV9oZWFkKFxcdTAwMjZ2c29jay1cXHUwMDNlc2VuZF9wa3RfcXVldWUsIHNrYik7XFxuIDI5MTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyOTI6XFx0XFx0XFx0XFx0aWYgKHZpcnRpb192c29ja19za2JfcmVwbHkoc2tiKSkge1xcbiAyOTM6XFx0XFx0XFx0XFx0XFx0aW50IHZhbDtcXG4gMjk0OlxcdFxcbiAyOTU6XFx0XFx0XFx0XFx0XFx0dmFsID0gYXRvbWljX2RlY19yZXR1cm4oXFx1MDAyNnZzb2NrLVxcdTAwM2VxdWV1ZWRfcmVwbGllcyk7XFxuIDI5NjpcXHRcXG4gMjk3OlxcdFxcdFxcdFxcdFxcdC8qIERvIHdlIGhhdmUgcmVzb3VyY2VzIHRvIHJlc3VtZSB0eFxcbiAyOTg6XFx0XFx0XFx0XFx0XFx0ICogcHJvY2Vzc2luZz9cXG4gMjk5OlxcdFxcdFxcdFxcdFxcdCAqL1xcbiAzMDA6XFx0XFx0XFx0XFx0XFx0aWYgKHZhbCArIDEgPT0gdHhfdnEtXFx1MDAzZW51bSlcXG4gMzAxOlxcdFxcdFxcdFxcdFxcdFxcdHJlc3RhcnRfdHggPSB0cnVlO1xcbiAzMDI6XFx0XFx0XFx0XFx0fVxcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X2NvbnN1bWVfc2tiX3NlbnQoc2tiLCB0cnVlKTtcXG4gMzA1OlxcdFxcdFxcdH1cXG4gMzA2OlxcdFxcdH0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgKytwa3RzLCB0b3RhbF9sZW4pKSk7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRpZiAoYWRkZWQpXFxuIDMxMTpcXHRcXHRcXHR2aG9zdF9zaWduYWwoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0b3V0OlxcbiAzMTQ6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRpZiAocmVzdGFydF90eClcXG4gMzE3OlxcdFxcdFxcdHZob3N0X3BvbGxfcXVldWUoXFx1MDAyNnR4X3ZxLVxcdTAwM2Vwb2xsKTtcXG4gMzE4OlxcdH1cXG4gMzE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODo0MC4wODEyMzUzMDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk3MjMwNzQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBbmFseXNpczogdmhvc3QtdnNvY2sgUGF0Y2ggUmV2aWV3KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHZob3N0LXZzb2NrIHBhdGNoIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBLTVNBTi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBtZXRpY3Vsb3VzbHkgdHJhY2UgdGhlIGRhdGEgZmxvdyBhbmQgaW5pdGlhbGl6YXRpb24gdG8gY29uZmlkZW50bHkgcnVsZSBvdXQgYW55IEtNU0FOLXJlbGF0ZWQgY29uY2VybnMuXG5cbkkgc2VlIG5ldyBmdW5jdGlvbnMgYmVpbmcgYWRkZWQ6IGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYC4gVGhlIHB1cnBvc2UgaXMgY2xlYXJseSB0byBtYW5hZ2UgdGhlIGB1c2VkYCByaW5nLCBhY2N1bXVsYXRpbmcgZW50cmllcyAoZGVzY3JpcHRvciBJRHMgYW5kIGxlbmd0aHMpIGFuZCB0aGVuIHdyaXRpbmcgdGhlbSBvdXQgdG8gdGhlIGd1ZXN0LiBUaGUgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgZnVuY3Rpb24gbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgZGF0YSB0cmFuc21pc3Npb24gbG9naWMsIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZC5cblxuTG9va2luZyBjbG9zZWx5IGF0IGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLCBJJ20gdHJhY2tpbmcgdGhlIGB1c2VkX2NvdW50YCB2YXJpYWJsZS4gSXQncyBpbmNyZW1lbnRlZCBmb3IgZWFjaCBwYWNrZXQsIGFuZCB1c2VkIHRvIGluZGV4IGludG8gYHZxLVx1MDAzZWhlYWRzYCAoYW4gYXJyYXkgb2YgYHZyaW5nX3VzZWRfZWxlbWAgc3RydWN0dXJlcykgYW5kIGB2cS1cdTAwM2VuaGVhZHNgIChhbiBhcnJheSBvZiBmbGFncykuICBDcnVjaWFsbHksIEkgY29uZmlybSB0aGF0IGVhY2ggZWxlbWVudCBvZiBgdnEtXHUwMDNlaGVhZHNgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYGlkYCBhbmQgYGxlbmAgdmFsdWVzIHZpYSBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIGJlZm9yZSB0aGUgYHVzZWRfY291bnRgIGlzIGluY3JlbWVudGVkLiAgVGhlIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBmdW5jdGlvbiBpcyB0aGVuIHRyaWdnZXJlZCBlaXRoZXIgd2hlbiBhIGxpbWl0IGlzIHJlYWNoZWQgb3IgYXQgdGhlIGVuZCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCB0aGF0IHdyaXRlcyB0aGUgYWNjdW11bGF0ZWQgZW50cmllcyBvdXQgdG8gdGhlIGd1ZXN0J3MgdXNlZCByaW5nLlxuXG5Ob3csIHRoZSBwb3RlbnRpYWwgS01TQU4gcGl0ZmFsbHMuICBXZSBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGFuZCB3aGVyZSB0aGUgZ3Vlc3QgY2FuIHBvdGVudGlhbGx5IG9ic2VydmUgdGhlIGRhdGEgd2l0aGluIHRoZXNlIHN0cnVjdHVyZXMuICBJIGlkZW50aWZ5IHRoYXQgYHZxLVx1MDAzZWhlYWRzYCBpcyB1bHRpbWF0ZWx5IHdyaXR0ZW4gdG8gdXNlcnNwYWNlICh0aGUgZ3Vlc3QncyBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgLiBCdXQsIGJlY2F1c2Ugb2YgdGhlIHN0cmljdCBpbml0aWFsaXphdGlvbiwgdGhlIHVzZXIgc3BhY2UgbWVtb3J5IGlzIGFsd2F5cyB3cml0dGVuIHdpdGggaW5pdGlhbGl6ZWQgZGF0YS5cblxuSSdtIGZvY3VzZWQgb24gdGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCB3aGljaCBpcyB1c2VkIGZvciB0aGUgYGhlYWRzYCBhcnJheS4gSXQgaXMgdGhlIGNydWNpYWwgc3RydWN0IGZvciB0aGUgd3JpdGUgdG8gdGhlIGd1ZXN0J3MgbWVtb3J5LiAgSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdHJ1Y3R1cmU6IHR3byAzMi1iaXQgaW50ZWdlcnMsIGBpZGAgYW5kIGBsZW5gLCB3aXRoIG5vIHBhZGRpbmcuIFRoZSBjb2RlIGV4cGxpY2l0bHkgYXNzaWducyB2YWx1ZXMgdG8gYm90aCBgaWRgIGFuZCBgbGVuYCBiZWZvcmUgYW55IHBvdGVudGlhbCB1c2VyLXNwYWNlIGV4cG9zdXJlLiBUaGUgYHZxLVx1MDAzZW5oZWFkc2AgYXJyYXkgaXMgYSBzaW1wbGUgY291bnRlciBhcnJheSB3aGljaCB0cmFja3MgaWYgYSBoZWFkIGVsZW1lbnQgaGFzIGJlZW4gcG9wdWxhdGVkLCBzbyB0aGlzIHNob3VsZCBhbHNvIGJlIHNhZmVseSBpbml0aWFsaXplZC5cblxuV2UncmUgZXhwbGljaXRseSBpbml0aWFsaXppbmcgZXZlcnl0aGluZy4gVGhlIGNvZGUgZW5zdXJlcyBib3VuZHMgY2hlY2tzIGFuZCBsaW1pdHMgb24gYHVzZWRfY291bnRgIHZpYSBgdXNlZF9saW1pdGAuIEknbSBjaGVja2luZyBmb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZSBhcmVuJ3QgYW55LiBJJ20gbG9va2luZyBmb3IgYWxsb2NhdGlvbnMgb3IgY29waWVzIG9mIHN0cnVjdHVyZXMgd2hlcmUgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgY29waWVkLCBidXQgSSBkbyBub3Qgc2VlIGFueS4gVGhlcmUncyBub3RoaW5nIGJlaW5nIGNvcGllZCBvdXQgdG8gdXNlciBzcGFjZSB0aGF0J3MgcGFydGlhbGx5IGluaXRpYWxpemVkLlxuXG5TbywgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYTpcblxuMS4gICoqU3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmc6KiogIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBoYXMgbm8gcGFkZGluZyBhbmQgdGhlIGBpZGAgYW5kIGBsZW5gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkICpiZWZvcmUqIHRoZSBkYXRhIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiAgTm8gaXNzdWVzIGhlcmUuXG5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vcGUuIEV2ZXJ5dGhpbmcgaXMgZXhwbGljaXQuXG5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyByZWFkIGxhdGVyOioqICBOb3QgQXBwbGljYWJsZS4gRXZlcnl0aGluZyBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLlxuXG40LiAgKipCb3VuZHMgY2hlY2tzLCBldGMuLCB0aGF0IG1pZ2h0IGxlYWQgdG8gYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqIE5vdCBBcHBsaWNhYmxlLiBUaGUgY29kZSB1c2VzIGB1c2VkX2xpbWl0YCB0byBwcmV2ZW50IGV4Y2VlZGluZyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXlzLCBhbmQgYHVzZWRfY291bnRgIGlzIHN0cmljdGx5IGluY3JlbWVudGVkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBhcHBlYXIgdG8gaW50cm9kdWNlIEtNU0FOIHZ1bG5lcmFiaWxpdGllcy4gVGhlIHBvdGVudGlhbCByaXNrcyBoZXJlIGFyZSBpbiBib3VuZHMgb3ZlcmZsb3cgKHdoaWNoIEtBU0FOIHdvdWxkIGNhdGNoKSBvciBpbiBsb2dpYyBlcnJvcnMgKHJhY2VzLCBtaXNzZWQgbm90aWZpY2F0aW9ucywgdmlydGlvIHByb3RvY29sIGlzc3VlcyksIGJ1dCBub25lIG9mIHRob3NlIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOJ3MgcHVycG9zZSBpcyB0byBjYXRjaCB0aGUgbGF0dGVyLiBXZSBoYXZlIHNhZmUgaW5pdGlhbGl6ZWQgZGF0YSwgc28gdGhlIHJpc2sgaXMgbmlsLiBJJ20gY29tZm9ydGFibGUgc2F5aW5nIHRoYXQgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAgaGVyZSwgYW5kIEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhhdCwgYWxvbmcgd2l0aCBhIGNsZWFyLCBkZXRhaWxlZCBleHBsYW5hdGlvbiBkaXN0aW5ndWlzaGluZyBLTVNBTiBmcm9tIEtBU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU3NywiT3V0cHV0VG9rZW5zIjozMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6NDkuMDUzNTQ1NDYzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGJhdGNoaW5nIG9mIHVzZWQgcmluZyB1cGRhdGVzIGluIHZob3N0LXZzb2NrICh2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QpIGJ5IGFjY3VtdWxhdGluZyB1c2VkIGRlc2NyaXB0b3JzIGluIHRoZSBwcmVhbGxvY2F0ZWQgdmlydHF1ZXVlIGFycmF5cyAodnEtXFx1MDAzZWhlYWRzIGFuZCB2cS1cXHUwMDNlbmhlYWRzKSBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgdmhvc3RfYWRkX3VzZWRfbigpIGluc3RlYWQgb2YgaW5kaXZpZHVhbCB2aG9zdF9hZGRfdXNlZCgpIGNhbGxzLlxcblxcbi0gS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4gIDEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrOiBFYWNoIHVzZWQgZGVzY3JpcHRvciBlbGVtZW50IGluIHZxLVxcdTAwM2VoZWFkcyAoc3RydWN0IHZyaW5nX3VzZWRfZWxlbSkgY29udGFpbnMgb25seSB0d28gMzItYml0IGZpZWxkcyAoaWQgYW5kIGxlbikgd2l0aG91dCBhbnkgc3RydWN0dXJlIHBhZGRpbmcuIEJvdGggZmllbGRzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB2cS1cXHUwMDNlbmhlYWRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHZob3N0X3Zzb2NrX2FkZF91c2VkKCkgZm9yIGVhY2ggaW5kZXggYmVmb3JlIGJlaW5nIGZsdXNoZWQgYW5kIGNvcGllZCB0byB0aGUgZ3Vlc3QncyB1c2VkIHJpbmcgdmlhIHZob3N0X3B1dF91c2VkKCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGlzIHJlYWQgb3IgbGVha2VkLlxcbiAgMi4gTWVtb3J5IEJvdW5kcyBhbmQgSW50ZWdyaXR5OiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gYXJyYXkgaW5kZXhpbmcsIGJvdW5kcyBsaW1pdHMgKHZxLVxcdTAwM2VkZXYtXFx1MDAzZWlvdl9saW1pdCksIG9yIHZpcnRxdWV1ZSBzeW5jaHJvbml6YXRpb24gbG9naWMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChmb3Igb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcyksIGFuZCB2aXJ0aW8gcHJvdG9jb2wgY2hlY2tzLlxcblxcblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGJhdGNoaW5nIG9mIHVzZWQgcmluZyB1cGRhdGVzIGluIHZob3N0LXZzb2NrICh2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QpIGJ5IGFjY3VtdWxhdGluZyB1c2VkIGRlc2NyaXB0b3JzIGluIHRoZSBwcmVhbGxvY2F0ZWQgdmlydHF1ZXVlIGFycmF5cyAodnEtXFx1MDAzZWhlYWRzIGFuZCB2cS1cXHUwMDNlbmhlYWRzKSBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgdmhvc3RfYWRkX3VzZWRfbigpIGluc3RlYWQgb2YgaW5kaXZpZHVhbCB2aG9zdF9hZGRfdXNlZCgpIGNhbGxzLlxcblxcbi0gS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4gIDEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrOiBFYWNoIHVzZWQgZGVzY3JpcHRvciBlbGVtZW50IGluIHZxLVxcdTAwM2VoZWFkcyAoc3RydWN0IHZyaW5nX3VzZWRfZWxlbSkgY29udGFpbnMgb25seSB0d28gMzItYml0IGZpZWxkcyAoaWQgYW5kIGxlbikgd2l0aG91dCBhbnkgc3RydWN0dXJlIHBhZGRpbmcuIEJvdGggZmllbGRzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB2cS1cXHUwMDNlbmhlYWRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHZob3N0X3Zzb2NrX2FkZF91c2VkKCkgZm9yIGVhY2ggaW5kZXggYmVmb3JlIGJlaW5nIGZsdXNoZWQgYW5kIGNvcGllZCB0byB0aGUgZ3Vlc3QncyB1c2VkIHJpbmcgdmlhIHZob3N0X3B1dF91c2VkKCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGlzIHJlYWQgb3IgbGVha2VkLlxcbiAgMi4gTWVtb3J5IEJvdW5kcyBhbmQgSW50ZWdyaXR5OiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gYXJyYXkgaW5kZXhpbmcsIGJvdW5kcyBsaW1pdHMgKHZxLVxcdTAwM2VkZXYtXFx1MDAzZWlvdl9saW1pdCksIG9yIHZpcnRxdWV1ZSBzeW5jaHJvbml6YXRpb24gbG9naWMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChmb3Igb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcyksIGFuZCB2aXJ0aW8gcHJvdG9jb2wgY2hlY2tzLlxcblxcblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 18:58:29 +0000 UTC FinishedAt: 2026-09-06 19:18:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VSOCK", "VSOCKETS", "EVENTFD", "VHOST", "VIRTIO_VSOCKETS_COMMON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VSOCK", "VSOCKETS", "EVENTFD", "VHOST", "VIRTIO_VSOCKETS_COMMON" ], "series_id": "894c8666-db3c-4885-981f-0e353bc11b27" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_transport_do_send_pkt", "vhost_vsock_flush_used", "vhost_vsock_add_used", "vhost_transport_send_pkt", "vhost_transport_send_pkt_work", "vhost_vsock_handle_rx_kick" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O0VWRU5URkQmIzM0OywKICAgICYjMzQ7VkhPU1QmIzM0OywKICAgICYjMzQ7VklSVElPX1ZTT0NLRVRTX0NPTU1PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCYjMzQ7LAogICAgJiMzNDt2aG9zdF92c29ja19mbHVzaF91c2VkJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX2FkZF91c2VkJiMzNDssCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9zZW5kX3BrdCYjMzQ7LAogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29yayYjMzQ7LAogICAgJiMzNDt2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgYmF0Y2hpbmcgb2YgdXNlZCByaW5nIHVwZGF0ZXMgaW4gdmhvc3QtdnNvY2sgKHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCkgYnkgYWNjdW11bGF0aW5nIHVzZWQgZGVzY3JpcHRvcnMgaW4gdGhlIHByZWFsbG9jYXRlZCB2aXJ0cXVldWUgYXJyYXlzICh2cS1cdTAwM2VoZWFkcyBhbmQgdnEtXHUwMDNlbmhlYWRzKSBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgdmhvc3RfYWRkX3VzZWRfbigpIGluc3RlYWQgb2YgaW5kaXZpZHVhbCB2aG9zdF9hZGRfdXNlZCgpIGNhbGxzLlxuXG4tIEtNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4gIDEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrOiBFYWNoIHVzZWQgZGVzY3JpcHRvciBlbGVtZW50IGluIHZxLVx1MDAzZWhlYWRzIChzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtKSBjb250YWlucyBvbmx5IHR3byAzMi1iaXQgZmllbGRzIChpZCBhbmQgbGVuKSB3aXRob3V0IGFueSBzdHJ1Y3R1cmUgcGFkZGluZy4gQm90aCBmaWVsZHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHZxLVx1MDAzZW5oZWFkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiB2aG9zdF92c29ja19hZGRfdXNlZCgpIGZvciBlYWNoIGluZGV4IGJlZm9yZSBiZWluZyBmbHVzaGVkIGFuZCBjb3BpZWQgdG8gdGhlIGd1ZXN0JiMzOTtzIHVzZWQgcmluZyB2aWEgdmhvc3RfcHV0X3VzZWQoKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgcmVhZCBvciBsZWFrZWQuXG4gIDIuIE1lbW9yeSBCb3VuZHMgYW5kIEludGVncml0eTogQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgcGF0Y2ggd291bGQgcmVsYXRlIHRvIGFycmF5IGluZGV4aW5nLCBib3VuZHMgbGltaXRzICh2cS1cdTAwM2VkZXYtXHUwMDNlaW92X2xpbWl0KSwgb3IgdmlydHF1ZXVlIHN5bmNocm9uaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4gKGZvciBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKSwgYW5kIHZpcnRpbyBwcm90b2NvbCBjaGVja3MuXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZXNjcmlwdG9yIGJhdGNoaW5nIGluIHRoZSB2aG9zdC12c29jayBkcml2ZXIgKGRyaXZlcnMvdmhvc3QvdnNvY2suYykgZm9yIHBhY2tldCB0cmFuc21pc3Npb24sIHJlcGxhY2luZyBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkIGNhbGxzIHdpdGggYmF0Y2hlZCB2aG9zdF9hZGRfdXNlZF9uIGNhbGxzLiBJdCBpbnRyb2R1Y2VzIG5ldyBidWZmZXIgYWNjdW11bGF0aW9uLCBhcnJheSBpbmRleGluZywgYW5kIGJhdGNoIGxpbWl0L2ZsdXNoaW5nIGxvZ2ljIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBhY2Nlc3NpYmxlIHZpYSAvZGV2L3Zob3N0LXZzb2NrIGFuZCBBRl9WU09DSyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODZmZDA3ZThmZDc2NWE5MzEzMmIzZjg4YzliMzVkNzYxMzU5ZWQ3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTk6MTc6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jXG5pbmRleCA5YWFhYjZiYjgwNjFjLi43YTEzYWJlNzMzNDUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbkBAIC0xMDMsMTIgJiM0MzsxMDMsMzUgQEAgc3RhdGljIGJvb2wgdmhvc3RfdHJhbnNwb3J0X2hhc19yZW1vdGVfY2lkKHN0cnVjdCB2c29ja19zb2NrICp2c2ssIHUzMiBjaWQpXG4gXHRyZXR1cm4gZm91bmQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCB1c2VkX2NvdW50KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF1c2VkX2NvdW50KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cdTAwM2VoZWFkcywgdnEtXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4mIzQzO1x0XHRcdFx0IHVuc2lnbmVkIGludCB1c2VkX2NvdW50LFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSBcdTAwMjZ2cS1cdTAwM2VoZWFkc1t1c2VkX2NvdW50XTtcbiYjNDM7XG4mIzQzO1x0dXNlZC1cdTAwM2VpZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTtcbiYjNDM7XHR1c2VkLVx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xuJiM0MztcdHZxLVx1MDAzZW5oZWFkc1t1c2VkX2NvdW50XSA9IDE7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdFx0XHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4ge1xuIFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xuIFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCB1c2VkX2NvdW50ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDtcbiBcdGJvb2wgYWRkZWQgPSBmYWxzZTtcbiBcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xuIFxuQEAgLTEyMCw2ICYjNDM7MTQzLDExIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0LyogS2VlcCB0aGUgYmF0Y2ggd2l0aGluIHRoZSB1c2VkIHJpbmcgYW5kIHRoZSBzY3JhdGNoIGFycmF5cy4gKi9cbiYjNDM7XHR1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS1cdTAwM2VudW0sIHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQpO1xuJiM0MztcdGlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHQvKiBBdm9pZCBmdXJ0aGVyIHZtZXhpdHMsIHdlJiMzOTtyZSBhbHJlYWR5IHByb2Nlc3NpbmcgdGhlIHZpcnRxdWV1ZSAqL1xuIFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cSk7XG4gXG5AQCAtMTUwLDYgJiM0MzsxNzgsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXG4gXHRcdGlmIChoZWFkID09IHZxLVx1MDAzZW51bSkge1xuIFx0XHRcdHZpcnRpb192c29ja19za2JfcXVldWVfaGVhZChcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIEZsdXNoIGNvbXBsZXRlZCBidWZmZXJzIGJlZm9yZSByZS1lbmFibGluZyBub3RpZmljYXRpb25zLiAqL1xuJiM0MztcdFx0XHRpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHtcbiYjNDM7XHRcdFx0XHRhZGRlZCA9IHRydWU7XG4mIzQzO1x0XHRcdFx0dXNlZF9jb3VudCA9IDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4gXHRcdFx0LyogV2UgY2Fubm90IGZpbmlzaCB5ZXQgaWYgbW9yZSBidWZmZXJzIHNudWNrIGluIHdoaWxlXG4gXHRcdFx0ICogcmUtZW5hYmxpbmcgbm90aWZ5LlxuIFx0XHRcdCAqL1xuQEAgLTIzMCw4ICYjNDM7MjY1LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHQgKi9cbiBcdFx0dmlydGlvX3RyYW5zcG9ydF9kZWxpdmVyX3RhcF9wa3Qoc2tiKTtcbiBcbi1cdFx0dmhvc3RfYWRkX3VzZWQodnEsIGhlYWQsIHNpemVvZigqaGRyKSAmIzQzOyBwYXlsb2FkX2xlbik7XG4tXHRcdGFkZGVkID0gdHJ1ZTtcbiYjNDM7XHRcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCB1c2VkX2NvdW50LCBoZWFkLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZW9mKCpoZHIpICYjNDM7IHBheWxvYWRfbGVuKTtcbiYjNDM7XHRcdHVzZWRfY291bnQmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdCkge1xuJiM0MztcdFx0XHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCB1c2VkX2NvdW50KTtcbiYjNDM7XHRcdFx0dXNlZF9jb3VudCA9IDA7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgJiM0Mzs9IHBheWxvYWRfbGVuO1xuIFx0XHR0b3RhbF9sZW4gJiM0Mzs9IHBheWxvYWRfbGVuO1xuQEAgLTI2NCw2ICYjNDM7MzA0LDkgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0dmlydGlvX3RyYW5zcG9ydF9jb25zdW1lX3NrYl9zZW50KHNrYiwgdHJ1ZSk7XG4gXHRcdH1cbiBcdH0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgJiM0MzsmIzQzO3BrdHMsIHRvdGFsX2xlbikpKTtcbiYjNDM7XG4mIzQzO1x0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCk7XG4mIzQzO1xuIFx0aWYgKGFkZGVkKVxuIFx0XHR2aG9zdF9zaWduYWwoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7RVZFTlRGRCYjMzQ7LAogICAgJiMzNDtWSE9TVCYjMzQ7LAogICAgJiMzNDtWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0JiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX2ZsdXNoX3VzZWQmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfYWRkX3VzZWQmIzM0OywKICAgICYjMzQ7dmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0JiMzNDssCiAgICAmIzM0O3Zob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgZGVzY3JpcHRvciBiYXRjaGluZyBpbiB0aGUgdmhvc3QtdnNvY2sgZHJpdmVyIChkcml2ZXJzL3Zob3N0L3Zzb2NrLmMpIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLCByZXBsYWNpbmcgaW5kaXZpZHVhbCB2aG9zdF9hZGRfdXNlZCBjYWxscyB3aXRoIGJhdGNoZWQgdmhvc3RfYWRkX3VzZWRfbiBjYWxscy4gSXQgaW50cm9kdWNlcyBuZXcgYnVmZmVyIGFjY3VtdWxhdGlvbiwgYXJyYXkgaW5kZXhpbmcsIGFuZCBiYXRjaCBsaW1pdC9mbHVzaGluZyBsb2dpYyBpbiByZWFjaGFibGUga2VybmVsIGNvZGUgYWNjZXNzaWJsZSB2aWEgL2Rldi92aG9zdC12c29jayBhbmQgQUZfVlNPQ0sgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2ZmQwN2U4ZmQ3NjVhOTMxMzJiM2Y4OGM5YjM1ZDc2MTM1OWVkNzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDE5OjE3OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jCmluZGV4IDlhYWFiNmJiODA2MWMuLjdhMTNhYmU3MzM0NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3QvdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMKQEAgLTEwMywxMiAmIzQzOzEwMywzNSBAQCBzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZCkKIAlyZXR1cm4gZm91bmQ7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLAomIzQzOwkJCQkgICB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCkKJiM0Mzt7CiYjNDM7CWlmICghdXNlZF9jb3VudCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJdmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtJmd0O2hlYWRzLCB2cS0mZ3Q7bmhlYWRzLCB1c2VkX2NvdW50KTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLAomIzQzOwkJCQkgdW5zaWduZWQgaW50IHVzZWRfY291bnQsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSAmYW1wO3ZxLSZndDtoZWFkc1t1c2VkX2NvdW50XTsKJiM0MzsKJiM0MzsJdXNlZC0mZ3Q7aWQgPSBjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCk7CiYjNDM7CXVzZWQtJmd0O2xlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pOwomIzQzOwl2cS0mZ3Q7bmhlYWRzW3VzZWRfY291bnRdID0gMTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZAogdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJCQkgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpCiB7CiAJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSAmYW1wO3Zzb2NrLSZndDt2cXNbVlNPQ0tfVlFfVFhdOwogCWludCBwa3RzID0gMCwgdG90YWxfbGVuID0gMDsKJiM0MzsJdW5zaWduZWQgaW50IHVzZWRfY291bnQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDsKIAlib29sIGFkZGVkID0gZmFsc2U7CiAJYm9vbCByZXN0YXJ0X3R4ID0gZmFsc2U7CiAKQEAgLTEyMCw2ICYjNDM7MTQzLDExIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCWlmICghdnFfbWV0YV9wcmVmZXRjaCh2cSkpCiAJCWdvdG8gb3V0OwogCiYjNDM7CS8qIEtlZXAgdGhlIGJhdGNoIHdpdGhpbiB0aGUgdXNlZCByaW5nIGFuZCB0aGUgc2NyYXRjaCBhcnJheXMuICovCiYjNDM7CXVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLSZndDtudW0sIHZxLSZndDtkZXYtJmd0O2lvdl9saW1pdCk7CiYjNDM7CWlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAkvKiBBdm9pZCBmdXJ0aGVyIHZtZXhpdHMsIHdlJiMzOTtyZSBhbHJlYWR5IHByb2Nlc3NpbmcgdGhlIHZpcnRxdWV1ZSAqLwogCXZob3N0X2Rpc2FibGVfbm90aWZ5KCZhbXA7dnNvY2stJmd0O2RldiwgdnEpOwogCkBAIC0xNTAsNiAmIzQzOzE3OCwxMyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAogCQlpZiAoaGVhZCA9PSB2cS0mZ3Q7bnVtKSB7CiAJCQl2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoJmFtcDt2c29jay0mZ3Q7c2VuZF9wa3RfcXVldWUsIHNrYik7CiYjNDM7CiYjNDM7CQkJLyogRmx1c2ggY29tcGxldGVkIGJ1ZmZlcnMgYmVmb3JlIHJlLWVuYWJsaW5nIG5vdGlmaWNhdGlvbnMuICovCiYjNDM7CQkJaWYgKHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpKSB7CiYjNDM7CQkJCWFkZGVkID0gdHJ1ZTsKJiM0MzsJCQkJdXNlZF9jb3VudCA9IDA7CiYjNDM7CQkJfQomIzQzOwogCQkJLyogV2UgY2Fubm90IGZpbmlzaCB5ZXQgaWYgbW9yZSBidWZmZXJzIHNudWNrIGluIHdoaWxlCiAJCQkgKiByZS1lbmFibGluZyBub3RpZnkuCiAJCQkgKi8KQEAgLTIzMCw4ICYjNDM7MjY1LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCQkgKi8KIAkJdmlydGlvX3RyYW5zcG9ydF9kZWxpdmVyX3RhcF9wa3Qoc2tiKTsKIAotCQl2aG9zdF9hZGRfdXNlZCh2cSwgaGVhZCwgc2l6ZW9mKCpoZHIpICYjNDM7IHBheWxvYWRfbGVuKTsKLQkJYWRkZWQgPSB0cnVlOwomIzQzOwkJdmhvc3RfdnNvY2tfYWRkX3VzZWQodnEsIHVzZWRfY291bnQsIGhlYWQsCiYjNDM7CQkJCSAgICAgc2l6ZW9mKCpoZHIpICYjNDM7IHBheWxvYWRfbGVuKTsKJiM0MzsJCXVzZWRfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJaWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdCkgewomIzQzOwkJCWFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpOwomIzQzOwkJCXVzZWRfY291bnQgPSAwOwomIzQzOwkJfQogCiAJCVZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS0mZ3Q7b2Zmc2V0ICYjNDM7PSBwYXlsb2FkX2xlbjsKIAkJdG90YWxfbGVuICYjNDM7PSBwYXlsb2FkX2xlbjsKQEAgLTI2NCw2ICYjNDM7MzA0LDkgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJCQl2aXJ0aW9fdHJhbnNwb3J0X2NvbnN1bWVfc2tiX3NlbnQoc2tiLCB0cnVlKTsKIAkJfQogCX0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgJiM0MzsmIzQzO3BrdHMsIHRvdGFsX2xlbikpKTsKJiM0MzsKJiM0MzsJYWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCk7CiYjNDM7CiAJaWYgKGFkZGVkKQogCQl2aG9zdF9zaWduYWwoJmFtcDt2c29jay0mZ3Q7ZGV2LCB2cSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzMwoJCQkJCQkJb3V0cHV0OiA2NwoJCQkJCQkJdGhvdWdodHM6IDE0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBOZWVkIGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgcGF0Y2ggc2VyaWVzIGFuZCBuZWVkIHRvIGRlY2lkZSBpZiBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIgZnV6emluZy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AuIFJpZ2h0IGF3YXksIHRoYXQgcmFpc2VzIGEgZmxhZyDigJMgdmhvc3QgYW5kIHZzb2NrIGFsd2F5cyBtYWtlIG1lIHBheSBhdHRlbnRpb24uIFRoZXkmIzM5O3JlIG9mdGVuIHRvdWNoeSBhcmVhcyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBpc3N1ZXMuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgLCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCBhbmQgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRob3NlIG5hbWVzIGFyZSBpbnRlcmVzdGluZzsgdGhlICYjMzQ7dXNlZCYjMzQ7IGFuZCAmIzM0O3NlbmQmIzM0OyBoaW50cyBhdCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFja2V0IHByb2Nlc3NpbmcsIHdoaWNoIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLgoKQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNvbnRleHQuIFRpbWUgdG8gcHVsbCBvdXQgdGhlIHRvb2xzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IganVzdCBtYW51YWxseSBleGFtaW5lIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIGFuZCBgZHJpdmVycy92aG9zdC9LY29uZmlnYC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMsIGFuZCB0aGUgb3ZlcmFsbCBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgZmluZGluZyBvdXQgd2hhdCBvcHRpb25zIGNvbnRyb2wgdGhhdCB2c29jayBzdHVmZiBpcyBpbXBvcnRhbnQuIElmIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCwgdGhhdCYjMzk7cyBhIGRpZmZlcmVudCBzdG9yeSB0aGFuIHNvbWV0aGluZyBvYnNjdXJlLiBBZnRlciB0aGUgcXVpY2sgY2hlY2ssIEkmIzM5O2xsIGtub3cgaWYgZnV6emluZyBpcyB3b3J0aCB0aGUgZWZmb3J0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAxMDE6XHRcdGZvdW5kID0gISF2aG9zdF92c29ja19nZXQoY2lkLCBuZXQpO1xuIDEwMjpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMTAzOlx0XHRyZXR1cm4gZm91bmQ7XG4gMTA0Olx0fVxuIDEwNTpcdFxuIDEwNjpcdHN0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4gMTA3Olx0XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudClcbiAxMDg6XHR7XG4gMTA5Olx0XHRpZiAoIXVzZWRfY291bnQpXG4gMTEwOlx0XHRcdHJldHVybiBmYWxzZTtcbiAxMTE6XHRcbiAxMTI6XHRcdHZob3N0X2FkZF91c2VkX24odnEsIHZxLVx1MDAzZWhlYWRzLCB2cS1cdTAwM2VuaGVhZHMsIHVzZWRfY291bnQpO1xuIDExMzpcdFx0cmV0dXJuIHRydWU7XG4gMTE0Olx0fVxuIDExNTpcdFxuIDExNjpcdHN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuIDExNzpcdFx0XHRcdFx0IHVuc2lnbmVkIGludCB1c2VkX2NvdW50LFxuIDExODpcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBoZWFkLCB1bnNpZ25lZCBpbnQgbGVuKVxuIDExOTpcdHtcbiAxMjA6XHRcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSBcdTAwMjZ2cS1cdTAwM2VoZWFkc1t1c2VkX2NvdW50XTtcbiAxMjE6XHRcbiAxMjI6XHRcdHVzZWQtXHUwMDNlaWQgPSBjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCk7XG4gMTIzOlx0XHR1c2VkLVx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xuIDEyNDpcdFx0dnEtXHUwMDNlbmhlYWRzW3VzZWRfY291bnRdID0gMTtcbiAxMjU6XHR9XG4gMTI2Olx0XG4gMTI3Olx0c3RhdGljIHZvaWRcbiAxMjg6XHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiAxMjk6XHRcdFx0XHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4gMTMwOlx0e1xuIDEzMTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHhfdnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xuIDEzMjpcdFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xuIDEzMzpcdFx0dW5zaWduZWQgaW50IHVzZWRfY291bnQgPSAwO1xuIDEzNDpcdFx0dW5zaWduZWQgaW50IHVzZWRfbGltaXQ7XG4gMTM1Olx0XHRib29sIGFkZGVkID0gZmFsc2U7XG4gMTM2Olx0XHRib29sIHJlc3RhcnRfdHggPSBmYWxzZTtcbiAxMzc6XHRcbiAxMzg6XHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIDEzOTpcdFxuIDE0MDpcdFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXG4gMTQxOlx0XHRcdGdvdG8gb3V0O1xuIDE0MjpcdFxuIDE0MzpcdFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcbiAxNDQ6XHRcdFx0Z290byBvdXQ7XG4gMTQ1Olx0XG4gMTQ2Olx0XHQvKiBLZWVwIHRoZSBiYXRjaCB3aXRoaW4gdGhlIHVzZWQgcmluZyBhbmQgdGhlIHNjcmF0Y2ggYXJyYXlzLiAqL1xuIDE0NzpcdFx0dXNlZF9saW1pdCA9IG1pbl90KHVuc2lnbmVkIGludCwgdnEtXHUwMDNlbnVtLCB2cS1cdTAwM2VkZXYtXHUwMDNlaW92X2xpbWl0KTtcbiAxNDg6XHRcdGlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpXG4gMTQ5Olx0XHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9WU09DSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU1LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjU2OmNvbmZpZyBWSE9TVF9WU09DS1xuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVx0dHJpc3RhdGUgXCYjMzQ7dmhvc3QgdmlydGlvLXZzb2NrIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxOTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIEtjb25maWcgZm9yIFZIT1NUX1ZTT0NLKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgVkhPU1RfVlNPQ0sgaXMgZW5hYmxlZCBvciwgYXQgbGVhc3QsIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbi4gQmVmb3JlIEkgc3RhcnQgZGVidWdnaW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gdmlydHVhbCBzb2NrZXRzLCB0aGUgS2NvbmZpZyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBrbm93IHdoZXJlIHRvIGxvb2suIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBidWlsdC1pbiBtb2R1bGUsIG9yIGlzIHRoaXMgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIHNldD8gSSYjMzk7bGwgcXVpY2tseSBzY2FuIHRoZSBkZXBlbmRlbmNpZXMsIGFueSByZWxldmFudCAjaWZkZWZzLCBhbmQgbWF5YmUgZXZlbiBsb29rIGZvciBjb21tZW50cyBhYm91dCBpdHMgaW50ZW5kZWQgdXNlIGNhc2VzIG9yIGtub3duIGxpbWl0YXRpb25zLiBFbnN1cmluZyB0aGF0IHRoZSBtb2R1bGUgb3IgYnVpbHQtaW4gZnVuY3Rpb25hbGl0eSBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBpcyBwYXJhbW91bnQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICYjMzQ7dHJhY2VycyYjMzQ7IGluIHRoZSBjb25maWd1cmF0aW9uLCBzbyBJIGNhbiBmaW5kIG15IG5leHQgc3RlcHMuIFRoaXMgaXMgYSBmb3VuZGF0aW9uYWwgc3RlcCBiZWZvcmUgSSB3YXN0ZSB0aW1lIG9uIG1vcmUgY29tcGxpY2F0ZWQgZGVidWdnaW5nIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTU6XHRcbiAgNTY6XHRjb25maWcgVkhPU1RfVlNPQ0tcbiAgNTc6XHRcdHRyaXN0YXRlIFwmIzM0O3Zob3N0IHZpcnRpby12c29jayBkcml2ZXJcJiMzNDtcbiAgNTg6XHRcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IEVWRU5URkRcbiAgNTk6XHRcdHNlbGVjdCBWSE9TVFxuICA2MDpcdFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbiAgNjE6XHRcdGRlZmF1bHQgblxuICA2MjpcdFx0aGVscFxuICA2MzpcdFx0VGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgQUZfVlNPQ0tcbiAgNjQ6XHRcdHNvY2tldHMgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBndWVzdHMuICBUaGUgZ3Vlc3RzIG11c3QgaGF2ZSB0aGVcbiAgNjU6XHRcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXG4gIDY2Olx0XG4gIDY3Olx0XHRUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXG4gIDY4Olx0XHR2aG9zdF92c29jay5cbiAgNjk6XHRcbiAgNzA6XHRjb25maWcgVkhPU1RfVkRQQVxuICA3MTpcdFx0dHJpc3RhdGUgXCYjMzQ7Vmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcJiMzNDtcbiAgNzI6XHRcdGRlcGVuZHMgb24gRVZFTlRGRFxuICA3MzpcdFx0c2VsZWN0IFZIT1NUXG4gIDc0Olx0XHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXG4gIDc1Olx0XHRkZXBlbmRzIG9uIFZEUEFcbiAgNzY6XHRcdGhlbHBcbiAgNzc6XHRcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxuICA3ODpcdFx0ICBndWVzdCB2aXJ0aW8gZGV2aWNlcyB3aXRoIHRoZSB2RFBBLWJhc2VkIGJhY2tlbmRzLlxuICA3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHZob3N0LXZzb2NrIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHZob3N0LXZzb2NrIGltcGxlbWVudGF0aW9uIGluIExpbnV4LiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGFjY2Vzc2VkIOKAkyBpcyBpdCB0aHJvdWdoIGEgY2hhcmFjdGVyIGRldmljZSBsaWtlIGAvZGV2L3Zob3N0LXZzb2NrYCwgaW9jdGxzLCBvciB0aGUgc3RhbmRhcmQgc29ja2V0IGludGVyZmFjZT8gSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIGEgY29tYmluYXRpb24gb2YgdGhpbmdzLCBnaXZlbiB0aGUgdmlydHVhbCBuYXR1cmUuIFRpbWUgdG8gZGlnIGluLiBJJiMzOTtsbCBzdGFydCBieSB0cmFjaW5nIHRoZSBkYXRhIHBhdGggZm9yIHBhY2tldCBzZW5kaW5nLiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgdGhhdCBpbiB0aGUgYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AgZmlsZS4gTGV0JiMzOTtzIHBpbnBvaW50IHdoZXJlIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGlzIGNhbGxlZDsgdGhhdCBzaG91bGQgYmUgdGhlIGVudHJ5IHBvaW50IGludG8gdGhlIHRyYW5zcG9ydCBsYXllciBmcm9tIHRoZSB2aG9zdCBkcml2ZXIuIFRoYXQgd2lsbCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQgdG8gc3RhcnQgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYz0xMjc9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMjg6dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTI5LVx0XHRcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzIwPXN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMjctXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzI4Olx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzI5LX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzMyPXZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTM1NS1cdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozNTY6XHQgKiB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QoKSB3aWxsIGNoZWNrIGl0IHVuZGVyIHRoZSBtdXRleCBhbnl3YXkuXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzU3LVx0ICovXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTY0ND1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjUwLVxuZHJpdmVycy92aG9zdC92c29jay5jOjY1MTpcdHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCh2c29jaywgdnEpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTY1Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlZob3N0LVZTb2NrIE9wdGltaXphdGlvbiBBbmFseXNpcyoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGhlcmUgaXMgYWJvdXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGluIGB2aG9zdC12c29ja2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHBhY2tldCBwcm9jZXNzaW5nIGlzIGhhbmRsZWQuIEluc3RlYWQgb2YgbWFraW5nIGluZGl2aWR1YWwsIGNvc3RseSBjYWxscyB0byBgdmhvc3RfYWRkX3VzZWRgIGZvciBldmVyeSBzaW5nbGUgcGFja2V0LCB3aGljaCwgZnJhbmtseSwgc2VlbXMgaW5lZmZpY2llbnQsIHRoZSBpbXBsZW1lbnRhdGlvbiBub3cgYmF0Y2hlcyB0aGVzZSB1cGRhdGVzLiBJdCBsb29rcyBsaWtlIHRoZSBzeXN0ZW0gYWNjdW11bGF0ZXMgcGFja2V0IGRlc2NyaXB0b3JzIGludG8gYSBgdnEtJmd0O2hlYWRzYCBhcnJheS4gVGhlbiwgdGhlc2UgYXJlIGZsdXNoZWQgaW4gYSBtb3JlIGVmZmljaWVudCBtYW5uZXIgdXNpbmcgYHZob3N0X2FkZF91c2VkX25gIHdoZW4gZWl0aGVyIGEgY2VydGFpbiBgdXNlZF9saW1pdGAgaXMgcmVhY2hlZCwgb3Igd2hlbiB0aGUgZW50aXJlIHByb2Nlc3NpbmcgbG9vcCBjb21wbGV0ZXMsIG9yIHJ1bnMgb3V0IG9mIGJ1ZmZlcnMuIFRoaXMgYmF0Y2hpbmcgc3RyYXRlZ3kgc2hvdWxkIHNpZ25pZmljYW50bHkgcmVkdWNlIHRoZSBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggdGhlIHJpbmcgdXBkYXRlcy4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IHN5emthbGxlciwgaGF2ZSBwcm9wZXIgYWNjZXNzIHRvIGAvZGV2L3Zob3N0LXZzb2NrYC4gVGhpcyBpcyBhIGNyaXRpY2FsIHByZXJlcXVpc2l0ZSwgb2YgY291cnNlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLCB0byBlbnN1cmUgdGhhdCB0aGUgY2hhcmFjdGVyIGRldmljZSBvciBtaXNjZGV2aWNlIHJlZ2lzdHJhdGlvbiBpcyBzZXQgdXAgY29ycmVjdGx5IGFuZCBwZXJtaXNzaW9ucyBhcmUgc2V0LiBHb3R0YSBtYWtlIHN1cmUgd2UgY2FuIGFjdHVhbGx5ICp1c2UqIHRoZSBibGFzdGVkIHRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaXNjX3JlZ2lzdGVyfGZpbGVfb3BlcmF0aW9uc3x2aG9zdF92c29jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzEtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzI6c3RhdGljIGNvbnN0IGludCB2aG9zdF92c29ja19iaXRzW10gPSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzMtXHRWSE9TVF9GRUFUVVJFUyxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzctXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6Mzg6I2RlZmluZSBWSE9TVF9WU09DS19GRUFUVVJFUyBWSE9TVF9GRUFUVVJFU19VNjQodmhvc3RfdnNvY2tfYml0cywgMClcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zOS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz00MD1lbnVtIHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDMtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NDQ6LyogVXNlZCB0byB0cmFjayBhbGwgdGhlIHZob3N0X3Zzb2NrIGluc3RhbmNlcyBvbiB0aGUgc3lzdGVtLiAqL1xuZHJpdmVycy92aG9zdC92c29jay5jOjQ1OnN0YXRpYyBERUZJTkVfTVVURVgodmhvc3RfdnNvY2tfbXV0ZXgpO1xuZHJpdmVycy92aG9zdC92c29jay5jOjQ2OnN0YXRpYyBERUZJTkVfUkVBRF9NT1NUTFlfSEFTSFRBQkxFKHZob3N0X3Zzb2NrX2hhc2gsIDgpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTQ3LVxuZHJpdmVycy92aG9zdC92c29jay5jOjQ4OnN0cnVjdCB2aG9zdF92c29jayB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDktXHRzdHJ1Y3Qgdmhvc3RfZGV2IGRldjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTMtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTQ6XHQvKiBMaW5rIHRvIGdsb2JhbCB2aG9zdF92c29ja19oYXNoLCB3cml0ZXMgdXNlIHZob3N0X3Zzb2NrX211dGV4ICovXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTUtXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBoYXNoO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz02Nj1zdGF0aWMgdTMyIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKHZvaWQpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTcwLVxuZHJpdmVycy92aG9zdC92c29jay5jOjcxOi8qIENhbGxlcnMgbXVzdCBiZSBpbiBhbiBSQ1UgcmVhZCBzZWN0aW9uIG9yIGhvbGQgdGhlIHZob3N0X3Zzb2NrX211dGV4LlxuZHJpdmVycy92aG9zdC92c29jay5jLTcyLSAqIFRoZSByZXR1cm4gdmFsdWUgY2FuIG9ubHkgYmUgZGVyZWZlcmVuY2VkIHdoaWxlIHdpdGhpbiB0aGUgc2VjdGlvbi5cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03My0gKi9cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NDpzdGF0aWMgc3RydWN0IHZob3N0X3Zzb2NrICp2aG9zdF92c29ja19nZXQodTMyIGd1ZXN0X2NpZCwgc3RydWN0IG5ldCAqbmV0KVxuZHJpdmVycy92aG9zdC92c29jay5jLTc1LXtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NjpcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzctXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6Nzg6XHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlX3JjdSh2aG9zdF92c29ja19oYXNoLCB2c29jaywgaGFzaCwgZ3Vlc3RfY2lkLFxuZHJpdmVycy92aG9zdC92c29jay5jOjc5Olx0XHRcdFx0ICAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNnZob3N0X3Zzb2NrX211dGV4KSkge1xuZHJpdmVycy92aG9zdC92c29jay5jLTgwLVx0XHR1MzIgb3RoZXJfY2lkID0gdnNvY2stXHUwMDNlZ3Vlc3RfY2lkO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05ND1zdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAwLVx0cmN1X3JlYWRfbG9jaygpO1xuZHJpdmVycy92aG9zdC92c29jay5jOjEwMTpcdGZvdW5kID0gISF2aG9zdF92c29ja19nZXQoY2lkLCBuZXQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwMi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDUtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA2OnN0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA3LVx0XHRcdFx0ICAgdW5zaWduZWQgaW50IHVzZWRfY291bnQpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTExNS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMTY6c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTE3LVx0XHRcdFx0IHVuc2lnbmVkIGludCB1c2VkX2NvdW50LFxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0xMjc9c3RhdGljIHZvaWRcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMjg6dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTI5LVx0XHRcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTgyLVx0XHRcdC8qIEZsdXNoIGNvbXBsZXRlZCBidWZmZXJzIGJlZm9yZSByZS1lbmFibGluZyBub3RpZmljYXRpb25zLiAqL1xuZHJpdmVycy92aG9zdC92c29jay5jOjE4MzpcdFx0XHRpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xODQtXHRcdFx0XHRhZGRlZCA9IHRydWU7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTI2Ny1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoyNjg6XHRcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCB1c2VkX2NvdW50LCBoZWFkLFxuZHJpdmVycy92aG9zdC92c29jay5jLTI2OS1cdFx0XHRcdCAgICAgc2l6ZW9mKCpoZHIpICYjNDM7IHBheWxvYWRfbGVuKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMjcxLVx0XHRpZiAodXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0KSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MjcyOlx0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTI3My1cdFx0XHR1c2VkX2NvdW50ID0gMDtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzA3LVxuZHJpdmVycy92aG9zdC92c29jay5jOjMwODpcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTMwOS1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzIwPXN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMjItXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjM6XHRzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrO1xuZHJpdmVycy92aG9zdC92c29jay5jLTMyNC1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjU6XHR2c29jayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdnNvY2ssIHNlbmRfcGt0X3dvcmspO1xuZHJpdmVycy92aG9zdC92c29jay5jLTMyNi1cdHZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzMyPXZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTMzNC1cdHN0cnVjdCB2aXJ0aW9fdnNvY2tfaGRyICpoZHIgPSB2aXJ0aW9fdnNvY2tfaGRyKHNrYik7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzM1Olx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jaztcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMzYtXHRpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzM5LVxuZHJpdmVycy92aG9zdC92c29jay5jOjM0MDpcdC8qIEZpbmQgdGhlIHZob3N0X3Zzb2NrIGFjY29yZGluZyB0byBndWVzdCBjb250ZXh0IGlkICAqL1xuZHJpdmVycy92aG9zdC92c29jay5jOjM0MTpcdHZzb2NrID0gdmhvc3RfdnNvY2tfZ2V0KGxlNjRfdG9fY3B1KGhkci1cdTAwM2Vkc3RfY2lkKSwgbmV0KTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNDItXHRpZiAoIXZzb2NrKSB7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTM3NT12aG9zdF90cmFuc3BvcnRfY2FuY2VsX3BrdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxuZHJpdmVycy92aG9zdC92c29jay5jLTM3Ni17XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6Mzc3Olx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jaztcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNzgtXHRpbnQgY250ID0gMDtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzgyLVxuZHJpdmVycy92aG9zdC92c29jay5jOjM4MzpcdC8qIEZpbmQgdGhlIHZob3N0X3Zzb2NrIGFjY29yZGluZyB0byBndWVzdCBjb250ZXh0IGlkICAqL1xuZHJpdmVycy92aG9zdC92c29jay5jOjM4NDpcdHZzb2NrID0gdmhvc3RfdnNvY2tfZ2V0KHZzay1cdTAwM2VyZW1vdGVfYWRkci5zdm1fY2lkLFxuZHJpdmVycy92aG9zdC92c29jay5jLTM4NS1cdFx0XHRcdHNvY2tfbmV0KHNrX3Zzb2NrKHZzaykpKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NDA2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NDA3OnZob3N0X3Zzb2NrX2FsbG9jX3NrYihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00MDgtXHRcdCAgICAgIHVuc2lnbmVkIGludCBvdXQsIHVuc2lnbmVkIGludCBpbilcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDY3LS8qIElzIHRoZXJlIHNwYWNlIGxlZnQgZm9yIHJlcGxpZXMgdG8gcnggcGFja2V0cz8gKi9cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo0Njg6c3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfbW9yZV9yZXBsaWVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDY5LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NTQ4PXN0YXRpYyBib29sIHZob3N0X3RyYW5zcG9ydF9zZXFwYWNrZXRfYWxsb3coc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTUxLVx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tfdnNvY2sodnNrKSk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTUyOlx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jaztcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NTMtXHRib29sIHNlcXBhY2tldF9hbGxvdyA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NTUtXHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTU2Olx0dnNvY2sgPSB2aG9zdF92c29ja19nZXQocmVtb3RlX2NpZCwgbmV0KTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NTctXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTU2NS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1NjY6c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfaGFuZGxlX3R4X2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTY3LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTY5LVx0XHRcdFx0XHRcdCAgcG9sbC53b3JrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1NzA6XHRzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrID0gY29udGFpbmVyX29mKHZxLVx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Zzb2NrLFxuZHJpdmVycy92aG9zdC92c29jay5jLTU3MS1cdFx0XHRcdFx0XHQgZGV2KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTg4LVxuZHJpdmVycy92aG9zdC92c29jay5jOjU4OTpcdFx0aWYgKCF2aG9zdF92c29ja19tb3JlX3JlcGxpZXModnNvY2spKSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTkwLVx0XHRcdC8qIFN0b3AgdHggdW50aWwgdGhlIGRldmljZSBwcm9jZXNzZXMgYWxyZWFkeVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MDktXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NjEwOlx0XHRza2IgPSB2aG9zdF92c29ja19hbGxvY19za2IodnEsIG91dCwgaW4pO1xuZHJpdmVycy92aG9zdC92c29jay5jLTYxMS1cdFx0aWYgKCFza2IpIHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjQzLVxuZHJpdmVycy92aG9zdC92c29jay5jOjY0NDpzdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDUte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDctXHRcdFx0XHRcdFx0cG9sbC53b3JrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2NDg6XHRzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrID0gY29udGFpbmVyX29mKHZxLVx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Zzb2NrLFxuZHJpdmVycy92aG9zdC92c29jay5jLTY0OS1cdFx0XHRcdFx0XHQgZGV2KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjUzLVxuZHJpdmVycy92aG9zdC92c29jay5jOjY1NDpzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0YXJ0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjU1LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzA5LVxuZHJpdmVycy92aG9zdC92c29jay5jOjcxMDpzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MTEte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MzUtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzM2OnN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2ZyZWUoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03Mzcte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NDAtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzQxOnN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzQyLXtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NDMtXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzO1xuZHJpdmVycy92aG9zdC92c29jay5jOjc0NDpcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzQ1LVx0c3RydWN0IG5ldCAqbmV0O1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NzAtXHR2cXNbVlNPQ0tfVlFfUlhdID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NzE6XHR2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdLmhhbmRsZV9raWNrID0gdmhvc3RfdnNvY2tfaGFuZGxlX3R4X2tpY2s7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzcyOlx0dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXS5oYW5kbGVfa2ljayA9IHZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrO1xuZHJpdmVycy92aG9zdC92c29jay5jLTc3My1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzgzLW91dDpcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3ODQ6XHR2aG9zdF92c29ja19mcmVlKHZzb2NrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03ODUtXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03ODctXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6Nzg4OnN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2ZsdXNoKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzg5LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzkyLVxuZHJpdmVycy92aG9zdC92c29jay5jOjc5MzpzdGF0aWMgdm9pZCB2aG9zdF92c29ja19yZXNldF9vcnBoYW5zKHN0cnVjdCBzb2NrICpzaylcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03OTQte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MDQtXHQvKiBJZiB0aGUgcGVlciBpcyBzdGlsbCB2YWxpZCwgbm8gbmVlZCB0byByZXNldCBjb25uZWN0aW9uICovXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODA1Olx0aWYgKHZob3N0X3Zzb2NrX2dldCh2c2stXHUwMDNlcmVtb3RlX2FkZHIuc3ZtX2NpZCwgc29ja19uZXQoc2spKSkge1xuZHJpdmVycy92aG9zdC92c29jay5jLTgwNi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTgyNC1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4MjU6c3RhdGljIGludCB2aG9zdF92c29ja19kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MjYte1xuZHJpdmVycy92aG9zdC92c29jay5jOjgyNzpcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2sgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MjgtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODI5Olx0bXV0ZXhfbG9jayhcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODMwLVx0aWYgKHZzb2NrLVx1MDAzZWd1ZXN0X2NpZClcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MzEtXHRcdGhhc2hfZGVsX3JjdShcdTAwMjZ2c29jay1cdTAwM2VoYXNoKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4MzI6XHRtdXRleF91bmxvY2soXHUwMDI2dmhvc3RfdnNvY2tfbXV0ZXgpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTgzMy1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODM5LVx0dnNvY2tfZm9yX2VhY2hfY29ubmVjdGVkX3NvY2tldChcdTAwMjZ2aG9zdF90cmFuc3BvcnQudHJhbnNwb3J0LFxuZHJpdmVycy92aG9zdC92c29jay5jOjg0MDpcdFx0XHRcdFx0dmhvc3RfdnNvY2tfcmVzZXRfb3JwaGFucyk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODQxLVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDMtXHQgKiBuZWVkIHRvIHN0b3AgdGhlIHZzb2NrIGRldmljZSBpbiBhbnkgY2FzZS5cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4NDQ6XHQgKiB2aG9zdF92c29ja19zdG9wKCkgY2FuIG5vdCBmYWlsIGluIHRoaXMgY2FzZSwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG9cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDUtXHQgKiBjaGVjayB0aGUgcmV0dXJuIGNvZGUuXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODQ2LVx0ICovXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODQ3Olx0dmhvc3RfdnNvY2tfc3RvcCh2c29jaywgZmFsc2UpO1xuZHJpdmVycy92aG9zdC92c29jay5jOjg0ODpcdHZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDktXHR2aG9zdF9kZXZfc3RvcChcdTAwMjZ2c29jay1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NTUtXHRrZnJlZSh2c29jay1cdTAwM2VkZXYudnFzKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4NTY6XHR2aG9zdF92c29ja19mcmVlKHZzb2NrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NTctXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODU5LVxuZHJpdmVycy92aG9zdC92c29jay5jOjg2MDpzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3NldF9jaWQoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgdTY0IGd1ZXN0X2NpZClcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NjEte1xuZHJpdmVycy92aG9zdC92c29jay5jOjg2MjpcdHN0cnVjdCB2aG9zdF92c29jayAqb3RoZXI7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODYzLVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NzktXHQvKiBSZWZ1c2UgaWYgQ0lEIGlzIGFscmVhZHkgaW4gdXNlICovXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODgwOlx0bXV0ZXhfbG9jayhcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODgxOlx0b3RoZXIgPSB2aG9zdF92c29ja19nZXQoZ3Vlc3RfY2lkLCB2c29jay1cdTAwM2VuZXQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTg4Mi1cdGlmIChvdGhlciBcdTAwMjZcdTAwMjYgb3RoZXIgIT0gdnNvY2spIHtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4ODM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODg0LVx0XHRyZXR1cm4gLUVBRERSSU5VU0U7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTg5MC1cdHZzb2NrLVx1MDAzZWd1ZXN0X2NpZCA9IGd1ZXN0X2NpZDtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4OTE6XHRoYXNoX2FkZF9yY3Uodmhvc3RfdnNvY2tfaGFzaCwgXHUwMDI2dnNvY2stXHUwMDNlaGFzaCwgdnNvY2stXHUwMDNlZ3Vlc3RfY2lkKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4OTI6XHRtdXRleF91bmxvY2soXHUwMDI2dmhvc3RfdnNvY2tfbXV0ZXgpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTg5My1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODk2LVxuZHJpdmVycy92aG9zdC92c29jay5jOjg5NzpzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCB1NjQgZmVhdHVyZXMpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODk4LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTMxLVxuZHJpdmVycy92aG9zdC92c29jay5jOjkzMjpzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05MzMtXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy92aG9zdC92c29jay5jLTkzNC17XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTM1Olx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jayA9IGYtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy92aG9zdC92c29jay5jLTkzNi1cdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NDUtXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTQ2Olx0XHRyZXR1cm4gdmhvc3RfdnNvY2tfc2V0X2NpZCh2c29jaywgZ3Vlc3RfY2lkKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NDctXHRjYXNlIFZIT1NUX1ZTT0NLX1NFVF9SVU5OSU5HOlxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NTAtXHRcdGlmIChzdGFydClcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5NTE6XHRcdFx0cmV0dXJuIHZob3N0X3Zzb2NrX3N0YXJ0KHZzb2NrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NTItXHRcdGVsc2VcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5NTM6XHRcdFx0cmV0dXJuIHZob3N0X3Zzb2NrX3N0b3AodnNvY2ssIHRydWUpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTk1NC1cdGNhc2UgVkhPU1RfR0VUX0ZFQVRVUkVTOlxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NjEtXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTYyOlx0XHRyZXR1cm4gdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzKHZzb2NrLCBmZWF0dXJlcyk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTYzLVx0Y2FzZSBWSE9TVF9HRVRfQkFDS0VORF9GRUFUVVJFUzpcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTgwLVx0XHRlbHNlXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTgxOlx0XHRcdHZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05ODItXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05ODYtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTg3OnN0YXRpYyBzc2l6ZV90IHZob3N0X3Zzb2NrX2Nocl9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuZHJpdmVycy92aG9zdC92c29jay5jLTk4OC17XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTg5LVx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTkwOlx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jayA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy92aG9zdC92c29jay5jLTk5MS1cdHN0cnVjdCB2aG9zdF9kZXYgKmRldiA9IFx1MDAyNnZzb2NrLVx1MDAzZWRldjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTk2LVxuZHJpdmVycy92aG9zdC92c29jay5jOjk5NzpzdGF0aWMgc3NpemVfdCB2aG9zdF92c29ja19jaHJfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTk4LVx0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDAtXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDAxOlx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jayA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDItXHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYgPSBcdTAwMjZ2c29jay1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDYtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAwNzpzdGF0aWMgX19wb2xsX3Qgdmhvc3RfdnNvY2tfY2hyX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAwOC17XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAwOTpcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2sgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDEwLVx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gXHUwMDI2dnNvY2stXHUwMDNlZGV2O1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDE0LVxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMTU6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdnNvY2tfZm9wcyA9IHtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDE2LVx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAxNzpcdC5vcGVuICAgICAgICAgICA9IHZob3N0X3Zzb2NrX2Rldl9vcGVuLFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMTg6XHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF92c29ja19kZXZfcmVsZWFzZSxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDE5LVx0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMjA6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF92c29ja19kZXZfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyMS1cdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAyMjpcdC5yZWFkX2l0ZXIgICAgICA9IHZob3N0X3Zzb2NrX2Nocl9yZWFkX2l0ZXIsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAyMzpcdC53cml0ZV9pdGVyICAgICA9IHZob3N0X3Zzb2NrX2Nocl93cml0ZV9pdGVyLFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMjQ6XHQucG9sbCAgICAgICAgICAgPSB2aG9zdF92c29ja19jaHJfcG9sbCxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDI1LX07XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyNi1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDI3OnN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB2aG9zdF92c29ja19taXNjID0ge1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwMjgtXHQubWlub3IgPSBWSE9TVF9WU09DS19NSU5PUixcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDI5LVx0Lm5hbWUgPSBcJiMzNDt2aG9zdC12c29ja1wmIzM0OyxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDMwOlx0LmZvcHMgPSBcdTAwMjZ2aG9zdF92c29ja19mb3BzLFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMzEtfTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDMyLVxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMzM6c3RhdGljIGludCBfX2luaXQgdmhvc3RfdnNvY2tfaW5pdCh2b2lkKVxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMzQte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDQxLVxuZHJpdmVycy92aG9zdC92c29jay5jOjEwNDI6XHRyZXQgPSBtaXNjX3JlZ2lzdGVyKFx1MDAyNnZob3N0X3Zzb2NrX21pc2MpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwNDMtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTEwNTAtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA1MTpzdGF0aWMgdm9pZCBfX2V4aXQgdmhvc3RfdnNvY2tfZXhpdCh2b2lkKVxuZHJpdmVycy92aG9zdC92c29jay5jLTEwNTIte1xuZHJpdmVycy92aG9zdC92c29jay5jOjEwNTM6XHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2dmhvc3RfdnNvY2tfbWlzYyk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1NC1cdHZzb2NrX2NvcmVfdW5yZWdpc3RlcihcdTAwMjZ2aG9zdF90cmFuc3BvcnQudHJhbnNwb3J0KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1Ni1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDU3Om1vZHVsZV9pbml0KHZob3N0X3Zzb2NrX2luaXQpO1xuZHJpdmVycy92aG9zdC92c29jay5jOjEwNTg6bW9kdWxlX2V4aXQodmhvc3RfdnNvY2tfZXhpdCk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1OS1NT0RVTEVfTElDRU5TRShcJiMzNDtHUEwgdjJcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ3NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0LXZzb2NrIFBhdGNoOiBBIERlZXBlciBEaXZlKioKCk9rYXksIHNvIGB2aG9zdC12c29ja2AgcmVnaXN0ZXJzIGEgbWlzYyBkZXZpY2UgYXQgYC9kZXYvdmhvc3QtdnNvY2tgIGFuZCBpbnRlcmFjdHMgd2l0aCBBRl9WU09DSyBzb2NrZXRzIHRocm91Z2ggdGhlIGB2c29ja19jb3JlYC4gTWFrZXMgc2Vuc2UsIHRoaXMgaXMgYSBzdGFuZGFyZCBzZXR1cCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBJIGtub3cgU3l6a2FsbGVyIGhhcyBmdWxsIHN1cHBvcnQgZm9yIGl0LgoKTGV0JiMzOTtzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgcGF0Y2guIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLCBzcGVjaWZpY2FsbHkgaG93IHRoZSB2aXJ0cXVldWUgcmluZyBlbGVtZW50cyBhcmUgaGFuZGxlZC4gQmVmb3JlLCBpdCB3YXMgYSBzaW1wbGUgYHZob3N0X2FkZF91c2VkYCBjYWxsLiBOb3csIGl0JiMzOTtzIGEgYml0IG1vcmUgaW52b2x2ZWQuIEl0JiMzOTtzIGJhdGNoaW5nIGRlc2NyaXB0b3JzIHVzaW5nIGB2aG9zdF92c29ja19hZGRfdXNlZGAgaW50byBgdnEtJmd0O2hlYWRzYCBhbmQgdGhlbiBmbHVzaGluZyB0aGVtIHdpdGggYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgLiBUaGlzIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBmdW5jdGlvbiB0aGVuIGNhbGxzIGB2aG9zdF9hZGRfdXNlZF9uYCwgd2hpY2ggcHJvYmFibHkgcGVyZm9ybXMgdGhlIGFjdHVhbCByaW5nIHVwZGF0ZXMuCgpUaGUgcGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGNoZWNrcyBmb3IgYHVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLSZndDtudW0sIHZxLSZndDtkZXYtJmd0O2lvdl9saW1pdCk7YCBhbmQgZmx1c2hlcyB3aGVuIGNlcnRhaW4gY29uZGl0aW9ucyBhcmUgbWV0OiB3aGVuIGB1c2VkX2NvdW50ID09IHVzZWRfbGltaXRgLCB3aGVuIGBoZWFkID09IHZxLSZndDtudW1gIGJlZm9yZSByZS1lbmFibGluZyBub3RpZnksIGFuZCBhdCB0aGUgdmVyeSBlbmQgb2YgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gb3B0aW1pemluZyB0aGUgZmx1c2ggb3BlcmF0aW9uIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgZGVzY3JpcHRvcnMgYW5kIEkvTyBsaW1pdHMuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyBtb2RpZmllZC4gSXQgbG9va3MgbGlrZSBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAgYW5kIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYXJlIGJlaW5nIGludHJvZHVjZWQgYXMgc3RhdGljIGhlbHBlcnMgaW4gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AsIGFsb25nIHdpdGggdGhlIGNvcmUgY2hhbmdlIGluIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gbG9vayBhdCB0aGUgZW50cnkgcG9pbnRzL2NhbGxlcnMgb2YgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAsIHN1Y2ggYXMgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrYCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAsIGB2aG9zdF92c29ja19oYW5kbGVfcnhfa2lja2AsIGFuZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYC4KCk9rYXksIHRoZSBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBpcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoYXQgYHZzb2NrLmNgIGZpbGUuIFRoaXMgaXMgZ29vZCB0byBrbm93LCBhbmQgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBmcm9tIHRoaXMgY2hhbmdlIGluIG90aGVyIG1vZHVsZXMgYnkgY2hlY2tpbmcgYW55IG1vZHVsZSBkZXBlbmRlbmNpZXMuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLCBlc3BlY2lhbGx5IGFyb3VuZCBsaW5lcyAzMTAtMzcwLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHZzb2NrIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzEwOlx0XHRpZiAoYWRkZWQpXG4gMzExOlx0XHRcdHZob3N0X3NpZ25hbChcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiAzMTI6XHRcbiAzMTM6XHRvdXQ6XG4gMzE0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIDMxNTpcdFxuIDMxNjpcdFx0aWYgKHJlc3RhcnRfdHgpXG4gMzE3Olx0XHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2dHhfdnEtXHUwMDNlcG9sbCk7XG4gMzE4Olx0fVxuIDMxOTpcdFxuIDMyMDpcdHN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuIDMyMTpcdHtcbiAzMjI6XHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xuIDMyMzpcdFx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jaztcbiAzMjQ6XHRcbiAzMjU6XHRcdHZzb2NrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92c29jaywgc2VuZF9wa3Rfd29yayk7XG4gMzI2Olx0XHR2cSA9IFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF07XG4gMzI3Olx0XG4gMzI4Olx0XHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QodnNvY2ssIHZxKTtcbiAzMjk6XHR9XG4gMzMwOlx0XG4gMzMxOlx0c3RhdGljIGludFxuIDMzMjpcdHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXG4gMzMzOlx0e1xuIDMzNDpcdFx0c3RydWN0IHZpcnRpb192c29ja19oZHIgKmhkciA9IHZpcnRpb192c29ja19oZHIoc2tiKTtcbiAzMzU6XHRcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XG4gMzM2Olx0XHRpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbiAzMzc6XHRcbiAzMzg6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzMzk6XHRcbiAzNDA6XHRcdC8qIEZpbmQgdGhlIHZob3N0X3Zzb2NrIGFjY29yZGluZyB0byBndWVzdCBjb250ZXh0IGlkICAqL1xuIDM0MTpcdFx0dnNvY2sgPSB2aG9zdF92c29ja19nZXQobGU2NF90b19jcHUoaGRyLVx1MDAzZWRzdF9jaWQpLCBuZXQpO1xuIDM0MjpcdFx0aWYgKCF2c29jaykge1xuIDM0MzpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzNDQ6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMzQ1Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDM0NjpcdFx0fVxuIDM0NzpcdFxuIDM0ODpcdFx0LyogRmFzdC1mYWlsIGlmIHRoZSBndWVzdCBoYXNuJiMzOTt0IGVuYWJsZWQgdGhlIFJYIHZxIHlldC4gUXVldWluZyB0aGUgcGFja2V0XG4gMzQ5Olx0XHQgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdFxuIDM1MDpcdFx0ICogd2l0aGluIHRoZSB0aW1lb3V0LCBpdCYjMzk7bGwgaW1tZWRpYXRlbHkgcmVwbHkgd2l0aCBSU1QsIGJlY2F1c2UgdGhlcmUmIzM5O3Mgbm9cbiAzNTE6XHRcdCAqIGxpc3RlbmVyIG9uIHRoZSBwb3J0IHlldC5cbiAzNTI6XHRcdCAqXG4gMzUzOlx0XHQgKiB2aG9zdF92cV9nZXRfYmFja2VuZCgpIHdpdGhvdXQgdnEtXHUwMDNlbXV0ZXggaXMgYWNjZXB0YWJsZSBoZXJlOiBsb2NraW5nXG4gMzU0Olx0XHQgKiB0aGUgbXV0ZXggd291bGQgYmUgdG9vIGV4cGVuc2l2ZSBpbiB0aGlzIGhvdCBwYXRoLCBhbmQgd2UgYWxyZWFkeSBoYXZlXG4gMzU1Olx0XHQgKiBhbGwgdGhlIG91dGNvbWVzIGNvdmVyZWQ6IGlmIHRoZSBiYWNrZW5kIGJlY29tZXMgTlVMTCByaWdodCBhZnRlciB0aGUgY2hlY2ssXG4gMzU2Olx0XHQgKiB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QoKSB3aWxsIGNoZWNrIGl0IHVuZGVyIHRoZSBtdXRleCBhbnl3YXkuXG4gMzU3Olx0XHQgKi9cbiAzNTg6XHRcdGlmICh1bmxpa2VseSghZGF0YV9yYWNlKHZob3N0X3ZxX2dldF9iYWNrZW5kKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF0pKSkpIHtcbiAzNTk6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzYwOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM2MTpcdFx0XHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcbiAzNjI6XHRcdH1cbiAzNjM6XHRcbiAzNjQ6XHRcdGlmICh2aXJ0aW9fdnNvY2tfc2tiX3JlcGx5KHNrYikpXG4gMzY1Olx0XHRcdGF0b21pY19pbmMoXHUwMDI2dnNvY2stXHUwMDNlcXVldWVkX3JlcGxpZXMpO1xuIDM2NjpcdFxuIDM2NzpcdFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV90YWlsKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlLCBza2IpO1xuIDM2ODpcdFx0dmhvc3RfdnFfd29ya19xdWV1ZShcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdLCBcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF93b3JrKTtcbiAzNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NDMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmFjaW5nIHRoZSBEYXRhIEZsb3cgb2YgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCBmdW5jdGlvbiB3b3Jrcy4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyByZWdpc3RlcmVkIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGBzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCB2aG9zdF90cmFuc3BvcnRgLCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgdGhhdCBuYW1lIHN1Z2dlc3RzIGl0JiMzOTtzIGhhbmRsaW5nIHRyYW5zcG9ydCBsb2dpYywgYW5kIHRoaXMgaXMgdXNlZCBieSB0aGUgYHZzb2NrX2NvcmVgIG1vZHVsZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR0ZXIuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHZob3N0X3RyYW5zcG9ydGAgaXRzZWxmLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFuZCB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBzdHJ1Y3QmIzM5O3MgZGVmaW5pdGlvbiBzaG91bGQgZ2l2ZSBtZSBtb3JlIGNvbnRleHQgZm9yIHdoYXQgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3RyYW5zcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jPTQ4PXN0cnVjdCB2aG9zdF92c29jayB7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTY1LVxuZHJpdmVycy92aG9zdC92c29jay5jOjY2OnN0YXRpYyB1MzIgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQodm9pZClcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02Ny17XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTc0PXN0YXRpYyBzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZob3N0X3Zzb2NrX2dldCh1MzIgZ3Vlc3RfY2lkLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTkzLVxuZHJpdmVycy92aG9zdC92c29jay5jOjk0OnN0YXRpYyBib29sIHZob3N0X3RyYW5zcG9ydF9oYXNfcmVtb3RlX2NpZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkKVxuZHJpdmVycy92aG9zdC92c29jay5jLTk1LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTI3PXN0YXRpYyB2b2lkXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTI4OnZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuZHJpdmVycy92aG9zdC92c29jay5jLTEyOS1cdFx0XHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTMxOS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjA6c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzIxLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzI3LVxuZHJpdmVycy92aG9zdC92c29jay5jOjMyODpcdHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCh2c29jaywgdnEpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTMyOS19XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTMzMT1zdGF0aWMgaW50XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzMyOnZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzMzLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzU1LVx0ICogYWxsIHRoZSBvdXRjb21lcyBjb3ZlcmVkOiBpZiB0aGUgYmFja2VuZCBiZWNvbWVzIE5VTEwgcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLFxuZHJpdmVycy92aG9zdC92c29jay5jOjM1NjpcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNTctXHQgKi9cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9Mzc0PXN0YXRpYyBpbnRcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozNzU6dmhvc3RfdHJhbnNwb3J0X2NhbmNlbF9wa3Qoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNzYte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz00Njg9c3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfbW9yZV9yZXBsaWVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTQ3OC1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo0Nzk6c3RhdGljIGJvb2wgdmhvc3RfdHJhbnNwb3J0X21zZ3plcm9jb3B5X2FsbG93KHZvaWQpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDgwLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDgzLVxuZHJpdmVycy92aG9zdC92c29jay5jOjQ4NDpzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfc2VxcGFja2V0X2FsbG93KHN0cnVjdCB2c29ja19zb2NrICp2c2ssXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDg1LVx0XHRcdFx0XHQgICAgdTMyIHJlbW90ZV9jaWQpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz00ODc9c3RhdGljIGJvb2xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo0ODg6dmhvc3RfdHJhbnNwb3J0X3N0cmVhbV9hbGxvdyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkLCB1MzIgcG9ydClcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00ODkte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00OTItXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NDkzOnN0YXRpYyBzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCB2aG9zdF90cmFuc3BvcnQgPSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDk0LVx0LnRyYW5zcG9ydCA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDk2LVxuZHJpdmVycy92aG9zdC92c29jay5jOjQ5NzpcdFx0LmdldF9sb2NhbF9jaWQgICAgICAgICAgICA9IHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkLFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ5ODpcdFx0Lmhhc19yZW1vdGVfY2lkICAgICAgICAgICA9IHZob3N0X3RyYW5zcG9ydF9oYXNfcmVtb3RlX2NpZCxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00OTktXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTUwNC1cdFx0LnNodXRkb3duICAgICAgICAgICAgICAgICA9IHZpcnRpb190cmFuc3BvcnRfc2h1dGRvd24sXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTA1Olx0XHQuY2FuY2VsX3BrdCAgICAgICAgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X2NhbmNlbF9wa3QsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTA2LVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MTctXHRcdC5zdHJlYW1faXNfYWN0aXZlICAgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X3N0cmVhbV9pc19hY3RpdmUsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTE4Olx0XHQuc3RyZWFtX2FsbG93ICAgICAgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X3N0cmVhbV9hbGxvdyxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MTktXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTUyMS1cdFx0LnNlcXBhY2tldF9lbnF1ZXVlICAgICAgICA9IHZpcnRpb190cmFuc3BvcnRfc2VxcGFja2V0X2VucXVldWUsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTIyOlx0XHQuc2VxcGFja2V0X2FsbG93ICAgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X3NlcXBhY2tldF9hbGxvdyxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MjMtXHRcdC5zZXFwYWNrZXRfaGFzX2RhdGEgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X3NlcXBhY2tldF9oYXNfZGF0YSxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MjQtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTI1Olx0XHQubXNnemVyb2NvcHlfYWxsb3cgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X21zZ3plcm9jb3B5X2FsbG93LFxuZHJpdmVycy92aG9zdC92c29jay5jLTUyNi1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTQ0LVxuZHJpdmVycy92aG9zdC92c29jay5jOjU0NTpcdC5zZW5kX3BrdCA9IHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdCxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NDYtfTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NDctXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTQ4OnN0YXRpYyBib29sIHZob3N0X3RyYW5zcG9ydF9zZXFwYWNrZXRfYWxsb3coc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NDktXHRcdFx0XHRcdCAgICB1MzIgcmVtb3RlX2NpZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NTY2PXN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2hhbmRsZV90eF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MjUtXHRcdCAgICBsZTY0X3RvX2NwdShoZHItXHUwMDNlZHN0X2NpZCkgPT1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2MjY6XHRcdCAgICB2aG9zdF90cmFuc3BvcnRfZ2V0X2xvY2FsX2NpZCgpKVxuZHJpdmVycy92aG9zdC92c29jay5jOjYyNzpcdFx0XHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KFx1MDAyNnZob3N0X3RyYW5zcG9ydCwgc2tiLFxuZHJpdmVycy92aG9zdC92c29jay5jLTYyOC1cdFx0XHRcdFx0XHQgIHZzb2NrLVx1MDAzZW5ldCk7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTY0ND1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjUwLVxuZHJpdmVycy92aG9zdC92c29jay5jOjY1MTpcdHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCh2c29jaywgdnEpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTY1Mi19XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTc0MT1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NzktXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3ODA6XHR2aG9zdF93b3JrX2luaXQoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3Rfd29yaywgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmspO1xuZHJpdmVycy92aG9zdC92c29jay5jLTc4MS1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz04MjU9c3RhdGljIGludCB2aG9zdF92c29ja19kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODM4LVx0ICogaW5lZmZpY2llbnQuICBSb29tIGZvciBpbXByb3ZlbWVudCBoZXJlLiAqL1xuZHJpdmVycy92aG9zdC92c29jay5jOjgzOTpcdHZzb2NrX2Zvcl9lYWNoX2Nvbm5lY3RlZF9zb2NrZXQoXHUwMDI2dmhvc3RfdHJhbnNwb3J0LnRyYW5zcG9ydCxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDAtXHRcdFx0XHRcdHZob3N0X3Zzb2NrX3Jlc2V0X29ycGhhbnMpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0xMDMzPXN0YXRpYyBpbnQgX19pbml0IHZob3N0X3Zzb2NrX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAzNi1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDM3Olx0cmV0ID0gdnNvY2tfY29yZV9yZWdpc3RlcihcdTAwMjZ2aG9zdF90cmFuc3BvcnQudHJhbnNwb3J0LFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMzgtXHRcdFx0XHQgIFZTT0NLX1RSQU5TUE9SVF9GX0gyRyk7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTEwNDMtXHRpZiAocmV0KSB7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA0NDpcdFx0dnNvY2tfY29yZV91bnJlZ2lzdGVyKFx1MDAyNnZob3N0X3RyYW5zcG9ydC50cmFuc3BvcnQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwNDUtXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTEwNTE9c3RhdGljIHZvaWQgX19leGl0IHZob3N0X3Zzb2NrX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1My1cdG1pc2NfZGVyZWdpc3RlcihcdTAwMjZ2aG9zdF92c29ja19taXNjKTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDU0Olx0dnNvY2tfY29yZV91bnJlZ2lzdGVyKFx1MDAyNnZob3N0X3RyYW5zcG9ydC50cmFuc3BvcnQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEwNTUtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogdmhvc3QtdnNvY2sgQmF0Y2hpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBuZXcgdmhvc3QtdnNvY2sgYmF0Y2hpbmcgcGF0Y2ggaXMgKmFic29sdXRlbHkqIHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbi4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3M6CgpGaXJzdCwgYWNjZXNzaWJpbGl0eS4gQ2FuIHdlIGFjdHVhbGx5IGhpdCB0aGlzIG1vZGlmaWVkIGNvZGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwPyBBYnNvbHV0ZWx5LCB5ZXMuIFFFTVUgb3IgdXNlcnNwYWNlIHJ1bm5pbmcgaW4gYSBWTSBzaG91bGQgaGF2ZSBubyBwcm9ibGVtIGludGVyYWN0aW5nIHdpdGggYC9kZXYvdmhvc3QtdnNvY2tgLiBXZSBjYW4gc2V0IHVwIHRoZSB2aXJ0cXVldWVzIHVzaW5nIHRoZSBzdGFuZGFyZCBpb2N0bHMg4oCTIGBWSE9TVF9TRVRfVlJJTkdfQkFTRWAsIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCwgZXRjLiDigJMgYW5kIHRoZW4gc2VuZCBkYXRhIHVzaW5nIEFGX1ZTT0NLIHNvY2tldHMgb3IgdHJpZ2dlciB2aXJ0cXVldWUga2lja3MuIEFsbCBvZiB0aGF0IGxlYWRzIHRvIHRoZSBjcnVjaWFsIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludC4KClNlY29uZCwgd2hhdCYjMzk7cyAqYWN0dWFsbHkqIGNoYW5naW5nIHdpdGggdGhpcyBwYXRjaD8gSXQmIzM5O3MgZnVuZGFtZW50YWxseSBhYm91dCBob3cgdXNlZCByaW5nIGVudHJpZXMgYXJlIGhhbmRsZWQgaW4gdmhvc3QtdnNvY2sgd2l0aGluIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLiBJbnN0ZWFkIG9mIGluZGl2aWR1YWwgYHZob3N0X2FkZF91c2VkYCBjYWxscywgdGhlIHBhdGNoIGludHJvZHVjZXMgYmF0Y2hlZCB1cGRhdGVzIHVzaW5nIGB2aG9zdF9hZGRfdXNlZF9uYCB0aHJvdWdoIGhlbHBlciBmdW5jdGlvbnMgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgLiBUaGlzIHRvdWNoZXMgYSBsb3Qgb2YgaW1wb3J0YW50IHBpZWNlczogcmluZyBpbmRleGluZywgZGVzY3JpcHRvciB1cGRhdGVzLCBiYXRjaCBzaXplIGxpbWl0cyBkZWZpbmVkIGJ5IGB1c2VkX2xpbWl0YCwgbm90aWZ5aW5nIHRoZSBndWVzdCwgYW5kIGZsdXNoaW5nIHRoZSBidWZmZXJzLgoKVGhpcmQsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIHdoeSBpcyB0aGlzIHNvIHJpcGUgZm9yIGZ1enppbmc/IEJlY2F1c2UgdGhlIHZlcnkgbmF0dXJlIG9mIGJhdGNoaW5nIGNoYW5nZXMsIGxpa2UgbW9kaWZpY2F0aW9ucyB0byB0aGUgdmlydHF1ZXVlL2Rlc2NyaXB0b3IgYnVmZmVyIGhhbmRsaW5nIGFuZCBiYXRjaGluZyBsb2dpYywgc2NyZWFtICYjMzQ7b2ZmLWJ5LW9uZSBlcnJvcnMsJiMzNDsgJiMzNDtsb3N0IHdha2V1cHMsJiMzNDsgJiMzNDtyaW5nIGJ1ZmZlciBjb3JydXB0aW9uLCYjMzQ7IGFuZCAmIzM0O291dC1vZi1ib3VuZHMgYWNjZXNzJiMzNDsgaW4gdGhlIGBoZWFkc2AgYXJyYXlzLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgYXJlYSB3aGVyZSBhIGZ1enplciBjYW4gcmVhbGx5IHNoaW5lLgoKRmluYWxseSwgd2hhdCBhcmUgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uPyBJIG5lZWQgdG8gZm9jdXMgb246CiogICBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCAodGhlIGNvcmUgZnVuY3Rpb24pCiogICBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAgKGZsdXNoaW5nIHRoZSBidWZmZXIpCiogICBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIChhZGRpbmcgdXNlZCBlbnRyaWVzIHRvIHRoZSBidWZmZXIpCiogICBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmtgIChyZWxhdGVkIHRvIHBhY2tldCBzZW5kaW5nKQoqICAgYHZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrYCAoaGFuZGxpbmcgaW5jb21pbmcga2ljaykKCkFuZCwgc2luY2UgYHZob3N0X2FkZF91c2VkX25gIGlzIGFjdHVhbGx5IGluIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgLCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCBpdCB0byBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgaXQgd29ya3MgYW5kIGhvdyBpdCBtaWdodCBiZSBpbnRlcmFjdGluZyB3aXRoIHRoZSByZXN0IG9mIHRoZSB2c29jayBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0YXJnZXRpbmcgdGhlIGZ1enppbmcgY2FtcGFpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X2FkZF91c2VkX24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zMDA4PWludCB2aG9zdF9hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdW5zaWduZWQgaW50IGhlYWQsIGludCBsZW4pXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMTUtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzAxNjpcdHJldHVybiB2aG9zdF9hZGRfdXNlZF9uKHZxLCBcdTAwMjZoZWFkcywgXHUwMDI2bmhlYWRzLCAxKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDE3LX1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zMDE4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2FkZF91c2VkKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDE5LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwMjA6c3RhdGljIGludCBfX3Zob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzAyMS1cdFx0XHQgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNTEtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzA1MjpzdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25fb29vKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNTMtXHRcdFx0XHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA2MC1cdGlmIChuIFx1MDAzYyBjb3VudCkge1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwNjE6XHRcdHIgPSBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBuKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDYyLVx0XHRpZiAociBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA2Ni1cdH1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDY3Olx0cmV0dXJuIF9fdmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIGNvdW50KTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDY4LX1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDY5LVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwNzA6c3RhdGljIGludCB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNzEtXHRcdFx0XHQgICAgIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTE5LSAqIHdhbnQgdG8gbm90aWZ5IHRoZSBndWVzdCwgdXNpbmcgZXZlbnRmZC4gKi9cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTIwOmludCB2aG9zdF9hZGRfdXNlZF9uKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTIxLVx0XHQgICAgIHUxNiAqbmhlYWRzLCB1bnNpZ25lZCBjb3VudClcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzEyNi1cdGlmICghaW5fb3JkZXIgfHwgIW5oZWFkcylcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTI3Olx0XHRyID0gdmhvc3RfYWRkX3VzZWRfbl9vb28odnEsIGhlYWRzLCBjb3VudCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzEyOC1cdGVsc2VcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTI5Olx0XHRyID0gdmhvc3RfYWRkX3VzZWRfbl9pbl9vcmRlcih2cSwgaGVhZHMsIG5oZWFkcywgY291bnQpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMzAtXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxNTAtfVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxNTE6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWRfbik7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzE1Mi1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzIxMD12b2lkIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMyMTUte1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjMyMTY6XHR2aG9zdF9hZGRfdXNlZF9uKHZxLCBoZWFkcywgbmhlYWRzLCBjb3VudCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzIxNy1cdHZob3N0X3NpZ25hbChkZXYsIHZxKTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg9MjQ4PWludCB2aG9zdF9hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNDk6aW50IHZob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNTAtXHRcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTA2PXN0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTExMS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMTI6XHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cdTAwM2VoZWFkcywgdnEtXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMTMtXHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MDMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLY29uZmlnIERlcGVuZGVuY2llcyAtIFZIT1NUX1ZTT0NLKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgVkhPU1RfVlNPQ0tgLiBGaXJzdCwgYSBxdWljayBzYW5pdHkgY2hlY2s6IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgVkhPU1RfVlNPQ0tgIGlzIHByb3Blcmx5IHNldCB1cC4gUmlnaHQsIHNvIGBWSE9TVF9WU09DS2AgZGVwZW5kcyBvbiBgVlNPQ0tFVFNgIGFuZCBgRVZFTlRGRGAuIE1ha2VzIHNlbnNlIOKAkyB3ZSBuZWVkIHRoZSBjb3JlIHZzb2NrIGZ1bmN0aW9uYWxpdHkgYW5kIGEgd2F5IHRvIHNpZ25hbCBldmVudHMuIEl0IGFsc28gKnNlbGVjdHMqIGBWSE9TVGAgYW5kIGBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYCwgaW1wbHlpbmcgdGhhdCBpdCYjMzk7cyBidWlsZGluZyB1cG9uIHRob3NlIGZ1bmRhbWVudGFsIGNvbXBvbmVudHMuIE5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBhbGwgcGxheWluZyBuaWNlbHkgdG9nZXRoZXIsIEkmIzM5O2xsIG5lZWQgdG8gZ28gYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggYG5ldC92bXdfdnNvY2svS2NvbmZpZ2AgdG8gY29uZmlybSBldmVyeXRoaW5nIG9uIHRoZSB2c29jayBzaWRlIGlzIGluIG9yZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVlNPQ0tFVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnLTUtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Njpjb25maWcgVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXQgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMTgtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MTk6Y29uZmlnIFZTT0NLRVRTX0RJQUdcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yOC1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyOTpjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNzgKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgRXZlbnRmZCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gR2l2ZW4gd2hhdCBJJiMzOTttIHdvcmtpbmcgb24sIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBFVkVOVEZEYCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3b3VsZCBsaWtlbHkgcmVzaWRlIGVpdGhlciB3aXRoaW4gdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIHNpbmNlIGl0IG1pZ2h0IGJlIGEgY29yZSBrZXJuZWwgZmVhdHVyZSwgb3IgcG90ZW50aWFsbHkgd2l0aGluIGBmcy9LY29uZmlnYCBpZiBpdCYjMzk7cyBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0gb3Igc29tZSByZWxhdGVkIGluZnJhc3RydWN0dXJlLiBJ4oCZbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgdHdvIGxvY2F0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyBpdCYjMzk7cyBlbmFibGVkIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVZFTlRGRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkyMz1jb25maWcgVElNRVJGRFxuLS1cbmluaXQvS2NvbmZpZy0xOTMxLVxuaW5pdC9LY29uZmlnOjE5MzI6Y29uZmlnIEVWRU5URkRcbmluaXQvS2NvbmZpZy0xOTMzLVx0Ym9vbCBcJiMzNDtFbmFibGUgZXZlbnRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyNwoJCQkJCQkJb3V0cHV0OiAyMjgKCQkJCQkJCXRob3VnaHRzOiA0NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFZob3N0LVZTT0NLIERyaXZlciBNb2RpZmljYXRpb24gZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZy4gV2UmIzM5O3JlIG1vZGlmeWluZyB0aGUgdmlydHF1ZXVlIHBhY2tldCB0cmFuc21pc3Npb24gaW4gdGhlIHZob3N0LXZzb2NrIGRyaXZlci4gRXNzZW50aWFsbHksIHdlJiMzOTtyZSBtb3ZpbmcgZnJvbSBhIHBlci1wYWNrZXQgYHZob3N0X2FkZF91c2VkYCBhcHByb2FjaCB0byB1c2luZyBgdmhvc3RfYWRkX3VzZWRfbmAgZm9yIGJhdGNoZWQgZGVzY3JpcHRvciByaW5nIHVwZGF0ZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgYmVjYXVzZSBpdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgYmF0Y2ggbGltaXRzIChgdXNlZF9saW1pdGApLCBhcnJheSBpbmRleCBtYW5hZ2VtZW50LCBhbmQgdGhlIGNydWNpYWwgYmF0Y2ggZmx1c2hpbmcgcHJvY2VkdXJlcyBoYW5kbGVkIGJ5IGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYC4KCkJhc2VkIG9uIHRoaXMgY2hhbmdlLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogd2UgY2FuIGV4ZXJjaXNlIHRoaXMgbmV3IGJhdGNoaW5nIGxvZ2ljIGVmZmVjdGl2ZWx5IGJ5IGZ1enppbmcgQUZfVlNPQ0sgc29ja2V0IG9wZXJhdGlvbnMgYW5kIGludGVyYWN0aW5nIHdpdGggYC9kZXYvdmhvc3QtdnNvY2tgIGlvY3RscyB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBpcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIGFyZSBtb3N0IGxpa2VseSB0byBlbWVyZ2UuCgpUbyBlbmFibGUgdGhpcyBmdXp6aW5nLCB3ZSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbnM6IGBWSE9TVF9WU09DS2AsIGBWU09DS0VUU2AsIGBFVkVOVEZEYCwgYFZIT1NUYCwgYW5kIGBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYC4gVGhlc2UgYXJlIHRoZSBtaW5pbXVtIG5lZWRlZCB0byBnZXQgZXZlcnl0aGluZyB0byB3b3JrLgoKTXkgZm9jdXMgc3ltYm9scyBhcmUgdGhlc2Uga2V5IGZ1bmN0aW9uczogYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAsIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCwgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAsIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29ya2AsIGFuZCBgdmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2tgLiBXZSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gdGhlc2UuIEFjdHVhbGx5LCBJIHNob3VsZCBhbHNvIG5vdGUgdGhhdCBgdmhvc3RfYWRkX3VzZWRfbmAgaW4gYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AgaXMgaW1wb3J0YW50LCB0aG91Z2ggSSYjMzk7bGwga2VlcCB0aGUgZm9jdXMgcHJpbWFyaWx5IG9uIHRoZSB2c29jay1zcGVjaWZpYyBvbmVzIGZvciBub3cuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGVzZSBmaW5kaW5ncy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDssCiAgICAmIzM0O1ZIT1NUJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUU19DT01NT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZmx1c2hfdXNlZCYjMzQ7LAogICAgJiMzNDt2aG9zdF92c29ja19hZGRfdXNlZCYjMzQ7LAogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3QmIzM0OywKICAgICYjMzQ7dmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZXNjcmlwdG9yIGJhdGNoaW5nIGluIHRoZSB2aG9zdC12c29jayBkcml2ZXIgKGRyaXZlcnMvdmhvc3QvdnNvY2suYykgZm9yIHBhY2tldCB0cmFuc21pc3Npb24sIHJlcGxhY2luZyBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkIGNhbGxzIHdpdGggYmF0Y2hlZCB2aG9zdF9hZGRfdXNlZF9uIGNhbGxzLiBJdCBpbnRyb2R1Y2VzIG5ldyBidWZmZXIgYWNjdW11bGF0aW9uLCBhcnJheSBpbmRleGluZywgYW5kIGJhdGNoIGxpbWl0L2ZsdXNoaW5nIGxvZ2ljIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBhY2Nlc3NpYmxlIHZpYSAvZGV2L3Zob3N0LXZzb2NrIGFuZCBBRl9WU09DSyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDssCiAgICAmIzM0O1ZIT1NUJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUU19DT01NT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZmx1c2hfdXNlZCYjMzQ7LAogICAgJiMzNDt2aG9zdF92c29ja19hZGRfdXNlZCYjMzQ7LAogICAgJiMzNDt2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3QmIzM0OywKICAgICYjMzQ7dmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZXNjcmlwdG9yIGJhdGNoaW5nIGluIHRoZSB2aG9zdC12c29jayBkcml2ZXIgKGRyaXZlcnMvdmhvc3QvdnNvY2suYykgZm9yIHBhY2tldCB0cmFuc21pc3Npb24sIHJlcGxhY2luZyBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkIGNhbGxzIHdpdGggYmF0Y2hlZCB2aG9zdF9hZGRfdXNlZF9uIGNhbGxzLiBJdCBpbnRyb2R1Y2VzIG5ldyBidWZmZXIgYWNjdW11bGF0aW9uLCBhcnJheSBpbmRleGluZywgYW5kIGJhdGNoIGxpbWl0L2ZsdXNoaW5nIGxvZ2ljIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBhY2Nlc3NpYmxlIHZpYSAvZGV2L3Zob3N0LXZzb2NrIGFuZCBBRl9WU09DSyBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBiYXRjaGluZyBvZiB1c2VkIHJpbmcgdXBkYXRlcyBpbiB2aG9zdC12c29jayAodmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KSBieSBhY2N1bXVsYXRpbmcgdXNlZCBkZXNjcmlwdG9ycyBpbiB0aGUgcHJlYWxsb2NhdGVkIHZpcnRxdWV1ZSBhcnJheXMgKHZxLVx1MDAzZWhlYWRzIGFuZCB2cS1cdTAwM2VuaGVhZHMpIGFuZCBmbHVzaGluZyB0aGVtIHZpYSB2aG9zdF9hZGRfdXNlZF9uKCkgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkKCkgY2FsbHMuXG5cbi0gS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbiAgMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWs6IEVhY2ggdXNlZCBkZXNjcmlwdG9yIGVsZW1lbnQgaW4gdnEtXHUwMDNlaGVhZHMgKHN0cnVjdCB2cmluZ191c2VkX2VsZW0pIGNvbnRhaW5zIG9ubHkgdHdvIDMyLWJpdCBmaWVsZHMgKGlkIGFuZCBsZW4pIHdpdGhvdXQgYW55IHN0cnVjdHVyZSBwYWRkaW5nLiBCb3RoIGZpZWxkcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdnEtXHUwMDNlbmhlYWRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHZob3N0X3Zzb2NrX2FkZF91c2VkKCkgZm9yIGVhY2ggaW5kZXggYmVmb3JlIGJlaW5nIGZsdXNoZWQgYW5kIGNvcGllZCB0byB0aGUgZ3Vlc3QmIzM5O3MgdXNlZCByaW5nIHZpYSB2aG9zdF9wdXRfdXNlZCgpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyByZWFkIG9yIGxlYWtlZC5cbiAgMi4gTWVtb3J5IEJvdW5kcyBhbmQgSW50ZWdyaXR5OiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gYXJyYXkgaW5kZXhpbmcsIGJvdW5kcyBsaW1pdHMgKHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQpLCBvciB2aXJ0cXVldWUgc3luY2hyb25pemF0aW9uIGxvZ2ljLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiAoZm9yIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzZXMpLCBhbmQgdmlydGlvIHByb3RvY29sIGNoZWNrcy5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODZmZDA3ZThmZDc2NWE5MzEzMmIzZjg4YzliMzVkNzYxMzU5ZWQ3NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTk6MTc6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMKaW5kZXggOWFhYWI2YmI4MDYxYy4uN2ExM2FiZTczMzQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suYwpAQCAtMTAzLDEyICYjNDM7MTAzLDM1IEBAIHN0YXRpYyBib29sIHZob3N0X3RyYW5zcG9ydF9oYXNfcmVtb3RlX2NpZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkKQogCXJldHVybiBmb3VuZDsKIH0KIAomIzQzO3N0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCB1c2VkX2NvdW50KQomIzQzO3sKJiM0MzsJaWYgKCF1c2VkX2NvdW50KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwl2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS0mZ3Q7aGVhZHMsIHZxLSZndDtuaGVhZHMsIHVzZWRfY291bnQpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCwKJiM0MzsJCQkJIHVuc2lnbmVkIGludCBoZWFkLCB1bnNpZ25lZCBpbnQgbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9ICZhbXA7dnEtJmd0O2hlYWRzW3VzZWRfY291bnRdOwomIzQzOwomIzQzOwl1c2VkLSZndDtpZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTsKJiM0MzsJdXNlZC0mZ3Q7bGVuID0gY3B1X3RvX3Zob3N0MzIodnEsIGxlbik7CiYjNDM7CXZxLSZndDtuaGVhZHNbdXNlZF9jb3VudF0gPSAxOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAkJCSAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKIHsKIAlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp0eF92cSA9ICZhbXA7dnNvY2stJmd0O3Zxc1tWU09DS19WUV9UWF07CiAJaW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCA9IDA7CiYjNDM7CXVuc2lnbmVkIGludCB1c2VkX2xpbWl0OwogCWJvb2wgYWRkZWQgPSBmYWxzZTsKIAlib29sIHJlc3RhcnRfdHggPSBmYWxzZTsKIApAQCAtMTIwLDYgJiM0MzsxNDMsMTEgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJaWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJLyogS2VlcCB0aGUgYmF0Y2ggd2l0aGluIHRoZSB1c2VkIHJpbmcgYW5kIHRoZSBzY3JhdGNoIGFycmF5cy4gKi8KJiM0MzsJdXNlZF9saW1pdCA9IG1pbl90KHVuc2lnbmVkIGludCwgdnEtJmd0O251bSwgdnEtJmd0O2Rldi0mZ3Q7aW92X2xpbWl0KTsKJiM0MzsJaWYgKHVubGlrZWx5KCF1c2VkX2xpbWl0KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCS8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UmIzM5O3JlIGFscmVhZHkgcHJvY2Vzc2luZyB0aGUgdmlydHF1ZXVlICovCiAJdmhvc3RfZGlzYWJsZV9ub3RpZnkoJmFtcDt2c29jay0mZ3Q7ZGV2LCB2cSk7CiAKQEAgLTE1MCw2ICYjNDM7MTc4LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLAogCiAJCWlmIChoZWFkID09IHZxLSZndDtudW0pIHsKIAkJCXZpcnRpb192c29ja19za2JfcXVldWVfaGVhZCgmYW1wO3Zzb2NrLSZndDtzZW5kX3BrdF9xdWV1ZSwgc2tiKTsKJiM0MzsKJiM0MzsJCQkvKiBGbHVzaCBjb21wbGV0ZWQgYnVmZmVycyBiZWZvcmUgcmUtZW5hYmxpbmcgbm90aWZpY2F0aW9ucy4gKi8KJiM0MzsJCQlpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHsKJiM0MzsJCQkJYWRkZWQgPSB0cnVlOwomIzQzOwkJCQl1c2VkX2NvdW50ID0gMDsKJiM0MzsJCQl9CiYjNDM7CiAJCQkvKiBXZSBjYW5ub3QgZmluaXNoIHlldCBpZiBtb3JlIGJ1ZmZlcnMgc251Y2sgaW4gd2hpbGUKIAkJCSAqIHJlLWVuYWJsaW5nIG5vdGlmeS4KIAkJCSAqLwpAQCAtMjMwLDggJiM0MzsyNjUsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssCiAJCSAqLwogCQl2aXJ0aW9fdHJhbnNwb3J0X2RlbGl2ZXJfdGFwX3BrdChza2IpOwogCi0JCXZob3N0X2FkZF91c2VkKHZxLCBoZWFkLCBzaXplb2YoKmhkcikgJiM0MzsgcGF5bG9hZF9sZW4pOwotCQlhZGRlZCA9IHRydWU7CiYjNDM7CQl2aG9zdF92c29ja19hZGRfdXNlZCh2cSwgdXNlZF9jb3VudCwgaGVhZCwKJiM0MzsJCQkJICAgICBzaXplb2YoKmhkcikgJiM0MzsgcGF5bG9hZF9sZW4pOwomIzQzOwkJdXNlZF9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAodXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0KSB7CiYjNDM7CQkJYWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCk7CiYjNDM7CQkJdXNlZF9jb3VudCA9IDA7CiYjNDM7CQl9CiAKIAkJVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLSZndDtvZmZzZXQgJiM0Mzs9IHBheWxvYWRfbGVuOwogCQl0b3RhbF9sZW4gJiM0Mzs9IHBheWxvYWRfbGVuOwpAQCAtMjY0LDYgJiM0MzszMDQsOSBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywKIAkJCXZpcnRpb190cmFuc3BvcnRfY29uc3VtZV9za2Jfc2VudChza2IsIHRydWUpOwogCQl9CiAJfSB3aGlsZShsaWtlbHkoIXZob3N0X2V4Y2VlZHNfd2VpZ2h0KHZxLCAmIzQzOyYjNDM7cGt0cywgdG90YWxfbGVuKSkpOwomIzQzOwomIzQzOwlhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCB1c2VkX2NvdW50KTsKJiM0MzsKIAlpZiAoYWRkZWQpCiAJCXZob3N0X3NpZ25hbCgmYW1wO3Zzb2NrLSZndDtkZXYsIHZxKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0IHZzb2NrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBjaGFuZ2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBzaW5jZSBpdCB0b3VjaGVzIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGZvY3VzaW5nIG9uIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGlzIGNydWNpYWw7IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdHVhbCBwYWNrZXQgc2VuZGluZyBsb2dpYyByZXNpZGVzLgoKTXkgYW5hbHlzaXMgdGVsbHMgbWUgdGhlIGZ1bmRhbWVudGFsIHNoaWZ0IGlzIGluIGhvdyB0aGUgdXNlZCByaW5nIGlzIHVwZGF0ZWQuIEluc3RlYWQgb2YgdGhlIHR5cGljYWwsIGltbWVkaWF0ZSBgdmhvc3RfYWRkX3VzZWRgIGNhbGwgZm9yIGVhY2ggaW5kaXZpZHVhbCBwYWNrZXQsIGl0IGFwcGVhcnMgd2UmIzM5O3JlIG5vdyAqYmF0Y2hpbmcqIHRoZXNlIHVwZGF0ZXMgd2l0aCBgdmhvc3RfYWRkX3VzZWRfbmAsIHVzaW5nIGB2cS0mZ3Q7aGVhZHNgLCBgdnEtJmd0O25oZWFkc2AsIGFuZCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCgpYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkKClgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgYmF0Y2hpbmcgY2FuIG9mdGVuIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgcmVkdWNpbmcgdGhlIG92ZXJoZWFkIG9mIHJlcGVhdGVkIHN5c3RlbSBjYWxscyBvciBtZW1vcnkgYmFycmllcnMgcmVsYXRlZCB0byByaW5nIHVwZGF0ZXMuCgpOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gSSB3YW50IHRvIHNlZSAqaG93KiB0aGlzIGB2aG9zdF9hZGRfdXNlZF9uYCBmdW5jdGlvbiwgYW5kIHRoZSBgdnEtJmd0O2hlYWRzYCBhbmQgYHZxLSZndDtuaGVhZHNgIHN0cnVjdHVyZXMsIGFyZSB1c2VkIGFjcm9zcyB0aGUgKmVudGlyZSogYGRyaXZlcnMvdmhvc3QvYCBkaXJlY3RvcnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBub3ZlbCBhcHByb2FjaCBvciBpZiBpdCYjMzk7cyBiYXNlZCBvbiBzb21lIGV4aXN0aW5nIHBhdHRlcm4uIEkmIzM5O2xsIHByb2JhYmx5IGZpcmUgdXAgYGdyZXBwZXJgIChvciB1c2UgYHJlYWQtZmlsZWAgaW4gYSBwaW5jaCkgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGl0cyB1c2UuIFRoaXMgd2lsbCByZXZlYWwgaWYgdGhpcyBpcyBhIHN0YW5kYXJkIHZob3N0IGlkaW9tIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dCBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSBwYXRjaCYjMzk7cyBwb3RlbnRpYWwgYmVuZWZpdHMgYW5kIGRyYXdiYWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfYWRkX3VzZWRfbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jPTMwMDg9aW50IHZob3N0X2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbilcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzAxNS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDE2Olx0cmV0dXJuIHZob3N0X2FkZF91c2VkX24odnEsIFx1MDAyNmhlYWRzLCBcdTAwMjZuaGVhZHMsIDEpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMTctfVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTMwMTg9RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWQpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMTktXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzAyMDpzdGF0aWMgaW50IF9fdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDIxLVx0XHRcdCAgICBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA1MS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDUyOnN0YXRpYyBpbnQgdmhvc3RfYWRkX3VzZWRfbl9vb28oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA1My1cdFx0XHRcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDYwLVx0aWYgKG4gXHUwMDNjIGNvdW50KSB7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzA2MTpcdFx0ciA9IF9fdmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIG4pO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjItXHRcdGlmIChyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDY2LVx0fVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwNjc6XHRyZXR1cm4gX192aG9zdF9hZGRfdXNlZF9uKHZxLCBoZWFkcywgY291bnQpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjgtfVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjktXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzA3MDpzdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25faW5fb3JkZXIoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA3MS1cdFx0XHRcdCAgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMTktICogd2FudCB0byBub3RpZnkgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqL1xuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxMjA6aW50IHZob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMjEtXHRcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTI2LVx0aWYgKCFpbl9vcmRlciB8fCAhbmhlYWRzKVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxMjc6XHRcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX29vbyh2cSwgaGVhZHMsIGNvdW50KTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTI4LVx0ZWxzZVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxMjk6XHRcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHZxLCBoZWFkcywgbmhlYWRzLCBjb3VudCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzEzMC1cbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzE1MC19XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzE1MTpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9hZGRfdXNlZF9uKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTUyLVxuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zMjEwPXZvaWQgdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbF9uKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzIxNS17XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzIxNjpcdHZob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBuaGVhZHMsIGNvdW50KTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMjE3LVx0dmhvc3Rfc2lnbmFsKGRldiwgdnEpO1xuLS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yNDg9aW50IHZob3N0X2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKiwgdW5zaWduZWQgaW50IGhlYWQsIGludCBsZW4pO1xuZHJpdmVycy92aG9zdC92aG9zdC5oOjI0OTppbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTI1MC1cdFx0ICAgICB1MTYgKm5oZWFkcywgdW5zaWduZWQgY291bnQpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0xMDY9c3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTExLVxuZHJpdmVycy92aG9zdC92c29jay5jOjExMjpcdHZob3N0X2FkZF91c2VkX24odnEsIHZxLVx1MDAzZWhlYWRzLCB2cS1cdTAwM2VuaGVhZHMsIHVzZWRfY291bnQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTExMy1cdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODQ3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBWaG9zdCBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgYHZob3N0X2FkZF91c2VkX25gIGFuZCwgYnkgZXh0ZW5zaW9uLCB0aGUgYHZxLSZndDtoZWFkc2AgYW5kIGB2cS0mZ3Q7bmhlYWRzYCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB1dGlsaXplZCB0aHJvdWdob3V0IHRoZSBgdmhvc3RgIGRyaXZlciBlY29zeXN0ZW0uIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBoYW5kbGUgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQgaXMgdG8gZm9jdXMgb24gd2hlcmUgYHZxLSZndDtoZWFkc2AgaXMgZGlyZWN0bHkgYWNjZXNzZWQsIHNpbmNlIEkmIzM5O20gY29uY2VybmVkIGFib3V0IGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBTbywgSeKAmWxsIG5lZWQgdG8gZG8gYSBjb2RlIHNlYXJjaC4gSSYjMzk7bGwgaW5pdGlhdGUgYSBgZ3JlcGAgZm9yIGB2cS0mZ3Q7aGVhZHNgIHdpdGhpbiB0aGUgYGRyaXZlcnMvdmhvc3RgIGRpcmVjdG9yeS4gVGhpcyBzaG91bGQgaGVscCBtZSBxdWlja2x5IGlkZW50aWZ5IHRoZSBsaW5lcyB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIGJlaW5nIHJlZmVyZW5jZWQsIGFsbG93aW5nIG1lIHRvIGV4cGxvcmUgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2UgYmVoaW5kIGVhY2ggdXNlLWNhc2UuIFRoaXMgYXBwcm9hY2ggaXMgYSBzdHJhaWdodGZvcndhcmQgd2F5IHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjb2RlIGJhc2UuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgbW9yZSBjb21wbGV4IHBpY3R1cmUgb2YgdGhlIHVzZS1jYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnEtXHUwMDNlaGVhZHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MzcyPXN0YXRpYyB2b2lkIHZob3N0X3plcm9jb3B5X3NpZ25hbF91c2VkKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCxcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTM4MC1cdGZvciAoaSA9IG52cS1cdTAwM2Vkb25lX2lkeDsgaSAhPSBudnEtXHUwMDNldXBlbmRfaWR4OyBpID0gKGkgJiM0MzsgMSkgJSBVSU9fTUFYSU9WKSB7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjM4MTpcdFx0aWYgKHZxLVx1MDAzZWhlYWRzW2ldLmxlbiA9PSBWSE9TVF9ETUFfRkFJTEVEX0xFTilcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMzgyLVx0XHRcdHZob3N0X25ldF90eF9lcnIobmV0KTtcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MzgzOlx0XHRpZiAoVkhPU1RfRE1BX0lTX0RPTkUodnEtXHUwMDNlaGVhZHNbaV0ubGVuKSkge1xuZHJpdmVycy92aG9zdC9uZXQuYzozODQ6XHRcdFx0dnEtXHUwMDNlaGVhZHNbaV0ubGVuID0gVkhPU1RfRE1BX0NMRUFSX0xFTjtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMzg1LVx0XHRcdCYjNDM7JiM0MztqO1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMzkxLVx0XHR2aG9zdF9hZGRfdXNlZF9hbmRfc2lnbmFsX24odnEtXHUwMDNlZGV2LCB2cSxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MzkyOlx0XHRcdFx0XHQgICAgXHUwMDI2dnEtXHUwMDNlaGVhZHNbbnZxLVx1MDAzZWRvbmVfaWR4XSxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMzkzLVx0XHRcdFx0XHQgICAgTlVMTCwgYWRkKTtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTM5OT1zdGF0aWMgdm9pZCB2aG9zdF96ZXJvY29weV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtNDE2LVx0Lyogc2V0IGxlbiB0byBtYXJrIHRoaXMgZGVzYyBidWZmZXJzIGRvbmUgRE1BICovXG5kcml2ZXJzL3Zob3N0L25ldC5jOjQxNzpcdHZxLVx1MDAzZWhlYWRzW3VidWYtXHUwMDNlZGVzY10ubGVuID0gc3VjY2VzcyA/XG5kcml2ZXJzL3Zob3N0L25ldC5jLTQxOC1cdFx0VkhPU1RfRE1BX0RPTkVfTEVOIDogVkhPU1RfRE1BX0ZBSUxFRF9MRU47XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz00NzU9c3RhdGljIHZvaWQgdmhvc3RfbmV0X3NpZ25hbF91c2VkKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEsXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy00ODMtXG5kcml2ZXJzL3Zob3N0L25ldC5jOjQ4NDpcdHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbihkZXYsIHZxLCB2cS1cdTAwM2VoZWFkcyxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtNDg1LVx0XHRcdFx0ICAgIHZxLVx1MDAzZW5oZWFkcywgY291bnQpO1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9NDg5PXN0YXRpYyB2b2lkIHZob3N0X3R4X2JhdGNoKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCxcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTUwMy1cdGlmIChpbl9vcmRlcikge1xuZHJpdmVycy92aG9zdC9uZXQuYzo1MDQ6XHRcdHZxLVx1MDAzZWhlYWRzWzBdLmxlbiA9IDA7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTUwNS1cdFx0dnEtXHUwMDNlbmhlYWRzWzBdID0gbnZxLVx1MDAzZWRvbmVfaWR4O1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9NzcwPXN0YXRpYyB2b2lkIGhhbmRsZV90eF9jb3B5KHN0cnVjdCB2aG9zdF9uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTg2MS1cdFx0aWYgKGluX29yZGVyKSB7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjg2MjpcdFx0XHR2cS1cdTAwM2VoZWFkc1swXS5pZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtODYzLVx0XHR9IGVsc2Uge1xuZHJpdmVycy92aG9zdC9uZXQuYzo4NjQ6XHRcdFx0dnEtXHUwMDNlaGVhZHNbbnZxLVx1MDAzZWRvbmVfaWR4XS5pZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmM6ODY1Olx0XHRcdHZxLVx1MDAzZWhlYWRzW252cS1cdTAwM2Vkb25lX2lkeF0ubGVuID0gMDtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtODY2LVx0XHR9XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz04NzM9c3RhdGljIHZvaWQgaGFuZGxlX3R4X3plcm9jb3B5KHN0cnVjdCB2aG9zdF9uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTkyNC1cdFx0XHR1YnVmID0gbnZxLVx1MDAzZXVidWZfaW5mbyAmIzQzOyBudnEtXHUwMDNldXBlbmRfaWR4O1xuZHJpdmVycy92aG9zdC9uZXQuYzo5MjU6XHRcdFx0dnEtXHUwMDNlaGVhZHNbbnZxLVx1MDAzZXVwZW5kX2lkeF0uaWQgPSBjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCk7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjkyNjpcdFx0XHR2cS1cdTAwM2VoZWFkc1tudnEtXHUwMDNldXBlbmRfaWR4XS5sZW4gPSBWSE9TVF9ETUFfSU5fUFJPR1JFU1M7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTkyNy1cdFx0XHR1YnVmLVx1MDAzZWN0eCA9IG52cS1cdTAwM2V1YnVmcztcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTk1NS1cdFx0XHRpZiAoemNvcHlfdXNlZCkge1xuZHJpdmVycy92aG9zdC9uZXQuYzo5NTY6XHRcdFx0XHRpZiAodnEtXHUwMDNlaGVhZHNbdWJ1Zi1cdTAwM2VkZXNjXS5sZW4gPT0gVkhPU1RfRE1BX0lOX1BST0dSRVNTKVxuZHJpdmVycy92aG9zdC9uZXQuYy05NTctXHRcdFx0XHRcdHZob3N0X25ldF91YnVmX3B1dCh1YnVmcyk7XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy05NjEtXHRcdFx0XHRlbHNlXG5kcml2ZXJzL3Zob3N0L25ldC5jOjk2MjpcdFx0XHRcdFx0dnEtXHUwMDNlaGVhZHNbdWJ1Zi1cdTAwM2VkZXNjXS5sZW4gPSBWSE9TVF9ETUFfRE9ORV9MRU47XG5kcml2ZXJzL3Zob3N0L25ldC5jLTk2My1cdFx0XHR9XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xMTQ5PXN0YXRpYyB2b2lkIGhhbmRsZV9yeChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMjA3LVx0XHR2aG9zdF9sZW4gPSBzb2NrX2xlbiAmIzQzOyB2aG9zdF9obGVuO1xuZHJpdmVycy92aG9zdC9uZXQuYzoxMjA4Olx0XHRoZWFkY291bnQgPSBnZXRfcnhfYnVmcyhudnEsIHZxLVx1MDAzZWhlYWRzICYjNDM7IGNvdW50LFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMjA5LVx0XHRcdFx0XHR2cS1cdTAwM2VuaGVhZHMgJiM0MzsgY291bnQsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTQ5Nz1zdGF0aWMgdm9pZCB2aG9zdF92cV9mcmVlX2lvdmVjcyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNTAyLVx0dnEtXHUwMDNlbG9nID0gTlVMTDtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzo1MDM6XHRrZnJlZSh2cS1cdTAwM2VoZWFkcyk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NTA0Olx0dnEtXHUwMDNlaGVhZHMgPSBOVUxMO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTUwNS1cdGtmcmVlKHZxLVx1MDAzZW5oZWFkcyk7XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTUxMD1zdGF0aWMgbG9uZyB2aG9zdF9kZXZfYWxsb2NfaW92ZWNzKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNTE4LVx0XHR2cS1cdTAwM2Vsb2cgPSBrbWFsbG9jX29ianMoKnZxLVx1MDAzZWxvZywgZGV2LVx1MDAzZWlvdl9saW1pdCk7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NTE5Olx0XHR2cS1cdTAwM2VoZWFkcyA9IGttYWxsb2Nfb2JqcygqdnEtXHUwMDNlaGVhZHMsIGRldi1cdTAwM2Vpb3ZfbGltaXQpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTUyMC1cdFx0dnEtXHUwMDNlbmhlYWRzID0ga21hbGxvY19hcnJheShkZXYtXHUwMDNlaW92X2xpbWl0LCBzaXplb2YoKnZxLVx1MDAzZW5oZWFkcyksXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNTIxLVx0XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzo1MjI6XHRcdGlmICghdnEtXHUwMDNlaW5kaXJlY3QgfHwgIXZxLVx1MDAzZWxvZyB8fCAhdnEtXHUwMDNlaGVhZHMgfHwgIXZxLVx1MDAzZW5oZWFkcylcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy01MjMtXHRcdFx0Z290byBlcnJfbm9tZW07XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTU4MD12b2lkIHZob3N0X2Rldl9pbml0KHN0cnVjdCB2aG9zdF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNjEyLVx0XHR2cS1cdTAwM2VpbmRpcmVjdCA9IE5VTEw7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NjEzOlx0XHR2cS1cdTAwM2VoZWFkcyA9IE5VTEw7XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNjE0LVx0XHR2cS1cdTAwM2VuaGVhZHMgPSBOVUxMO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0xMDY9c3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTExLVxuZHJpdmVycy92aG9zdC92c29jay5jOjExMjpcdHZob3N0X2FkZF91c2VkX24odnEsIHZxLVx1MDAzZWhlYWRzLCB2cS1cdTAwM2VuaGVhZHMsIHVzZWRfY291bnQpO1xuZHJpdmVycy92aG9zdC92c29jay5jLTExMy1cdHJldHVybiB0cnVlO1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0xMTY9c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTExOS17XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTIwOlx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9IFx1MDAyNnZxLVx1MDAzZWhlYWRzW3VzZWRfY291bnRdO1xuZHJpdmVycy92aG9zdC92c29jay5jLTEyMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE3NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB2aG9zdF9hZGRfdXNlZF9uIGFuZCB2aG9zdF92c29ja19hZGRfdXNlZCoqCgpPa2F5LCB0aW1lIHRvIHJlYWxseSBnZXQgaW50byB0aGUgd2VlZHMgb24gdGhlc2UgYHZob3N0YCBmdW5jdGlvbnMuIEkgd2FudCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGB2aG9zdF9hZGRfdXNlZF9uYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCB3b3JrIGludGVybmFsbHkuIE15IGFwcHJvYWNoIGlzIHRvIGxvb2sgYXQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGNsb3NlbHksIGFuZCBJJiMzOTtsbCBzdGFydCBieSByZWFkaW5nIHRoZSBjb2RlIGFyb3VuZCBlYWNoIGZ1bmN0aW9uLiBGb3IgYHZob3N0X2FkZF91c2VkX25gLCBJJiMzOTtsbCBiZSBsb29raW5nIGluIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgLCBmb2N1c2luZyBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCBpdHMgY29udGV4dC4gVGhlbiwgSSYjMzk7bGwgc3dpdGNoIG92ZXIgdG8gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AgdG8gc2VlIGhvdyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uLCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCBpcyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGRpZmZlcnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgdGhlaXIgaW50ZXJhY3Rpb24gYW5kIHVzYWdlIHdpdGhpbiB0aGUgb3ZlcmFsbCBgdmhvc3RgIGZyYW1ld29yay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzAwMDpcdHtcbjMwMDE6XHRcdHZxLVx1MDAzZW5leHRfYXZhaWxfaGVhZCAtPSBuZGVzYztcbjMwMDI6XHRcdHZxLVx1MDAzZWxhc3RfYXZhaWxfaWR4IC09IG5idWZzO1xuMzAwMzpcdH1cbjMwMDQ6XHRFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kaXNjYXJkX3ZxX2Rlc2MpO1xuMzAwNTpcdFxuMzAwNjpcdC8qIEFmdGVyIHdlJiMzOTt2ZSB1c2VkIG9uZSBvZiB0aGVpciBidWZmZXJzLCB3ZSB0ZWxsIHRoZW0gYWJvdXQgaXQuICBXZSYjMzk7bGwgdGhlblxuMzAwNzpcdCAqIHdhbnQgdG8gbm90aWZ5IHRoZSBndWVzdCwgdXNpbmcgZXZlbnRmZC4gKi9cbjMwMDg6XHRpbnQgdmhvc3RfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKVxuMzAwOTpcdHtcbjMwMTA6XHRcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gaGVhZHMgPSB7XG4zMDExOlx0XHRcdGNwdV90b192aG9zdDMyKHZxLCBoZWFkKSxcbjMwMTI6XHRcdFx0Y3B1X3RvX3Zob3N0MzIodnEsIGxlbilcbjMwMTM6XHRcdH07XG4zMDE0Olx0XHR1MTYgbmhlYWRzID0gMTtcbjMwMTU6XHRcbjMwMTY6XHRcdHJldHVybiB2aG9zdF9hZGRfdXNlZF9uKHZxLCBcdTAwMjZoZWFkcywgXHUwMDI2bmhlYWRzLCAxKTtcbjMwMTc6XHR9XG4zMDE4Olx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWQpO1xuMzAxOTpcdFxuMzAyMDpcdHN0YXRpYyBpbnQgX192aG9zdF9hZGRfdXNlZF9uKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuMzAyMTpcdFx0XHRcdCAgICBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbjMwMjI6XHRcdFx0XHQgICAgdW5zaWduZWQgY291bnQpXG4zMDIzOlx0e1xuMzAyNDpcdFx0dnJpbmdfdXNlZF9lbGVtX3QgX191c2VyICp1c2VkO1xuMzAyNTpcdFx0dTE2IG9sZCwgbmV3O1xuMzAyNjpcdFx0aW50IHN0YXJ0O1xuMzAyNzpcdFxuMzAyODpcdFx0c3RhcnQgPSB2cS1cdTAwM2VsYXN0X3VzZWRfaWR4IFx1MDAyNiAodnEtXHUwMDNlbnVtIC0gMSk7XG4zMDI5Olx0XHR1c2VkID0gdnEtXHUwMDNldXNlZC1cdTAwM2VyaW5nICYjNDM7IHN0YXJ0O1xuMzAzMDpcdFx0aWYgKHZob3N0X3B1dF91c2VkKHZxLCBoZWFkcywgc3RhcnQsIGNvdW50KSkge1xuMzAzMTpcdFx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhaWxlZCB0byB3cml0ZSB1c2VkXCYjMzQ7KTtcbjMwMzI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMDMzOlx0XHR9XG4zMDM0Olx0XHRpZiAodW5saWtlbHkodnEtXHUwMDNlbG9nX3VzZWQpKSB7XG4zMDM1Olx0XHRcdC8qIE1ha2Ugc3VyZSBkYXRhIGlzIHNlZW4gYmVmb3JlIGxvZy4gKi9cbjMwMzY6XHRcdFx0c21wX3dtYigpO1xuMzAzNzpcdFx0XHQvKiBMb2cgdXNlZCByaW5nIGVudHJ5IHdyaXRlLiAqL1xuMzAzODpcdFx0XHRsb2dfdXNlZCh2cSwgKCh2b2lkIF9fdXNlciAqKXVzZWQgLSAodm9pZCBfX3VzZXIgKil2cS1cdTAwM2V1c2VkKSxcbjMwMzk6XHRcdFx0XHQgY291bnQgKiBzaXplb2YgKnVzZWQpO1xuMzA0MDpcdFx0fVxuMzA0MTpcdFx0b2xkID0gdnEtXHUwMDNlbGFzdF91c2VkX2lkeDtcbjMwNDI6XHRcdG5ldyA9ICh2cS1cdTAwM2VsYXN0X3VzZWRfaWR4ICYjNDM7PSBjb3VudCk7XG4zMDQzOlx0XHQvKiBJZiB0aGUgZHJpdmVyIG5ldmVyIGJvdGhlcnMgdG8gc2lnbmFsIGluIGEgdmVyeSBsb25nIHdoaWxlLFxuMzA0NDpcdFx0ICogdXNlZCBpbmRleCBtaWdodCB3cmFwIGFyb3VuZC4gSWYgdGhhdCBoYXBwZW5zLCBpbnZhbGlkYXRlXG4zMDQ1Olx0XHQgKiBzaWduYWxsZWRfdXNlZCBpbmRleCB3ZSBzdG9yZWQuIFRPRE86IG1ha2Ugc3VyZSBkcml2ZXJcbjMwNDY6XHRcdCAqIHNpZ25hbHMgYXQgbGVhc3Qgb25jZSBpbiAyXjE2IGFuZCByZW1vdmUgdGhpcy4gKi9cbjMwNDc6XHRcdGlmICh1bmxpa2VseSgodTE2KShuZXcgLSB2cS1cdTAwM2VzaWduYWxsZWRfdXNlZCkgXHUwMDNjICh1MTYpKG5ldyAtIG9sZCkpKVxuMzA0ODpcdFx0XHR2cS1cdTAwM2VzaWduYWxsZWRfdXNlZF92YWxpZCA9IGZhbHNlO1xuMzA0OTpcdFx0cmV0dXJuIDA7XG4zMDUwOlx0fVxuMzA1MTpcdFxuMzA1MjpcdHN0YXRpYyBpbnQgdmhvc3RfYWRkX3VzZWRfbl9vb28oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4zMDUzOlx0XHRcdFx0XHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbjMwNTQ6XHRcdFx0XHRcdHVuc2lnbmVkIGNvdW50KVxuMzA1NTpcdHtcbjMwNTY6XHRcdGludCBzdGFydCwgbiwgcjtcbjMwNTc6XHRcbjMwNTg6XHRcdHN0YXJ0ID0gdnEtXHUwMDNlbGFzdF91c2VkX2lkeCBcdTAwMjYgKHZxLVx1MDAzZW51bSAtIDEpO1xuMzA1OTpcdFx0biA9IHZxLVx1MDAzZW51bSAtIHN0YXJ0O1xuMzA2MDpcdFx0aWYgKG4gXHUwMDNjIGNvdW50KSB7XG4zMDYxOlx0XHRcdHIgPSBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBuKTtcbjMwNjI6XHRcdFx0aWYgKHIgXHUwMDNjIDApXG4zMDYzOlx0XHRcdFx0cmV0dXJuIHI7XG4zMDY0Olx0XHRcdGhlYWRzICYjNDM7PSBuO1xuMzA2NTpcdFx0XHRjb3VudCAtPSBuO1xuMzA2NjpcdFx0fVxuMzA2NzpcdFx0cmV0dXJuIF9fdmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIGNvdW50KTtcbjMwNjg6XHR9XG4zMDY5Olx0XG4zMDcwOlx0c3RhdGljIGludCB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuMzA3MTpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcbjMwNzI6XHRcdFx0XHRcdCAgICAgY29uc3QgdTE2ICpuaGVhZHMsXG4zMDczOlx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGNvdW50KVxuMzA3NDpcdHtcbjMwNzU6XHRcdHZyaW5nX3VzZWRfZWxlbV90IF9fdXNlciAqdXNlZDtcbjMwNzY6XHRcdHUxNiBvbGQsIG5ldyA9IHZxLVx1MDAzZWxhc3RfdXNlZF9pZHg7XG4zMDc3Olx0XHRpbnQgc3RhcnQsIGk7XG4zMDc4Olx0XG4zMDc5Olx0XHRpZiAoIW5oZWFkcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkRpdmluZyBpbnRvIHZob3N0X2FkZF91c2VkX25faW5fb3JkZXIgYW5kIHZob3N0X2FkZF91c2VkX24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgcHJlY2lzZSByb2xlcyB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgYHZob3N0X2FkZF91c2VkX25faW5fb3JkZXJgIGFuZCBgdmhvc3RfYWRkX3VzZWRfbmAgaW50ZXJhY3QuIEkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHRoZWlyIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLCBpZiBhbnkuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgYW55IHN1YnRsZSBkaWZmZXJlbmNlcywgYW5kIHdoaWNoIGNvbnRleHQgc2hvdWxkIGJlIHByZWZlcnJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zob3N0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwODA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMDgxOlx0XG4zMDgyOlx0XHRzdGFydCA9IHZxLVx1MDAzZWxhc3RfdXNlZF9pZHggXHUwMDI2ICh2cS1cdTAwM2VudW0gLSAxKTtcbjMwODM6XHRcdHVzZWQgPSB2cS1cdTAwM2V1c2VkLVx1MDAzZXJpbmcgJiM0Mzsgc3RhcnQ7XG4zMDg0Olx0XG4zMDg1Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbjMwODY6XHRcdFx0aWYgKHZob3N0X3B1dF91c2VkKHZxLCBcdTAwMjZoZWFkc1tpXSwgc3RhcnQsIDEpKSB7XG4zMDg3Olx0XHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgdXNlZFwmIzM0Oyk7XG4zMDg4Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMDg5Olx0XHRcdH1cbjMwOTA6XHRcdFx0c3RhcnQgJiM0Mzs9IG5oZWFkc1tpXTtcbjMwOTE6XHRcdFx0bmV3ICYjNDM7PSBuaGVhZHNbaV07XG4zMDkyOlx0XHRcdGlmIChzdGFydCBcdTAwM2U9IHZxLVx1MDAzZW51bSlcbjMwOTM6XHRcdFx0XHRzdGFydCAtPSB2cS1cdTAwM2VudW07XG4zMDk0Olx0XHR9XG4zMDk1Olx0XG4zMDk2Olx0XHRpZiAodW5saWtlbHkodnEtXHUwMDNlbG9nX3VzZWQpKSB7XG4zMDk3Olx0XHRcdC8qIE1ha2Ugc3VyZSBkYXRhIGlzIHNlZW4gYmVmb3JlIGxvZy4gKi9cbjMwOTg6XHRcdFx0c21wX3dtYigpO1xuMzA5OTpcdFx0XHQvKiBMb2cgdXNlZCByaW5nIGVudHJ5IHdyaXRlLiAqL1xuMzEwMDpcdFx0XHRsb2dfdXNlZCh2cSwgKCh2b2lkIF9fdXNlciAqKXVzZWQgLSAodm9pZCBfX3VzZXIgKil2cS1cdTAwM2V1c2VkKSxcbjMxMDE6XHRcdFx0XHQgKHZxLVx1MDAzZW51bSAtIHN0YXJ0KSAqIHNpemVvZiAqdXNlZCk7XG4zMTAyOlx0XHRcdGlmIChzdGFydCAmIzQzOyBjb3VudCBcdTAwM2UgdnEtXHUwMDNlbnVtKVxuMzEwMzpcdFx0XHRcdGxvZ191c2VkKHZxLCAwLFxuMzEwNDpcdFx0XHRcdFx0IChzdGFydCAmIzQzOyBjb3VudCAtIHZxLVx1MDAzZW51bSkgKiBzaXplb2YgKnVzZWQpO1xuMzEwNTpcdFx0fVxuMzEwNjpcdFxuMzEwNzpcdFx0b2xkID0gdnEtXHUwMDNlbGFzdF91c2VkX2lkeDtcbjMxMDg6XHRcdHZxLVx1MDAzZWxhc3RfdXNlZF9pZHggPSBuZXc7XG4zMTA5Olx0XHQvKiBJZiB0aGUgZHJpdmVyIG5ldmVyIGJvdGhlcnMgdG8gc2lnbmFsIGluIGEgdmVyeSBsb25nIHdoaWxlLFxuMzExMDpcdFx0ICogdXNlZCBpbmRleCBtaWdodCB3cmFwIGFyb3VuZC4gSWYgdGhhdCBoYXBwZW5zLCBpbnZhbGlkYXRlXG4zMTExOlx0XHQgKiBzaWduYWxsZWRfdXNlZCBpbmRleCB3ZSBzdG9yZWQuIFRPRE86IG1ha2Ugc3VyZSBkcml2ZXJcbjMxMTI6XHRcdCAqIHNpZ25hbHMgYXQgbGVhc3Qgb25jZSBpbiAyXjE2IGFuZCByZW1vdmUgdGhpcy4gKi9cbjMxMTM6XHRcdGlmICh1bmxpa2VseSgodTE2KShuZXcgLSB2cS1cdTAwM2VzaWduYWxsZWRfdXNlZCkgXHUwMDNjICh1MTYpKG5ldyAtIG9sZCkpKVxuMzExNDpcdFx0XHR2cS1cdTAwM2VzaWduYWxsZWRfdXNlZF92YWxpZCA9IGZhbHNlO1xuMzExNTpcdFx0cmV0dXJuIDA7XG4zMTE2Olx0fVxuMzExNzpcdFxuMzExODpcdC8qIEFmdGVyIHdlJiMzOTt2ZSB1c2VkIG9uZSBvZiB0aGVpciBidWZmZXJzLCB3ZSB0ZWxsIHRoZW0gYWJvdXQgaXQuICBXZSYjMzk7bGwgdGhlblxuMzExOTpcdCAqIHdhbnQgdG8gbm90aWZ5IHRoZSBndWVzdCwgdXNpbmcgZXZlbnRmZC4gKi9cbjMxMjA6XHRpbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXG4zMTIxOlx0XHRcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KVxuMzEyMjpcdHtcbjMxMjM6XHRcdGJvb2wgaW5fb3JkZXIgPSB2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX0ZfSU5fT1JERVIpO1xuMzEyNDpcdFx0aW50IHI7XG4zMTI1Olx0XG4zMTI2Olx0XHRpZiAoIWluX29yZGVyIHx8ICFuaGVhZHMpXG4zMTI3Olx0XHRcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX29vbyh2cSwgaGVhZHMsIGNvdW50KTtcbjMxMjg6XHRcdGVsc2VcbjMxMjk6XHRcdFx0ciA9IHZob3N0X2FkZF91c2VkX25faW5fb3JkZXIodnEsIGhlYWRzLCBuaGVhZHMsIGNvdW50KTtcbjMxMzA6XHRcbjMxMzE6XHRcdGlmIChyIFx1MDAzYyAwKVxuMzEzMjpcdFx0XHRyZXR1cm4gcjtcbjMxMzM6XHRcbjMxMzQ6XHRcdC8qIE1ha2Ugc3VyZSBidWZmZXIgaXMgd3JpdHRlbiBiZWZvcmUgd2UgdXBkYXRlIGluZGV4LiAqL1xuMzEzNTpcdFx0c21wX3dtYigpO1xuMzEzNjpcdFx0aWYgKHZob3N0X3B1dF91c2VkX2lkeCh2cSkpIHtcbjMxMzc6XHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtGYWlsZWQgdG8gaW5jcmVtZW50IHVzZWQgaWR4XCYjMzQ7KTtcbjMxMzg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMTM5Olx0XHR9XG4zMTQwOlx0XHRpZiAodW5saWtlbHkodnEtXHUwMDNlbG9nX3VzZWQpKSB7XG4zMTQxOlx0XHRcdC8qIE1ha2Ugc3VyZSB1c2VkIGlkeCBpcyBzZWVuIGJlZm9yZSBsb2cuICovXG4zMTQyOlx0XHRcdHNtcF93bWIoKTtcbjMxNDM6XHRcdFx0LyogTG9nIHVzZWQgaW5kZXggdXBkYXRlLiAqL1xuMzE0NDpcdFx0XHRsb2dfdXNlZCh2cSwgb2Zmc2V0b2Yoc3RydWN0IHZyaW5nX3VzZWQsIGlkeCksXG4zMTQ1Olx0XHRcdFx0IHNpemVvZiB2cS1cdTAwM2V1c2VkLVx1MDAzZWlkeCk7XG4zMTQ2Olx0XHRcdGlmICh2cS1cdTAwM2Vsb2dfY3R4KVxuMzE0NzpcdFx0XHRcdGV2ZW50ZmRfc2lnbmFsKHZxLVx1MDAzZWxvZ19jdHgpO1xuMzE0ODpcdFx0fVxuMzE0OTpcdFx0cmV0dXJuIHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdnNvY2sgcGFja2V0cyBhcmUgYmVpbmcgc2VudC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZHJpdmVycy92aG9zdC92c29jay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgZnVuY3Rpb24uIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgcGFja2V0IHRyYW5zbWlzc2lvbiB3aXRoaW4gdGhlIHZob3N0IGNvbnRleHQgc2hvdWxkIHJlc2lkZS4gSSBleHBlY3QgdG8gZmluZCB0aGUgYWN0dWFsIG1lY2hhbmlzbSBmb3IgcHVzaGluZyB0aGUgZGF0YSBvbnRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgdGhlcmUuIEkmIzM5O20gbG9va2luZyBmb3IgZGV0YWlscyByZWdhcmRpbmcgaG93IHRoZSBwYWNrZXQgZGF0YSBpcyBjb25zdHJ1Y3RlZCAob3IgcmVmZXJlbmNlZCksIGFueSBidWZmZXIgbWFuYWdlbWVudCBpbnZvbHZlZCwgYW5kLCBjcnVjaWFsbHksIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIHZpcnRpbyBsYXllci4gSSBhbnRpY2lwYXRlIHRoZXJlJiMzOTtsbCBiZSBzb21lIGRhdGEgc3RydWN0dXJlLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB2aG9zdCBzdHJ1Y3R1cmUgZm9yIHZzb2NrLCB0aGF0IGhvbGRzIHRoZSBwYWNrZXQgZGV0YWlscy4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBpbmNsdWRlcyBhbnkgcGFja2V0IHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGFzcGVjdHMgb3IgaWYgaXQgcmVsaWVzIG9uIG90aGVyIGNvbXBvbmVudHMgZm9yIHRoYXQgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBrZWVuIHRvIHNlZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYW55IHBvdGVudGlhbCBsb2NraW5nLCBhbmQgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBzZW5kIGZhaWx1cmVzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMTAxOlx0XHRmb3VuZCA9ICEhdmhvc3RfdnNvY2tfZ2V0KGNpZCwgbmV0KTtcbiAxMDI6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDEwMzpcdFx0cmV0dXJuIGZvdW5kO1xuIDEwNDpcdH1cbiAxMDU6XHRcbiAxMDY6XHRzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuIDEwNzpcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IHVzZWRfY291bnQpXG4gMTA4Olx0e1xuIDEwOTpcdFx0aWYgKCF1c2VkX2NvdW50KVxuIDExMDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTExOlx0XG4gMTEyOlx0XHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cdTAwM2VoZWFkcywgdnEtXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcbiAxMTM6XHRcdHJldHVybiB0cnVlO1xuIDExNDpcdH1cbiAxMTU6XHRcbiAxMTY6XHRzdGF0aWMgdm9pZCB2aG9zdF92c29ja19hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbiAxMTc6XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCxcbiAxMTg6XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbilcbiAxMTk6XHR7XG4gMTIwOlx0XHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICp1c2VkID0gXHUwMDI2dnEtXHUwMDNlaGVhZHNbdXNlZF9jb3VudF07XG4gMTIxOlx0XG4gMTIyOlx0XHR1c2VkLVx1MDAzZWlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xuIDEyMzpcdFx0dXNlZC1cdTAwM2VsZW4gPSBjcHVfdG9fdmhvc3QzMih2cSwgbGVuKTtcbiAxMjQ6XHRcdHZxLVx1MDAzZW5oZWFkc1t1c2VkX2NvdW50XSA9IDE7XG4gMTI1Olx0fVxuIDEyNjpcdFxuIDEyNzpcdHN0YXRpYyB2b2lkXG4gMTI4Olx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gMTI5Olx0XHRcdFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuIDEzMDpcdHtcbiAxMzE6XHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR4X3ZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcbiAxMzI6XHRcdGludCBwa3RzID0gMCwgdG90YWxfbGVuID0gMDtcbiAxMzM6XHRcdHVuc2lnbmVkIGludCB1c2VkX2NvdW50ID0gMDtcbiAxMzQ6XHRcdHVuc2lnbmVkIGludCB1c2VkX2xpbWl0O1xuIDEzNTpcdFx0Ym9vbCBhZGRlZCA9IGZhbHNlO1xuIDEzNjpcdFx0Ym9vbCByZXN0YXJ0X3R4ID0gZmFsc2U7XG4gMTM3Olx0XG4gMTM4Olx0XHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiAxMzk6XHRcbiAxNDA6XHRcdGlmICghdmhvc3RfdnFfZ2V0X2JhY2tlbmQodnEpKVxuIDE0MTpcdFx0XHRnb3RvIG91dDtcbiAxNDI6XHRcbiAxNDM6XHRcdGlmICghdnFfbWV0YV9wcmVmZXRjaCh2cSkpXG4gMTQ0Olx0XHRcdGdvdG8gb3V0O1xuIDE0NTpcdFxuIDE0NjpcdFx0LyogS2VlcCB0aGUgYmF0Y2ggd2l0aGluIHRoZSB1c2VkIHJpbmcgYW5kIHRoZSBzY3JhdGNoIGFycmF5cy4gKi9cbiAxNDc6XHRcdHVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVx1MDAzZW51bSwgdnEtXHUwMDNlZGV2LVx1MDAzZWlvdl9saW1pdCk7XG4gMTQ4Olx0XHRpZiAodW5saWtlbHkoIXVzZWRfbGltaXQpKVxuIDE0OTpcdFx0XHRnb3RvIG91dDtcbiAxNTA6XHRcbiAxNTE6XHRcdC8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UmIzM5O3JlIGFscmVhZHkgcHJvY2Vzc2luZyB0aGUgdmlydHF1ZXVlICovXG4gMTUyOlx0XHR2aG9zdF9kaXNhYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiAxNTM6XHRcbiAxNTQ6XHRcdGRvIHtcbiAxNTU6XHRcdFx0c3RydWN0IHZpcnRpb192c29ja19oZHIgKmhkcjtcbiAxNTY6XHRcdFx0c2l6ZV90IGlvdl9sZW4sIHBheWxvYWRfbGVuO1xuIDE1NzpcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgaW92X2l0ZXI7XG4gMTU4Olx0XHRcdHUzMiBmbGFnc190b19yZXN0b3JlID0gMDtcbiAxNTk6XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAxNjA6XHRcdFx0dW5zaWduZWQgb3V0LCBpbjtcbiAxNjE6XHRcdFx0c2l6ZV90IG5ieXRlcztcbiAxNjI6XHRcdFx0dTMyIG9mZnNldDtcbiAxNjM6XHRcdFx0aW50IGhlYWQ7XG4gMTY0Olx0XG4gMTY1Olx0XHRcdHNrYiA9IHZpcnRpb192c29ja19za2JfZGVxdWV1ZShcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF9xdWV1ZSk7XG4gMTY2Olx0XG4gMTY3Olx0XHRcdGlmICghc2tiKSB7XG4gMTY4Olx0XHRcdFx0dmhvc3RfZW5hYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiAxNjk6XHRcdFx0XHRicmVhaztcbiAxNzA6XHRcdFx0fVxuIDE3MTpcdFxuIDE3MjpcdFx0XHRoZWFkID0gdmhvc3RfZ2V0X3ZxX2Rlc2ModnEsIHZxLVx1MDAzZWlvdiwgQVJSQVlfU0laRSh2cS1cdTAwM2Vpb3YpLFxuIDE3MzpcdFx0XHRcdFx0XHQgXHUwMDI2b3V0LCBcdTAwMjZpbiwgTlVMTCwgTlVMTCk7XG4gMTc0Olx0XHRcdGlmIChoZWFkIFx1MDAzYyAwKSB7XG4gMTc1Olx0XHRcdFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV9oZWFkKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlLCBza2IpO1xuIDE3NjpcdFx0XHRcdGJyZWFrO1xuIDE3NzpcdFx0XHR9XG4gMTc4Olx0XG4gMTc5Olx0XHRcdGlmIChoZWFkID09IHZxLVx1MDAzZW51bSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY5NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgd2Fsa3Rocm91Z2gsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlIHNlZ21lbnQ6CgoqKkRpdmluZyBpbnRvIGB2c29jay5jYCDigJMgTGluZXMgMTgwLTMyMCoqCgpPa2F5LCB0aW1lIHRvIGdldCBiYWNrIHRvIGl0LiBJJiMzOTttIGZvY3VzaW5nIGluIG9uIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIG5vdywgc3BlY2lmaWNhbGx5IGJldHdlZW4gbGluZXMgMTgwIGFuZCAzMjAuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgdG8gY292ZXIgc29tZSBjcnVjaWFsIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0bywgd2VsbCwgc29tZXRoaW5nIHdpdGhpbiB0aGUgdnNvY2sgc3Vic3lzdGVtLiBCYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBpdCYjMzk7cyBwcm9iYWJseSBpbnZvbHZlZCB3aXRoIHZob3N0IGFuZCB2aXJ0aW8tdnNvY2suIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBwcm92aWRlIGRldGFpbHMgYWJvdXQgb25lIG9yIG1vcmUgb2Ygc2V2ZXJhbCBrZXkgYXJlYXM6IGRhdGEgdHJhbnNmZXJzLCByaW5nIGJ1ZmZlciBpbnRlcmFjdGlvbnMsIGNvbm5lY3Rpb24gc3RhdGUgbWFuYWdlbWVudCwgb3IgY29udHJvbCBwYXRoIHByb2Nlc3NpbmcuIEtub3dpbmcgdGhlIG92ZXJhbGwgY29udGV4dCBvZiB0aGUgY29kZSwgSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IHZpZ2lsYW50IGZvciBob3cgaXQgZGVhbHMgd2l0aCBkZXZpY2Ugb3BlcmF0aW9ucywgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBob3N0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBmaW5kISBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhcmVhcyB0aGF0IG1heSBiZW5lZml0IGZyb20gb3B0aW1pemF0aW9uLCBvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGFyZSBoYW5kbGVkIChvciwgdW5mb3J0dW5hdGVseSwgKm5vdCogaGFuZGxlZCkuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBhcmUgc29tZSBpbnRlcmVzdGluZyBjb21wbGV4aXRpZXMgdG8gdW5jb3ZlciBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0XHRcdHZpcnRpb192c29ja19za2JfcXVldWVfaGVhZChcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcbiAxODE6XHRcbiAxODI6XHRcdFx0XHQvKiBGbHVzaCBjb21wbGV0ZWQgYnVmZmVycyBiZWZvcmUgcmUtZW5hYmxpbmcgbm90aWZpY2F0aW9ucy4gKi9cbiAxODM6XHRcdFx0XHRpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHtcbiAxODQ6XHRcdFx0XHRcdGFkZGVkID0gdHJ1ZTtcbiAxODU6XHRcdFx0XHRcdHVzZWRfY291bnQgPSAwO1xuIDE4NjpcdFx0XHRcdH1cbiAxODc6XHRcbiAxODg6XHRcdFx0XHQvKiBXZSBjYW5ub3QgZmluaXNoIHlldCBpZiBtb3JlIGJ1ZmZlcnMgc251Y2sgaW4gd2hpbGVcbiAxODk6XHRcdFx0XHQgKiByZS1lbmFibGluZyBub3RpZnkuXG4gMTkwOlx0XHRcdFx0ICovXG4gMTkxOlx0XHRcdFx0aWYgKHVubGlrZWx5KHZob3N0X2VuYWJsZV9ub3RpZnkoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cSkpKSB7XG4gMTkyOlx0XHRcdFx0XHR2aG9zdF9kaXNhYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiAxOTM6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDE5NDpcdFx0XHRcdH1cbiAxOTU6XHRcdFx0XHRicmVhaztcbiAxOTY6XHRcdFx0fVxuIDE5NzpcdFxuIDE5ODpcdFx0XHRpZiAob3V0KSB7XG4gMTk5Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMjAwOlx0XHRcdFx0dnFfZXJyKHZxLCBcJiMzNDtFeHBlY3RlZCAwIG91dHB1dCBidWZmZXJzLCBnb3QgJXVcXG5cJiMzNDssIG91dCk7XG4gMjAxOlx0XHRcdFx0YnJlYWs7XG4gMjAyOlx0XHRcdH1cbiAyMDM6XHRcbiAyMDQ6XHRcdFx0aW92X2xlbiA9IGlvdl9sZW5ndGgoXHUwMDI2dnEtXHUwMDNlaW92W291dF0sIGluKTtcbiAyMDU6XHRcdFx0aWYgKGlvdl9sZW4gXHUwMDNjIHNpemVvZigqaGRyKSkge1xuIDIwNjpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDIwNzpcdFx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7QnVmZmVyIGxlbiBbJXp1XSB0b28gc21hbGxcXG5cJiMzNDssIGlvdl9sZW4pO1xuIDIwODpcdFx0XHRcdGJyZWFrO1xuIDIwOTpcdFx0XHR9XG4gMjEwOlx0XG4gMjExOlx0XHRcdGlvdl9pdGVyX2luaXQoXHUwMDI2aW92X2l0ZXIsIElURVJfREVTVCwgXHUwMDI2dnEtXHUwMDNlaW92W291dF0sIGluLCBpb3ZfbGVuKTtcbiAyMTI6XHRcdFx0b2Zmc2V0ID0gVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldDtcbiAyMTM6XHRcdFx0cGF5bG9hZF9sZW4gPSBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0O1xuIDIxNDpcdFx0XHRoZHIgPSB2aXJ0aW9fdnNvY2tfaGRyKHNrYik7XG4gMjE1Olx0XG4gMjE2Olx0XHRcdC8qIElmIHRoZSBwYWNrZXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlXG4gMjE3Olx0XHRcdCAqIGJ1ZmZlciwgd2Ugc3BsaXQgaXQgdXNpbmcgbXVsdGlwbGUgYnVmZmVycy5cbiAyMTg6XHRcdFx0ICovXG4gMjE5Olx0XHRcdGlmIChwYXlsb2FkX2xlbiBcdTAwM2UgaW92X2xlbiAtIHNpemVvZigqaGRyKSkge1xuIDIyMDpcdFx0XHRcdHBheWxvYWRfbGVuID0gaW92X2xlbiAtIHNpemVvZigqaGRyKTtcbiAyMjE6XHRcbiAyMjI6XHRcdFx0XHQvKiBBcyB3ZSBhcmUgY29weWluZyBwaWVjZXMgb2YgbGFyZ2UgcGFja2V0JiMzOTtzIGJ1ZmZlciB0b1xuIDIyMzpcdFx0XHRcdCAqIHNtYWxsIHJ4IGJ1ZmZlcnMsIGhlYWRlcnMgb2YgcGFja2V0cyBpbiByeCBxdWV1ZSBhcmVcbiAyMjQ6XHRcdFx0XHQgKiBjcmVhdGVkIGR5bmFtaWNhbGx5IGFuZCBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBoZWFkZXJcbiAyMjU6XHRcdFx0XHQgKiBvZiBjdXJyZW50IHBhY2tldChleGNlcHQgbGVuZ3RoKS4gQnV0IGluIGNhc2Ugb2ZcbiAyMjY6XHRcdFx0XHQgKiBTT0NLX1NFUVBBQ0tFVCwgd2UgYWxzbyBtdXN0IGNsZWFyIG1lc3NhZ2UgZGVsaW1ldGVyXG4gMjI3Olx0XHRcdFx0ICogYml0IChWSVJUSU9fVlNPQ0tfU0VRX0VPTSkgYW5kIE1TR19FT1IgYml0XG4gMjI4Olx0XHRcdFx0ICogKFZJUlRJT19WU09DS19TRVFfRU9SKSBpZiBzZXQuIE90aGVyd2lzZSxcbiAyMjk6XHRcdFx0XHQgKiB0aGVyZSB3aWxsIGJlIHNlcXVlbmNlIG9mIHBhY2tldHMgd2l0aCB0aGVzZVxuIDIzMDpcdFx0XHRcdCAqIGJpdHMgc2V0LiBBZnRlciBpbml0aWFsaXplZCBoZWFkZXIgd2lsbCBiZSBjb3BpZWQgdG9cbiAyMzE6XHRcdFx0XHQgKiByeCBidWZmZXIsIHRoZXNlIHJlcXVpcmVkIGJpdHMgd2lsbCBiZSByZXN0b3JlZC5cbiAyMzI6XHRcdFx0XHQgKi9cbiAyMzM6XHRcdFx0XHRpZiAobGUzMl90b19jcHUoaGRyLVx1MDAzZWZsYWdzKSBcdTAwMjYgVklSVElPX1ZTT0NLX1NFUV9FT00pIHtcbiAyMzQ6XHRcdFx0XHRcdGhkci1cdTAwM2VmbGFncyBcdTAwMjY9IH5jcHVfdG9fbGUzMihWSVJUSU9fVlNPQ0tfU0VRX0VPTSk7XG4gMjM1Olx0XHRcdFx0XHRmbGFnc190b19yZXN0b3JlIHw9IFZJUlRJT19WU09DS19TRVFfRU9NO1xuIDIzNjpcdFxuIDIzNzpcdFx0XHRcdFx0aWYgKGxlMzJfdG9fY3B1KGhkci1cdTAwM2VmbGFncykgXHUwMDI2IFZJUlRJT19WU09DS19TRVFfRU9SKSB7XG4gMjM4Olx0XHRcdFx0XHRcdGhkci1cdTAwM2VmbGFncyBcdTAwMjY9IH5jcHVfdG9fbGUzMihWSVJUSU9fVlNPQ0tfU0VRX0VPUik7XG4gMjM5Olx0XHRcdFx0XHRcdGZsYWdzX3RvX3Jlc3RvcmUgfD0gVklSVElPX1ZTT0NLX1NFUV9FT1I7XG4gMjQwOlx0XHRcdFx0XHR9XG4gMjQxOlx0XHRcdFx0fVxuIDI0MjpcdFx0XHR9XG4gMjQzOlx0XG4gMjQ0Olx0XHRcdC8qIFNldCB0aGUgY29ycmVjdCBsZW5ndGggaW4gdGhlIGhlYWRlciAqL1xuIDI0NTpcdFx0XHRoZHItXHUwMDNlbGVuID0gY3B1X3RvX2xlMzIocGF5bG9hZF9sZW4pO1xuIDI0NjpcdFxuIDI0NzpcdFx0XHRuYnl0ZXMgPSBjb3B5X3RvX2l0ZXIoaGRyLCBzaXplb2YoKmhkciksIFx1MDAyNmlvdl9pdGVyKTtcbiAyNDg6XHRcdFx0aWYgKG5ieXRlcyAhPSBzaXplb2YoKmhkcikpIHtcbiAyNDk6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAyNTA6XHRcdFx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhdWx0ZWQgb24gY29weWluZyBwa3QgaGRyXFxuXCYjMzQ7KTtcbiAyNTE6XHRcdFx0XHRicmVhaztcbiAyNTI6XHRcdFx0fVxuIDI1MzpcdFxuIDI1NDpcdFx0XHRpZiAoc2tiX2NvcHlfZGF0YWdyYW1faXRlcihza2IsXG4gMjU1Olx0XHRcdFx0XHRcdCAgIG9mZnNldCxcbiAyNTY6XHRcdFx0XHRcdFx0ICAgXHUwMDI2aW92X2l0ZXIsXG4gMjU3Olx0XHRcdFx0XHRcdCAgIHBheWxvYWRfbGVuKSkge1xuIDI1ODpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDI1OTpcdFx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmF1bHRlZCBvbiBjb3B5aW5nIHBrdCBidWZcXG5cJiMzNDspO1xuIDI2MDpcdFx0XHRcdGJyZWFrO1xuIDI2MTpcdFx0XHR9XG4gMjYyOlx0XG4gMjYzOlx0XHRcdC8qIERlbGl2ZXIgdG8gbW9uaXRvcmluZyBkZXZpY2VzIGFsbCBwYWNrZXRzIHRoYXQgd2VcbiAyNjQ6XHRcdFx0ICogd2lsbCB0cmFuc21pdC5cbiAyNjU6XHRcdFx0ICovXG4gMjY2Olx0XHRcdHZpcnRpb190cmFuc3BvcnRfZGVsaXZlcl90YXBfcGt0KHNrYik7XG4gMjY3Olx0XG4gMjY4Olx0XHRcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCB1c2VkX2NvdW50LCBoZWFkLFxuIDI2OTpcdFx0XHRcdFx0ICAgICBzaXplb2YoKmhkcikgJiM0MzsgcGF5bG9hZF9sZW4pO1xuIDI3MDpcdFx0XHR1c2VkX2NvdW50JiM0MzsmIzQzOztcbiAyNzE6XHRcdFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdCkge1xuIDI3MjpcdFx0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xuIDI3MzpcdFx0XHRcdHVzZWRfY291bnQgPSAwO1xuIDI3NDpcdFx0XHR9XG4gMjc1Olx0XG4gMjc2Olx0XHRcdFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgJiM0Mzs9IHBheWxvYWRfbGVuO1xuIDI3NzpcdFx0XHR0b3RhbF9sZW4gJiM0Mzs9IHBheWxvYWRfbGVuO1xuIDI3ODpcdFxuIDI3OTpcdFx0XHQvKiBJZiB3ZSBkaWRuJiMzOTt0IHNlbmQgYWxsIHRoZSBwYXlsb2FkIHdlIGNhbiByZXF1ZXVlIHRoZSBwYWNrZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHZzb2NrLmM6IExpbmUgQ2hlY2sqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiBsaW5lcyAyODAgdG8gMzIwLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGlzIHNlY3Rpb24gb2YgY29kZT8gSXMgaXQgcmVsYXRlZCB0byBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIGRhdGEgdHJhbnNmZXIsIGVycm9yIGhhbmRsaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gR2l2ZW4gdGhlIG1vZHVsZSwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB3ZSBhcmUgZGVhbGluZyB3aXRoIHRoZSB2aG9zdC12c29jayBzZXR1cCwgYnV0IHdpdGhvdXQgbW9yZSBjb250ZXh0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGlzIHVua25vd24uCgpJJiMzOTttIHByb2JhYmx5IGFmdGVyIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIGEgc3VidGxlIGJ1Zywgb3IgYW4gYXJlYSBmb3Igb3B0aW1pemF0aW9uLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zLCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIGFuZCBhbnkgcG90ZW50aWFsbHkgY29tcGxleCBsb2dpYyB3aXRoaW4gdGhpcyByYW5nZS4gTWF5YmUgdGhlcmUmIzM5O3MgYSBsb2NrIGNvbnRlbnRpb24gaXNzdWUsIGFuIGluZWZmaWNpZW50IG1lbW9yeSBhbGxvY2F0aW9uLCBvciBhIHJhY2UgY29uZGl0aW9uIGx1cmtpbmcgd2l0aGluIHRob3NlIGxpbmVzLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGludGVyZXN0aW5nIGludGVyYWN0aW9uIHdpdGggdGhlIHZpcnRpbyBxdWV1ZXMgb3IgdGhlIGd1ZXN0LXNpZGUgdnNvY2sgZHJpdmVyIHRoYXQmIzM5O3Mgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiBhbnkgZnVuY3Rpb24gY2FsbHMsIGNvbW1lbnRzIChpZiBhbnkhKSwgYW5kIHZhcmlhYmxlIG5hbWVzLiBJIG5lZWQgdG8gcmVmcmVzaCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgdnNvY2sgZm9yIHRoaXMgbW9kdWxlIGFuZCBpZGVudGlmeSB3aGVyZSB0aGlzIGNvZGUgbGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFx0XHQgKiB0byBzZW5kIGl0IHdpdGggdGhlIG5leHQgYXZhaWxhYmxlIGJ1ZmZlci5cbiAyODE6XHRcdFx0ICovXG4gMjgyOlx0XHRcdGlmIChWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktXHUwMDNlb2Zmc2V0IFx1MDAzYyBza2ItXHUwMDNlbGVuKSB7XG4gMjgzOlx0XHRcdFx0aGRyLVx1MDAzZWZsYWdzIHw9IGNwdV90b19sZTMyKGZsYWdzX3RvX3Jlc3RvcmUpO1xuIDI4NDpcdFxuIDI4NTpcdFx0XHRcdC8qIFdlIGFyZSBxdWV1ZWluZyB0aGUgc2FtZSBza2IgdG8gaGFuZGxlXG4gMjg2Olx0XHRcdFx0ICogdGhlIHJlbWFpbmluZyBieXRlcywgYW5kIHdlIHdhbnQgdG8gZGVsaXZlciBpdFxuIDI4NzpcdFx0XHRcdCAqIHRvIG1vbml0b3JpbmcgZGV2aWNlcyBpbiB0aGUgbmV4dCBpdGVyYXRpb24uXG4gMjg4Olx0XHRcdFx0ICovXG4gMjg5Olx0XHRcdFx0dmlydGlvX3Zzb2NrX3NrYl9jbGVhcl90YXBfZGVsaXZlcmVkKHNrYik7XG4gMjkwOlx0XHRcdFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV9oZWFkKFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3F1ZXVlLCBza2IpO1xuIDI5MTpcdFx0XHR9IGVsc2Uge1xuIDI5MjpcdFx0XHRcdGlmICh2aXJ0aW9fdnNvY2tfc2tiX3JlcGx5KHNrYikpIHtcbiAyOTM6XHRcdFx0XHRcdGludCB2YWw7XG4gMjk0Olx0XG4gMjk1Olx0XHRcdFx0XHR2YWwgPSBhdG9taWNfZGVjX3JldHVybihcdTAwMjZ2c29jay1cdTAwM2VxdWV1ZWRfcmVwbGllcyk7XG4gMjk2Olx0XG4gMjk3Olx0XHRcdFx0XHQvKiBEbyB3ZSBoYXZlIHJlc291cmNlcyB0byByZXN1bWUgdHhcbiAyOTg6XHRcdFx0XHRcdCAqIHByb2Nlc3Npbmc/XG4gMjk5Olx0XHRcdFx0XHQgKi9cbiAzMDA6XHRcdFx0XHRcdGlmICh2YWwgJiM0MzsgMSA9PSB0eF92cS1cdTAwM2VudW0pXG4gMzAxOlx0XHRcdFx0XHRcdHJlc3RhcnRfdHggPSB0cnVlO1xuIDMwMjpcdFx0XHRcdH1cbiAzMDM6XHRcbiAzMDQ6XHRcdFx0XHR2aXJ0aW9fdHJhbnNwb3J0X2NvbnN1bWVfc2tiX3NlbnQoc2tiLCB0cnVlKTtcbiAzMDU6XHRcdFx0fVxuIDMwNjpcdFx0fSB3aGlsZShsaWtlbHkoIXZob3N0X2V4Y2VlZHNfd2VpZ2h0KHZxLCAmIzQzOyYjNDM7cGt0cywgdG90YWxfbGVuKSkpO1xuIDMwNzpcdFxuIDMwODpcdFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCk7XG4gMzA5Olx0XG4gMzEwOlx0XHRpZiAoYWRkZWQpXG4gMzExOlx0XHRcdHZob3N0X3NpZ25hbChcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiAzMTI6XHRcbiAzMTM6XHRvdXQ6XG4gMzE0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuIDMxNTpcdFxuIDMxNjpcdFx0aWYgKHJlc3RhcnRfdHgpXG4gMzE3Olx0XHRcdHZob3N0X3BvbGxfcXVldWUoXHUwMDI2dHhfdnEtXHUwMDNlcG9sbCk7XG4gMzE4Olx0fVxuIDMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU3NwoJCQkJCQkJb3V0cHV0OiAzMTEKCQkJCQkJCXRob3VnaHRzOiAxMTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFuYWx5c2lzOiB2aG9zdC12c29jayBQYXRjaCBSZXZpZXcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyB2aG9zdC12c29jayBwYXRjaCBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgS01TQU4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IHRyYWNlIHRoZSBkYXRhIGZsb3cgYW5kIGluaXRpYWxpemF0aW9uIHRvIGNvbmZpZGVudGx5IHJ1bGUgb3V0IGFueSBLTVNBTi1yZWxhdGVkIGNvbmNlcm5zLgoKSSBzZWUgbmV3IGZ1bmN0aW9ucyBiZWluZyBhZGRlZDogYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIGFuZCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLiBUaGUgcHVycG9zZSBpcyBjbGVhcmx5IHRvIG1hbmFnZSB0aGUgYHVzZWRgIHJpbmcsIGFjY3VtdWxhdGluZyBlbnRyaWVzIChkZXNjcmlwdG9yIElEcyBhbmQgbGVuZ3RocykgYW5kIHRoZW4gd3JpdGluZyB0aGVtIG91dCB0byB0aGUgZ3Vlc3QuIFRoZSBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBmdW5jdGlvbiBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBkYXRhIHRyYW5zbWlzc2lvbiBsb2dpYywgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLgoKTG9va2luZyBjbG9zZWx5IGF0IGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLCBJJiMzOTttIHRyYWNraW5nIHRoZSBgdXNlZF9jb3VudGAgdmFyaWFibGUuIEl0JiMzOTtzIGluY3JlbWVudGVkIGZvciBlYWNoIHBhY2tldCwgYW5kIHVzZWQgdG8gaW5kZXggaW50byBgdnEtJmd0O2hlYWRzYCAoYW4gYXJyYXkgb2YgYHZyaW5nX3VzZWRfZWxlbWAgc3RydWN0dXJlcykgYW5kIGB2cS0mZ3Q7bmhlYWRzYCAoYW4gYXJyYXkgb2YgZmxhZ3MpLiAgQ3J1Y2lhbGx5LCBJIGNvbmZpcm0gdGhhdCBlYWNoIGVsZW1lbnQgb2YgYHZxLSZndDtoZWFkc2AgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgaWRgIGFuZCBgbGVuYCB2YWx1ZXMgdmlhIGB2aG9zdF92c29ja19hZGRfdXNlZGAgYmVmb3JlIHRoZSBgdXNlZF9jb3VudGAgaXMgaW5jcmVtZW50ZWQuICBUaGUgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIGZ1bmN0aW9uIGlzIHRoZW4gdHJpZ2dlcmVkIGVpdGhlciB3aGVuIGEgbGltaXQgaXMgcmVhY2hlZCBvciBhdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIHRoYXQgd3JpdGVzIHRoZSBhY2N1bXVsYXRlZCBlbnRyaWVzIG91dCB0byB0aGUgZ3Vlc3QmIzM5O3MgdXNlZCByaW5nLgoKTm93LCB0aGUgcG90ZW50aWFsIEtNU0FOIHBpdGZhbGxzLiAgV2UgbmVlZCB0byBzY3J1dGluaXplIGhvdyBhbmQgd2hlcmUgdGhlIGd1ZXN0IGNhbiBwb3RlbnRpYWxseSBvYnNlcnZlIHRoZSBkYXRhIHdpdGhpbiB0aGVzZSBzdHJ1Y3R1cmVzLiAgSSBpZGVudGlmeSB0aGF0IGB2cS0mZ3Q7aGVhZHNgIGlzIHVsdGltYXRlbHkgd3JpdHRlbiB0byB1c2Vyc3BhY2UgKHRoZSBndWVzdCYjMzk7cyBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgLiBCdXQsIGJlY2F1c2Ugb2YgdGhlIHN0cmljdCBpbml0aWFsaXphdGlvbiwgdGhlIHVzZXIgc3BhY2UgbWVtb3J5IGlzIGFsd2F5cyB3cml0dGVuIHdpdGggaW5pdGlhbGl6ZWQgZGF0YS4KCkkmIzM5O20gZm9jdXNlZCBvbiB0aGUgYHN0cnVjdCB2cmluZ191c2VkX2VsZW1gIHdoaWNoIGlzIHVzZWQgZm9yIHRoZSBgaGVhZHNgIGFycmF5LiBJdCBpcyB0aGUgY3J1Y2lhbCBzdHJ1Y3QgZm9yIHRoZSB3cml0ZSB0byB0aGUgZ3Vlc3QmIzM5O3MgbWVtb3J5LiAgSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgc3RydWN0dXJlOiB0d28gMzItYml0IGludGVnZXJzLCBgaWRgIGFuZCBgbGVuYCwgd2l0aCBubyBwYWRkaW5nLiBUaGUgY29kZSBleHBsaWNpdGx5IGFzc2lnbnMgdmFsdWVzIHRvIGJvdGggYGlkYCBhbmQgYGxlbmAgYmVmb3JlIGFueSBwb3RlbnRpYWwgdXNlci1zcGFjZSBleHBvc3VyZS4gVGhlIGB2cS0mZ3Q7bmhlYWRzYCBhcnJheSBpcyBhIHNpbXBsZSBjb3VudGVyIGFycmF5IHdoaWNoIHRyYWNrcyBpZiBhIGhlYWQgZWxlbWVudCBoYXMgYmVlbiBwb3B1bGF0ZWQsIHNvIHRoaXMgc2hvdWxkIGFsc28gYmUgc2FmZWx5IGluaXRpYWxpemVkLgoKV2UmIzM5O3JlIGV4cGxpY2l0bHkgaW5pdGlhbGl6aW5nIGV2ZXJ5dGhpbmcuIFRoZSBjb2RlIGVuc3VyZXMgYm91bmRzIGNoZWNrcyBhbmQgbGltaXRzIG9uIGB1c2VkX2NvdW50YCB2aWEgYHVzZWRfbGltaXRgLiBJJiMzOTttIGNoZWNraW5nIGZvciBjb25kaXRpb25hbCBicmFuY2hlcyBkZXBlbmRpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZXJlIGFyZW4mIzM5O3QgYW55LiBJJiMzOTttIGxvb2tpbmcgZm9yIGFsbG9jYXRpb25zIG9yIGNvcGllcyBvZiBzdHJ1Y3R1cmVzIHdoZXJlIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGNvcGllZCwgYnV0IEkgZG8gbm90IHNlZSBhbnkuIFRoZXJlJiMzOTtzIG5vdGhpbmcgYmVpbmcgY29waWVkIG91dCB0byB1c2VyIHNwYWNlIHRoYXQmIzM5O3MgcGFydGlhbGx5IGluaXRpYWxpemVkLgoKU28sIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhOgoKMS4gICoqU3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmc6KiogIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBoYXMgbm8gcGFkZGluZyBhbmQgdGhlIGBpZGAgYW5kIGBsZW5gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkICpiZWZvcmUqIHRoZSBkYXRhIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiAgTm8gaXNzdWVzIGhlcmUuCgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBOb3BlLiBFdmVyeXRoaW5nIGlzIGV4cGxpY2l0LgoKMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHJlYWQgbGF0ZXI6KiogIE5vdCBBcHBsaWNhYmxlLiBFdmVyeXRoaW5nIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuCgo0LiAgKipCb3VuZHMgY2hlY2tzLCBldGMuLCB0aGF0IG1pZ2h0IGxlYWQgdG8gYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqIE5vdCBBcHBsaWNhYmxlLiBUaGUgY29kZSB1c2VzIGB1c2VkX2xpbWl0YCB0byBwcmV2ZW50IGV4Y2VlZGluZyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXlzLCBhbmQgYHVzZWRfY291bnRgIGlzIHN0cmljdGx5IGluY3JlbWVudGVkLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgKm5vdCogYXBwZWFyIHRvIGludHJvZHVjZSBLTVNBTiB2dWxuZXJhYmlsaXRpZXMuIFRoZSBwb3RlbnRpYWwgcmlza3MgaGVyZSBhcmUgaW4gYm91bmRzIG92ZXJmbG93ICh3aGljaCBLQVNBTiB3b3VsZCBjYXRjaCkgb3IgaW4gbG9naWMgZXJyb3JzIChyYWNlcywgbWlzc2VkIG5vdGlmaWNhdGlvbnMsIHZpcnRpbyBwcm90b2NvbCBpc3N1ZXMpLCBidXQgbm9uZSBvZiB0aG9zZSBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiYjMzk7cyBwdXJwb3NlIGlzIHRvIGNhdGNoIHRoZSBsYXR0ZXIuIFdlIGhhdmUgc2FmZSBpbml0aWFsaXplZCBkYXRhLCBzbyB0aGUgcmlzayBpcyBuaWwuIEkmIzM5O20gY29tZm9ydGFibGUgc2F5aW5nIHRoYXQgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAgaGVyZSwgYW5kIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoYXQsIGFsb25nIHdpdGggYSBjbGVhciwgZGV0YWlsZWQgZXhwbGFuYXRpb24gZGlzdGluZ3Vpc2hpbmcgS01TQU4gZnJvbSBLQVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBiYXRjaGluZyBvZiB1c2VkIHJpbmcgdXBkYXRlcyBpbiB2aG9zdC12c29jayAodmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KSBieSBhY2N1bXVsYXRpbmcgdXNlZCBkZXNjcmlwdG9ycyBpbiB0aGUgcHJlYWxsb2NhdGVkIHZpcnRxdWV1ZSBhcnJheXMgKHZxLVx1MDAzZWhlYWRzIGFuZCB2cS1cdTAwM2VuaGVhZHMpIGFuZCBmbHVzaGluZyB0aGVtIHZpYSB2aG9zdF9hZGRfdXNlZF9uKCkgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkKCkgY2FsbHMuXG5cbi0gS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbiAgMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWs6IEVhY2ggdXNlZCBkZXNjcmlwdG9yIGVsZW1lbnQgaW4gdnEtXHUwMDNlaGVhZHMgKHN0cnVjdCB2cmluZ191c2VkX2VsZW0pIGNvbnRhaW5zIG9ubHkgdHdvIDMyLWJpdCBmaWVsZHMgKGlkIGFuZCBsZW4pIHdpdGhvdXQgYW55IHN0cnVjdHVyZSBwYWRkaW5nLiBCb3RoIGZpZWxkcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdnEtXHUwMDNlbmhlYWRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHZob3N0X3Zzb2NrX2FkZF91c2VkKCkgZm9yIGVhY2ggaW5kZXggYmVmb3JlIGJlaW5nIGZsdXNoZWQgYW5kIGNvcGllZCB0byB0aGUgZ3Vlc3QmIzM5O3MgdXNlZCByaW5nIHZpYSB2aG9zdF9wdXRfdXNlZCgpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyByZWFkIG9yIGxlYWtlZC5cbiAgMi4gTWVtb3J5IEJvdW5kcyBhbmQgSW50ZWdyaXR5OiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gYXJyYXkgaW5kZXhpbmcsIGJvdW5kcyBsaW1pdHMgKHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQpLCBvciB2aXJ0cXVldWUgc3luY2hyb25pemF0aW9uIGxvZ2ljLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiAoZm9yIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzZXMpLCBhbmQgdmlydGlvIHByb3RvY29sIGNoZWNrcy5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBiYXRjaGluZyBvZiB1c2VkIHJpbmcgdXBkYXRlcyBpbiB2aG9zdC12c29jayAodmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KSBieSBhY2N1bXVsYXRpbmcgdXNlZCBkZXNjcmlwdG9ycyBpbiB0aGUgcHJlYWxsb2NhdGVkIHZpcnRxdWV1ZSBhcnJheXMgKHZxLVx1MDAzZWhlYWRzIGFuZCB2cS1cdTAwM2VuaGVhZHMpIGFuZCBmbHVzaGluZyB0aGVtIHZpYSB2aG9zdF9hZGRfdXNlZF9uKCkgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkKCkgY2FsbHMuXG5cbi0gS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbiAgMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWs6IEVhY2ggdXNlZCBkZXNjcmlwdG9yIGVsZW1lbnQgaW4gdnEtXHUwMDNlaGVhZHMgKHN0cnVjdCB2cmluZ191c2VkX2VsZW0pIGNvbnRhaW5zIG9ubHkgdHdvIDMyLWJpdCBmaWVsZHMgKGlkIGFuZCBsZW4pIHdpdGhvdXQgYW55IHN0cnVjdHVyZSBwYWRkaW5nLiBCb3RoIGZpZWxkcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdnEtXHUwMDNlbmhlYWRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHZob3N0X3Zzb2NrX2FkZF91c2VkKCkgZm9yIGVhY2ggaW5kZXggYmVmb3JlIGJlaW5nIGZsdXNoZWQgYW5kIGNvcGllZCB0byB0aGUgZ3Vlc3QmIzM5O3MgdXNlZCByaW5nIHZpYSB2aG9zdF9wdXRfdXNlZCgpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSBpcyByZWFkIG9yIGxlYWtlZC5cbiAgMi4gTWVtb3J5IEJvdW5kcyBhbmQgSW50ZWdyaXR5OiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gYXJyYXkgaW5kZXhpbmcsIGJvdW5kcyBsaW1pdHMgKHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQpLCBvciB2aXJ0cXVldWUgc3luY2hyb25pemF0aW9uIGxvZ2ljLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCB0ZXN0aW5nLCBLQVNBTiAoZm9yIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzZXMpLCBhbmQgdmlydGlvIHByb3RvY29sIGNoZWNrcy5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxNzozMi4yOTgxMzcxOTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc1NTQ0MjE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIkVWRU5URkRcIixcbiAgICBcIlZIT1NUXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF92c29ja19mbHVzaF91c2VkXCIsXG4gICAgXCJ2aG9zdF92c29ja19hZGRfdXNlZFwiLFxuICAgIFwidmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29ya1wiLFxuICAgIFwidmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgYmF0Y2hpbmcgb2YgdXNlZCByaW5nIHVwZGF0ZXMgaW4gdmhvc3QtdnNvY2sgKHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCkgYnkgYWNjdW11bGF0aW5nIHVzZWQgZGVzY3JpcHRvcnMgaW4gdGhlIHByZWFsbG9jYXRlZCB2aXJ0cXVldWUgYXJyYXlzICh2cS1cXHUwMDNlaGVhZHMgYW5kIHZxLVxcdTAwM2VuaGVhZHMpIGFuZCBmbHVzaGluZyB0aGVtIHZpYSB2aG9zdF9hZGRfdXNlZF9uKCkgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkKCkgY2FsbHMuXFxuXFxuLSBLTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxcbiAgMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWs6IEVhY2ggdXNlZCBkZXNjcmlwdG9yIGVsZW1lbnQgaW4gdnEtXFx1MDAzZWhlYWRzIChzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtKSBjb250YWlucyBvbmx5IHR3byAzMi1iaXQgZmllbGRzIChpZCBhbmQgbGVuKSB3aXRob3V0IGFueSBzdHJ1Y3R1cmUgcGFkZGluZy4gQm90aCBmaWVsZHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHZxLVxcdTAwM2VuaGVhZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gdmhvc3RfdnNvY2tfYWRkX3VzZWQoKSBmb3IgZWFjaCBpbmRleCBiZWZvcmUgYmVpbmcgZmx1c2hlZCBhbmQgY29waWVkIHRvIHRoZSBndWVzdCdzIHVzZWQgcmluZyB2aWEgdmhvc3RfcHV0X3VzZWQoKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgcmVhZCBvciBsZWFrZWQuXFxuICAyLiBNZW1vcnkgQm91bmRzIGFuZCBJbnRlZ3JpdHk6IEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byBhcnJheSBpbmRleGluZywgYm91bmRzIGxpbWl0cyAodnEtXFx1MDAzZWRldi1cXHUwMDNlaW92X2xpbWl0KSwgb3IgdmlydHF1ZXVlIHN5bmNocm9uaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4gKGZvciBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKSwgYW5kIHZpcnRpbyBwcm90b2NvbCBjaGVja3MuXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgZGVzY3JpcHRvciBiYXRjaGluZyBpbiB0aGUgdmhvc3QtdnNvY2sgZHJpdmVyIChkcml2ZXJzL3Zob3N0L3Zzb2NrLmMpIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLCByZXBsYWNpbmcgaW5kaXZpZHVhbCB2aG9zdF9hZGRfdXNlZCBjYWxscyB3aXRoIGJhdGNoZWQgdmhvc3RfYWRkX3VzZWRfbiBjYWxscy4gSXQgaW50cm9kdWNlcyBuZXcgYnVmZmVyIGFjY3VtdWxhdGlvbiwgYXJyYXkgaW5kZXhpbmcsIGFuZCBiYXRjaCBsaW1pdC9mbHVzaGluZyBsb2dpYyBpbiByZWFjaGFibGUga2VybmVsIGNvZGUgYWNjZXNzaWJsZSB2aWEgL2Rldi92aG9zdC12c29jayBhbmQgQUZfVlNPQ0sgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTc6MzIuMjk4MTQzNTI1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc3NDAwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NmZkMDdlOGZkNzY1YTkzMTMyYjNmODhjOWIzNWQ3NjEzNTllZDc1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTk6MTc6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jXFxuaW5kZXggOWFhYWI2YmI4MDYxYy4uN2ExM2FiZTczMzQ1MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcXG5AQCAtMTAzLDEyICsxMDMsMzUgQEAgc3RhdGljIGJvb2wgdmhvc3RfdHJhbnNwb3J0X2hhc19yZW1vdGVfY2lkKHN0cnVjdCB2c29ja19zb2NrICp2c2ssIHUzMiBjaWQpXFxuIFxcdHJldHVybiBmb3VuZDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHVzZWRfY291bnQpXFxuK3tcXG4rXFx0aWYgKCF1c2VkX2NvdW50KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cXHUwMDNlaGVhZHMsIHZxLVxcdTAwM2VuaGVhZHMsIHVzZWRfY291bnQpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuK1xcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCxcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBoZWFkLCB1bnNpZ25lZCBpbnQgbGVuKVxcbit7XFxuK1xcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSBcXHUwMDI2dnEtXFx1MDAzZWhlYWRzW3VzZWRfY291bnRdO1xcbitcXG4rXFx0dXNlZC1cXHUwMDNlaWQgPSBjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCk7XFxuK1xcdHVzZWQtXFx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xcbitcXHR2cS1cXHUwMDNlbmhlYWRzW3VzZWRfY291bnRdID0gMTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp0eF92cSA9IFxcdTAwMjZ2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcXG4gXFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xcbitcXHR1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCB1c2VkX2xpbWl0O1xcbiBcXHRib29sIGFkZGVkID0gZmFsc2U7XFxuIFxcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xcbiBcXG5AQCAtMTIwLDYgKzE0MywxMSBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gXFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHQvKiBLZWVwIHRoZSBiYXRjaCB3aXRoaW4gdGhlIHVzZWQgcmluZyBhbmQgdGhlIHNjcmF0Y2ggYXJyYXlzLiAqL1xcbitcXHR1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS1cXHUwMDNlbnVtLCB2cS1cXHUwMDNlZGV2LVxcdTAwM2Vpb3ZfbGltaXQpO1xcbitcXHRpZiAodW5saWtlbHkoIXVzZWRfbGltaXQpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdC8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UncmUgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB2aXJ0cXVldWUgKi9cXG4gXFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gXFxuQEAgLTE1MCw2ICsxNzgsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuIFxcbiBcXHRcXHRpZiAoaGVhZCA9PSB2cS1cXHUwMDNlbnVtKSB7XFxuIFxcdFxcdFxcdHZpcnRpb192c29ja19za2JfcXVldWVfaGVhZChcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3F1ZXVlLCBza2IpO1xcbitcXG4rXFx0XFx0XFx0LyogRmx1c2ggY29tcGxldGVkIGJ1ZmZlcnMgYmVmb3JlIHJlLWVuYWJsaW5nIG5vdGlmaWNhdGlvbnMuICovXFxuK1xcdFxcdFxcdGlmICh2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCB1c2VkX2NvdW50KSkge1xcbitcXHRcXHRcXHRcXHRhZGRlZCA9IHRydWU7XFxuK1xcdFxcdFxcdFxcdHVzZWRfY291bnQgPSAwO1xcbitcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHQvKiBXZSBjYW5ub3QgZmluaXNoIHlldCBpZiBtb3JlIGJ1ZmZlcnMgc251Y2sgaW4gd2hpbGVcXG4gXFx0XFx0XFx0ICogcmUtZW5hYmxpbmcgbm90aWZ5LlxcbiBcXHRcXHRcXHQgKi9cXG5AQCAtMjMwLDggKzI2NSwxMyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdHZpcnRpb190cmFuc3BvcnRfZGVsaXZlcl90YXBfcGt0KHNrYik7XFxuIFxcbi1cXHRcXHR2aG9zdF9hZGRfdXNlZCh2cSwgaGVhZCwgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4pO1xcbi1cXHRcXHRhZGRlZCA9IHRydWU7XFxuK1xcdFxcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCB1c2VkX2NvdW50LCBoZWFkLFxcbitcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqaGRyKSArIHBheWxvYWRfbGVuKTtcXG4rXFx0XFx0dXNlZF9jb3VudCsrO1xcbitcXHRcXHRpZiAodXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0KSB7XFxuK1xcdFxcdFxcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xcbitcXHRcXHRcXHR1c2VkX2NvdW50ID0gMDtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0VklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQgKz0gcGF5bG9hZF9sZW47XFxuIFxcdFxcdHRvdGFsX2xlbiArPSBwYXlsb2FkX2xlbjtcXG5AQCAtMjY0LDYgKzMwNCw5IEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxcbiBcXHRcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X2NvbnN1bWVfc2tiX3NlbnQoc2tiLCB0cnVlKTtcXG4gXFx0XFx0fVxcbiBcXHR9IHdoaWxlKGxpa2VseSghdmhvc3RfZXhjZWVkc193ZWlnaHQodnEsICsrcGt0cywgdG90YWxfbGVuKSkpO1xcbitcXG4rXFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCk7XFxuK1xcbiBcXHRpZiAoYWRkZWQpXFxuIFxcdFxcdHZob3N0X3NpZ25hbChcXHUwMDI2dnNvY2stXFx1MDAzZWRldiwgdnEpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTc6MzIuNzU2NDE0MDM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTExMjAyMzUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIkVWRU5URkRcIixcbiAgICBcIlZIT1NUXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF92c29ja19mbHVzaF91c2VkXCIsXG4gICAgXCJ2aG9zdF92c29ja19hZGRfdXNlZFwiLFxuICAgIFwidmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29ya1wiLFxuICAgIFwidmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGRlc2NyaXB0b3IgYmF0Y2hpbmcgaW4gdGhlIHZob3N0LXZzb2NrIGRyaXZlciAoZHJpdmVycy92aG9zdC92c29jay5jKSBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgcmVwbGFjaW5nIGluZGl2aWR1YWwgdmhvc3RfYWRkX3VzZWQgY2FsbHMgd2l0aCBiYXRjaGVkIHZob3N0X2FkZF91c2VkX24gY2FsbHMuIEl0IGludHJvZHVjZXMgbmV3IGJ1ZmZlciBhY2N1bXVsYXRpb24sIGFycmF5IGluZGV4aW5nLCBhbmQgYmF0Y2ggbGltaXQvZmx1c2hpbmcgbG9naWMgaW4gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGFjY2Vzc2libGUgdmlhIC9kZXYvdmhvc3QtdnNvY2sgYW5kIEFGX1ZTT0NLIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODZmZDA3ZThmZDc2NWE5MzEzMmIzZjg4YzliMzVkNzYxMzU5ZWQ3NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTk6MTc6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbmluZGV4IDlhYWFiNmJiODA2MWMuLjdhMTNhYmU3MzM0NTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbisrKyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuQEAgLTEwMywxMiArMTAzLDM1IEBAIHN0YXRpYyBib29sIHZob3N0X3RyYW5zcG9ydF9oYXNfcmVtb3RlX2NpZChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkKVxuIFx0cmV0dXJuIGZvdW5kO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IHVzZWRfY291bnQpXG4re1xuK1x0aWYgKCF1c2VkX2NvdW50KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cdTAwM2VoZWFkcywgdnEtXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgdm9pZCB2aG9zdF92c29ja19hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbitcdFx0XHRcdCB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCxcbitcdFx0XHRcdCB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbilcbit7XG4rXHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICp1c2VkID0gXHUwMDI2dnEtXHUwMDNlaGVhZHNbdXNlZF9jb3VudF07XG4rXG4rXHR1c2VkLVx1MDAzZWlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xuK1x0dXNlZC1cdTAwM2VsZW4gPSBjcHVfdG9fdmhvc3QzMih2cSwgbGVuKTtcbitcdHZxLVx1MDAzZW5oZWFkc1t1c2VkX2NvdW50XSA9IDE7XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR4X3ZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXTtcbiBcdGludCBwa3RzID0gMCwgdG90YWxfbGVuID0gMDtcbitcdHVuc2lnbmVkIGludCB1c2VkX2NvdW50ID0gMDtcbitcdHVuc2lnbmVkIGludCB1c2VkX2xpbWl0O1xuIFx0Ym9vbCBhZGRlZCA9IGZhbHNlO1xuIFx0Ym9vbCByZXN0YXJ0X3R4ID0gZmFsc2U7XG4gXG5AQCAtMTIwLDYgKzE0MywxMSBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdGlmICghdnFfbWV0YV9wcmVmZXRjaCh2cSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LyogS2VlcCB0aGUgYmF0Y2ggd2l0aGluIHRoZSB1c2VkIHJpbmcgYW5kIHRoZSBzY3JhdGNoIGFycmF5cy4gKi9cbitcdHVzZWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHZxLVx1MDAzZW51bSwgdnEtXHUwMDNlZGV2LVx1MDAzZWlvdl9saW1pdCk7XG4rXHRpZiAodW5saWtlbHkoIXVzZWRfbGltaXQpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdC8qIEF2b2lkIGZ1cnRoZXIgdm1leGl0cywgd2UncmUgYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB2aXJ0cXVldWUgKi9cbiBcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFxuQEAgLTE1MCw2ICsxNzgsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXG4gXHRcdGlmIChoZWFkID09IHZxLVx1MDAzZW51bSkge1xuIFx0XHRcdHZpcnRpb192c29ja19za2JfcXVldWVfaGVhZChcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcbitcbitcdFx0XHQvKiBGbHVzaCBjb21wbGV0ZWQgYnVmZmVycyBiZWZvcmUgcmUtZW5hYmxpbmcgbm90aWZpY2F0aW9ucy4gKi9cbitcdFx0XHRpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHtcbitcdFx0XHRcdGFkZGVkID0gdHJ1ZTtcbitcdFx0XHRcdHVzZWRfY291bnQgPSAwO1xuK1x0XHRcdH1cbitcbiBcdFx0XHQvKiBXZSBjYW5ub3QgZmluaXNoIHlldCBpZiBtb3JlIGJ1ZmZlcnMgc251Y2sgaW4gd2hpbGVcbiBcdFx0XHQgKiByZS1lbmFibGluZyBub3RpZnkuXG4gXHRcdFx0ICovXG5AQCAtMjMwLDggKzI2NSwxMyBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdFx0ICovXG4gXHRcdHZpcnRpb190cmFuc3BvcnRfZGVsaXZlcl90YXBfcGt0KHNrYik7XG4gXG4tXHRcdHZob3N0X2FkZF91c2VkKHZxLCBoZWFkLCBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbik7XG4tXHRcdGFkZGVkID0gdHJ1ZTtcbitcdFx0dmhvc3RfdnNvY2tfYWRkX3VzZWQodnEsIHVzZWRfY291bnQsIGhlYWQsXG4rXHRcdFx0XHQgICAgIHNpemVvZigqaGRyKSArIHBheWxvYWRfbGVuKTtcbitcdFx0dXNlZF9jb3VudCsrO1xuK1x0XHRpZiAodXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0KSB7XG4rXHRcdFx0YWRkZWQgfD0gdmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCk7XG4rXHRcdFx0dXNlZF9jb3VudCA9IDA7XG4rXHRcdH1cbiBcbiBcdFx0VklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldCArPSBwYXlsb2FkX2xlbjtcbiBcdFx0dG90YWxfbGVuICs9IHBheWxvYWRfbGVuO1xuQEAgLTI2NCw2ICszMDQsOSBAQCB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcbiBcdFx0XHR2aXJ0aW9fdHJhbnNwb3J0X2NvbnN1bWVfc2tiX3NlbnQoc2tiLCB0cnVlKTtcbiBcdFx0fVxuIFx0fSB3aGlsZShsaWtlbHkoIXZob3N0X2V4Y2VlZHNfd2VpZ2h0KHZxLCArK3BrdHMsIHRvdGFsX2xlbikpKTtcbitcbitcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xuK1xuIFx0aWYgKGFkZGVkKVxuIFx0XHR2aG9zdF9zaWduYWwoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cSk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxNzozMi43NTY0MTU0NjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTMyOTk3OTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBOZWVkIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMga2VybmVsIHBhdGNoIHNlcmllcyBhbmQgbmVlZCB0byBkZWNpZGUgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIgZnV6emluZy4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy92aG9zdC92c29jay5jYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnIOKAkyB2aG9zdCBhbmQgdnNvY2sgYWx3YXlzIG1ha2UgbWUgcGF5IGF0dGVudGlvbi4gVGhleSdyZSBvZnRlbiB0b3VjaHkgYXJlYXMgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgaXNzdWVzLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgLCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCBhbmQgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuIFRob3NlIG5hbWVzIGFyZSBpbnRlcmVzdGluZzsgdGhlIFwidXNlZFwiIGFuZCBcInNlbmRcIiBoaW50cyBhdCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFja2V0IHByb2Nlc3NpbmcsIHdoaWNoIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLlxuXG5CZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29udGV4dC4gVGltZSB0byBwdWxsIG91dCB0aGUgdG9vbHMuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIG9yIGp1c3QgbWFudWFsbHkgZXhhbWluZSBgZHJpdmVycy92aG9zdC92c29jay5jYCBhbmQgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBhbmQgdGhlIG92ZXJhbGwgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGZpbmRpbmcgb3V0IHdoYXQgb3B0aW9ucyBjb250cm9sIHRoYXQgdnNvY2sgc3R1ZmYgaXMgaW1wb3J0YW50LiBJZiBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgdGhhdCdzIGEgZGlmZmVyZW50IHN0b3J5IHRoYW4gc29tZXRoaW5nIG9ic2N1cmUuIEFmdGVyIHRoZSBxdWljayBjaGVjaywgSSdsbCBrbm93IGlmIGZ1enppbmcgaXMgd29ydGggdGhlIGVmZm9ydCFcblxuXG4iLCJJbnB1dFRva2VucyI6MzgzMywiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjQ0LjA4NjQwMDAzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMTAxOlxcdFxcdGZvdW5kID0gISF2aG9zdF92c29ja19nZXQoY2lkLCBuZXQpO1xcbiAxMDI6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDEwMzpcXHRcXHRyZXR1cm4gZm91bmQ7XFxuIDEwNDpcXHR9XFxuIDEwNTpcXHRcXG4gMTA2OlxcdHN0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudClcXG4gMTA4OlxcdHtcXG4gMTA5OlxcdFxcdGlmICghdXNlZF9jb3VudClcXG4gMTEwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtXFx1MDAzZWhlYWRzLCB2cS1cXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcXG4gMTEzOlxcdFxcdHJldHVybiB0cnVlO1xcbiAxMTQ6XFx0fVxcbiAxMTU6XFx0XFxuIDExNjpcXHRzdGF0aWMgdm9pZCB2aG9zdF92c29ja19hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCxcXG4gMTE4OlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbilcXG4gMTE5OlxcdHtcXG4gMTIwOlxcdFxcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSBcXHUwMDI2dnEtXFx1MDAzZWhlYWRzW3VzZWRfY291bnRdO1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHR1c2VkLVxcdTAwM2VpZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTtcXG4gMTIzOlxcdFxcdHVzZWQtXFx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xcbiAxMjQ6XFx0XFx0dnEtXFx1MDAzZW5oZWFkc1t1c2VkX2NvdW50XSA9IDE7XFxuIDEyNTpcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdHN0YXRpYyB2b2lkXFxuIDEyODpcXHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gMTI5OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4gMTMwOlxcdHtcXG4gMTMxOlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR4X3ZxID0gXFx1MDAyNnZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xcbiAxMzI6XFx0XFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xcbiAxMzM6XFx0XFx0dW5zaWduZWQgaW50IHVzZWRfY291bnQgPSAwO1xcbiAxMzQ6XFx0XFx0dW5zaWduZWQgaW50IHVzZWRfbGltaXQ7XFxuIDEzNTpcXHRcXHRib29sIGFkZGVkID0gZmFsc2U7XFxuIDEzNjpcXHRcXHRib29sIHJlc3RhcnRfdHggPSBmYWxzZTtcXG4gMTM3OlxcdFxcbiAxMzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXFxuIDE0MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcXG4gMTQ0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNDU6XFx0XFxuIDE0NjpcXHRcXHQvKiBLZWVwIHRoZSBiYXRjaCB3aXRoaW4gdGhlIHVzZWQgcmluZyBhbmQgdGhlIHNjcmF0Y2ggYXJyYXlzLiAqL1xcbiAxNDc6XFx0XFx0dXNlZF9saW1pdCA9IG1pbl90KHVuc2lnbmVkIGludCwgdnEtXFx1MDAzZW51bSwgdnEtXFx1MDAzZWRldi1cXHUwMDNlaW92X2xpbWl0KTtcXG4gMTQ4OlxcdFxcdGlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpXFxuIDE0OTpcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTc6NDQuMDg2NTEwNTc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODE5NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9WU09DS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz00Nj1jb25maWcgVkhPU1RfU0NTSVxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU1LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1Njpjb25maWcgVkhPU1RfVlNPQ0tcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXFx0dHJpc3RhdGUgXFxcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjQ0LjEzMzMzNTg1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NDk2ODIwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgVkhPU1RfVlNPQ0sqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIFZIT1NUX1ZTT0NLIGlzIGVuYWJsZWQgb3IsIGF0IGxlYXN0LCBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24uIEJlZm9yZSBJIHN0YXJ0IGRlYnVnZ2luZyBhbnl0aGluZyByZWxhdGVkIHRvIHZpcnR1YWwgc29ja2V0cywgdGhlIEtjb25maWcgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkga25vdyB3aGVyZSB0byBsb29rLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBidWlsdC1pbiBtb2R1bGUsIG9yIGlzIHRoaXMgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIHNldD8gSSdsbCBxdWlja2x5IHNjYW4gdGhlIGRlcGVuZGVuY2llcywgYW55IHJlbGV2YW50ICNpZmRlZnMsIGFuZCBtYXliZSBldmVuIGxvb2sgZm9yIGNvbW1lbnRzIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgY2FzZXMgb3Iga25vd24gbGltaXRhdGlvbnMuIEVuc3VyaW5nIHRoYXQgdGhlIG1vZHVsZSBvciBidWlsdC1pbiBmdW5jdGlvbmFsaXR5IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGlzIHBhcmFtb3VudC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcInRyYWNlcnNcIiBpbiB0aGUgY29uZmlndXJhdGlvbiwgc28gSSBjYW4gZmluZCBteSBuZXh0IHN0ZXBzLiBUaGlzIGlzIGEgZm91bmRhdGlvbmFsIHN0ZXAgYmVmb3JlIEkgd2FzdGUgdGltZSBvbiBtb3JlIGNvbXBsaWNhdGVkIGRlYnVnZ2luZyBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxNzo0Ni41ODMwMjA2NDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgVkhPU1RfVlNPQ0tcXG4gIDU3OlxcdFxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcXHUwMDI2XFx1MDAyNiBFVkVOVEZEXFxuICA1OTpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDYwOlxcdFxcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXFxuICA2MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDYyOlxcdFxcdGhlbHBcXG4gIDYzOlxcdFxcdFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIHRoZSBob3N0IGtlcm5lbCB0byBwcm92aWRlIEFGX1ZTT0NLXFxuICA2NDpcXHRcXHRzb2NrZXRzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggZ3Vlc3RzLiAgVGhlIGd1ZXN0cyBtdXN0IGhhdmUgdGhlXFxuICA2NTpcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHRUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICA2ODpcXHRcXHR2aG9zdF92c29jay5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0Y29uZmlnIFZIT1NUX1ZEUEFcXG4gIDcxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFxcXCJcXG4gIDcyOlxcdFxcdGRlcGVuZHMgb24gRVZFTlRGRFxcbiAgNzM6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA3NDpcXHRcXHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXFxuICA3NTpcXHRcXHRkZXBlbmRzIG9uIFZEUEFcXG4gIDc2OlxcdFxcdGhlbHBcXG4gIDc3OlxcdFxcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxcbiAgNzg6XFx0XFx0ICBndWVzdCB2aXJ0aW8gZGV2aWNlcyB3aXRoIHRoZSB2RFBBLWJhc2VkIGJhY2tlbmRzLlxcbiAgNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjQ2LjU4MzA5Mjc5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNzg3OTgwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB2aG9zdC12c29jayBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHZob3N0LXZzb2NrIGltcGxlbWVudGF0aW9uIGluIExpbnV4LiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgYWNjZXNzZWQg4oCTIGlzIGl0IHRocm91Z2ggYSBjaGFyYWN0ZXIgZGV2aWNlIGxpa2UgYC9kZXYvdmhvc3QtdnNvY2tgLCBpb2N0bHMsIG9yIHRoZSBzdGFuZGFyZCBzb2NrZXQgaW50ZXJmYWNlPyBJJ20gYmV0dGluZyBpdCdzIGEgY29tYmluYXRpb24gb2YgdGhpbmdzLCBnaXZlbiB0aGUgdmlydHVhbCBuYXR1cmUuIFRpbWUgdG8gZGlnIGluLiBJJ2xsIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGRhdGEgcGF0aCBmb3IgcGFja2V0IHNlbmRpbmcuIEkgc2hvdWxkIGJlIGFibGUgdG8gZmluZCB0aGF0IGluIHRoZSBgZHJpdmVycy92aG9zdC92c29jay5jYCBmaWxlLiBMZXQncyBwaW5wb2ludCB3aGVyZSBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBpcyBjYWxsZWQ7IHRoYXQgc2hvdWxkIGJlIHRoZSBlbnRyeSBwb2ludCBpbnRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgZnJvbSB0aGUgdmhvc3QgZHJpdmVyLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kIHRvIHN0YXJ0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjUwLjg2MTg5NDA2MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU5NDU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTI3PXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEyODp2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTI5LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMjA9c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzI3LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjg6XFx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyOS19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzMyPXZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzU1LVxcdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzU2OlxcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzU3LVxcdCAqL1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTY0ND1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NTAtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjY1MTpcXHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QodnNvY2ssIHZxKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjUyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTc6NTAuOTA4NDk0MzU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjczOTA1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipWaG9zdC1WU29jayBPcHRpbWl6YXRpb24gQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGhlcmUgaXMgYWJvdXQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGluIGB2aG9zdC12c29ja2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHBhY2tldCBwcm9jZXNzaW5nIGlzIGhhbmRsZWQuIEluc3RlYWQgb2YgbWFraW5nIGluZGl2aWR1YWwsIGNvc3RseSBjYWxscyB0byBgdmhvc3RfYWRkX3VzZWRgIGZvciBldmVyeSBzaW5nbGUgcGFja2V0LCB3aGljaCwgZnJhbmtseSwgc2VlbXMgaW5lZmZpY2llbnQsIHRoZSBpbXBsZW1lbnRhdGlvbiBub3cgYmF0Y2hlcyB0aGVzZSB1cGRhdGVzLiBJdCBsb29rcyBsaWtlIHRoZSBzeXN0ZW0gYWNjdW11bGF0ZXMgcGFja2V0IGRlc2NyaXB0b3JzIGludG8gYSBgdnEtXHUwMDNlaGVhZHNgIGFycmF5LiBUaGVuLCB0aGVzZSBhcmUgZmx1c2hlZCBpbiBhIG1vcmUgZWZmaWNpZW50IG1hbm5lciB1c2luZyBgdmhvc3RfYWRkX3VzZWRfbmAgd2hlbiBlaXRoZXIgYSBjZXJ0YWluIGB1c2VkX2xpbWl0YCBpcyByZWFjaGVkLCBvciB3aGVuIHRoZSBlbnRpcmUgcHJvY2Vzc2luZyBsb29wIGNvbXBsZXRlcywgb3IgcnVucyBvdXQgb2YgYnVmZmVycy4gVGhpcyBiYXRjaGluZyBzdHJhdGVneSBzaG91bGQgc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmluZyB1cGRhdGVzLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMsIHBhcnRpY3VsYXJseSBzeXprYWxsZXIsIGhhdmUgcHJvcGVyIGFjY2VzcyB0byBgL2Rldi92aG9zdC12c29ja2AuIFRoaXMgaXMgYSBjcml0aWNhbCBwcmVyZXF1aXNpdGUsIG9mIGNvdXJzZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLCB0byBlbnN1cmUgdGhhdCB0aGUgY2hhcmFjdGVyIGRldmljZSBvciBtaXNjZGV2aWNlIHJlZ2lzdHJhdGlvbiBpcyBzZXQgdXAgY29ycmVjdGx5IGFuZCBwZXJtaXNzaW9ucyBhcmUgc2V0LiBHb3R0YSBtYWtlIHN1cmUgd2UgY2FuIGFjdHVhbGx5ICp1c2UqIHRoZSBibGFzdGVkIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDg2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjUzLjc3NTg4NzIxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MjEwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlzY19yZWdpc3RlcnxmaWxlX29wZXJhdGlvbnN8dmhvc3RfdnNvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92c29jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzI6c3RhdGljIGNvbnN0IGludCB2aG9zdF92c29ja19iaXRzW10gPSB7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMzLVxcdFZIT1NUX0ZFQVRVUkVTLFxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTM3LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozODojZGVmaW5lIFZIT1NUX1ZTT0NLX0ZFQVRVUkVTIFZIT1NUX0ZFQVRVUkVTX1U2NCh2aG9zdF92c29ja19iaXRzLCAwKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zOS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NDA9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDMtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ0Oi8qIFVzZWQgdG8gdHJhY2sgYWxsIHRoZSB2aG9zdF92c29jayBpbnN0YW5jZXMgb24gdGhlIHN5c3RlbS4gKi9cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NDU6c3RhdGljIERFRklORV9NVVRFWCh2aG9zdF92c29ja19tdXRleCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ2OnN0YXRpYyBERUZJTkVfUkVBRF9NT1NUTFlfSEFTSFRBQkxFKHZob3N0X3Zzb2NrX2hhc2gsIDgpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00Ny1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NDg6c3RydWN0IHZob3N0X3Zzb2NrIHtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDktXFx0c3RydWN0IHZob3N0X2RldiBkZXY7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTMtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjU0OlxcdC8qIExpbmsgdG8gZ2xvYmFsIHZob3N0X3Zzb2NrX2hhc2gsIHdyaXRlcyB1c2Ugdmhvc3RfdnNvY2tfbXV0ZXggKi9cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTUtXFx0c3RydWN0IGhsaXN0X25vZGUgaGFzaDtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz02Nj1zdGF0aWMgdTMyIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzAtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjcxOi8qIENhbGxlcnMgbXVzdCBiZSBpbiBhbiBSQ1UgcmVhZCBzZWN0aW9uIG9yIGhvbGQgdGhlIHZob3N0X3Zzb2NrX211dGV4LlxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03Mi0gKiBUaGUgcmV0dXJuIHZhbHVlIGNhbiBvbmx5IGJlIGRlcmVmZXJlbmNlZCB3aGlsZSB3aXRoaW4gdGhlIHNlY3Rpb24uXFxuZHJpdmVycy92aG9zdC92c29jay5jLTczLSAqL1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NDpzdGF0aWMgc3RydWN0IHZob3N0X3Zzb2NrICp2aG9zdF92c29ja19nZXQodTMyIGd1ZXN0X2NpZCwgc3RydWN0IG5ldCAqbmV0KVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NS17XFxuZHJpdmVycy92aG9zdC92c29jay5jOjc2OlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTc3LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3ODpcXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlX3JjdSh2aG9zdF92c29ja19oYXNoLCB2c29jaywgaGFzaCwgZ3Vlc3RfY2lkLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3OTpcXHRcXHRcXHRcXHQgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnZob3N0X3Zzb2NrX211dGV4KSkge1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MC1cXHRcXHR1MzIgb3RoZXJfY2lkID0gdnNvY2stXFx1MDAzZWd1ZXN0X2NpZDtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05ND1zdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDAtXFx0cmN1X3JlYWRfbG9jaygpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDE6XFx0Zm91bmQgPSAhIXZob3N0X3Zzb2NrX2dldChjaWQsIG5ldCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDUtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwNjpzdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDctXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHVzZWRfY291bnQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTE1LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMTY6c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC92c29jay5jLTExNy1cXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHVzZWRfY291bnQsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTI3PXN0YXRpYyB2b2lkXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEyODp2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTI5LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xODItXFx0XFx0XFx0LyogRmx1c2ggY29tcGxldGVkIGJ1ZmZlcnMgYmVmb3JlIHJlLWVuYWJsaW5nIG5vdGlmaWNhdGlvbnMuICovXFxuZHJpdmVycy92aG9zdC92c29jay5jOjE4MzpcXHRcXHRcXHRpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTg0LVxcdFxcdFxcdFxcdGFkZGVkID0gdHJ1ZTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0yNjctXFxuZHJpdmVycy92aG9zdC92c29jay5jOjI2ODpcXHRcXHR2aG9zdF92c29ja19hZGRfdXNlZCh2cSwgdXNlZF9jb3VudCwgaGVhZCxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMjY5LVxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4pO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTI3MS1cXHRcXHRpZiAodXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0KSB7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjI3MjpcXHRcXHRcXHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCB1c2VkX2NvdW50KTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMjczLVxcdFxcdFxcdHVzZWRfY291bnQgPSAwO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMwNy1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzA4OlxcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMDktXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzIwPXN0YXRpYyB2b2lkIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyMi1cXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzIzOlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyNC1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzI1OlxcdHZzb2NrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92c29jaywgc2VuZF9wa3Rfd29yayk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyNi1cXHR2cSA9IFxcdTAwMjZ2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0zMzI9dmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zMzQtXFx0c3RydWN0IHZpcnRpb192c29ja19oZHIgKmhkciA9IHZpcnRpb192c29ja19oZHIoc2tiKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzM1OlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMzNi1cXHRpbnQgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzM5LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozNDA6XFx0LyogRmluZCB0aGUgdmhvc3RfdnNvY2sgYWNjb3JkaW5nIHRvIGd1ZXN0IGNvbnRleHQgaWQgICovXFxuZHJpdmVycy92aG9zdC92c29jay5jOjM0MTpcXHR2c29jayA9IHZob3N0X3Zzb2NrX2dldChsZTY0X3RvX2NwdShoZHItXFx1MDAzZWRzdF9jaWQpLCBuZXQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNDItXFx0aWYgKCF2c29jaykge1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTM3NT12aG9zdF90cmFuc3BvcnRfY2FuY2VsX3BrdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNzYte1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozNzc6XFx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jaztcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzc4LVxcdGludCBjbnQgPSAwO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTM4Mi1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzgzOlxcdC8qIEZpbmQgdGhlIHZob3N0X3Zzb2NrIGFjY29yZGluZyB0byBndWVzdCBjb250ZXh0IGlkICAqL1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozODQ6XFx0dnNvY2sgPSB2aG9zdF92c29ja19nZXQodnNrLVxcdTAwM2VyZW1vdGVfYWRkci5zdm1fY2lkLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zODUtXFx0XFx0XFx0XFx0c29ja19uZXQoc2tfdnNvY2sodnNrKSkpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTQwNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo0MDc6dmhvc3RfdnNvY2tfYWxsb2Nfc2tiKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00MDgtXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG91dCwgdW5zaWduZWQgaW50IGluKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTQ2Ny0vKiBJcyB0aGVyZSBzcGFjZSBsZWZ0IGZvciByZXBsaWVzIHRvIHJ4IHBhY2tldHM/ICovXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ2ODpzdGF0aWMgYm9vbCB2aG9zdF92c29ja19tb3JlX3JlcGxpZXMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDY5LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz01NDg9c3RhdGljIGJvb2wgdmhvc3RfdHJhbnNwb3J0X3NlcXBhY2tldF9hbGxvdyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTU1MS1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza192c29jayh2c2spKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTUyOlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTU1My1cXHRib29sIHNlcXBhY2tldF9hbGxvdyA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTU1NS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjU1NjpcXHR2c29jayA9IHZob3N0X3Zzb2NrX2dldChyZW1vdGVfY2lkLCBuZXQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NTctXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTY1LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1NjY6c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfaGFuZGxlX3R4X2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuZHJpdmVycy92aG9zdC92c29jay5jLTU2Ny17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgcG9sbC53b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTcwOlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2sgPSBjb250YWluZXJfb2YodnEtXFx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Zzb2NrLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NzEtXFx0XFx0XFx0XFx0XFx0XFx0IGRldik7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTg4LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1ODk6XFx0XFx0aWYgKCF2aG9zdF92c29ja19tb3JlX3JlcGxpZXModnNvY2spKSB7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTU5MC1cXHRcXHRcXHQvKiBTdG9wIHR4IHVudGlsIHRoZSBkZXZpY2UgcHJvY2Vzc2VzIGFscmVhZHlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MDktXFxuZHJpdmVycy92aG9zdC92c29jay5jOjYxMDpcXHRcXHRza2IgPSB2aG9zdF92c29ja19hbGxvY19za2IodnEsIG91dCwgaW4pO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MTEtXFx0XFx0aWYgKCFza2IpIHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDMtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjY0NDpzdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjQ1LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDctXFx0XFx0XFx0XFx0XFx0XFx0cG9sbC53b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NjQ4OlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2sgPSBjb250YWluZXJfb2YodnEtXFx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Zzb2NrLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NDktXFx0XFx0XFx0XFx0XFx0XFx0IGRldik7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjUzLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2NTQ6c3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NTUte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTcwOS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzEwOnN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MTEte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTczNS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzM2OnN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2ZyZWUoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzM3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NDAtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjc0MTpzdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NDIte1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NDMtXFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzQ0OlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTc0NS1cXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzcwLVxcdHZxc1tWU09DS19WUV9SWF0gPSBcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9SWF07XFxuZHJpdmVycy92aG9zdC92c29jay5jOjc3MTpcXHR2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1RYXS5oYW5kbGVfa2ljayA9IHZob3N0X3Zzb2NrX2hhbmRsZV90eF9raWNrO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3NzI6XFx0dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9SWF0uaGFuZGxlX2tpY2sgPSB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljaztcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzczLVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTc4My1vdXQ6XFxuZHJpdmVycy92aG9zdC92c29jay5jOjc4NDpcXHR2aG9zdF92c29ja19mcmVlKHZzb2NrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzg1LVxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzg3LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo3ODg6c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfZmx1c2goc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzg5LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03OTItXFxuZHJpdmVycy92aG9zdC92c29jay5jOjc5MzpzdGF0aWMgdm9pZCB2aG9zdF92c29ja19yZXNldF9vcnBoYW5zKHN0cnVjdCBzb2NrICpzaylcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzk0LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MDQtXFx0LyogSWYgdGhlIHBlZXIgaXMgc3RpbGwgdmFsaWQsIG5vIG5lZWQgdG8gcmVzZXQgY29ubmVjdGlvbiAqL1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4MDU6XFx0aWYgKHZob3N0X3Zzb2NrX2dldCh2c2stXFx1MDAzZXJlbW90ZV9hZGRyLnN2bV9jaWQsIHNvY2tfbmV0KHNrKSkpIHtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODA2LVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTgyNC1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODI1OnN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy92aG9zdC92c29jay5jLTgyNi17XFxuZHJpdmVycy92aG9zdC92c29jay5jOjgyNzpcXHRzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MjgtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjgyOTpcXHRtdXRleF9sb2NrKFxcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTgzMC1cXHRpZiAodnNvY2stXFx1MDAzZWd1ZXN0X2NpZClcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODMxLVxcdFxcdGhhc2hfZGVsX3JjdShcXHUwMDI2dnNvY2stXFx1MDAzZWhhc2gpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4MzI6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTgzMy1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04MzktXFx0dnNvY2tfZm9yX2VhY2hfY29ubmVjdGVkX3NvY2tldChcXHUwMDI2dmhvc3RfdHJhbnNwb3J0LnRyYW5zcG9ydCxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODQwOlxcdFxcdFxcdFxcdFxcdHZob3N0X3Zzb2NrX3Jlc2V0X29ycGhhbnMpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDEtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODQzLVxcdCAqIG5lZWQgdG8gc3RvcCB0aGUgdnNvY2sgZGV2aWNlIGluIGFueSBjYXNlLlxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4NDQ6XFx0ICogdmhvc3RfdnNvY2tfc3RvcCgpIGNhbiBub3QgZmFpbCBpbiB0aGlzIGNhc2UsIHNvIHdlIGRvbid0IG5lZWQgdG9cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODQ1LVxcdCAqIGNoZWNrIHRoZSByZXR1cm4gY29kZS5cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODQ2LVxcdCAqL1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4NDc6XFx0dmhvc3RfdnNvY2tfc3RvcCh2c29jaywgZmFsc2UpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4NDg6XFx0dmhvc3RfdnNvY2tfZmx1c2godnNvY2spO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDktXFx0dmhvc3RfZGV2X3N0b3AoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTg1NS1cXHRrZnJlZSh2c29jay1cXHUwMDNlZGV2LnZxcyk7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjg1NjpcXHR2aG9zdF92c29ja19mcmVlKHZzb2NrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODU3LVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTg1OS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODYwOnN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc2V0X2NpZChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCB1NjQgZ3Vlc3RfY2lkKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NjEte1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4NjI6XFx0c3RydWN0IHZob3N0X3Zzb2NrICpvdGhlcjtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODYzLVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTg3OS1cXHQvKiBSZWZ1c2UgaWYgQ0lEIGlzIGFscmVhZHkgaW4gdXNlICovXFxuZHJpdmVycy92aG9zdC92c29jay5jOjg4MDpcXHRtdXRleF9sb2NrKFxcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjg4MTpcXHRvdGhlciA9IHZob3N0X3Zzb2NrX2dldChndWVzdF9jaWQsIHZzb2NrLVxcdTAwM2VuZXQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04ODItXFx0aWYgKG90aGVyIFxcdTAwMjZcXHUwMDI2IG90aGVyICE9IHZzb2NrKSB7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjg4MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZob3N0X3Zzb2NrX211dGV4KTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtODg0LVxcdFxcdHJldHVybiAtRUFERFJJTlVTRTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04OTAtXFx0dnNvY2stXFx1MDAzZWd1ZXN0X2NpZCA9IGd1ZXN0X2NpZDtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6ODkxOlxcdGhhc2hfYWRkX3JjdSh2aG9zdF92c29ja19oYXNoLCBcXHUwMDI2dnNvY2stXFx1MDAzZWhhc2gsIHZzb2NrLVxcdTAwM2VndWVzdF9jaWQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo4OTI6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2aG9zdF92c29ja19tdXRleCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTg5My1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04OTYtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjg5NzpzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCB1NjQgZmVhdHVyZXMpXFxuZHJpdmVycy92aG9zdC92c29jay5jLTg5OC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTMxLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5MzI6c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuZHJpdmVycy92aG9zdC92c29jay5jLTkzMy1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05MzQte1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5MzU6XFx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jayA9IGYtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTM2LVxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTk0NS1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTQ2OlxcdFxcdHJldHVybiB2aG9zdF92c29ja19zZXRfY2lkKHZzb2NrLCBndWVzdF9jaWQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NDctXFx0Y2FzZSBWSE9TVF9WU09DS19TRVRfUlVOTklORzpcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NTAtXFx0XFx0aWYgKHN0YXJ0KVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5NTE6XFx0XFx0XFx0cmV0dXJuIHZob3N0X3Zzb2NrX3N0YXJ0KHZzb2NrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTUyLVxcdFxcdGVsc2VcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTUzOlxcdFxcdFxcdHJldHVybiB2aG9zdF92c29ja19zdG9wKHZzb2NrLCB0cnVlKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTU0LVxcdGNhc2UgVkhPU1RfR0VUX0ZFQVRVUkVTOlxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTk2MS1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTYyOlxcdFxcdHJldHVybiB2aG9zdF92c29ja19zZXRfZmVhdHVyZXModnNvY2ssIGZlYXR1cmVzKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTYzLVxcdGNhc2UgVkhPU1RfR0VUX0JBQ0tFTkRfRkVBVFVSRVM6XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTgwLVxcdFxcdGVsc2VcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTgxOlxcdFxcdFxcdHZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTgyLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dnNvY2stXFx1MDAzZWRldi5tdXRleCk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTg2LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5ODc6c3RhdGljIHNzaXplX3Qgdmhvc3RfdnNvY2tfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuZHJpdmVycy92aG9zdC92c29jay5jLTk4OC17XFxuZHJpdmVycy92aG9zdC92c29jay5jLTk4OS1cXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHA7XFxuZHJpdmVycy92aG9zdC92c29jay5jOjk5MDpcXHRzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05OTEtXFx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTk2LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5OTc6c3RhdGljIHNzaXplX3Qgdmhvc3RfdnNvY2tfY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05OTgtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDAtXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDAxOlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2sgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDItXFx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAwNi1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAwNzpzdGF0aWMgX19wb2xsX3Qgdmhvc3RfdnNvY2tfY2hyX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMDgte1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDA5OlxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2sgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMTAtXFx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAxNC1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAxNTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF92c29ja19mb3BzID0ge1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDE2LVxcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDE3OlxcdC5vcGVuICAgICAgICAgICA9IHZob3N0X3Zzb2NrX2Rldl9vcGVuLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDE4OlxcdC5yZWxlYXNlICAgICAgICA9IHZob3N0X3Zzb2NrX2Rldl9yZWxlYXNlLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDE5LVxcdC5sbHNlZWtcXHRcXHQ9IG5vb3BfbGxzZWVrLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDIwOlxcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Zzb2NrX2Rldl9pb2N0bCxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyMS1cXHQuY29tcGF0X2lvY3RsICAgPSBjb21wYXRfcHRyX2lvY3RsLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDIyOlxcdC5yZWFkX2l0ZXIgICAgICA9IHZob3N0X3Zzb2NrX2Nocl9yZWFkX2l0ZXIsXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMjM6XFx0LndyaXRlX2l0ZXIgICAgID0gdmhvc3RfdnNvY2tfY2hyX3dyaXRlX2l0ZXIsXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMjQ6XFx0LnBvbGwgICAgICAgICAgID0gdmhvc3RfdnNvY2tfY2hyX3BvbGwsXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMjUtfTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyNi1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAyNzpzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugdmhvc3RfdnNvY2tfbWlzYyA9IHtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyOC1cXHQubWlub3IgPSBWSE9TVF9WU09DS19NSU5PUixcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyOS1cXHQubmFtZSA9IFxcXCJ2aG9zdC12c29ja1xcXCIsXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMzA6XFx0LmZvcHMgPSBcXHUwMDI2dmhvc3RfdnNvY2tfZm9wcyxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAzMS19O1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDMyLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDMzOnN0YXRpYyBpbnQgX19pbml0IHZob3N0X3Zzb2NrX2luaXQodm9pZClcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAzNC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA0MS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA0MjpcXHRyZXQgPSBtaXNjX3JlZ2lzdGVyKFxcdTAwMjZ2aG9zdF92c29ja19taXNjKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA0My1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1MC1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA1MTpzdGF0aWMgdm9pZCBfX2V4aXQgdmhvc3RfdnNvY2tfZXhpdCh2b2lkKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDUyLXtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA1MzpcXHRtaXNjX2RlcmVnaXN0ZXIoXFx1MDAyNnZob3N0X3Zzb2NrX21pc2MpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDU0LVxcdHZzb2NrX2NvcmVfdW5yZWdpc3RlcihcXHUwMDI2dmhvc3RfdHJhbnNwb3J0LnRyYW5zcG9ydCk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1Ni1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA1Nzptb2R1bGVfaW5pdCh2aG9zdF92c29ja19pbml0KTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA1ODptb2R1bGVfZXhpdCh2aG9zdF92c29ja19leGl0KTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTA1OS1NT0RVTEVfTElDRU5TRShcXFwiR1BMIHYyXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjUzLjgyMTYxNTU5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTcxNzkxMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdmhvc3QtdnNvY2sgUGF0Y2g6IEEgRGVlcGVyIERpdmUqKlxuXG5Pa2F5LCBzbyBgdmhvc3QtdnNvY2tgIHJlZ2lzdGVycyBhIG1pc2MgZGV2aWNlIGF0IGAvZGV2L3Zob3N0LXZzb2NrYCBhbmQgaW50ZXJhY3RzIHdpdGggQUZfVlNPQ0sgc29ja2V0cyB0aHJvdWdoIHRoZSBgdnNvY2tfY29yZWAuIE1ha2VzIHNlbnNlLCB0aGlzIGlzIGEgc3RhbmRhcmQgc2V0dXAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBhbmQgSSBrbm93IFN5emthbGxlciBoYXMgZnVsbCBzdXBwb3J0IGZvciBpdC5cblxuTGV0J3MgZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBwYXRjaC4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAsIHNwZWNpZmljYWxseSBob3cgdGhlIHZpcnRxdWV1ZSByaW5nIGVsZW1lbnRzIGFyZSBoYW5kbGVkLiBCZWZvcmUsIGl0IHdhcyBhIHNpbXBsZSBgdmhvc3RfYWRkX3VzZWRgIGNhbGwuIE5vdywgaXQncyBhIGJpdCBtb3JlIGludm9sdmVkLiBJdCdzIGJhdGNoaW5nIGRlc2NyaXB0b3JzIHVzaW5nIGB2aG9zdF92c29ja19hZGRfdXNlZGAgaW50byBgdnEtXHUwMDNlaGVhZHNgIGFuZCB0aGVuIGZsdXNoaW5nIHRoZW0gd2l0aCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAuIFRoaXMgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIGZ1bmN0aW9uIHRoZW4gY2FsbHMgYHZob3N0X2FkZF91c2VkX25gLCB3aGljaCBwcm9iYWJseSBwZXJmb3JtcyB0aGUgYWN0dWFsIHJpbmcgdXBkYXRlcy5cblxuVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBjaGVja3MgZm9yIGB1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS1cdTAwM2VudW0sIHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQpO2AgYW5kIGZsdXNoZXMgd2hlbiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIG1ldDogd2hlbiBgdXNlZF9jb3VudCA9PSB1c2VkX2xpbWl0YCwgd2hlbiBgaGVhZCA9PSB2cS1cdTAwM2VudW1gIGJlZm9yZSByZS1lbmFibGluZyBub3RpZnksIGFuZCBhdCB0aGUgdmVyeSBlbmQgb2YgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gb3B0aW1pemluZyB0aGUgZmx1c2ggb3BlcmF0aW9uIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgZGVzY3JpcHRvcnMgYW5kIEkvTyBsaW1pdHMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgIGFuZCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIGFyZSBiZWluZyBpbnRyb2R1Y2VkIGFzIHN0YXRpYyBoZWxwZXJzIGluIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLCBhbG9uZyB3aXRoIHRoZSBjb3JlIGNoYW5nZSBpbiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YC4gSSdsbCBhbHNvIHdhbnQgdG8gbG9vayBhdCB0aGUgZW50cnkgcG9pbnRzL2NhbGxlcnMgb2YgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAsIHN1Y2ggYXMgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrYCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAsIGB2aG9zdF92c29ja19oYW5kbGVfcnhfa2lja2AsIGFuZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYC5cblxuT2theSwgdGhlIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGlzIGEgYHN0YXRpY2AgZnVuY3Rpb24sIHNvIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGF0IGB2c29jay5jYCBmaWxlLiBUaGlzIGlzIGdvb2QgdG8ga25vdywgYW5kIEkgc2hvdWxkIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgZnJvbSB0aGlzIGNoYW5nZSBpbiBvdGhlciBtb2R1bGVzIGJ5IGNoZWNraW5nIGFueSBtb2R1bGUgZGVwZW5kZW5jaWVzLlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AsIGVzcGVjaWFsbHkgYXJvdW5kIGxpbmVzIDMxMC0zNzAuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDc3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjU4Ljc5MzQwOTE2MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92c29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxMDpcXHRcXHRpZiAoYWRkZWQpXFxuIDMxMTpcXHRcXHRcXHR2aG9zdF9zaWduYWwoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0b3V0OlxcbiAzMTQ6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRpZiAocmVzdGFydF90eClcXG4gMzE3OlxcdFxcdFxcdHZob3N0X3BvbGxfcXVldWUoXFx1MDAyNnR4X3ZxLVxcdTAwM2Vwb2xsKTtcXG4gMzE4OlxcdH1cXG4gMzE5OlxcdFxcbiAzMjA6XFx0c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuIDMyMTpcXHR7XFxuIDMyMjpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcXG4gMzIzOlxcdFxcdHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2s7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdHZzb2NrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF92c29jaywgc2VuZF9wa3Rfd29yayk7XFxuIDMyNjpcXHRcXHR2cSA9IFxcdTAwMjZ2c29jay1cXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XFxuIDMyOTpcXHR9XFxuIDMzMDpcXHRcXG4gMzMxOlxcdHN0YXRpYyBpbnRcXG4gMzMyOlxcdHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuIDMzMzpcXHR7XFxuIDMzNDpcXHRcXHRzdHJ1Y3QgdmlydGlvX3Zzb2NrX2hkciAqaGRyID0gdmlydGlvX3Zzb2NrX2hkcihza2IpO1xcbiAzMzU6XFx0XFx0c3RydWN0IHZob3N0X3Zzb2NrICp2c29jaztcXG4gMzM2OlxcdFxcdGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHQvKiBGaW5kIHRoZSB2aG9zdF92c29jayBhY2NvcmRpbmcgdG8gZ3Vlc3QgY29udGV4dCBpZCAgKi9cXG4gMzQxOlxcdFxcdHZzb2NrID0gdmhvc3RfdnNvY2tfZ2V0KGxlNjRfdG9fY3B1KGhkci1cXHUwMDNlZHN0X2NpZCksIG5ldCk7XFxuIDM0MjpcXHRcXHRpZiAoIXZzb2NrKSB7XFxuIDM0MzpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzQ0OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzNDU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDM0NjpcXHRcXHR9XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qIEZhc3QtZmFpbCBpZiB0aGUgZ3Vlc3QgaGFzbid0IGVuYWJsZWQgdGhlIFJYIHZxIHlldC4gUXVldWluZyB0aGUgcGFja2V0XFxuIDM0OTpcXHRcXHQgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdFxcbiAzNTA6XFx0XFx0ICogd2l0aGluIHRoZSB0aW1lb3V0LCBpdCdsbCBpbW1lZGlhdGVseSByZXBseSB3aXRoIFJTVCwgYmVjYXVzZSB0aGVyZSdzIG5vXFxuIDM1MTpcXHRcXHQgKiBsaXN0ZW5lciBvbiB0aGUgcG9ydCB5ZXQuXFxuIDM1MjpcXHRcXHQgKlxcbiAzNTM6XFx0XFx0ICogdmhvc3RfdnFfZ2V0X2JhY2tlbmQoKSB3aXRob3V0IHZxLVxcdTAwM2VtdXRleCBpcyBhY2NlcHRhYmxlIGhlcmU6IGxvY2tpbmdcXG4gMzU0OlxcdFxcdCAqIHRoZSBtdXRleCB3b3VsZCBiZSB0b28gZXhwZW5zaXZlIGluIHRoaXMgaG90IHBhdGgsIGFuZCB3ZSBhbHJlYWR5IGhhdmVcXG4gMzU1OlxcdFxcdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcXG4gMzU2OlxcdFxcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cXG4gMzU3OlxcdFxcdCAqL1xcbiAzNTg6XFx0XFx0aWYgKHVubGlrZWx5KCFkYXRhX3JhY2Uodmhvc3RfdnFfZ2V0X2JhY2tlbmQoXFx1MDAyNnZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdKSkpKSB7XFxuIDM1OTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzYwOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzNjE6XFx0XFx0XFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XFxuIDM2MjpcXHRcXHR9XFxuIDM2MzpcXHRcXG4gMzY0OlxcdFxcdGlmICh2aXJ0aW9fdnNvY2tfc2tiX3JlcGx5KHNrYikpXFxuIDM2NTpcXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZ2c29jay1cXHUwMDNlcXVldWVkX3JlcGxpZXMpO1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcXG4gMzY4OlxcdFxcdHZob3N0X3ZxX3dvcmtfcXVldWUoXFx1MDAyNnZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdLCBcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3dvcmspO1xcbiAzNjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE3OjU4Ljc5MzU0NDY5MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDYwNDE1MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIERhdGEgRmxvdyBvZiBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCBmdW5jdGlvbiB3b3Jrcy4gSXQgc2VlbXMgbGlrZSBpdCdzIHJlZ2lzdGVyZWQgc29tZXdoZXJlIHdpdGhpbiB0aGUgYHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0IHZob3N0X3RyYW5zcG9ydGAsIHdoaWNoIG1ha2VzIHNlbnNlLCBhcyB0aGF0IG5hbWUgc3VnZ2VzdHMgaXQncyBoYW5kbGluZyB0cmFuc3BvcnQgbG9naWMsIGFuZCB0aGlzIGlzIHVzZWQgYnkgdGhlIGB2c29ja19jb3JlYCBtb2R1bGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR0ZXIuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgdmhvc3RfdHJhbnNwb3J0YCBpdHNlbGYuIExldCdzIHNlZSBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgc3RydWN0J3MgZGVmaW5pdGlvbiBzaG91bGQgZ2l2ZSBtZSBtb3JlIGNvbnRleHQgZm9yIHdoYXQgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODowMS4yNTM5NjI1NzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODc4NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3RyYW5zcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suYz00OD1zdHJ1Y3Qgdmhvc3RfdnNvY2sge1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTY1LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2NjpzdGF0aWMgdTMyIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKHZvaWQpXFxuZHJpdmVycy92aG9zdC92c29jay5jLTY3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz03ND1zdGF0aWMgc3RydWN0IHZob3N0X3Zzb2NrICp2aG9zdF92c29ja19nZXQodTMyIGd1ZXN0X2NpZCwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTkzLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5NDpzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTUte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTEyNz1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMjg6dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEyOS1cXHRcXHRcXHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzE5LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjA6c3RhdGljIHZvaWQgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyMS17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzI3LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzozMjg6XFx0dmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHZzb2NrLCB2cSk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTMyOS19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MzMxPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzMyOnZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuZHJpdmVycy92aG9zdC92c29jay5jLTMzMy17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzU1LVxcdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MzU2OlxcdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMzU3LVxcdCAqL1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTM3ND1zdGF0aWMgaW50XFxuZHJpdmVycy92aG9zdC92c29jay5jOjM3NTp2aG9zdF90cmFuc3BvcnRfY2FuY2VsX3BrdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0zNzYte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTQ2OD1zdGF0aWMgYm9vbCB2aG9zdF92c29ja19tb3JlX3JlcGxpZXMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00NzgtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ3OTpzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfbXNnemVyb2NvcHlfYWxsb3codm9pZClcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDgwLXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00ODMtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ4NDpzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfc2VxcGFja2V0X2FsbG93KHN0cnVjdCB2c29ja19zb2NrICp2c2ssXFxuZHJpdmVycy92aG9zdC92c29jay5jLTQ4NS1cXHRcXHRcXHRcXHRcXHQgICAgdTMyIHJlbW90ZV9jaWQpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTQ4Nz1zdGF0aWMgYm9vbFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo0ODg6dmhvc3RfdHJhbnNwb3J0X3N0cmVhbV9hbGxvdyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkLCB1MzIgcG9ydClcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNDg5LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00OTItXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ5MzpzdGF0aWMgc3RydWN0IHZpcnRpb190cmFuc3BvcnQgdmhvc3RfdHJhbnNwb3J0ID0ge1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00OTQtXFx0LnRyYW5zcG9ydCA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00OTYtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ5NzpcXHRcXHQuZ2V0X2xvY2FsX2NpZCAgICAgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQsXFxuZHJpdmVycy92aG9zdC92c29jay5jOjQ5ODpcXHRcXHQuaGFzX3JlbW90ZV9jaWQgICAgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X2hhc19yZW1vdGVfY2lkLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy00OTktXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTA0LVxcdFxcdC5zaHV0ZG93biAgICAgICAgICAgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X3NodXRkb3duLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1MDU6XFx0XFx0LmNhbmNlbF9wa3QgICAgICAgICAgICAgICA9IHZob3N0X3RyYW5zcG9ydF9jYW5jZWxfcGt0LFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MDYtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTE3LVxcdFxcdC5zdHJlYW1faXNfYWN0aXZlICAgICAgICAgPSB2aXJ0aW9fdHJhbnNwb3J0X3N0cmVhbV9pc19hY3RpdmUsXFxuZHJpdmVycy92aG9zdC92c29jay5jOjUxODpcXHRcXHQuc3RyZWFtX2FsbG93ICAgICAgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X3N0cmVhbV9hbGxvdyxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTE5LVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTUyMS1cXHRcXHQuc2VxcGFja2V0X2VucXVldWUgICAgICAgID0gdmlydGlvX3RyYW5zcG9ydF9zZXFwYWNrZXRfZW5xdWV1ZSxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTIyOlxcdFxcdC5zZXFwYWNrZXRfYWxsb3cgICAgICAgICAgPSB2aG9zdF90cmFuc3BvcnRfc2VxcGFja2V0X2FsbG93LFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MjMtXFx0XFx0LnNlcXBhY2tldF9oYXNfZGF0YSAgICAgICA9IHZpcnRpb190cmFuc3BvcnRfc2VxcGFja2V0X2hhc19kYXRhLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MjQtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjUyNTpcXHRcXHQubXNnemVyb2NvcHlfYWxsb3cgICAgICAgID0gdmhvc3RfdHJhbnNwb3J0X21zZ3plcm9jb3B5X2FsbG93LFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01MjYtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTQ0LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1NDU6XFx0LnNlbmRfcGt0ID0gdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0LFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NDYtfTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTQ3LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo1NDg6c3RhdGljIGJvb2wgdmhvc3RfdHJhbnNwb3J0X3NlcXBhY2tldF9hbGxvdyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01NDktXFx0XFx0XFx0XFx0XFx0ICAgIHUzMiByZW1vdGVfY2lkKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTU2Nj1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfdHhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MjUtXFx0XFx0ICAgIGxlNjRfdG9fY3B1KGhkci1cXHUwMDNlZHN0X2NpZCkgPT1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NjI2OlxcdFxcdCAgICB2aG9zdF90cmFuc3BvcnRfZ2V0X2xvY2FsX2NpZCgpKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2Mjc6XFx0XFx0XFx0dmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChcXHUwMDI2dmhvc3RfdHJhbnNwb3J0LCBza2IsXFxuZHJpdmVycy92aG9zdC92c29jay5jLTYyOC1cXHRcXHRcXHRcXHRcXHRcXHQgIHZzb2NrLVxcdTAwM2VuZXQpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTY0ND1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19oYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02NTAtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjY1MTpcXHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QodnNvY2ssIHZxKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjUyLX1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz03NDE9c3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03NzktXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzgwOlxcdHZob3N0X3dvcmtfaW5pdChcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3dvcmssIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNzgxLVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTgyNT1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTgzOC1cXHQgKiBpbmVmZmljaWVudC4gIFJvb20gZm9yIGltcHJvdmVtZW50IGhlcmUuICovXFxuZHJpdmVycy92aG9zdC92c29jay5jOjgzOTpcXHR2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KFxcdTAwMjZ2aG9zdF90cmFuc3BvcnQudHJhbnNwb3J0LFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy04NDAtXFx0XFx0XFx0XFx0XFx0dmhvc3RfdnNvY2tfcmVzZXRfb3JwaGFucyk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTAzMz1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF92c29ja19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAzNi1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTAzNzpcXHRyZXQgPSB2c29ja19jb3JlX3JlZ2lzdGVyKFxcdTAwMjZ2aG9zdF90cmFuc3BvcnQudHJhbnNwb3J0LFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDM4LVxcdFxcdFxcdFxcdCAgVlNPQ0tfVFJBTlNQT1JUX0ZfSDJHKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDQzLVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA0NDpcXHRcXHR2c29ja19jb3JlX3VucmVnaXN0ZXIoXFx1MDAyNnZob3N0X3RyYW5zcG9ydC50cmFuc3BvcnQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDQ1LVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTA1MT1zdGF0aWMgdm9pZCBfX2V4aXQgdmhvc3RfdnNvY2tfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwNTMtXFx0bWlzY19kZXJlZ2lzdGVyKFxcdTAwMjZ2aG9zdF92c29ja19taXNjKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTA1NDpcXHR2c29ja19jb3JlX3VucmVnaXN0ZXIoXFx1MDAyNnZob3N0X3RyYW5zcG9ydC50cmFuc3BvcnQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDU1LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE4OjAxLjI5OTg0NzE5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzA0OTc2NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IHZob3N0LXZzb2NrIEJhdGNoaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIG5ldyB2aG9zdC12c29jayBiYXRjaGluZyBwYXRjaCBpcyAqYWJzb2x1dGVseSogd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG5GaXJzdCwgYWNjZXNzaWJpbGl0eS4gQ2FuIHdlIGFjdHVhbGx5IGhpdCB0aGlzIG1vZGlmaWVkIGNvZGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwPyBBYnNvbHV0ZWx5LCB5ZXMuIFFFTVUgb3IgdXNlcnNwYWNlIHJ1bm5pbmcgaW4gYSBWTSBzaG91bGQgaGF2ZSBubyBwcm9ibGVtIGludGVyYWN0aW5nIHdpdGggYC9kZXYvdmhvc3QtdnNvY2tgLiBXZSBjYW4gc2V0IHVwIHRoZSB2aXJ0cXVldWVzIHVzaW5nIHRoZSBzdGFuZGFyZCBpb2N0bHMg4oCTIGBWSE9TVF9TRVRfVlJJTkdfQkFTRWAsIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCwgZXRjLiDigJMgYW5kIHRoZW4gc2VuZCBkYXRhIHVzaW5nIEFGX1ZTT0NLIHNvY2tldHMgb3IgdHJpZ2dlciB2aXJ0cXVldWUga2lja3MuIEFsbCBvZiB0aGF0IGxlYWRzIHRvIHRoZSBjcnVjaWFsIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgIGZ1bmN0aW9uLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LlxuXG5TZWNvbmQsIHdoYXQncyAqYWN0dWFsbHkqIGNoYW5naW5nIHdpdGggdGhpcyBwYXRjaD8gSXQncyBmdW5kYW1lbnRhbGx5IGFib3V0IGhvdyB1c2VkIHJpbmcgZW50cmllcyBhcmUgaGFuZGxlZCBpbiB2aG9zdC12c29jayB3aXRoaW4gYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAuIEluc3RlYWQgb2YgaW5kaXZpZHVhbCBgdmhvc3RfYWRkX3VzZWRgIGNhbGxzLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBiYXRjaGVkIHVwZGF0ZXMgdXNpbmcgYHZob3N0X2FkZF91c2VkX25gIHRocm91Z2ggaGVscGVyIGZ1bmN0aW9ucyBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIGFuZCBgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZGAuIFRoaXMgdG91Y2hlcyBhIGxvdCBvZiBpbXBvcnRhbnQgcGllY2VzOiByaW5nIGluZGV4aW5nLCBkZXNjcmlwdG9yIHVwZGF0ZXMsIGJhdGNoIHNpemUgbGltaXRzIGRlZmluZWQgYnkgYHVzZWRfbGltaXRgLCBub3RpZnlpbmcgdGhlIGd1ZXN0LCBhbmQgZmx1c2hpbmcgdGhlIGJ1ZmZlcnMuXG5cblRoaXJkLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCB3aHkgaXMgdGhpcyBzbyByaXBlIGZvciBmdXp6aW5nPyBCZWNhdXNlIHRoZSB2ZXJ5IG5hdHVyZSBvZiBiYXRjaGluZyBjaGFuZ2VzLCBsaWtlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHZpcnRxdWV1ZS9kZXNjcmlwdG9yIGJ1ZmZlciBoYW5kbGluZyBhbmQgYmF0Y2hpbmcgbG9naWMsIHNjcmVhbSBcIm9mZi1ieS1vbmUgZXJyb3JzLFwiIFwibG9zdCB3YWtldXBzLFwiIFwicmluZyBidWZmZXIgY29ycnVwdGlvbixcIiBhbmQgXCJvdXQtb2YtYm91bmRzIGFjY2Vzc1wiIGluIHRoZSBgaGVhZHNgIGFycmF5cy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIGFyZWEgd2hlcmUgYSBmdXp6ZXIgY2FuIHJlYWxseSBzaGluZS5cblxuRmluYWxseSwgd2hhdCBhcmUgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uPyBJIG5lZWQgdG8gZm9jdXMgb246XG4qICAgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgKHRoZSBjb3JlIGZ1bmN0aW9uKVxuKiAgIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCAoZmx1c2hpbmcgdGhlIGJ1ZmZlcilcbiogICBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIChhZGRpbmcgdXNlZCBlbnRyaWVzIHRvIHRoZSBidWZmZXIpXG4qICAgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrYCAocmVsYXRlZCB0byBwYWNrZXQgc2VuZGluZylcbiogICBgdmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2tgIChoYW5kbGluZyBpbmNvbWluZyBraWNrKVxuXG5BbmQsIHNpbmNlIGB2aG9zdF9hZGRfdXNlZF9uYCBpcyBhY3R1YWxseSBpbiBgZHJpdmVycy92aG9zdC92aG9zdC5jYCwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgaXQgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IGl0IHdvcmtzIGFuZCBob3cgaXQgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdGFyZ2V0aW5nIHRoZSBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI1NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODowNy4wMDQ4MjcxNzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjg3NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2FkZF91c2VkX25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzAwOD1pbnQgdmhvc3RfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMTUtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwMTY6XFx0cmV0dXJuIHZob3N0X2FkZF91c2VkX24odnEsIFxcdTAwMjZoZWFkcywgXFx1MDAyNm5oZWFkcywgMSk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMTctfVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zMDE4PUVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2FkZF91c2VkKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzAxOS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzAyMDpzdGF0aWMgaW50IF9fdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzAyMS1cXHRcXHRcXHQgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA1MS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzA1MjpzdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25fb29vKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDUzLVxcdFxcdFxcdFxcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjAtXFx0aWYgKG4gXFx1MDAzYyBjb3VudCkge1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDYxOlxcdFxcdHIgPSBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBuKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA2Mi1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA2Ni1cXHR9XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwNjc6XFx0cmV0dXJuIF9fdmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIGNvdW50KTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA2OC19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjktXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwNzA6c3RhdGljIGludCB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDcxLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzExOS0gKiB3YW50IHRvIG5vdGlmeSB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxMjA6aW50IHZob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTIxLVxcdFxcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMjYtXFx0aWYgKCFpbl9vcmRlciB8fCAhbmhlYWRzKVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTI3OlxcdFxcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX29vbyh2cSwgaGVhZHMsIGNvdW50KTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzEyOC1cXHRlbHNlXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxMjk6XFx0XFx0ciA9IHZob3N0X2FkZF91c2VkX25faW5fb3JkZXIodnEsIGhlYWRzLCBuaGVhZHMsIGNvdW50KTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzEzMC1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTUwLX1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzE1MTpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9hZGRfdXNlZF9uKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzE1Mi1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz0zMjEwPXZvaWQgdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbF9uKHN0cnVjdCB2aG9zdF9kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMjE1LXtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzIxNjpcXHR2aG9zdF9hZGRfdXNlZF9uKHZxLCBoZWFkcywgbmhlYWRzLCBjb3VudCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMyMTctXFx0dmhvc3Rfc2lnbmFsKGRldiwgdnEpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5oPTI0OD1pbnQgdmhvc3RfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLCB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbik7XFxuZHJpdmVycy92aG9zdC92aG9zdC5oOjI0OTppbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaC0yNTAtXFx0XFx0ICAgICB1MTYgKm5oZWFkcywgdW5zaWduZWQgY291bnQpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTEwNj1zdGF0aWMgYm9vbCB2aG9zdF92c29ja19mbHVzaF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTExMS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6MTEyOlxcdHZob3N0X2FkZF91c2VkX24odnEsIHZxLVxcdTAwM2VoZWFkcywgdnEtXFx1MDAzZW5oZWFkcywgdXNlZF9jb3VudCk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTExMy1cXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MDcuMDg4NTIwNjIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTEwNDEzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2NvbmZpZyBEZXBlbmRlbmNpZXMgLSBWSE9TVF9WU09DSyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBWSE9TVF9WU09DS2AuIEZpcnN0LCBhIHF1aWNrIHNhbml0eSBjaGVjazogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBWSE9TVF9WU09DS2AgaXMgcHJvcGVybHkgc2V0IHVwLiBSaWdodCwgc28gYFZIT1NUX1ZTT0NLYCBkZXBlbmRzIG9uIGBWU09DS0VUU2AgYW5kIGBFVkVOVEZEYC4gTWFrZXMgc2Vuc2Ug4oCTIHdlIG5lZWQgdGhlIGNvcmUgdnNvY2sgZnVuY3Rpb25hbGl0eSBhbmQgYSB3YXkgdG8gc2lnbmFsIGV2ZW50cy4gSXQgYWxzbyAqc2VsZWN0cyogYFZIT1NUYCBhbmQgYFZJUlRJT19WU09DS0VUU19DT01NT05gLCBpbXBseWluZyB0aGF0IGl0J3MgYnVpbGRpbmcgdXBvbiB0aG9zZSBmdW5kYW1lbnRhbCBjb21wb25lbnRzLiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWxsIHBsYXlpbmcgbmljZWx5IHRvZ2V0aGVyLCBJJ2xsIG5lZWQgdG8gZ28gYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggYG5ldC92bXdfdnNvY2svS2NvbmZpZ2AgdG8gY29uZmlybSBldmVyeXRoaW5nIG9uIHRoZSB2c29jayBzaWRlIGlzIGluIG9yZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYwMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE4OjA5LjIzOTU2NDQ2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1Mjc3MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZTT0NLRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWctNS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Njpjb25maWcgVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXQgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMTgtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjE5OmNvbmZpZyBWU09DS0VUU19ESUFHXFxubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjgtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjI5OmNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIGxvb3BiYWNrIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MDkuMzA4MDk5MTkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzI5NTExNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEV2ZW50ZmQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBHaXZlbiB3aGF0IEknbSB3b3JraW5nIG9uLCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgRVZFTlRGRGAgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd291bGQgbGlrZWx5IHJlc2lkZSBlaXRoZXIgd2l0aGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCBzaW5jZSBpdCBtaWdodCBiZSBhIGNvcmUga2VybmVsIGZlYXR1cmUsIG9yIHBvdGVudGlhbGx5IHdpdGhpbiBgZnMvS2NvbmZpZ2AgaWYgaXQncyBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0gb3Igc29tZSByZWxhdGVkIGluZnJhc3RydWN0dXJlLiBJ4oCZbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhvc2UgdHdvIGxvY2F0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyBpdCdzIGVuYWJsZWQgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDc4LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MTEuNzQxMDUyMzI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUzNDExODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFVkVOVEZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTIzPWNvbmZpZyBUSU1FUkZEXFxuLS1cXG5pbml0L0tjb25maWctMTkzMS1cXG5pbml0L0tjb25maWc6MTkzMjpjb25maWcgRVZFTlRGRFxcbmluaXQvS2NvbmZpZy0xOTMzLVxcdGJvb2wgXFxcIkVuYWJsZSBldmVudGZkKCkgc3lzdGVtIGNhbGxcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODoxMy40OTQ0NzE3NDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI5NjkxMzEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVmhvc3QtVlNPQ0sgRHJpdmVyIE1vZGlmaWNhdGlvbiBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLiBXZSdyZSBtb2RpZnlpbmcgdGhlIHZpcnRxdWV1ZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSB2aG9zdC12c29jayBkcml2ZXIuIEVzc2VudGlhbGx5LCB3ZSdyZSBtb3ZpbmcgZnJvbSBhIHBlci1wYWNrZXQgYHZob3N0X2FkZF91c2VkYCBhcHByb2FjaCB0byB1c2luZyBgdmhvc3RfYWRkX3VzZWRfbmAgZm9yIGJhdGNoZWQgZGVzY3JpcHRvciByaW5nIHVwZGF0ZXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgYmVjYXVzZSBpdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBmb3IgYmF0Y2ggbGltaXRzIChgdXNlZF9saW1pdGApLCBhcnJheSBpbmRleCBtYW5hZ2VtZW50LCBhbmQgdGhlIGNydWNpYWwgYmF0Y2ggZmx1c2hpbmcgcHJvY2VkdXJlcyBoYW5kbGVkIGJ5IGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYC5cblxuQmFzZWQgb24gdGhpcyBjaGFuZ2UsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB3ZSBjYW4gZXhlcmNpc2UgdGhpcyBuZXcgYmF0Y2hpbmcgbG9naWMgZWZmZWN0aXZlbHkgYnkgZnV6emluZyBBRl9WU09DSyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBgL2Rldi92aG9zdC12c29ja2AgaW9jdGxzIHdpdGhpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIGlzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXRpZXMgYXJlIG1vc3QgbGlrZWx5IHRvIGVtZXJnZS5cblxuVG8gZW5hYmxlIHRoaXMgZnV6emluZywgd2UnbGwgbmVlZCB0byBlbmFibGUgYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbnM6IGBWSE9TVF9WU09DS2AsIGBWU09DS0VUU2AsIGBFVkVOVEZEYCwgYFZIT1NUYCwgYW5kIGBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYC4gVGhlc2UgYXJlIHRoZSBtaW5pbXVtIG5lZWRlZCB0byBnZXQgZXZlcnl0aGluZyB0byB3b3JrLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZSB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCwgYHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWRgLCBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgLCBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdF93b3JrYCwgYW5kIGB2aG9zdF92c29ja19oYW5kbGVfcnhfa2lja2AuIFdlIG5lZWQgdG8ga2VlcCBhIGNsb3NlIGV5ZSBvbiB0aGVzZS4gQWN0dWFsbHksIEkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IGB2aG9zdF9hZGRfdXNlZF9uYCBpbiBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBpcyBpbXBvcnRhbnQsIHRob3VnaCBJJ2xsIGtlZXAgdGhlIGZvY3VzIHByaW1hcmlseSBvbiB0aGUgdnNvY2stc3BlY2lmaWMgb25lcyBmb3Igbm93LlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoZXNlIGZpbmRpbmdzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMjcsIk91dHB1dFRva2VucyI6MjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE4OjE3Ljc5MTM4NzQ5MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDQ3MTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIkVWRU5URkRcIixcbiAgICBcIlZIT1NUXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF92c29ja19mbHVzaF91c2VkXCIsXG4gICAgXCJ2aG9zdF92c29ja19hZGRfdXNlZFwiLFxuICAgIFwidmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0XCIsXG4gICAgXCJ2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Rfd29ya1wiLFxuICAgIFwidmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGRlc2NyaXB0b3IgYmF0Y2hpbmcgaW4gdGhlIHZob3N0LXZzb2NrIGRyaXZlciAoZHJpdmVycy92aG9zdC92c29jay5jKSBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgcmVwbGFjaW5nIGluZGl2aWR1YWwgdmhvc3RfYWRkX3VzZWQgY2FsbHMgd2l0aCBiYXRjaGVkIHZob3N0X2FkZF91c2VkX24gY2FsbHMuIEl0IGludHJvZHVjZXMgbmV3IGJ1ZmZlciBhY2N1bXVsYXRpb24sIGFycmF5IGluZGV4aW5nLCBhbmQgYmF0Y2ggbGltaXQvZmx1c2hpbmcgbG9naWMgaW4gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGFjY2Vzc2libGUgdmlhIC9kZXYvdmhvc3QtdnNvY2sgYW5kIEFGX1ZTT0NLIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVlNPQ0tcIixcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJFVkVOVEZEXCIsXG4gICAgXCJWSE9TVFwiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTX0NPTU1PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdFwiLFxuICAgIFwidmhvc3RfdnNvY2tfZmx1c2hfdXNlZFwiLFxuICAgIFwidmhvc3RfdnNvY2tfYWRkX3VzZWRcIixcbiAgICBcInZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdFwiLFxuICAgIFwidmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0X3dvcmtcIixcbiAgICBcInZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBkZXNjcmlwdG9yIGJhdGNoaW5nIGluIHRoZSB2aG9zdC12c29jayBkcml2ZXIgKGRyaXZlcnMvdmhvc3QvdnNvY2suYykgZm9yIHBhY2tldCB0cmFuc21pc3Npb24sIHJlcGxhY2luZyBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkIGNhbGxzIHdpdGggYmF0Y2hlZCB2aG9zdF9hZGRfdXNlZF9uIGNhbGxzLiBJdCBpbnRyb2R1Y2VzIG5ldyBidWZmZXIgYWNjdW11bGF0aW9uLCBhcnJheSBpbmRleGluZywgYW5kIGJhdGNoIGxpbWl0L2ZsdXNoaW5nIGxvZ2ljIGluIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBhY2Nlc3NpYmxlIHZpYSAvZGV2L3Zob3N0LXZzb2NrIGFuZCBBRl9WU09DSyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODoxNy44Njg0NDIwMzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMTg1MTI3OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MTcuODY4OTkyMTk3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzExODQ1NzMwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgYmF0Y2hpbmcgb2YgdXNlZCByaW5nIHVwZGF0ZXMgaW4gdmhvc3QtdnNvY2sgKHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCkgYnkgYWNjdW11bGF0aW5nIHVzZWQgZGVzY3JpcHRvcnMgaW4gdGhlIHByZWFsbG9jYXRlZCB2aXJ0cXVldWUgYXJyYXlzICh2cS1cXHUwMDNlaGVhZHMgYW5kIHZxLVxcdTAwM2VuaGVhZHMpIGFuZCBmbHVzaGluZyB0aGVtIHZpYSB2aG9zdF9hZGRfdXNlZF9uKCkgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHZob3N0X2FkZF91c2VkKCkgY2FsbHMuXFxuXFxuLSBLTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxcbiAgMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWs6IEVhY2ggdXNlZCBkZXNjcmlwdG9yIGVsZW1lbnQgaW4gdnEtXFx1MDAzZWhlYWRzIChzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtKSBjb250YWlucyBvbmx5IHR3byAzMi1iaXQgZmllbGRzIChpZCBhbmQgbGVuKSB3aXRob3V0IGFueSBzdHJ1Y3R1cmUgcGFkZGluZy4gQm90aCBmaWVsZHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHZxLVxcdTAwM2VuaGVhZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gdmhvc3RfdnNvY2tfYWRkX3VzZWQoKSBmb3IgZWFjaCBpbmRleCBiZWZvcmUgYmVpbmcgZmx1c2hlZCBhbmQgY29waWVkIHRvIHRoZSBndWVzdCdzIHVzZWQgcmluZyB2aWEgdmhvc3RfcHV0X3VzZWQoKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEgaXMgcmVhZCBvciBsZWFrZWQuXFxuICAyLiBNZW1vcnkgQm91bmRzIGFuZCBJbnRlZ3JpdHk6IEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIHBhdGNoIHdvdWxkIHJlbGF0ZSB0byBhcnJheSBpbmRleGluZywgYm91bmRzIGxpbWl0cyAodnEtXFx1MDAzZWRldi1cXHUwMDNlaW92X2xpbWl0KSwgb3IgdmlydHF1ZXVlIHN5bmNocm9uaXphdGlvbiBsb2dpYywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4gKGZvciBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2Vzc2VzKSwgYW5kIHZpcnRpbyBwcm90b2NvbCBjaGVja3MuXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBpbmZvLWxlYWsgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2ZmQwN2U4ZmQ3NjVhOTMxMzJiM2Y4OGM5YjM1ZDc2MTM1OWVkNzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE5OjE3OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jXG5pbmRleCA5YWFhYjZiYjgwNjFjLi43YTEzYWJlNzMzNDUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbkBAIC0xMDMsMTIgKzEwMywzNSBAQCBzdGF0aWMgYm9vbCB2aG9zdF90cmFuc3BvcnRfaGFzX3JlbW90ZV9jaWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTMyIGNpZClcbiBcdHJldHVybiBmb3VuZDtcbiB9XG4gXG4rc3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCB1c2VkX2NvdW50KVxuK3tcbitcdGlmICghdXNlZF9jb3VudClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0dmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtXHUwMDNlaGVhZHMsIHZxLVx1MDAzZW5oZWFkcywgdXNlZF9jb3VudCk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IHVzZWRfY291bnQsXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IGhlYWQsIHVuc2lnbmVkIGludCBsZW4pXG4re1xuK1x0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9IFx1MDAyNnZxLVx1MDAzZWhlYWRzW3VzZWRfY291bnRdO1xuK1xuK1x0dXNlZC1cdTAwM2VpZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTtcbitcdHVzZWQtXHUwMDNlbGVuID0gY3B1X3RvX3Zob3N0MzIodnEsIGxlbik7XG4rXHR2cS1cdTAwM2VuaGVhZHNbdXNlZF9jb3VudF0gPSAxO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFx0XHRcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp0eF92cSA9IFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9UWF07XG4gXHRpbnQgcGt0cyA9IDAsIHRvdGFsX2xlbiA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgdXNlZF9saW1pdDtcbiBcdGJvb2wgYWRkZWQgPSBmYWxzZTtcbiBcdGJvb2wgcmVzdGFydF90eCA9IGZhbHNlO1xuIFxuQEAgLTEyMCw2ICsxNDMsMTEgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRpZiAoIXZxX21ldGFfcHJlZmV0Y2godnEpKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdC8qIEtlZXAgdGhlIGJhdGNoIHdpdGhpbiB0aGUgdXNlZCByaW5nIGFuZCB0aGUgc2NyYXRjaCBhcnJheXMuICovXG4rXHR1c2VkX2xpbWl0ID0gbWluX3QodW5zaWduZWQgaW50LCB2cS1cdTAwM2VudW0sIHZxLVx1MDAzZWRldi1cdTAwM2Vpb3ZfbGltaXQpO1xuK1x0aWYgKHVubGlrZWx5KCF1c2VkX2xpbWl0KSlcbitcdFx0Z290byBvdXQ7XG4rXG4gXHQvKiBBdm9pZCBmdXJ0aGVyIHZtZXhpdHMsIHdlJ3JlIGFscmVhZHkgcHJvY2Vzc2luZyB0aGUgdmlydHF1ZXVlICovXG4gXHR2aG9zdF9kaXNhYmxlX25vdGlmeShcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHZxKTtcbiBcbkBAIC0xNTAsNiArMTc4LDEzIEBAIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLFxuIFxuIFx0XHRpZiAoaGVhZCA9PSB2cS1cdTAwM2VudW0pIHtcbiBcdFx0XHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3RfcXVldWUsIHNrYik7XG4rXG4rXHRcdFx0LyogRmx1c2ggY29tcGxldGVkIGJ1ZmZlcnMgYmVmb3JlIHJlLWVuYWJsaW5nIG5vdGlmaWNhdGlvbnMuICovXG4rXHRcdFx0aWYgKHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpKSB7XG4rXHRcdFx0XHRhZGRlZCA9IHRydWU7XG4rXHRcdFx0XHR1c2VkX2NvdW50ID0gMDtcbitcdFx0XHR9XG4rXG4gXHRcdFx0LyogV2UgY2Fubm90IGZpbmlzaCB5ZXQgaWYgbW9yZSBidWZmZXJzIHNudWNrIGluIHdoaWxlXG4gXHRcdFx0ICogcmUtZW5hYmxpbmcgbm90aWZ5LlxuIFx0XHRcdCAqL1xuQEAgLTIzMCw4ICsyNjUsMTMgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdCAqL1xuIFx0XHR2aXJ0aW9fdHJhbnNwb3J0X2RlbGl2ZXJfdGFwX3BrdChza2IpO1xuIFxuLVx0XHR2aG9zdF9hZGRfdXNlZCh2cSwgaGVhZCwgc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW4pO1xuLVx0XHRhZGRlZCA9IHRydWU7XG4rXHRcdHZob3N0X3Zzb2NrX2FkZF91c2VkKHZxLCB1c2VkX2NvdW50LCBoZWFkLFxuK1x0XHRcdFx0ICAgICBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbik7XG4rXHRcdHVzZWRfY291bnQrKztcbitcdFx0aWYgKHVzZWRfY291bnQgPT0gdXNlZF9saW1pdCkge1xuK1x0XHRcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xuK1x0XHRcdHVzZWRfY291bnQgPSAwO1xuK1x0XHR9XG4gXG4gXHRcdFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgKz0gcGF5bG9hZF9sZW47XG4gXHRcdHRvdGFsX2xlbiArPSBwYXlsb2FkX2xlbjtcbkBAIC0yNjQsNiArMzA0LDkgQEAgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssXG4gXHRcdFx0dmlydGlvX3RyYW5zcG9ydF9jb25zdW1lX3NrYl9zZW50KHNrYiwgdHJ1ZSk7XG4gXHRcdH1cbiBcdH0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgKytwa3RzLCB0b3RhbF9sZW4pKSk7XG4rXG4rXHRhZGRlZCB8PSB2aG9zdF92c29ja19mbHVzaF91c2VkKHZxLCB1c2VkX2NvdW50KTtcbitcbiBcdGlmIChhZGRlZClcbiBcdFx0dmhvc3Rfc2lnbmFsKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdnEpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MTcuODY4OTkzNDE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0NDk0NDYyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdCB2c29jayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGNoYW5nZSBhbmQgaXRzIGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IHNpbmNlIGl0IHRvdWNoZXMgYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AuIFRoZSBmYWN0IHRoYXQgaXQncyBmb2N1c2luZyBvbiBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBpcyBjcnVjaWFsOyB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBwYWNrZXQgc2VuZGluZyBsb2dpYyByZXNpZGVzLlxuXG5NeSBhbmFseXNpcyB0ZWxscyBtZSB0aGUgZnVuZGFtZW50YWwgc2hpZnQgaXMgaW4gaG93IHRoZSB1c2VkIHJpbmcgaXMgdXBkYXRlZC4gSW5zdGVhZCBvZiB0aGUgdHlwaWNhbCwgaW1tZWRpYXRlIGB2aG9zdF9hZGRfdXNlZGAgY2FsbCBmb3IgZWFjaCBpbmRpdmlkdWFsIHBhY2tldCwgaXQgYXBwZWFycyB3ZSdyZSBub3cgKmJhdGNoaW5nKiB0aGVzZSB1cGRhdGVzIHdpdGggYHZob3N0X2FkZF91c2VkX25gLCB1c2luZyBgdnEtXHUwMDNlaGVhZHNgLCBgdnEtXHUwMDNlbmhlYWRzYCwgYW5kIGB2aG9zdF92c29ja19mbHVzaF91c2VkKClgIGFuZCBgdmhvc3RfdnNvY2tfYWRkX3VzZWQoKWAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBiYXRjaGluZyBjYW4gb2Z0ZW4gaW1wcm92ZSBwZXJmb3JtYW5jZSBieSByZWR1Y2luZyB0aGUgb3ZlcmhlYWQgb2YgcmVwZWF0ZWQgc3lzdGVtIGNhbGxzIG9yIG1lbW9yeSBiYXJyaWVycyByZWxhdGVkIHRvIHJpbmcgdXBkYXRlcy5cblxuTm93LCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgZGVlcGVyIGludmVzdGlnYXRpb24uIEkgd2FudCB0byBzZWUgKmhvdyogdGhpcyBgdmhvc3RfYWRkX3VzZWRfbmAgZnVuY3Rpb24sIGFuZCB0aGUgYHZxLVx1MDAzZWhlYWRzYCBhbmQgYHZxLVx1MDAzZW5oZWFkc2Agc3RydWN0dXJlcywgYXJlIHVzZWQgYWNyb3NzIHRoZSAqZW50aXJlKiBgZHJpdmVycy92aG9zdC9gIGRpcmVjdG9yeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIG5vdmVsIGFwcHJvYWNoIG9yIGlmIGl0J3MgYmFzZWQgb24gc29tZSBleGlzdGluZyBwYXR0ZXJuLiBJJ2xsIHByb2JhYmx5IGZpcmUgdXAgYGdyZXBwZXJgIChvciB1c2UgYHJlYWQtZmlsZWAgaW4gYSBwaW5jaCkgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGl0cyB1c2UuIFRoaXMgd2lsbCByZXZlYWwgaWYgdGhpcyBpcyBhIHN0YW5kYXJkIHZob3N0IGlkaW9tIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dCBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSBwYXRjaCdzIHBvdGVudGlhbCBiZW5lZml0cyBhbmQgZHJhd2JhY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MjYuMzE4NDQxOTk5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE2MTIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9hZGRfdXNlZF9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jPTMwMDg9aW50IHZob3N0X2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDE1LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDE2OlxcdHJldHVybiB2aG9zdF9hZGRfdXNlZF9uKHZxLCBcXHUwMDI2aGVhZHMsIFxcdTAwMjZuaGVhZHMsIDEpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDE3LX1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzAxOD1FWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9hZGRfdXNlZCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMTktXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwMjA6c3RhdGljIGludCBfX3Zob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwMjEtXFx0XFx0XFx0ICAgIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNTEtXFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMwNTI6c3RhdGljIGludCB2aG9zdF9hZGRfdXNlZF9uX29vbyhzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA1My1cXHRcXHRcXHRcXHRzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDYwLVxcdGlmIChuIFxcdTAwM2MgY291bnQpIHtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzA2MTpcXHRcXHRyID0gX192aG9zdF9hZGRfdXNlZF9uKHZxLCBoZWFkcywgbik7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjItXFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjYtXFx0fVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDY3OlxcdHJldHVybiBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBjb3VudCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMwNjgtfVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMDY5LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMDcwOnN0YXRpYyBpbnQgdmhvc3RfYWRkX3VzZWRfbl9pbl9vcmRlcihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzA3MS1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKmhlYWRzLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMTktICogd2FudCB0byBub3RpZnkgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqL1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTIwOmludCB2aG9zdF9hZGRfdXNlZF9uKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzEyMS1cXHRcXHQgICAgIHUxNiAqbmhlYWRzLCB1bnNpZ25lZCBjb3VudClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMTI2LVxcdGlmICghaW5fb3JkZXIgfHwgIW5oZWFkcylcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MzEyNzpcXHRcXHRyID0gdmhvc3RfYWRkX3VzZWRfbl9vb28odnEsIGhlYWRzLCBjb3VudCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMjgtXFx0ZWxzZVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzozMTI5OlxcdFxcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHZxLCBoZWFkcywgbmhlYWRzLCBjb3VudCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxMzAtXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzE1MC19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMxNTE6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfYWRkX3VzZWRfbik7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTMxNTItXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9MzIxMD12b2lkIHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMzIxNS17XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjMyMTY6XFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIG5oZWFkcywgY291bnQpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0zMjE3LVxcdHZob3N0X3NpZ25hbChkZXYsIHZxKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yNDg9aW50IHZob3N0X2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKiwgdW5zaWduZWQgaW50IGhlYWQsIGludCBsZW4pO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyNDk6aW50IHZob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICpoZWFkcyxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmgtMjUwLVxcdFxcdCAgICAgdTE2ICpuaGVhZHMsIHVuc2lnbmVkIGNvdW50KTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz0xMDY9c3RhdGljIGJvb2wgdmhvc3RfdnNvY2tfZmx1c2hfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMTEtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjExMjpcXHR2aG9zdF9hZGRfdXNlZF9uKHZxLCB2cS1cXHUwMDNlaGVhZHMsIHZxLVxcdTAwM2VuaGVhZHMsIHVzZWRfY291bnQpO1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMTMtXFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE4OjI2LjM2MzYwODU4N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODY4NjI5MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVmhvc3QgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgYHZob3N0X2FkZF91c2VkX25gIGFuZCwgYnkgZXh0ZW5zaW9uLCB0aGUgYHZxLVx1MDAzZWhlYWRzYCBhbmQgYHZxLVx1MDAzZW5oZWFkc2Agc3RydWN0dXJlcyBhcmUgYmVpbmcgdXRpbGl6ZWQgdGhyb3VnaG91dCB0aGUgYHZob3N0YCBkcml2ZXIgZWNvc3lzdGVtLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBoYW5kbGUgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIExldCdzIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgYmVzdCBzdGFydGluZyBwb2ludCBpcyB0byBmb2N1cyBvbiB3aGVyZSBgdnEtXHUwMDNlaGVhZHNgIGlzIGRpcmVjdGx5IGFjY2Vzc2VkLCBzaW5jZSBJJ20gY29uY2VybmVkIGFib3V0IGhvdyBpdCdzIGJlaW5nIHVzZWQuIFNvLCBJ4oCZbGwgbmVlZCB0byBkbyBhIGNvZGUgc2VhcmNoLiBJJ2xsIGluaXRpYXRlIGEgYGdyZXBgIGZvciBgdnEtXHUwMDNlaGVhZHNgIHdpdGhpbiB0aGUgYGRyaXZlcnMvdmhvc3RgIGRpcmVjdG9yeS4gVGhpcyBzaG91bGQgaGVscCBtZSBxdWlja2x5IGlkZW50aWZ5IHRoZSBsaW5lcyB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIGJlaW5nIHJlZmVyZW5jZWQsIGFsbG93aW5nIG1lIHRvIGV4cGxvcmUgdGhlIGNvbnRleHQgYW5kIHB1cnBvc2UgYmVoaW5kIGVhY2ggdXNlLWNhc2UuIFRoaXMgYXBwcm9hY2ggaXMgYSBzdHJhaWdodGZvcndhcmQgd2F5IHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjb2RlIGJhc2UuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGJ1aWxkIGEgbW9yZSBjb21wbGV4IHBpY3R1cmUgb2YgdGhlIHVzZS1jYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg0NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE4OjI4LjIzMjI0MDc0OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNzA4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnEtXFx1MDAzZWhlYWRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuYz0zNzI9c3RhdGljIHZvaWQgdmhvc3RfemVyb2NvcHlfc2lnbmFsX3VzZWQoc3RydWN0IHZob3N0X25ldCAqbmV0LFxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0zODAtXFx0Zm9yIChpID0gbnZxLVxcdTAwM2Vkb25lX2lkeDsgaSAhPSBudnEtXFx1MDAzZXVwZW5kX2lkeDsgaSA9IChpICsgMSkgJSBVSU9fTUFYSU9WKSB7XFxuZHJpdmVycy92aG9zdC9uZXQuYzozODE6XFx0XFx0aWYgKHZxLVxcdTAwM2VoZWFkc1tpXS5sZW4gPT0gVkhPU1RfRE1BX0ZBSUxFRF9MRU4pXFxuZHJpdmVycy92aG9zdC9uZXQuYy0zODItXFx0XFx0XFx0dmhvc3RfbmV0X3R4X2VycihuZXQpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MzgzOlxcdFxcdGlmIChWSE9TVF9ETUFfSVNfRE9ORSh2cS1cXHUwMDNlaGVhZHNbaV0ubGVuKSkge1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6Mzg0OlxcdFxcdFxcdHZxLVxcdTAwM2VoZWFkc1tpXS5sZW4gPSBWSE9TVF9ETUFfQ0xFQVJfTEVOO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMzg1LVxcdFxcdFxcdCsrajtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMzkxLVxcdFxcdHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbih2cS1cXHUwMDNlZGV2LCB2cSxcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjM5MjpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnZxLVxcdTAwM2VoZWFkc1tudnEtXFx1MDAzZWRvbmVfaWR4XSxcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTM5My1cXHRcXHRcXHRcXHRcXHQgICAgTlVMTCwgYWRkKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9Mzk5PXN0YXRpYyB2b2lkIHZob3N0X3plcm9jb3B5X2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTQxNi1cXHQvKiBzZXQgbGVuIHRvIG1hcmsgdGhpcyBkZXNjIGJ1ZmZlcnMgZG9uZSBETUEgKi9cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjQxNzpcXHR2cS1cXHUwMDNlaGVhZHNbdWJ1Zi1cXHUwMDNlZGVzY10ubGVuID0gc3VjY2VzcyA/XFxuZHJpdmVycy92aG9zdC9uZXQuYy00MTgtXFx0XFx0VkhPU1RfRE1BX0RPTkVfTEVOIDogVkhPU1RfRE1BX0ZBSUxFRF9MRU47XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTQ3NT1zdGF0aWMgdm9pZCB2aG9zdF9uZXRfc2lnbmFsX3VzZWQoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtNDgzLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6NDg0OlxcdHZob3N0X2FkZF91c2VkX2FuZF9zaWduYWxfbihkZXYsIHZxLCB2cS1cXHUwMDNlaGVhZHMsXFxuZHJpdmVycy92aG9zdC9uZXQuYy00ODUtXFx0XFx0XFx0XFx0ICAgIHZxLVxcdTAwM2VuaGVhZHMsIGNvdW50KTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9NDg5PXN0YXRpYyB2b2lkIHZob3N0X3R4X2JhdGNoKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtNTAzLVxcdGlmIChpbl9vcmRlcikge1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6NTA0OlxcdFxcdHZxLVxcdTAwM2VoZWFkc1swXS5sZW4gPSAwO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtNTA1LVxcdFxcdHZxLVxcdTAwM2VuaGVhZHNbMF0gPSBudnEtXFx1MDAzZWRvbmVfaWR4O1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz03NzA9c3RhdGljIHZvaWQgaGFuZGxlX3R4X2NvcHkoc3RydWN0IHZob3N0X25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy04NjEtXFx0XFx0aWYgKGluX29yZGVyKSB7XFxuZHJpdmVycy92aG9zdC9uZXQuYzo4NjI6XFx0XFx0XFx0dnEtXFx1MDAzZWhlYWRzWzBdLmlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtODYzLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy92aG9zdC9uZXQuYzo4NjQ6XFx0XFx0XFx0dnEtXFx1MDAzZWhlYWRzW252cS1cXHUwMDNlZG9uZV9pZHhdLmlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6ODY1OlxcdFxcdFxcdHZxLVxcdTAwM2VoZWFkc1tudnEtXFx1MDAzZWRvbmVfaWR4XS5sZW4gPSAwO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtODY2LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9ODczPXN0YXRpYyB2b2lkIGhhbmRsZV90eF96ZXJvY29weShzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTkyNC1cXHRcXHRcXHR1YnVmID0gbnZxLVxcdTAwM2V1YnVmX2luZm8gKyBudnEtXFx1MDAzZXVwZW5kX2lkeDtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjkyNTpcXHRcXHRcXHR2cS1cXHUwMDNlaGVhZHNbbnZxLVxcdTAwM2V1cGVuZF9pZHhdLmlkID0gY3B1X3RvX3Zob3N0MzIodnEsIGhlYWQpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6OTI2OlxcdFxcdFxcdHZxLVxcdTAwM2VoZWFkc1tudnEtXFx1MDAzZXVwZW5kX2lkeF0ubGVuID0gVkhPU1RfRE1BX0lOX1BST0dSRVNTO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtOTI3LVxcdFxcdFxcdHVidWYtXFx1MDAzZWN0eCA9IG52cS1cXHUwMDNldWJ1ZnM7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTk1NS1cXHRcXHRcXHRpZiAoemNvcHlfdXNlZCkge1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6OTU2OlxcdFxcdFxcdFxcdGlmICh2cS1cXHUwMDNlaGVhZHNbdWJ1Zi1cXHUwMDNlZGVzY10ubGVuID09IFZIT1NUX0RNQV9JTl9QUk9HUkVTUylcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTk1Ny1cXHRcXHRcXHRcXHRcXHR2aG9zdF9uZXRfdWJ1Zl9wdXQodWJ1ZnMpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy05NjEtXFx0XFx0XFx0XFx0ZWxzZVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6OTYyOlxcdFxcdFxcdFxcdFxcdHZxLVxcdTAwM2VoZWFkc1t1YnVmLVxcdTAwM2VkZXNjXS5sZW4gPSBWSE9TVF9ETUFfRE9ORV9MRU47XFxuZHJpdmVycy92aG9zdC9uZXQuYy05NjMtXFx0XFx0XFx0fVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xMTQ5PXN0YXRpYyB2b2lkIGhhbmRsZV9yeChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEyMDctXFx0XFx0dmhvc3RfbGVuID0gc29ja19sZW4gKyB2aG9zdF9obGVuO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTIwODpcXHRcXHRoZWFkY291bnQgPSBnZXRfcnhfYnVmcyhudnEsIHZxLVxcdTAwM2VoZWFkcyArIGNvdW50LFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTIwOS1cXHRcXHRcXHRcXHRcXHR2cS1cXHUwMDNlbmhlYWRzICsgY291bnQsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9NDk3PXN0YXRpYyB2b2lkIHZob3N0X3ZxX2ZyZWVfaW92ZWNzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTUwMi1cXHR2cS1cXHUwMDNlbG9nID0gTlVMTDtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NTAzOlxcdGtmcmVlKHZxLVxcdTAwM2VoZWFkcyk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjUwNDpcXHR2cS1cXHUwMDNlaGVhZHMgPSBOVUxMO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy01MDUtXFx0a2ZyZWUodnEtXFx1MDAzZW5oZWFkcyk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM9NTEwPXN0YXRpYyBsb25nIHZob3N0X2Rldl9hbGxvY19pb3ZlY3Moc3RydWN0IHZob3N0X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTUxOC1cXHRcXHR2cS1cXHUwMDNlbG9nID0ga21hbGxvY19vYmpzKCp2cS1cXHUwMDNlbG9nLCBkZXYtXFx1MDAzZWlvdl9saW1pdCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjUxOTpcXHRcXHR2cS1cXHUwMDNlaGVhZHMgPSBrbWFsbG9jX29ianMoKnZxLVxcdTAwM2VoZWFkcywgZGV2LVxcdTAwM2Vpb3ZfbGltaXQpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy01MjAtXFx0XFx0dnEtXFx1MDAzZW5oZWFkcyA9IGttYWxsb2NfYXJyYXkoZGV2LVxcdTAwM2Vpb3ZfbGltaXQsIHNpemVvZigqdnEtXFx1MDAzZW5oZWFkcyksXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTUyMS1cXHRcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NTIyOlxcdFxcdGlmICghdnEtXFx1MDAzZWluZGlyZWN0IHx8ICF2cS1cXHUwMDNlbG9nIHx8ICF2cS1cXHUwMDNlaGVhZHMgfHwgIXZxLVxcdTAwM2VuaGVhZHMpXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTUyMy1cXHRcXHRcXHRnb3RvIGVycl9ub21lbTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz01ODA9dm9pZCB2aG9zdF9kZXZfaW5pdChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNjEyLVxcdFxcdHZxLVxcdTAwM2VpbmRpcmVjdCA9IE5VTEw7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjYxMzpcXHRcXHR2cS1cXHUwMDNlaGVhZHMgPSBOVUxMO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy02MTQtXFx0XFx0dnEtXFx1MDAzZW5oZWFkcyA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTA2PXN0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTExLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMTI6XFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtXFx1MDAzZWhlYWRzLCB2cS1cXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTEzLVxcdHJldHVybiB0cnVlO1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTExNj1zdGF0aWMgdm9pZCB2aG9zdF92c29ja19hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMTkte1xcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMjA6XFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqdXNlZCA9IFxcdTAwMjZ2cS1cXHUwMDNlaGVhZHNbdXNlZF9jb3VudF07XFxuZHJpdmVycy92aG9zdC92c29jay5jLTEyMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MjguMjc4MzE3Nzk1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MjkzMjEyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHZob3N0X2FkZF91c2VkX24gYW5kIHZob3N0X3Zzb2NrX2FkZF91c2VkKipcblxuT2theSwgdGltZSB0byByZWFsbHkgZ2V0IGludG8gdGhlIHdlZWRzIG9uIHRoZXNlIGB2aG9zdGAgZnVuY3Rpb25zLiBJIHdhbnQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgdmhvc3RfYWRkX3VzZWRfbmAgYW5kIGB2aG9zdF92c29ja19hZGRfdXNlZGAgd29yayBpbnRlcm5hbGx5LiBNeSBhcHByb2FjaCBpcyB0byBsb29rIGF0IHRoZWlyIGltcGxlbWVudGF0aW9ucyBjbG9zZWx5LCBhbmQgSSdsbCBzdGFydCBieSByZWFkaW5nIHRoZSBjb2RlIGFyb3VuZCBlYWNoIGZ1bmN0aW9uLiBGb3IgYHZob3N0X2FkZF91c2VkX25gLCBJJ2xsIGJlIGxvb2tpbmcgaW4gYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AsIGZvY3VzaW5nIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIGl0cyBjb250ZXh0LiBUaGVuLCBJJ2xsIHN3aXRjaCBvdmVyIHRvIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIHRvIHNlZSBob3cgdGhlIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiwgYHZob3N0X3Zzb2NrX2FkZF91c2VkYCwgaXMgaW1wbGVtZW50ZWQgYW5kIGhvdyBpdCBkaWZmZXJzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZWlyIGludGVyYWN0aW9uIGFuZCB1c2FnZSB3aXRoaW4gdGhlIG92ZXJhbGwgYHZob3N0YCBmcmFtZXdvcmsuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTc2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MzAuODA3NjQyMTQ0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzAwMDpcXHR7XFxuMzAwMTpcXHRcXHR2cS1cXHUwMDNlbmV4dF9hdmFpbF9oZWFkIC09IG5kZXNjO1xcbjMwMDI6XFx0XFx0dnEtXFx1MDAzZWxhc3RfYXZhaWxfaWR4IC09IG5idWZzO1xcbjMwMDM6XFx0fVxcbjMwMDQ6XFx0RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGlzY2FyZF92cV9kZXNjKTtcXG4zMDA1OlxcdFxcbjMwMDY6XFx0LyogQWZ0ZXIgd2UndmUgdXNlZCBvbmUgb2YgdGhlaXIgYnVmZmVycywgd2UgdGVsbCB0aGVtIGFib3V0IGl0LiAgV2UnbGwgdGhlblxcbjMwMDc6XFx0ICogd2FudCB0byBub3RpZnkgdGhlIGd1ZXN0LCB1c2luZyBldmVudGZkLiAqL1xcbjMwMDg6XFx0aW50IHZob3N0X2FkZF91c2VkKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbilcXG4zMDA5OlxcdHtcXG4zMDEwOlxcdFxcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gaGVhZHMgPSB7XFxuMzAxMTpcXHRcXHRcXHRjcHVfdG9fdmhvc3QzMih2cSwgaGVhZCksXFxuMzAxMjpcXHRcXHRcXHRjcHVfdG9fdmhvc3QzMih2cSwgbGVuKVxcbjMwMTM6XFx0XFx0fTtcXG4zMDE0OlxcdFxcdHUxNiBuaGVhZHMgPSAxO1xcbjMwMTU6XFx0XFxuMzAxNjpcXHRcXHRyZXR1cm4gdmhvc3RfYWRkX3VzZWRfbih2cSwgXFx1MDAyNmhlYWRzLCBcXHUwMDI2bmhlYWRzLCAxKTtcXG4zMDE3OlxcdH1cXG4zMDE4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2FkZF91c2VkKTtcXG4zMDE5OlxcdFxcbjMwMjA6XFx0c3RhdGljIGludCBfX3Zob3N0X2FkZF91c2VkX24oc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuMzAyMTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuMzAyMjpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgY291bnQpXFxuMzAyMzpcXHR7XFxuMzAyNDpcXHRcXHR2cmluZ191c2VkX2VsZW1fdCBfX3VzZXIgKnVzZWQ7XFxuMzAyNTpcXHRcXHR1MTYgb2xkLCBuZXc7XFxuMzAyNjpcXHRcXHRpbnQgc3RhcnQ7XFxuMzAyNzpcXHRcXG4zMDI4OlxcdFxcdHN0YXJ0ID0gdnEtXFx1MDAzZWxhc3RfdXNlZF9pZHggXFx1MDAyNiAodnEtXFx1MDAzZW51bSAtIDEpO1xcbjMwMjk6XFx0XFx0dXNlZCA9IHZxLVxcdTAwM2V1c2VkLVxcdTAwM2VyaW5nICsgc3RhcnQ7XFxuMzAzMDpcXHRcXHRpZiAodmhvc3RfcHV0X3VzZWQodnEsIGhlYWRzLCBzdGFydCwgY291bnQpKSB7XFxuMzAzMTpcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYWlsZWQgdG8gd3JpdGUgdXNlZFxcXCIpO1xcbjMwMzI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMzAzMzpcXHRcXHR9XFxuMzAzNDpcXHRcXHRpZiAodW5saWtlbHkodnEtXFx1MDAzZWxvZ191c2VkKSkge1xcbjMwMzU6XFx0XFx0XFx0LyogTWFrZSBzdXJlIGRhdGEgaXMgc2VlbiBiZWZvcmUgbG9nLiAqL1xcbjMwMzY6XFx0XFx0XFx0c21wX3dtYigpO1xcbjMwMzc6XFx0XFx0XFx0LyogTG9nIHVzZWQgcmluZyBlbnRyeSB3cml0ZS4gKi9cXG4zMDM4OlxcdFxcdFxcdGxvZ191c2VkKHZxLCAoKHZvaWQgX191c2VyICopdXNlZCAtICh2b2lkIF9fdXNlciAqKXZxLVxcdTAwM2V1c2VkKSxcXG4zMDM5OlxcdFxcdFxcdFxcdCBjb3VudCAqIHNpemVvZiAqdXNlZCk7XFxuMzA0MDpcXHRcXHR9XFxuMzA0MTpcXHRcXHRvbGQgPSB2cS1cXHUwMDNlbGFzdF91c2VkX2lkeDtcXG4zMDQyOlxcdFxcdG5ldyA9ICh2cS1cXHUwMDNlbGFzdF91c2VkX2lkeCArPSBjb3VudCk7XFxuMzA0MzpcXHRcXHQvKiBJZiB0aGUgZHJpdmVyIG5ldmVyIGJvdGhlcnMgdG8gc2lnbmFsIGluIGEgdmVyeSBsb25nIHdoaWxlLFxcbjMwNDQ6XFx0XFx0ICogdXNlZCBpbmRleCBtaWdodCB3cmFwIGFyb3VuZC4gSWYgdGhhdCBoYXBwZW5zLCBpbnZhbGlkYXRlXFxuMzA0NTpcXHRcXHQgKiBzaWduYWxsZWRfdXNlZCBpbmRleCB3ZSBzdG9yZWQuIFRPRE86IG1ha2Ugc3VyZSBkcml2ZXJcXG4zMDQ2OlxcdFxcdCAqIHNpZ25hbHMgYXQgbGVhc3Qgb25jZSBpbiAyXjE2IGFuZCByZW1vdmUgdGhpcy4gKi9cXG4zMDQ3OlxcdFxcdGlmICh1bmxpa2VseSgodTE2KShuZXcgLSB2cS1cXHUwMDNlc2lnbmFsbGVkX3VzZWQpIFxcdTAwM2MgKHUxNikobmV3IC0gb2xkKSkpXFxuMzA0ODpcXHRcXHRcXHR2cS1cXHUwMDNlc2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTtcXG4zMDQ5OlxcdFxcdHJldHVybiAwO1xcbjMwNTA6XFx0fVxcbjMwNTE6XFx0XFxuMzA1MjpcXHRzdGF0aWMgaW50IHZob3N0X2FkZF91c2VkX25fb29vKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbjMwNTM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuMzA1NDpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBjb3VudClcXG4zMDU1OlxcdHtcXG4zMDU2OlxcdFxcdGludCBzdGFydCwgbiwgcjtcXG4zMDU3OlxcdFxcbjMwNTg6XFx0XFx0c3RhcnQgPSB2cS1cXHUwMDNlbGFzdF91c2VkX2lkeCBcXHUwMDI2ICh2cS1cXHUwMDNlbnVtIC0gMSk7XFxuMzA1OTpcXHRcXHRuID0gdnEtXFx1MDAzZW51bSAtIHN0YXJ0O1xcbjMwNjA6XFx0XFx0aWYgKG4gXFx1MDAzYyBjb3VudCkge1xcbjMwNjE6XFx0XFx0XFx0ciA9IF9fdmhvc3RfYWRkX3VzZWRfbih2cSwgaGVhZHMsIG4pO1xcbjMwNjI6XFx0XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbjMwNjM6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuMzA2NDpcXHRcXHRcXHRoZWFkcyArPSBuO1xcbjMwNjU6XFx0XFx0XFx0Y291bnQgLT0gbjtcXG4zMDY2OlxcdFxcdH1cXG4zMDY3OlxcdFxcdHJldHVybiBfX3Zob3N0X2FkZF91c2VkX24odnEsIGhlYWRzLCBjb3VudCk7XFxuMzA2ODpcXHR9XFxuMzA2OTpcXHRcXG4zMDcwOlxcdHN0YXRpYyBpbnQgdmhvc3RfYWRkX3VzZWRfbl9pbl9vcmRlcihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4zMDcxOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuMzA3MjpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHUxNiAqbmhlYWRzLFxcbjMwNzM6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBjb3VudClcXG4zMDc0OlxcdHtcXG4zMDc1OlxcdFxcdHZyaW5nX3VzZWRfZWxlbV90IF9fdXNlciAqdXNlZDtcXG4zMDc2OlxcdFxcdHUxNiBvbGQsIG5ldyA9IHZxLVxcdTAwM2VsYXN0X3VzZWRfaWR4O1xcbjMwNzc6XFx0XFx0aW50IHN0YXJ0LCBpO1xcbjMwNzg6XFx0XFxuMzA3OTpcXHRcXHRpZiAoIW5oZWFkcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MzAuODA3ODYzMTY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjE4MzAxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpdmluZyBpbnRvIHZob3N0X2FkZF91c2VkX25faW5fb3JkZXIgYW5kIHZob3N0X2FkZF91c2VkX24qKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIHByZWNpc2Ugcm9sZXMgd2l0aGluIHRoZSB2aG9zdCBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBob3cgYHZob3N0X2FkZF91c2VkX25faW5fb3JkZXJgIGFuZCBgdmhvc3RfYWRkX3VzZWRfbmAgaW50ZXJhY3QuIEkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgcGF5aW5nIHBhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIHRoZWlyIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLCBpZiBhbnkuIEknbGwgbmVlZCB0byByZW1lbWJlciBhbnkgc3VidGxlIGRpZmZlcmVuY2VzLCBhbmQgd2hpY2ggY29udGV4dCBzaG91bGQgYmUgcHJlZmVycmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODA3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODozMi44Njk2OTYwNDNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3Qvdmhvc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDgwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDgwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMwODE6XFx0XFxuMzA4MjpcXHRcXHRzdGFydCA9IHZxLVxcdTAwM2VsYXN0X3VzZWRfaWR4IFxcdTAwMjYgKHZxLVxcdTAwM2VudW0gLSAxKTtcXG4zMDgzOlxcdFxcdHVzZWQgPSB2cS1cXHUwMDNldXNlZC1cXHUwMDNlcmluZyArIHN0YXJ0O1xcbjMwODQ6XFx0XFxuMzA4NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKykge1xcbjMwODY6XFx0XFx0XFx0aWYgKHZob3N0X3B1dF91c2VkKHZxLCBcXHUwMDI2aGVhZHNbaV0sIHN0YXJ0LCAxKSkge1xcbjMwODc6XFx0XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmFpbGVkIHRvIHdyaXRlIHVzZWRcXFwiKTtcXG4zMDg4OlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjMwODk6XFx0XFx0XFx0fVxcbjMwOTA6XFx0XFx0XFx0c3RhcnQgKz0gbmhlYWRzW2ldO1xcbjMwOTE6XFx0XFx0XFx0bmV3ICs9IG5oZWFkc1tpXTtcXG4zMDkyOlxcdFxcdFxcdGlmIChzdGFydCBcXHUwMDNlPSB2cS1cXHUwMDNlbnVtKVxcbjMwOTM6XFx0XFx0XFx0XFx0c3RhcnQgLT0gdnEtXFx1MDAzZW51bTtcXG4zMDk0OlxcdFxcdH1cXG4zMDk1OlxcdFxcbjMwOTY6XFx0XFx0aWYgKHVubGlrZWx5KHZxLVxcdTAwM2Vsb2dfdXNlZCkpIHtcXG4zMDk3OlxcdFxcdFxcdC8qIE1ha2Ugc3VyZSBkYXRhIGlzIHNlZW4gYmVmb3JlIGxvZy4gKi9cXG4zMDk4OlxcdFxcdFxcdHNtcF93bWIoKTtcXG4zMDk5OlxcdFxcdFxcdC8qIExvZyB1c2VkIHJpbmcgZW50cnkgd3JpdGUuICovXFxuMzEwMDpcXHRcXHRcXHRsb2dfdXNlZCh2cSwgKCh2b2lkIF9fdXNlciAqKXVzZWQgLSAodm9pZCBfX3VzZXIgKil2cS1cXHUwMDNldXNlZCksXFxuMzEwMTpcXHRcXHRcXHRcXHQgKHZxLVxcdTAwM2VudW0gLSBzdGFydCkgKiBzaXplb2YgKnVzZWQpO1xcbjMxMDI6XFx0XFx0XFx0aWYgKHN0YXJ0ICsgY291bnQgXFx1MDAzZSB2cS1cXHUwMDNlbnVtKVxcbjMxMDM6XFx0XFx0XFx0XFx0bG9nX3VzZWQodnEsIDAsXFxuMzEwNDpcXHRcXHRcXHRcXHRcXHQgKHN0YXJ0ICsgY291bnQgLSB2cS1cXHUwMDNlbnVtKSAqIHNpemVvZiAqdXNlZCk7XFxuMzEwNTpcXHRcXHR9XFxuMzEwNjpcXHRcXG4zMTA3OlxcdFxcdG9sZCA9IHZxLVxcdTAwM2VsYXN0X3VzZWRfaWR4O1xcbjMxMDg6XFx0XFx0dnEtXFx1MDAzZWxhc3RfdXNlZF9pZHggPSBuZXc7XFxuMzEwOTpcXHRcXHQvKiBJZiB0aGUgZHJpdmVyIG5ldmVyIGJvdGhlcnMgdG8gc2lnbmFsIGluIGEgdmVyeSBsb25nIHdoaWxlLFxcbjMxMTA6XFx0XFx0ICogdXNlZCBpbmRleCBtaWdodCB3cmFwIGFyb3VuZC4gSWYgdGhhdCBoYXBwZW5zLCBpbnZhbGlkYXRlXFxuMzExMTpcXHRcXHQgKiBzaWduYWxsZWRfdXNlZCBpbmRleCB3ZSBzdG9yZWQuIFRPRE86IG1ha2Ugc3VyZSBkcml2ZXJcXG4zMTEyOlxcdFxcdCAqIHNpZ25hbHMgYXQgbGVhc3Qgb25jZSBpbiAyXjE2IGFuZCByZW1vdmUgdGhpcy4gKi9cXG4zMTEzOlxcdFxcdGlmICh1bmxpa2VseSgodTE2KShuZXcgLSB2cS1cXHUwMDNlc2lnbmFsbGVkX3VzZWQpIFxcdTAwM2MgKHUxNikobmV3IC0gb2xkKSkpXFxuMzExNDpcXHRcXHRcXHR2cS1cXHUwMDNlc2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTtcXG4zMTE1OlxcdFxcdHJldHVybiAwO1xcbjMxMTY6XFx0fVxcbjMxMTc6XFx0XFxuMzExODpcXHQvKiBBZnRlciB3ZSd2ZSB1c2VkIG9uZSBvZiB0aGVpciBidWZmZXJzLCB3ZSB0ZWxsIHRoZW0gYWJvdXQgaXQuICBXZSdsbCB0aGVuXFxuMzExOTpcXHQgKiB3YW50IHRvIG5vdGlmeSB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovXFxuMzEyMDpcXHRpbnQgdmhvc3RfYWRkX3VzZWRfbihzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSAqaGVhZHMsXFxuMzEyMTpcXHRcXHRcXHQgICAgIHUxNiAqbmhlYWRzLCB1bnNpZ25lZCBjb3VudClcXG4zMTIyOlxcdHtcXG4zMTIzOlxcdFxcdGJvb2wgaW5fb3JkZXIgPSB2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX0ZfSU5fT1JERVIpO1xcbjMxMjQ6XFx0XFx0aW50IHI7XFxuMzEyNTpcXHRcXG4zMTI2OlxcdFxcdGlmICghaW5fb3JkZXIgfHwgIW5oZWFkcylcXG4zMTI3OlxcdFxcdFxcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX29vbyh2cSwgaGVhZHMsIGNvdW50KTtcXG4zMTI4OlxcdFxcdGVsc2VcXG4zMTI5OlxcdFxcdFxcdHIgPSB2aG9zdF9hZGRfdXNlZF9uX2luX29yZGVyKHZxLCBoZWFkcywgbmhlYWRzLCBjb3VudCk7XFxuMzEzMDpcXHRcXG4zMTMxOlxcdFxcdGlmIChyIFxcdTAwM2MgMClcXG4zMTMyOlxcdFxcdFxcdHJldHVybiByO1xcbjMxMzM6XFx0XFxuMzEzNDpcXHRcXHQvKiBNYWtlIHN1cmUgYnVmZmVyIGlzIHdyaXR0ZW4gYmVmb3JlIHdlIHVwZGF0ZSBpbmRleC4gKi9cXG4zMTM1OlxcdFxcdHNtcF93bWIoKTtcXG4zMTM2OlxcdFxcdGlmICh2aG9zdF9wdXRfdXNlZF9pZHgodnEpKSB7XFxuMzEzNzpcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYWlsZWQgdG8gaW5jcmVtZW50IHVzZWQgaWR4XFxcIik7XFxuMzEzODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4zMTM5OlxcdFxcdH1cXG4zMTQwOlxcdFxcdGlmICh1bmxpa2VseSh2cS1cXHUwMDNlbG9nX3VzZWQpKSB7XFxuMzE0MTpcXHRcXHRcXHQvKiBNYWtlIHN1cmUgdXNlZCBpZHggaXMgc2VlbiBiZWZvcmUgbG9nLiAqL1xcbjMxNDI6XFx0XFx0XFx0c21wX3dtYigpO1xcbjMxNDM6XFx0XFx0XFx0LyogTG9nIHVzZWQgaW5kZXggdXBkYXRlLiAqL1xcbjMxNDQ6XFx0XFx0XFx0bG9nX3VzZWQodnEsIG9mZnNldG9mKHN0cnVjdCB2cmluZ191c2VkLCBpZHgpLFxcbjMxNDU6XFx0XFx0XFx0XFx0IHNpemVvZiB2cS1cXHUwMDNldXNlZC1cXHUwMDNlaWR4KTtcXG4zMTQ2OlxcdFxcdFxcdGlmICh2cS1cXHUwMDNlbG9nX2N0eClcXG4zMTQ3OlxcdFxcdFxcdFxcdGV2ZW50ZmRfc2lnbmFsKHZxLVxcdTAwM2Vsb2dfY3R4KTtcXG4zMTQ4OlxcdFxcdH1cXG4zMTQ5OlxcdFxcdHJldHVybiByO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODozMi44Njk5MjQ0MDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5NzYyNjMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgKipcblxuT2theSwgc28gd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB2c29jayBwYWNrZXRzIGFyZSBiZWluZyBzZW50LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0YCBmdW5jdGlvbi4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHBhY2tldCB0cmFuc21pc3Npb24gd2l0aGluIHRoZSB2aG9zdCBjb250ZXh0IHNob3VsZCByZXNpZGUuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBtZWNoYW5pc20gZm9yIHB1c2hpbmcgdGhlIGRhdGEgb250byB0aGUgdHJhbnNwb3J0IGxheWVyIHRoZXJlLiBJJ20gbG9va2luZyBmb3IgZGV0YWlscyByZWdhcmRpbmcgaG93IHRoZSBwYWNrZXQgZGF0YSBpcyBjb25zdHJ1Y3RlZCAob3IgcmVmZXJlbmNlZCksIGFueSBidWZmZXIgbWFuYWdlbWVudCBpbnZvbHZlZCwgYW5kLCBjcnVjaWFsbHksIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIHZpcnRpbyBsYXllci4gSSBhbnRpY2lwYXRlIHRoZXJlJ2xsIGJlIHNvbWUgZGF0YSBzdHJ1Y3R1cmUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIHZob3N0IHN0cnVjdHVyZSBmb3IgdnNvY2ssIHRoYXQgaG9sZHMgdGhlIHBhY2tldCBkZXRhaWxzLiBMZXQncyBzZWUgaWYgdGhlIGNvZGUgaW5jbHVkZXMgYW55IHBhY2tldCBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBhc3BlY3RzIG9yIGlmIGl0IHJlbGllcyBvbiBvdGhlciBjb21wb25lbnRzIGZvciB0aGF0IGZ1bmN0aW9uYWxpdHkuIEknbSBrZWVuIHRvIHNlZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYW55IHBvdGVudGlhbCBsb2NraW5nLCBhbmQgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBzZW5kIGZhaWx1cmVzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE4OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MzUuMzY3NTUzOTE0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMTAxOlxcdFxcdGZvdW5kID0gISF2aG9zdF92c29ja19nZXQoY2lkLCBuZXQpO1xcbiAxMDI6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDEwMzpcXHRcXHRyZXR1cm4gZm91bmQ7XFxuIDEwNDpcXHR9XFxuIDEwNTpcXHRcXG4gMTA2OlxcdHN0YXRpYyBib29sIHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXFxuIDEwNzpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudClcXG4gMTA4OlxcdHtcXG4gMTA5OlxcdFxcdGlmICghdXNlZF9jb3VudClcXG4gMTEwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0dmhvc3RfYWRkX3VzZWRfbih2cSwgdnEtXFx1MDAzZWhlYWRzLCB2cS1cXHUwMDNlbmhlYWRzLCB1c2VkX2NvdW50KTtcXG4gMTEzOlxcdFxcdHJldHVybiB0cnVlO1xcbiAxMTQ6XFx0fVxcbiAxMTU6XFx0XFxuIDExNjpcXHRzdGF0aWMgdm9pZCB2aG9zdF92c29ja19hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgdXNlZF9jb3VudCxcXG4gMTE4OlxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgaGVhZCwgdW5zaWduZWQgaW50IGxlbilcXG4gMTE5OlxcdHtcXG4gMTIwOlxcdFxcdHN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQgPSBcXHUwMDI2dnEtXFx1MDAzZWhlYWRzW3VzZWRfY291bnRdO1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHR1c2VkLVxcdTAwM2VpZCA9IGNwdV90b192aG9zdDMyKHZxLCBoZWFkKTtcXG4gMTIzOlxcdFxcdHVzZWQtXFx1MDAzZWxlbiA9IGNwdV90b192aG9zdDMyKHZxLCBsZW4pO1xcbiAxMjQ6XFx0XFx0dnEtXFx1MDAzZW5oZWFkc1t1c2VkX2NvdW50XSA9IDE7XFxuIDEyNTpcXHR9XFxuIDEyNjpcXHRcXG4gMTI3OlxcdHN0YXRpYyB2b2lkXFxuIDEyODpcXHR2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3Qoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jayxcXG4gMTI5OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4gMTMwOlxcdHtcXG4gMTMxOlxcdFxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR4X3ZxID0gXFx1MDAyNnZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfVFhdO1xcbiAxMzI6XFx0XFx0aW50IHBrdHMgPSAwLCB0b3RhbF9sZW4gPSAwO1xcbiAxMzM6XFx0XFx0dW5zaWduZWQgaW50IHVzZWRfY291bnQgPSAwO1xcbiAxMzQ6XFx0XFx0dW5zaWduZWQgaW50IHVzZWRfbGltaXQ7XFxuIDEzNTpcXHRcXHRib29sIGFkZGVkID0gZmFsc2U7XFxuIDEzNjpcXHRcXHRib29sIHJlc3RhcnRfdHggPSBmYWxzZTtcXG4gMTM3OlxcdFxcbiAxMzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0aWYgKCF2aG9zdF92cV9nZXRfYmFja2VuZCh2cSkpXFxuIDE0MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0aWYgKCF2cV9tZXRhX3ByZWZldGNoKHZxKSlcXG4gMTQ0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNDU6XFx0XFxuIDE0NjpcXHRcXHQvKiBLZWVwIHRoZSBiYXRjaCB3aXRoaW4gdGhlIHVzZWQgcmluZyBhbmQgdGhlIHNjcmF0Y2ggYXJyYXlzLiAqL1xcbiAxNDc6XFx0XFx0dXNlZF9saW1pdCA9IG1pbl90KHVuc2lnbmVkIGludCwgdnEtXFx1MDAzZW51bSwgdnEtXFx1MDAzZWRldi1cXHUwMDNlaW92X2xpbWl0KTtcXG4gMTQ4OlxcdFxcdGlmICh1bmxpa2VseSghdXNlZF9saW1pdCkpXFxuIDE0OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTUwOlxcdFxcbiAxNTE6XFx0XFx0LyogQXZvaWQgZnVydGhlciB2bWV4aXRzLCB3ZSdyZSBhbHJlYWR5IHByb2Nlc3NpbmcgdGhlIHZpcnRxdWV1ZSAqL1xcbiAxNTI6XFx0XFx0dmhvc3RfZGlzYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ZG8ge1xcbiAxNTU6XFx0XFx0XFx0c3RydWN0IHZpcnRpb192c29ja19oZHIgKmhkcjtcXG4gMTU2OlxcdFxcdFxcdHNpemVfdCBpb3ZfbGVuLCBwYXlsb2FkX2xlbjtcXG4gMTU3OlxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciBpb3ZfaXRlcjtcXG4gMTU4OlxcdFxcdFxcdHUzMiBmbGFnc190b19yZXN0b3JlID0gMDtcXG4gMTU5OlxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDE2MDpcXHRcXHRcXHR1bnNpZ25lZCBvdXQsIGluO1xcbiAxNjE6XFx0XFx0XFx0c2l6ZV90IG5ieXRlcztcXG4gMTYyOlxcdFxcdFxcdHUzMiBvZmZzZXQ7XFxuIDE2MzpcXHRcXHRcXHRpbnQgaGVhZDtcXG4gMTY0OlxcdFxcbiAxNjU6XFx0XFx0XFx0c2tiID0gdmlydGlvX3Zzb2NrX3NrYl9kZXF1ZXVlKFxcdTAwMjZ2c29jay1cXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRcXHRpZiAoIXNrYikge1xcbiAxNjg6XFx0XFx0XFx0XFx0dmhvc3RfZW5hYmxlX25vdGlmeShcXHUwMDI2dnNvY2stXFx1MDAzZWRldiwgdnEpO1xcbiAxNjk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE3MDpcXHRcXHRcXHR9XFxuIDE3MTpcXHRcXG4gMTcyOlxcdFxcdFxcdGhlYWQgPSB2aG9zdF9nZXRfdnFfZGVzYyh2cSwgdnEtXFx1MDAzZWlvdiwgQVJSQVlfU0laRSh2cS1cXHUwMDNlaW92KSxcXG4gMTczOlxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2b3V0LCBcXHUwMDI2aW4sIE5VTEwsIE5VTEwpO1xcbiAxNzQ6XFx0XFx0XFx0aWYgKGhlYWQgXFx1MDAzYyAwKSB7XFxuIDE3NTpcXHRcXHRcXHRcXHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcXG4gMTc2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNzc6XFx0XFx0XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHRcXHRpZiAoaGVhZCA9PSB2cS1cXHUwMDNlbnVtKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE5OjE4OjM1LjM2NzcwNTk4NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzE5ODQzMDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCB3YWxrdGhyb3VnaCwgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGUgc2VnbWVudDpcblxuKipEaXZpbmcgaW50byBgdnNvY2suY2Ag4oCTIExpbmVzIDE4MC0zMjAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBiYWNrIHRvIGl0LiBJJ20gZm9jdXNpbmcgaW4gb24gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2Agbm93LCBzcGVjaWZpY2FsbHkgYmV0d2VlbiBsaW5lcyAxODAgYW5kIDMyMC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB0byBjb3ZlciBzb21lIGNydWNpYWwgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvLCB3ZWxsLCBzb21ldGhpbmcgd2l0aGluIHRoZSB2c29jayBzdWJzeXN0ZW0uIEJhc2VkIG9uIHRoZSBmaWxlIG5hbWUsIGl0J3MgcHJvYmFibHkgaW52b2x2ZWQgd2l0aCB2aG9zdCBhbmQgdmlydGlvLXZzb2NrLiBJJ20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBwcm92aWRlIGRldGFpbHMgYWJvdXQgb25lIG9yIG1vcmUgb2Ygc2V2ZXJhbCBrZXkgYXJlYXM6IGRhdGEgdHJhbnNmZXJzLCByaW5nIGJ1ZmZlciBpbnRlcmFjdGlvbnMsIGNvbm5lY3Rpb24gc3RhdGUgbWFuYWdlbWVudCwgb3IgY29udHJvbCBwYXRoIHByb2Nlc3NpbmcuIEtub3dpbmcgdGhlIG92ZXJhbGwgY29udGV4dCBvZiB0aGUgY29kZSwgSSdsbCBiZSBwYXJ0aWN1bGFybHkgdmlnaWxhbnQgZm9yIGhvdyBpdCBkZWFscyB3aXRoIGRldmljZSBvcGVyYXRpb25zLCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3QuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgZmluZCEgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBhcmVhcyB0aGF0IG1heSBiZW5lZml0IGZyb20gb3B0aW1pemF0aW9uLCBvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGFyZSBoYW5kbGVkIChvciwgdW5mb3J0dW5hdGVseSwgKm5vdCogaGFuZGxlZCkuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBhcmUgc29tZSBpbnRlcmVzdGluZyBjb21wbGV4aXRpZXMgdG8gdW5jb3ZlciBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6MzcuNjg3NTUxNDM2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHRcXHRcXHR2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnZzb2NrLVxcdTAwM2VzZW5kX3BrdF9xdWV1ZSwgc2tiKTtcXG4gMTgxOlxcdFxcbiAxODI6XFx0XFx0XFx0XFx0LyogRmx1c2ggY29tcGxldGVkIGJ1ZmZlcnMgYmVmb3JlIHJlLWVuYWJsaW5nIG5vdGlmaWNhdGlvbnMuICovXFxuIDE4MzpcXHRcXHRcXHRcXHRpZiAodmhvc3RfdnNvY2tfZmx1c2hfdXNlZCh2cSwgdXNlZF9jb3VudCkpIHtcXG4gMTg0OlxcdFxcdFxcdFxcdFxcdGFkZGVkID0gdHJ1ZTtcXG4gMTg1OlxcdFxcdFxcdFxcdFxcdHVzZWRfY291bnQgPSAwO1xcbiAxODY6XFx0XFx0XFx0XFx0fVxcbiAxODc6XFx0XFxuIDE4ODpcXHRcXHRcXHRcXHQvKiBXZSBjYW5ub3QgZmluaXNoIHlldCBpZiBtb3JlIGJ1ZmZlcnMgc251Y2sgaW4gd2hpbGVcXG4gMTg5OlxcdFxcdFxcdFxcdCAqIHJlLWVuYWJsaW5nIG5vdGlmeS5cXG4gMTkwOlxcdFxcdFxcdFxcdCAqL1xcbiAxOTE6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KHZob3N0X2VuYWJsZV9ub3RpZnkoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKSkpIHtcXG4gMTkyOlxcdFxcdFxcdFxcdFxcdHZob3N0X2Rpc2FibGVfbm90aWZ5KFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2LCB2cSk7XFxuIDE5MzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMTk0OlxcdFxcdFxcdFxcdH1cXG4gMTk1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxOTY6XFx0XFx0XFx0fVxcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHRcXHRpZiAob3V0KSB7XFxuIDE5OTpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMjAwOlxcdFxcdFxcdFxcdHZxX2Vycih2cSwgXFxcIkV4cGVjdGVkIDAgb3V0cHV0IGJ1ZmZlcnMsIGdvdCAldVxcXFxuXFxcIiwgb3V0KTtcXG4gMjAxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMDI6XFx0XFx0XFx0fVxcbiAyMDM6XFx0XFxuIDIwNDpcXHRcXHRcXHRpb3ZfbGVuID0gaW92X2xlbmd0aChcXHUwMDI2dnEtXFx1MDAzZWlvdltvdXRdLCBpbik7XFxuIDIwNTpcXHRcXHRcXHRpZiAoaW92X2xlbiBcXHUwMDNjIHNpemVvZigqaGRyKSkge1xcbiAyMDY6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDIwNzpcXHRcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJCdWZmZXIgbGVuIFslenVdIHRvbyBzbWFsbFxcXFxuXFxcIiwgaW92X2xlbik7XFxuIDIwODpcXHRcXHRcXHRcXHRicmVhaztcXG4gMjA5OlxcdFxcdFxcdH1cXG4gMjEwOlxcdFxcbiAyMTE6XFx0XFx0XFx0aW92X2l0ZXJfaW5pdChcXHUwMDI2aW92X2l0ZXIsIElURVJfREVTVCwgXFx1MDAyNnZxLVxcdTAwM2Vpb3Zbb3V0XSwgaW4sIGlvdl9sZW4pO1xcbiAyMTI6XFx0XFx0XFx0b2Zmc2V0ID0gVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQ7XFxuIDIxMzpcXHRcXHRcXHRwYXlsb2FkX2xlbiA9IHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0O1xcbiAyMTQ6XFx0XFx0XFx0aGRyID0gdmlydGlvX3Zzb2NrX2hkcihza2IpO1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRcXHQvKiBJZiB0aGUgcGFja2V0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZVxcbiAyMTc6XFx0XFx0XFx0ICogYnVmZmVyLCB3ZSBzcGxpdCBpdCB1c2luZyBtdWx0aXBsZSBidWZmZXJzLlxcbiAyMTg6XFx0XFx0XFx0ICovXFxuIDIxOTpcXHRcXHRcXHRpZiAocGF5bG9hZF9sZW4gXFx1MDAzZSBpb3ZfbGVuIC0gc2l6ZW9mKCpoZHIpKSB7XFxuIDIyMDpcXHRcXHRcXHRcXHRwYXlsb2FkX2xlbiA9IGlvdl9sZW4gLSBzaXplb2YoKmhkcik7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdFxcdFxcdC8qIEFzIHdlIGFyZSBjb3B5aW5nIHBpZWNlcyBvZiBsYXJnZSBwYWNrZXQncyBidWZmZXIgdG9cXG4gMjIzOlxcdFxcdFxcdFxcdCAqIHNtYWxsIHJ4IGJ1ZmZlcnMsIGhlYWRlcnMgb2YgcGFja2V0cyBpbiByeCBxdWV1ZSBhcmVcXG4gMjI0OlxcdFxcdFxcdFxcdCAqIGNyZWF0ZWQgZHluYW1pY2FsbHkgYW5kIGFyZSBpbml0aWFsaXplZCB3aXRoIGhlYWRlclxcbiAyMjU6XFx0XFx0XFx0XFx0ICogb2YgY3VycmVudCBwYWNrZXQoZXhjZXB0IGxlbmd0aCkuIEJ1dCBpbiBjYXNlIG9mXFxuIDIyNjpcXHRcXHRcXHRcXHQgKiBTT0NLX1NFUVBBQ0tFVCwgd2UgYWxzbyBtdXN0IGNsZWFyIG1lc3NhZ2UgZGVsaW1ldGVyXFxuIDIyNzpcXHRcXHRcXHRcXHQgKiBiaXQgKFZJUlRJT19WU09DS19TRVFfRU9NKSBhbmQgTVNHX0VPUiBiaXRcXG4gMjI4OlxcdFxcdFxcdFxcdCAqIChWSVJUSU9fVlNPQ0tfU0VRX0VPUikgaWYgc2V0LiBPdGhlcndpc2UsXFxuIDIyOTpcXHRcXHRcXHRcXHQgKiB0aGVyZSB3aWxsIGJlIHNlcXVlbmNlIG9mIHBhY2tldHMgd2l0aCB0aGVzZVxcbiAyMzA6XFx0XFx0XFx0XFx0ICogYml0cyBzZXQuIEFmdGVyIGluaXRpYWxpemVkIGhlYWRlciB3aWxsIGJlIGNvcGllZCB0b1xcbiAyMzE6XFx0XFx0XFx0XFx0ICogcnggYnVmZmVyLCB0aGVzZSByZXF1aXJlZCBiaXRzIHdpbGwgYmUgcmVzdG9yZWQuXFxuIDIzMjpcXHRcXHRcXHRcXHQgKi9cXG4gMjMzOlxcdFxcdFxcdFxcdGlmIChsZTMyX3RvX2NwdShoZHItXFx1MDAzZWZsYWdzKSBcXHUwMDI2IFZJUlRJT19WU09DS19TRVFfRU9NKSB7XFxuIDIzNDpcXHRcXHRcXHRcXHRcXHRoZHItXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5jcHVfdG9fbGUzMihWSVJUSU9fVlNPQ0tfU0VRX0VPTSk7XFxuIDIzNTpcXHRcXHRcXHRcXHRcXHRmbGFnc190b19yZXN0b3JlIHw9IFZJUlRJT19WU09DS19TRVFfRU9NO1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHRcXHRcXHRcXHRpZiAobGUzMl90b19jcHUoaGRyLVxcdTAwM2VmbGFncykgXFx1MDAyNiBWSVJUSU9fVlNPQ0tfU0VRX0VPUikge1xcbiAyMzg6XFx0XFx0XFx0XFx0XFx0XFx0aGRyLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+Y3B1X3RvX2xlMzIoVklSVElPX1ZTT0NLX1NFUV9FT1IpO1xcbiAyMzk6XFx0XFx0XFx0XFx0XFx0XFx0ZmxhZ3NfdG9fcmVzdG9yZSB8PSBWSVJUSU9fVlNPQ0tfU0VRX0VPUjtcXG4gMjQwOlxcdFxcdFxcdFxcdFxcdH1cXG4gMjQxOlxcdFxcdFxcdFxcdH1cXG4gMjQyOlxcdFxcdFxcdH1cXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0XFx0LyogU2V0IHRoZSBjb3JyZWN0IGxlbmd0aCBpbiB0aGUgaGVhZGVyICovXFxuIDI0NTpcXHRcXHRcXHRoZHItXFx1MDAzZWxlbiA9IGNwdV90b19sZTMyKHBheWxvYWRfbGVuKTtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0XFx0bmJ5dGVzID0gY29weV90b19pdGVyKGhkciwgc2l6ZW9mKCpoZHIpLCBcXHUwMDI2aW92X2l0ZXIpO1xcbiAyNDg6XFx0XFx0XFx0aWYgKG5ieXRlcyAhPSBzaXplb2YoKmhkcikpIHtcXG4gMjQ5OlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAyNTA6XFx0XFx0XFx0XFx0dnFfZXJyKHZxLCBcXFwiRmF1bHRlZCBvbiBjb3B5aW5nIHBrdCBoZHJcXFxcblxcXCIpO1xcbiAyNTE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI1MjpcXHRcXHRcXHR9XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdFxcdGlmIChza2JfY29weV9kYXRhZ3JhbV9pdGVyKHNrYixcXG4gMjU1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCxcXG4gMjU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZpb3ZfaXRlcixcXG4gMjU3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHBheWxvYWRfbGVuKSkge1xcbiAyNTg6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDI1OTpcXHRcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYXVsdGVkIG9uIGNvcHlpbmcgcGt0IGJ1ZlxcXFxuXFxcIik7XFxuIDI2MDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMjYxOlxcdFxcdFxcdH1cXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0XFx0LyogRGVsaXZlciB0byBtb25pdG9yaW5nIGRldmljZXMgYWxsIHBhY2tldHMgdGhhdCB3ZVxcbiAyNjQ6XFx0XFx0XFx0ICogd2lsbCB0cmFuc21pdC5cXG4gMjY1OlxcdFxcdFxcdCAqL1xcbiAyNjY6XFx0XFx0XFx0dmlydGlvX3RyYW5zcG9ydF9kZWxpdmVyX3RhcF9wa3Qoc2tiKTtcXG4gMjY3OlxcdFxcbiAyNjg6XFx0XFx0XFx0dmhvc3RfdnNvY2tfYWRkX3VzZWQodnEsIHVzZWRfY291bnQsIGhlYWQsXFxuIDI2OTpcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqaGRyKSArIHBheWxvYWRfbGVuKTtcXG4gMjcwOlxcdFxcdFxcdHVzZWRfY291bnQrKztcXG4gMjcxOlxcdFxcdFxcdGlmICh1c2VkX2NvdW50ID09IHVzZWRfbGltaXQpIHtcXG4gMjcyOlxcdFxcdFxcdFxcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xcbiAyNzM6XFx0XFx0XFx0XFx0dXNlZF9jb3VudCA9IDA7XFxuIDI3NDpcXHRcXHRcXHR9XFxuIDI3NTpcXHRcXG4gMjc2OlxcdFxcdFxcdFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cXHUwMDNlb2Zmc2V0ICs9IHBheWxvYWRfbGVuO1xcbiAyNzc6XFx0XFx0XFx0dG90YWxfbGVuICs9IHBheWxvYWRfbGVuO1xcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHRcXHQvKiBJZiB3ZSBkaWRuJ3Qgc2VuZCBhbGwgdGhlIHBheWxvYWQgd2UgY2FuIHJlcXVldWUgdGhlIHBhY2tldFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODozNy42ODc2NzQxOTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM5MzQ0Njk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB2c29jay5jOiBMaW5lIENoZWNrKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBgZHJpdmVycy92aG9zdC92c29jay5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGxpbmVzIDI4MCB0byAzMjAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFdoYXQncyBoYXBwZW5pbmcgaW4gdGhpcyBzZWN0aW9uIG9mIGNvZGU/IElzIGl0IHJlbGF0ZWQgdG8gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBkYXRhIHRyYW5zZmVyLCBlcnJvciBoYW5kbGluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEdpdmVuIHRoZSBtb2R1bGUsIGl0J3MgaGlnaGx5IGxpa2VseSB3ZSBhcmUgZGVhbGluZyB3aXRoIHRoZSB2aG9zdC12c29jayBzZXR1cCwgYnV0IHdpdGhvdXQgbW9yZSBjb250ZXh0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGlzIHVua25vd24uXG5cbkknbSBwcm9iYWJseSBhZnRlciBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBhIHN1YnRsZSBidWcsIG9yIGFuIGFyZWEgZm9yIG9wdGltaXphdGlvbi4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zLCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIGFuZCBhbnkgcG90ZW50aWFsbHkgY29tcGxleCBsb2dpYyB3aXRoaW4gdGhpcyByYW5nZS4gTWF5YmUgdGhlcmUncyBhIGxvY2sgY29udGVudGlvbiBpc3N1ZSwgYW4gaW5lZmZpY2llbnQgbWVtb3J5IGFsbG9jYXRpb24sIG9yIGEgcmFjZSBjb25kaXRpb24gbHVya2luZyB3aXRoaW4gdGhvc2UgbGluZXMuIFBlcmhhcHMgdGhlcmUncyBhbiBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB2aXJ0aW8gcXVldWVzIG9yIHRoZSBndWVzdC1zaWRlIHZzb2NrIGRyaXZlciB0aGF0J3Mgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIGFueSBmdW5jdGlvbiBjYWxscywgY29tbWVudHMgKGlmIGFueSEpLCBhbmQgdmFyaWFibGUgbmFtZXMuIEkgbmVlZCB0byByZWZyZXNoIHRoZSBpbm5lciB3b3JraW5ncyBvZiB2c29jayBmb3IgdGhpcyBtb2R1bGUgYW5kIGlkZW50aWZ5IHdoZXJlIHRoaXMgY29kZSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6NDAuMDgxMTI0NTk0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjgwOlxcdFxcdFxcdCAqIHRvIHNlbmQgaXQgd2l0aCB0aGUgbmV4dCBhdmFpbGFibGUgYnVmZmVyLlxcbiAyODE6XFx0XFx0XFx0ICovXFxuIDI4MjpcXHRcXHRcXHRpZiAoVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQgXFx1MDAzYyBza2ItXFx1MDAzZWxlbikge1xcbiAyODM6XFx0XFx0XFx0XFx0aGRyLVxcdTAwM2VmbGFncyB8PSBjcHVfdG9fbGUzMihmbGFnc190b19yZXN0b3JlKTtcXG4gMjg0OlxcdFxcbiAyODU6XFx0XFx0XFx0XFx0LyogV2UgYXJlIHF1ZXVlaW5nIHRoZSBzYW1lIHNrYiB0byBoYW5kbGVcXG4gMjg2OlxcdFxcdFxcdFxcdCAqIHRoZSByZW1haW5pbmcgYnl0ZXMsIGFuZCB3ZSB3YW50IHRvIGRlbGl2ZXIgaXRcXG4gMjg3OlxcdFxcdFxcdFxcdCAqIHRvIG1vbml0b3JpbmcgZGV2aWNlcyBpbiB0aGUgbmV4dCBpdGVyYXRpb24uXFxuIDI4ODpcXHRcXHRcXHRcXHQgKi9cXG4gMjg5OlxcdFxcdFxcdFxcdHZpcnRpb192c29ja19za2JfY2xlYXJfdGFwX2RlbGl2ZXJlZChza2IpO1xcbiAyOTA6XFx0XFx0XFx0XFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV9oZWFkKFxcdTAwMjZ2c29jay1cXHUwMDNlc2VuZF9wa3RfcXVldWUsIHNrYik7XFxuIDI5MTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyOTI6XFx0XFx0XFx0XFx0aWYgKHZpcnRpb192c29ja19za2JfcmVwbHkoc2tiKSkge1xcbiAyOTM6XFx0XFx0XFx0XFx0XFx0aW50IHZhbDtcXG4gMjk0OlxcdFxcbiAyOTU6XFx0XFx0XFx0XFx0XFx0dmFsID0gYXRvbWljX2RlY19yZXR1cm4oXFx1MDAyNnZzb2NrLVxcdTAwM2VxdWV1ZWRfcmVwbGllcyk7XFxuIDI5NjpcXHRcXG4gMjk3OlxcdFxcdFxcdFxcdFxcdC8qIERvIHdlIGhhdmUgcmVzb3VyY2VzIHRvIHJlc3VtZSB0eFxcbiAyOTg6XFx0XFx0XFx0XFx0XFx0ICogcHJvY2Vzc2luZz9cXG4gMjk5OlxcdFxcdFxcdFxcdFxcdCAqL1xcbiAzMDA6XFx0XFx0XFx0XFx0XFx0aWYgKHZhbCArIDEgPT0gdHhfdnEtXFx1MDAzZW51bSlcXG4gMzAxOlxcdFxcdFxcdFxcdFxcdFxcdHJlc3RhcnRfdHggPSB0cnVlO1xcbiAzMDI6XFx0XFx0XFx0XFx0fVxcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X2NvbnN1bWVfc2tiX3NlbnQoc2tiLCB0cnVlKTtcXG4gMzA1OlxcdFxcdFxcdH1cXG4gMzA2OlxcdFxcdH0gd2hpbGUobGlrZWx5KCF2aG9zdF9leGNlZWRzX3dlaWdodCh2cSwgKytwa3RzLCB0b3RhbF9sZW4pKSk7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdGFkZGVkIHw9IHZob3N0X3Zzb2NrX2ZsdXNoX3VzZWQodnEsIHVzZWRfY291bnQpO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRpZiAoYWRkZWQpXFxuIDMxMTpcXHRcXHRcXHR2aG9zdF9zaWduYWwoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHZxKTtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0b3V0OlxcbiAzMTQ6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRpZiAocmVzdGFydF90eClcXG4gMzE3OlxcdFxcdFxcdHZob3N0X3BvbGxfcXVldWUoXFx1MDAyNnR4X3ZxLVxcdTAwM2Vwb2xsKTtcXG4gMzE4OlxcdH1cXG4gMzE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxOToxODo0MC4wODEyMzUzMDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk3MjMwNzQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBbmFseXNpczogdmhvc3QtdnNvY2sgUGF0Y2ggUmV2aWV3KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHZob3N0LXZzb2NrIHBhdGNoIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBLTVNBTi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBtZXRpY3Vsb3VzbHkgdHJhY2UgdGhlIGRhdGEgZmxvdyBhbmQgaW5pdGlhbGl6YXRpb24gdG8gY29uZmlkZW50bHkgcnVsZSBvdXQgYW55IEtNU0FOLXJlbGF0ZWQgY29uY2VybnMuXG5cbkkgc2VlIG5ldyBmdW5jdGlvbnMgYmVpbmcgYWRkZWQ6IGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBhbmQgYHZob3N0X3Zzb2NrX2FkZF91c2VkYC4gVGhlIHB1cnBvc2UgaXMgY2xlYXJseSB0byBtYW5hZ2UgdGhlIGB1c2VkYCByaW5nLCBhY2N1bXVsYXRpbmcgZW50cmllcyAoZGVzY3JpcHRvciBJRHMgYW5kIGxlbmd0aHMpIGFuZCB0aGVuIHdyaXRpbmcgdGhlbSBvdXQgdG8gdGhlIGd1ZXN0LiBUaGUgYHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdGAgZnVuY3Rpb24gbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgZGF0YSB0cmFuc21pc3Npb24gbG9naWMsIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZC5cblxuTG9va2luZyBjbG9zZWx5IGF0IGB2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3RgLCBJJ20gdHJhY2tpbmcgdGhlIGB1c2VkX2NvdW50YCB2YXJpYWJsZS4gSXQncyBpbmNyZW1lbnRlZCBmb3IgZWFjaCBwYWNrZXQsIGFuZCB1c2VkIHRvIGluZGV4IGludG8gYHZxLVx1MDAzZWhlYWRzYCAoYW4gYXJyYXkgb2YgYHZyaW5nX3VzZWRfZWxlbWAgc3RydWN0dXJlcykgYW5kIGB2cS1cdTAwM2VuaGVhZHNgIChhbiBhcnJheSBvZiBmbGFncykuICBDcnVjaWFsbHksIEkgY29uZmlybSB0aGF0IGVhY2ggZWxlbWVudCBvZiBgdnEtXHUwMDNlaGVhZHNgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYGlkYCBhbmQgYGxlbmAgdmFsdWVzIHZpYSBgdmhvc3RfdnNvY2tfYWRkX3VzZWRgIGJlZm9yZSB0aGUgYHVzZWRfY291bnRgIGlzIGluY3JlbWVudGVkLiAgVGhlIGB2aG9zdF92c29ja19mbHVzaF91c2VkYCBmdW5jdGlvbiBpcyB0aGVuIHRyaWdnZXJlZCBlaXRoZXIgd2hlbiBhIGxpbWl0IGlzIHJlYWNoZWQgb3IgYXQgdGhlIGVuZCBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCB0aGF0IHdyaXRlcyB0aGUgYWNjdW11bGF0ZWQgZW50cmllcyBvdXQgdG8gdGhlIGd1ZXN0J3MgdXNlZCByaW5nLlxuXG5Ob3csIHRoZSBwb3RlbnRpYWwgS01TQU4gcGl0ZmFsbHMuICBXZSBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGFuZCB3aGVyZSB0aGUgZ3Vlc3QgY2FuIHBvdGVudGlhbGx5IG9ic2VydmUgdGhlIGRhdGEgd2l0aGluIHRoZXNlIHN0cnVjdHVyZXMuICBJIGlkZW50aWZ5IHRoYXQgYHZxLVx1MDAzZWhlYWRzYCBpcyB1bHRpbWF0ZWx5IHdyaXR0ZW4gdG8gdXNlcnNwYWNlICh0aGUgZ3Vlc3QncyBtZW1vcnkpIHZpYSBgdmhvc3RfcHV0X3VzZWRgLiBCdXQsIGJlY2F1c2Ugb2YgdGhlIHN0cmljdCBpbml0aWFsaXphdGlvbiwgdGhlIHVzZXIgc3BhY2UgbWVtb3J5IGlzIGFsd2F5cyB3cml0dGVuIHdpdGggaW5pdGlhbGl6ZWQgZGF0YS5cblxuSSdtIGZvY3VzZWQgb24gdGhlIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCB3aGljaCBpcyB1c2VkIGZvciB0aGUgYGhlYWRzYCBhcnJheS4gSXQgaXMgdGhlIGNydWNpYWwgc3RydWN0IGZvciB0aGUgd3JpdGUgdG8gdGhlIGd1ZXN0J3MgbWVtb3J5LiAgSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdHJ1Y3R1cmU6IHR3byAzMi1iaXQgaW50ZWdlcnMsIGBpZGAgYW5kIGBsZW5gLCB3aXRoIG5vIHBhZGRpbmcuIFRoZSBjb2RlIGV4cGxpY2l0bHkgYXNzaWducyB2YWx1ZXMgdG8gYm90aCBgaWRgIGFuZCBgbGVuYCBiZWZvcmUgYW55IHBvdGVudGlhbCB1c2VyLXNwYWNlIGV4cG9zdXJlLiBUaGUgYHZxLVx1MDAzZW5oZWFkc2AgYXJyYXkgaXMgYSBzaW1wbGUgY291bnRlciBhcnJheSB3aGljaCB0cmFja3MgaWYgYSBoZWFkIGVsZW1lbnQgaGFzIGJlZW4gcG9wdWxhdGVkLCBzbyB0aGlzIHNob3VsZCBhbHNvIGJlIHNhZmVseSBpbml0aWFsaXplZC5cblxuV2UncmUgZXhwbGljaXRseSBpbml0aWFsaXppbmcgZXZlcnl0aGluZy4gVGhlIGNvZGUgZW5zdXJlcyBib3VuZHMgY2hlY2tzIGFuZCBsaW1pdHMgb24gYHVzZWRfY291bnRgIHZpYSBgdXNlZF9saW1pdGAuIEknbSBjaGVja2luZyBmb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGVyZSBhcmVuJ3QgYW55LiBJJ20gbG9va2luZyBmb3IgYWxsb2NhdGlvbnMgb3IgY29waWVzIG9mIHN0cnVjdHVyZXMgd2hlcmUgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgY29waWVkLCBidXQgSSBkbyBub3Qgc2VlIGFueS4gVGhlcmUncyBub3RoaW5nIGJlaW5nIGNvcGllZCBvdXQgdG8gdXNlciBzcGFjZSB0aGF0J3MgcGFydGlhbGx5IGluaXRpYWxpemVkLlxuXG5TbywgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYTpcblxuMS4gICoqU3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmc6KiogIGBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtYCBoYXMgbm8gcGFkZGluZyBhbmQgdGhlIGBpZGAgYW5kIGBsZW5gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkICpiZWZvcmUqIHRoZSBkYXRhIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiAgTm8gaXNzdWVzIGhlcmUuXG5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vcGUuIEV2ZXJ5dGhpbmcgaXMgZXhwbGljaXQuXG5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyByZWFkIGxhdGVyOioqICBOb3QgQXBwbGljYWJsZS4gRXZlcnl0aGluZyBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLlxuXG40LiAgKipCb3VuZHMgY2hlY2tzLCBldGMuLCB0aGF0IG1pZ2h0IGxlYWQgdG8gYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqIE5vdCBBcHBsaWNhYmxlLiBUaGUgY29kZSB1c2VzIGB1c2VkX2xpbWl0YCB0byBwcmV2ZW50IGV4Y2VlZGluZyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXlzLCBhbmQgYHVzZWRfY291bnRgIGlzIHN0cmljdGx5IGluY3JlbWVudGVkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBhcHBlYXIgdG8gaW50cm9kdWNlIEtNU0FOIHZ1bG5lcmFiaWxpdGllcy4gVGhlIHBvdGVudGlhbCByaXNrcyBoZXJlIGFyZSBpbiBib3VuZHMgb3ZlcmZsb3cgKHdoaWNoIEtBU0FOIHdvdWxkIGNhdGNoKSBvciBpbiBsb2dpYyBlcnJvcnMgKHJhY2VzLCBtaXNzZWQgbm90aWZpY2F0aW9ucywgdmlydGlvIHByb3RvY29sIGlzc3VlcyksIGJ1dCBub25lIG9mIHRob3NlIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOJ3MgcHVycG9zZSBpcyB0byBjYXRjaCB0aGUgbGF0dGVyLiBXZSBoYXZlIHNhZmUgaW5pdGlhbGl6ZWQgZGF0YSwgc28gdGhlIHJpc2sgaXMgbmlsLiBJJ20gY29tZm9ydGFibGUgc2F5aW5nIHRoYXQgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAgaGVyZSwgYW5kIEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhhdCwgYWxvbmcgd2l0aCBhIGNsZWFyLCBkZXRhaWxlZCBleHBsYW5hdGlvbiBkaXN0aW5ndWlzaGluZyBLTVNBTiBmcm9tIEtBU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU3NywiT3V0cHV0VG9rZW5zIjozMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTk6MTg6NDkuMDUzNTQ1NDYzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGJhdGNoaW5nIG9mIHVzZWQgcmluZyB1cGRhdGVzIGluIHZob3N0LXZzb2NrICh2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QpIGJ5IGFjY3VtdWxhdGluZyB1c2VkIGRlc2NyaXB0b3JzIGluIHRoZSBwcmVhbGxvY2F0ZWQgdmlydHF1ZXVlIGFycmF5cyAodnEtXFx1MDAzZWhlYWRzIGFuZCB2cS1cXHUwMDNlbmhlYWRzKSBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgdmhvc3RfYWRkX3VzZWRfbigpIGluc3RlYWQgb2YgaW5kaXZpZHVhbCB2aG9zdF9hZGRfdXNlZCgpIGNhbGxzLlxcblxcbi0gS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4gIDEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrOiBFYWNoIHVzZWQgZGVzY3JpcHRvciBlbGVtZW50IGluIHZxLVxcdTAwM2VoZWFkcyAoc3RydWN0IHZyaW5nX3VzZWRfZWxlbSkgY29udGFpbnMgb25seSB0d28gMzItYml0IGZpZWxkcyAoaWQgYW5kIGxlbikgd2l0aG91dCBhbnkgc3RydWN0dXJlIHBhZGRpbmcuIEJvdGggZmllbGRzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB2cS1cXHUwMDNlbmhlYWRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHZob3N0X3Zzb2NrX2FkZF91c2VkKCkgZm9yIGVhY2ggaW5kZXggYmVmb3JlIGJlaW5nIGZsdXNoZWQgYW5kIGNvcGllZCB0byB0aGUgZ3Vlc3QncyB1c2VkIHJpbmcgdmlhIHZob3N0X3B1dF91c2VkKCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGlzIHJlYWQgb3IgbGVha2VkLlxcbiAgMi4gTWVtb3J5IEJvdW5kcyBhbmQgSW50ZWdyaXR5OiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gYXJyYXkgaW5kZXhpbmcsIGJvdW5kcyBsaW1pdHMgKHZxLVxcdTAwM2VkZXYtXFx1MDAzZWlvdl9saW1pdCksIG9yIHZpcnRxdWV1ZSBzeW5jaHJvbml6YXRpb24gbG9naWMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChmb3Igb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcyksIGFuZCB2aXJ0aW8gcHJvdG9jb2wgY2hlY2tzLlxcblxcblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGJhdGNoaW5nIG9mIHVzZWQgcmluZyB1cGRhdGVzIGluIHZob3N0LXZzb2NrICh2aG9zdF90cmFuc3BvcnRfZG9fc2VuZF9wa3QpIGJ5IGFjY3VtdWxhdGluZyB1c2VkIGRlc2NyaXB0b3JzIGluIHRoZSBwcmVhbGxvY2F0ZWQgdmlydHF1ZXVlIGFycmF5cyAodnEtXFx1MDAzZWhlYWRzIGFuZCB2cS1cXHUwMDNlbmhlYWRzKSBhbmQgZmx1c2hpbmcgdGhlbSB2aWEgdmhvc3RfYWRkX3VzZWRfbigpIGluc3RlYWQgb2YgaW5kaXZpZHVhbCB2aG9zdF9hZGRfdXNlZCgpIGNhbGxzLlxcblxcbi0gS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4gIDEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrOiBFYWNoIHVzZWQgZGVzY3JpcHRvciBlbGVtZW50IGluIHZxLVxcdTAwM2VoZWFkcyAoc3RydWN0IHZyaW5nX3VzZWRfZWxlbSkgY29udGFpbnMgb25seSB0d28gMzItYml0IGZpZWxkcyAoaWQgYW5kIGxlbikgd2l0aG91dCBhbnkgc3RydWN0dXJlIHBhZGRpbmcuIEJvdGggZmllbGRzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB2cS1cXHUwMDNlbmhlYWRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIHZob3N0X3Zzb2NrX2FkZF91c2VkKCkgZm9yIGVhY2ggaW5kZXggYmVmb3JlIGJlaW5nIGZsdXNoZWQgYW5kIGNvcGllZCB0byB0aGUgZ3Vlc3QncyB1c2VkIHJpbmcgdmlhIHZob3N0X3B1dF91c2VkKCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhIGlzIHJlYWQgb3IgbGVha2VkLlxcbiAgMi4gTWVtb3J5IEJvdW5kcyBhbmQgSW50ZWdyaXR5OiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCByZWxhdGUgdG8gYXJyYXkgaW5kZXhpbmcsIGJvdW5kcyBsaW1pdHMgKHZxLVxcdTAwM2VkZXYtXFx1MDAzZWlvdl9saW1pdCksIG9yIHZpcnRxdWV1ZSBzeW5jaHJvbml6YXRpb24gbG9naWMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOIChmb3Igb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3NlcyksIGFuZCB2aXJ0aW8gcHJvdG9jb2wgY2hlY2tzLlxcblxcblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3IgaW5mby1sZWFrIHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mh[1] Phase: Succeeded StartedAt: 2026-09-06 19:19:00 +0000 UTC FinishedAt: 2026-09-06 19:19:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 19:19:00 +0000 UTC FinishedAt: 2026-09-06 19:19:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2] Phase: Succeeded StartedAt: 2026-09-06 19:19:00 +0000 UTC FinishedAt: 2026-09-06 22:57:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 19:19:00 +0000 UTC FinishedAt: 2026-09-06 22:57:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 19:19:00 +0000 UTC FinishedAt: 2026-09-06 19:19:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 19:19:00 +0000 UTC FinishedAt: 2026-09-06 19:19:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow2r2mh/series-workflow2r2mh-convert-artifact-1943837159/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 19:19:10 +0000 UTC FinishedAt: 2026-09-06 19:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 19:19:10 +0000 UTC FinishedAt: 2026-09-06 19:35:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*eebfdae8-92f7-4b0c-ba66-cd506873faed,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-workflow2r2mh/series-workflow2r2mh-convert-artifact-1943837159/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": "0132e14d-7803-4958-ab89-b525ca892e20", "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-workflow2r2mh/series-workflow2r2mh-build-action-1922535549/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 19:19:10 +0000 UTC FinishedAt: 2026-09-06 19:34:57 +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:*eebfdae8-92f7-4b0c-ba66-cd506873faed,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-workflow2r2mh/series-workflow2r2mh-convert-artifact-1943837159/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": "0132e14d-7803-4958-ab89-b525ca892e20", "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-workflow2r2mh/series-workflow2r2mh-build-action-1922535549/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 19:35:07 +0000 UTC FinishedAt: 2026-09-06 19:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 19:35:07 +0000 UTC FinishedAt: 2026-09-06 19:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 19:35:07 +0000 UTC FinishedAt: 2026-09-06 19:35:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 19:35:07 +0000 UTC FinishedAt: 2026-09-06 19:35:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow2r2mh/series-workflow2r2mh-convert-artifact-990635670/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 19:35:17 +0000 UTC FinishedAt: 2026-09-06 19:37:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 19:35:17 +0000 UTC FinishedAt: 2026-09-06 19:37:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0132e14d-7803-4958-ab89-b525ca892e20,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-workflow2r2mh/series-workflow2r2mh-build-action-1922535549/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-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 19:37:32 +0000 UTC FinishedAt: 2026-09-06 19:37:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 19:37:32 +0000 UTC FinishedAt: 2026-09-06 19:37:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 19:37:32 +0000 UTC FinishedAt: 2026-09-06 19:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 19:37:32 +0000 UTC FinishedAt: 2026-09-06 19:53:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*eebfdae8-92f7-4b0c-ba66-cd506873faed,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-workflow2r2mh/series-workflow2r2mh-convert-artifact-990635670/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": "f653ffd2-e7e6-4fca-9fd7-33c0b1e72059", "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-workflow2r2mh/series-workflow2r2mh-build-action-2769987482/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 19:37:32 +0000 UTC FinishedAt: 2026-09-06 19:53:34 +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:*eebfdae8-92f7-4b0c-ba66-cd506873faed,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-workflow2r2mh/series-workflow2r2mh-convert-artifact-990635670/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": "f653ffd2-e7e6-4fca-9fd7-33c0b1e72059", "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-workflow2r2mh/series-workflow2r2mh-build-action-2769987482/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 19:53:44 +0000 UTC FinishedAt: 2026-09-06 19:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 19:53:44 +0000 UTC FinishedAt: 2026-09-06 19:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 19:53:44 +0000 UTC FinishedAt: 2026-09-06 19:55:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 19:53:44 +0000 UTC FinishedAt: 2026-09-06 19:55:13 +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:*f653ffd2-e7e6-4fca-9fd7-33c0b1e72059,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-workflow2r2mh/series-workflow2r2mh-build-action-2769987482/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-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 19:55:17 +0000 UTC FinishedAt: 2026-09-06 22:57:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 19:55:17 +0000 UTC FinishedAt: 2026-09-06 22:57:20 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"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:*0132e14d-7803-4958-ab89-b525ca892e20,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f653ffd2-e7e6-4fca-9fd7-33c0b1e72059,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-workflow2r2mh/series-workflow2r2mh-build-action-1922535549/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-workflow2r2mh/series-workflow2r2mh-build-action-2769987482/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 19:55:17 +0000 UTC FinishedAt: 2026-09-06 19:55:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 19:55:17 +0000 UTC FinishedAt: 2026-09-06 19:55:35 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"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-workflow2r2mh/series-workflow2r2mh-convert-artifact-1057340475/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 19:55:17 +0000 UTC FinishedAt: 2026-09-06 19:55:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 19:55:17 +0000 UTC FinishedAt: 2026-09-06 19:55:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 19:55:17 +0000 UTC FinishedAt: 2026-09-06 19:55:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 19:55:44 +0000 UTC FinishedAt: 2026-09-06 22:57:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2r2mh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_transport_do_send_pkt","vhost_vsock_flush_used","vhost_vsock_add_used","vhost_transport_send_pkt","vhost_transport_send_pkt_work","vhost_vsock_handle_rx_kick"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VSOCKETS","EVENTFD","VHOST","VIRTIO_VSOCKETS_COMMON"],"series_id":"894c8666-db3c-4885-981f-0e353bc11b27","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 19:55:44 +0000 UTC FinishedAt: 2026-09-06 22:57:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0132e14d-7803-4958-ab89-b525ca892e20,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f653ffd2-e7e6-4fca-9fd7-33c0b1e72059,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-workflow2r2mh/series-workflow2r2mh-build-action-1922535549/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-workflow2r2mh/series-workflow2r2mh-build-action-2769987482/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-workflow2r2mh/series-workflow2r2mh-convert-artifact-1057340475/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,}