Name: series-workflowvdmf8 Phase: Succeeded StartedAt: 2026-09-04 01:05:58 +0000 UTC FinishedAt: 2026-09-04 02:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdmf8[0] Phase: Succeeded StartedAt: 2026-09-04 01:05:58 +0000 UTC FinishedAt: 2026-09-04 01:48:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdmf8[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 01:05:58 +0000 UTC FinishedAt: 2026-09-04 01:48:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DMA_CMA", "CMA", "IOMMU_DMA", "DMA_OPS_HELPERS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DMA_CMA", "CMA", "IOMMU_DMA", "DMA_OPS_HELPERS" ], "series_id": "f71a97f5-b314-4b82-8d38-e9a7854c1673" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_exact_nid_noprof", "dma_free_contiguous", "__dma_direct_alloc_pages", "dma_common_alloc_pages", "iommu_dma_alloc_pages", "dma_direct_alloc_pages", "dma_direct_alloc", "iommu_dma_alloc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RNQV9DTUEmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O0lPTU1VX0RNQSYjMzQ7LAogICAgJiMzNDtETUFfT1BTX0hFTFBFUlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mJiMzNDssCiAgICAmIzM0O2RtYV9mcmVlX2NvbnRpZ3VvdXMmIzM0OywKICAgICYjMzQ7X19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2RtYV9jb21tb25fYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7aW9tbXVfZG1hX2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7ZG1hX2RpcmVjdF9hbGxvYyYjMzQ7LAogICAgJiMzNDtpb21tdV9kbWFfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhbGxiYWNrIHBhdGhzIChpbiBkbWEtaW9tbXUsIGRtYS1kaXJlY3QsIGFuZCBvcHNfaGVscGVycykgdG8gdXNlIGFsbG9jX3BhZ2VzX2V4YWN0X25pZCgpIGFuZCBmcmVlX3BhZ2VzX2V4YWN0KCkgaW5zdGVhZCBvZiBhbGxvY19wYWdlc19ub2RlKCkgYW5kIF9fZnJlZV9wYWdlcygpIHdpdGggcGFnZSBvcmRlcnMuIEl0IGFsc28gcmVtb3ZlcyB0aGUgX19tZW1pbml0IGFubm90YXRpb24gZnJvbSBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKCkuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgYWZmZWN0IHBhZ2UtbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkgYW5kIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBETUEgc3Vic3lzdGVtLiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSB6ZXJvZWQgKHZpYSBtZW1zZXQpIG9yIG1hbmFnZWQgcGVyIHN0YW5kYXJkIERNQSBzdWJzeXN0ZW0gY29udmVudGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcGFnZSBsaWZldGltZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdG9yIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGFjcm9zcyBtdWx0aXBsZSBjb3JlIHN1YnN5c3RlbXMgKGtlcm5lbC9kbWEvLCBtbS8sIGRyaXZlcnMvaW9tbXUvKS4gSXQgcmVwbGFjZXMgcG93ZXItb2YtdHdvIHBhZ2UgYWxsb2NhdGlvbnMgYW5kIF9fZnJlZV9wYWdlcygpIHdpdGggYWxsb2NfcGFnZXNfZXhhY3RfbmlkKCkgYW5kIGZyZWVfcGFnZXNfZXhhY3QoKSwgd2hpY2ggc3BsaXRzIGFuZCBmcmVlcyB0cmFpbGluZyB1bnVzZWQgcGFnZXMuIFRoaXMgY2hhbmdlcyBtZW1vcnkgYWxpZ25tZW50LCBwYWdlIGNvdW50IHRyYWNraW5nLCBhbmQgaW50cm9kdWNlcyBwb3RlbnRpYWwgcnVudGltZSBhc3NlcnRpb24gdmlvbGF0aW9ucyBpbiBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKCkgaWYgY2FsbGVycyBwYXNzIGNlcnRhaW4gR0ZQIGZsYWdzLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBETUEgYWxsb2NhdGlvbnMgaW4gdmlydHVhbGl6ZWQgYW5kIGVtdWxhdGVkIGRldmljZSBkcml2ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGU2NWI1YzhhZTA1NWFjYTE5MWMxMzE2ZTlhZjM3NGQwZGFkNjU1ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDE6NDc6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNcbmluZGV4IDU4YzYyNDUxM2NkNDMuLjhmMjYyYzgzODAyYzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jXG5AQCAtMTYyOCwxMCAmIzQzOzE2MjgsMTIgQEAgc3RhdGljIHZvaWQgKmlvbW11X2RtYV9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0dm9pZCAqY3B1X2FkZHI7XG4gXG4gXHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBhbGxvY19zaXplLCBnZnApO1xuLVx0aWYgKCFwYWdlKVxuLVx0XHRwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIGdldF9vcmRlcihhbGxvY19zaXplKSk7XG4tXHRpZiAoIXBhZ2UpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGlmICghcGFnZSkge1xuJiM0MztcdFx0Y3B1X2FkZHIgPSBhbGxvY19wYWdlc19leGFjdF9uaWQobm9kZSwgYWxsb2Nfc2l6ZSwgZ2ZwKTtcbiYjNDM7XHRcdGlmICghY3B1X2FkZHIpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0cGFnZSA9IHZpcnRfdG9fcGFnZShjcHVfYWRkcik7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFjb2hlcmVudCB8fCBQYWdlSGlnaE1lbShwYWdlKSkge1xuIFx0XHRwZ3Byb3RfdCBwcm90ID0gZG1hX3BncHJvdChkZXYsIFBBR0VfS0VSTkVMLCBhdHRycyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXG5pbmRleCA4ZmFlMmI3ZGViMjBkLi4zZWYzMDAzNzEzYTY5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcbkBAIC0xNDMsNyAmIzQzOzE0Myw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0c2l6ZV90IHNpemUpXG4ge1xuLVx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4mIzQzO1x0ZnJlZV9wYWdlc19leGFjdChwYWdlX2FkZHJlc3MocGFnZSksIHNpemUpO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0RNQV9DTUEqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oXG5pbmRleCA4NzJiYzUzZjMyZWM4Li5hYTQ2MDE4MDVmMjFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9nZnAuaFxuQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgdm9pZCAqYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaykgX19hbGxvY19zaXplKDEpO1xuIFxuIHZvaWQgZnJlZV9wYWdlc19leGFjdCh2b2lkICp2aXJ0LCBzaXplX3Qgc2l6ZSk7XG4gXG4tX19tZW1pbml0IHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMik7XG4mIzQzO3ZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMik7XG4gI2RlZmluZSBhbGxvY19wYWdlc19leGFjdF9uaWQoLi4uKVx0XHRcdFx0XHRcXFxuIFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuaW5kZXggNjYwOTM0NjA1ODRlOC4uOTA5MzdkYzdjNjI3ZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvY29udGlndW91cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuQEAgLTQ1MSw4ICYjNDM7NDUxLDggQEAgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGdmcF90IGdmcClcbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgbWVtb3J5IGFsbG9jYXRlZCBieSBkbWFfYWxsb2NfY29udGlndW91cygpLiBBcyB0aGVcbiAgKiBjbWFfcmVsZWFzZSByZXR1cm5zIGZhbHNlIHdoZW4gcHJvdmlkZWQgcGFnZXMgZG8gbm90IGJlbG9uZyB0byBjb250aWd1b3VzXG4tICogYXJlYSBhbmQgdHJ1ZSBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdGhlbiBkb2VzIGEgZmFsbGJhY2sgX19mcmVlX3BhZ2VzKClcbi0gKiB1cG9uIGEgZmFsc2UtcmV0dXJuLlxuJiM0MzsgKiBhcmVhIGFuZCB0cnVlIG90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiB0aGVuIGRvZXMgYSBmYWxsYmFja1xuJiM0MzsgKiBmcmVlX3BhZ2VzX2V4YWN0KCkgdXBvbiBhIGZhbHNlLXJldHVybi5cbiAgKi9cbiB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXG4ge1xuQEAgLTQ3Niw3ICYjNDM7NDc2LDcgQEAgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKVxuIFx0fVxuIFxuIFx0Lyogbm90IGluIGFueSBjbWEsIGZyZWUgZnJvbSBidWRkeSAqL1xuLVx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4mIzQzO1x0ZnJlZV9wYWdlc19leGFjdChwYWdlX2FkZHJlc3MocGFnZSksIHNpemUpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvZGlyZWN0LmMgYi9rZXJuZWwvZG1hL2RpcmVjdC5jXG5pbmRleCBkYTY2NWNhMjJkNWMwLi5lYTY0NDUzZDczNzBhIDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9kaXJlY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9kaXJlY3QuY1xuQEAgLTEyMCw2ICYjNDM7MTIwLDcgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdGludCBub2RlID0gZGV2X3RvX25vZGUoZGV2KTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0dTY0IHBoeXNfbGltaXQ7XG4mIzQzO1x0dm9pZCAqdmE7XG4gXG4gXHRXQVJOX09OX09OQ0UoIVBBR0VfQUxJR05FRChzaXplKSk7XG4gXG5AQCAtMTMzLDkgJiM0MzsxMzQsOSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0XHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgc2l6ZSk7XG4gXHR9XG4gXG4tXHR3aGlsZSAoKHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgZ2V0X29yZGVyKHNpemUpKSlcbi1cdCAgICAgICBcdTAwMjZcdTAwMjYgIWRtYV9jb2hlcmVudF9vayhkZXYsIHBhZ2VfdG9fcGh5cyhwYWdlKSwgc2l6ZSkpIHtcbi1cdFx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4mIzQzO1x0d2hpbGUgKCh2YSA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBzaXplLCBnZnApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgIWRtYV9jb2hlcmVudF9vayhkZXYsIHZpcnRfdG9fcGh5cyh2YSksIHNpemUpKSB7XG4mIzQzO1x0XHRmcmVlX3BhZ2VzX2V4YWN0KHZhLCBzaXplKTtcbiBcbiBcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BMzIpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcGh5c19saW1pdCBcdTAwM2MgRE1BX0JJVF9NQVNLKDY0KSBcdTAwMjZcdTAwMjZcbkBAIC0xNDYsNiAmIzQzOzE0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRcdGVsc2VcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiYjNDM7XHRwYWdlID0gdmEgPyB2aXJ0X3RvX3BhZ2UodmEpIDogTlVMTDtcbiBcbiBcdHJldHVybiBwYWdlO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMgYi9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcbmluZGV4IDZiNWY5MjA4ZDMxYzAuLjVjZGYzZjYwY2Y0NzkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuY1xuQEAgLTY3LDEwICYjNDM7NjcsMTMgQEAgc3RydWN0IHBhZ2UgKmRtYV9jb21tb25fYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdHBoeXNfYWRkcl90IHBoeXM7XG4gXG4gXHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApO1xuLVx0aWYgKCFwYWdlKVxuLVx0XHRwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShkZXZfdG9fbm9kZShkZXYpLCBnZnAsIGdldF9vcmRlcihzaXplKSk7XG4tXHRpZiAoIXBhZ2UpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGlmICghcGFnZSkge1xuJiM0MztcdFx0dm9pZCAqdmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQoZGV2X3RvX25vZGUoZGV2KSwgc2l6ZSwgZ2ZwKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXZhKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2UodmEpO1xuJiM0MztcdH1cbiBcbiBcdHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSk7XG4gXHRpZiAodXNlX2RtYV9pb21tdShkZXYpKVxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggYzRkYzYxZWM2NjNlZS4uZDNhMTM1ZGZjZGQzZCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTYzNyw3ICYjNDM7NTYzNyw3IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKTtcbiAgKlxuICAqIFJldHVybjogcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGFyZWEgb3IgJU5VTEwgaW4gY2FzZSBvZiBlcnJvci5cbiAgKi9cbi12b2lkICogX19tZW1pbml0IGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxuJiM0Mzt2b2lkICphbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7XG4gXHRzdHJ1Y3QgcGFnZSAqcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtETUFfQ01BJiMzNDssCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtJT01NVV9ETUEmIzM0OywKICAgICYjMzQ7RE1BX09QU19IRUxQRVJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZiYjMzQ7LAogICAgJiMzNDtkbWFfZnJlZV9jb250aWd1b3VzJiMzNDssCiAgICAmIzM0O19fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDtkbWFfY29tbW9uX2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvbW11X2RtYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDtkbWFfZGlyZWN0X2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2RtYV9kaXJlY3RfYWxsb2MmIzM0OywKICAgICYjMzQ7aW9tbXVfZG1hX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBETUEgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgYWNyb3NzIG11bHRpcGxlIGNvcmUgc3Vic3lzdGVtcyAoa2VybmVsL2RtYS8sIG1tLywgZHJpdmVycy9pb21tdS8pLiBJdCByZXBsYWNlcyBwb3dlci1vZi10d28gcGFnZSBhbGxvY2F0aW9ucyBhbmQgX19mcmVlX3BhZ2VzKCkgd2l0aCBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpLCB3aGljaCBzcGxpdHMgYW5kIGZyZWVzIHRyYWlsaW5nIHVudXNlZCBwYWdlcy4gVGhpcyBjaGFuZ2VzIG1lbW9yeSBhbGlnbm1lbnQsIHBhZ2UgY291bnQgdHJhY2tpbmcsIGFuZCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBydW50aW1lIGFzc2VydGlvbiB2aW9sYXRpb25zIGluIGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoKSBpZiBjYWxsZXJzIHBhc3MgY2VydGFpbiBHRlAgZmxhZ3MuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIERNQSBhbGxvY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQgZGV2aWNlIGRyaXZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZTY1YjVjOGFlMDU1YWNhMTkxYzEzMTZlOWFmMzc0ZDBkYWQ2NTVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwMTo0NzowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMgYi9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jCmluZGV4IDU4YzYyNDUxM2NkNDMuLjhmMjYyYzgzODAyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYwpAQCAtMTYyOCwxMCAmIzQzOzE2MjgsMTIgQEAgc3RhdGljIHZvaWQgKmlvbW11X2RtYV9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCXZvaWQgKmNwdV9hZGRyOwogCiAJcGFnZSA9IGRtYV9hbGxvY19jb250aWd1b3VzKGRldiwgYWxsb2Nfc2l6ZSwgZ2ZwKTsKLQlpZiAoIXBhZ2UpCi0JCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgZ2V0X29yZGVyKGFsbG9jX3NpemUpKTsKLQlpZiAoIXBhZ2UpCi0JCXJldHVybiBOVUxMOwomIzQzOwlpZiAoIXBhZ2UpIHsKJiM0MzsJCWNwdV9hZGRyID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5vZGUsIGFsbG9jX3NpemUsIGdmcCk7CiYjNDM7CQlpZiAoIWNwdV9hZGRyKQomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwkJcGFnZSA9IHZpcnRfdG9fcGFnZShjcHVfYWRkcik7CiYjNDM7CX0KIAogCWlmICghY29oZXJlbnQgfHwgUGFnZUhpZ2hNZW0ocGFnZSkpIHsKIAkJcGdwcm90X3QgcHJvdCA9IGRtYV9wZ3Byb3QoZGV2LCBQQUdFX0tFUk5FTCwgYXR0cnMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oCmluZGV4IDhmYWUyYjdkZWIyMGQuLjNlZjMwMDM3MTNhNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgKQEAgLTE0Myw3ICYjNDM7MTQzLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCXNpemVfdCBzaXplKQogewotCV9fZnJlZV9wYWdlcyhwYWdlLCBnZXRfb3JkZXIoc2l6ZSkpOwomIzQzOwlmcmVlX3BhZ2VzX2V4YWN0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgc2l6ZSk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0RNQV9DTUEqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCA4NzJiYzUzZjMyZWM4Li5hYTQ2MDE4MDVmMjFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgdm9pZCAqYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaykgX19hbGxvY19zaXplKDEpOwogCiB2b2lkIGZyZWVfcGFnZXNfZXhhY3Qodm9pZCAqdmlydCwgc2l6ZV90IHNpemUpOwogCi1fX21lbWluaXQgdm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spIF9fYWxsb2Nfc2l6ZSgyKTsKJiM0Mzt2b2lkICphbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaykgX19hbGxvY19zaXplKDIpOwogI2RlZmluZSBhbGxvY19wYWdlc19leGFjdF9uaWQoLi4uKQkJCQkJXAogCWFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoX19WQV9BUkdTX18pKQogCmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYyBiL2tlcm5lbC9kbWEvY29udGlndW91cy5jCmluZGV4IDY2MDkzNDYwNTg0ZTguLjkwOTM3ZGM3YzYyN2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kbWEvY29udGlndW91cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvY29udGlndW91cy5jCkBAIC00NTEsOCAmIzQzOzQ1MSw4IEBAIHN0cnVjdCBwYWdlICpkbWFfYWxsb2NfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBnZnBfdCBnZnApCiAgKgogICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb250aWd1b3VzKCkuIEFzIHRoZQogICogY21hX3JlbGVhc2UgcmV0dXJucyBmYWxzZSB3aGVuIHByb3ZpZGVkIHBhZ2VzIGRvIG5vdCBiZWxvbmcgdG8gY29udGlndW91cwotICogYXJlYSBhbmQgdHJ1ZSBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdGhlbiBkb2VzIGEgZmFsbGJhY2sgX19mcmVlX3BhZ2VzKCkKLSAqIHVwb24gYSBmYWxzZS1yZXR1cm4uCiYjNDM7ICogYXJlYSBhbmQgdHJ1ZSBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdGhlbiBkb2VzIGEgZmFsbGJhY2sKJiM0MzsgKiBmcmVlX3BhZ2VzX2V4YWN0KCkgdXBvbiBhIGZhbHNlLXJldHVybi4KICAqLwogdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKQogewpAQCAtNDc2LDcgJiM0Mzs0NzYsNyBAQCB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpCiAJfQogCiAJLyogbm90IGluIGFueSBjbWEsIGZyZWUgZnJvbSBidWRkeSAqLwotCV9fZnJlZV9wYWdlcyhwYWdlLCBnZXRfb3JkZXIoc2l6ZSkpOwomIzQzOwlmcmVlX3BhZ2VzX2V4YWN0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgc2l6ZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2RpcmVjdC5jIGIva2VybmVsL2RtYS9kaXJlY3QuYwppbmRleCBkYTY2NWNhMjJkNWMwLi5lYTY0NDUzZDczNzBhIDEwMDY0NAotLS0gYS9rZXJuZWwvZG1hL2RpcmVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvZGlyZWN0LmMKQEAgLTEyMCw2ICYjNDM7MTIwLDcgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAlpbnQgbm9kZSA9IGRldl90b19ub2RlKGRldik7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdTY0IHBoeXNfbGltaXQ7CiYjNDM7CXZvaWQgKnZhOwogCiAJV0FSTl9PTl9PTkNFKCFQQUdFX0FMSUdORUQoc2l6ZSkpOwogCkBAIC0xMzMsOSAmIzQzOzEzNCw5IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCWRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTsKIAl9CiAKLQl3aGlsZSAoKHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgZ2V0X29yZGVyKHNpemUpKSkKLQkgICAgICAgJmFtcDsmYW1wOyAhZG1hX2NvaGVyZW50X29rKGRldiwgcGFnZV90b19waHlzKHBhZ2UpLCBzaXplKSkgewotCQlfX2ZyZWVfcGFnZXMocGFnZSwgZ2V0X29yZGVyKHNpemUpKTsKJiM0MzsJd2hpbGUgKCh2YSA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBzaXplLCBnZnApKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAhZG1hX2NvaGVyZW50X29rKGRldiwgdmlydF90b19waHlzKHZhKSwgc2l6ZSkpIHsKJiM0MzsJCWZyZWVfcGFnZXNfZXhhY3QodmEsIHNpemUpOwogCiAJCWlmIChJU19FTkFCTEVEKENPTkZJR19aT05FX0RNQTMyKSAmYW1wOyZhbXA7CiAJCSAgICBwaHlzX2xpbWl0ICZsdDsgRE1BX0JJVF9NQVNLKDY0KSAmYW1wOyZhbXA7CkBAIC0xNDYsNiAmIzQzOzE0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCWVsc2UKIAkJCXJldHVybiBOVUxMOwogCX0KJiM0MzsJcGFnZSA9IHZhID8gdmlydF90b19wYWdlKHZhKSA6IE5VTEw7CiAKIAlyZXR1cm4gcGFnZTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYyBiL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYwppbmRleCA2YjVmOTIwOGQzMWMwLi41Y2RmM2Y2MGNmNDc5IDEwMDY0NAotLS0gYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9vcHNfaGVscGVycy5jCkBAIC02NywxMCAmIzQzOzY3LDEzIEBAIHN0cnVjdCBwYWdlICpkbWFfY29tbW9uX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJcGh5c19hZGRyX3QgcGh5czsKIAogCXBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIHNpemUsIGdmcCk7Ci0JaWYgKCFwYWdlKQotCQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShkZXZfdG9fbm9kZShkZXYpLCBnZnAsIGdldF9vcmRlcihzaXplKSk7Ci0JaWYgKCFwYWdlKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJaWYgKCFwYWdlKSB7CiYjNDM7CQl2b2lkICp2YSA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChkZXZfdG9fbm9kZShkZXYpLCBzaXplLCBnZnApOwomIzQzOwomIzQzOwkJaWYgKCF2YSkKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UodmEpOwomIzQzOwl9CiAKIAlwaHlzID0gcGFnZV90b19waHlzKHBhZ2UpOwogCWlmICh1c2VfZG1hX2lvbW11KGRldikpCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYzRkYzYxZWM2NjNlZS4uZDNhMTM1ZGZjZGQzZCAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTYzNyw3ICYjNDM7NTYzNyw3IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKTsKICAqCiAgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9yICVOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCiAgKi8KLXZvaWQgKiBfX21lbWluaXQgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spCiYjNDM7dm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJdW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOwogCXN0cnVjdCBwYWdlICpwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODM3CgkJCQkJCQlvdXRwdXQ6IDc1CgkJCQkJCQl0aG91Z2h0czogNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRNQS9NZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBSZXZpZXc6IFBvdGVudGlhbCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBoaXR0aW5nIHNvbWUga2V5IGFyZWFzOiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIERNQSBzdWJzeXN0ZW0uIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW46CgoqICAgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgOiBTcGVjaWZpY2FsbHksIGBpb21tdV9kbWFfYWxsb2NfcGFnZXNgCiogICBgaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oYDogTG9va3MgbGlrZSBgZG1hX2ZyZWVfY29udGlndW91c2AgaXMgaW52b2x2ZWQuCiogICBgaW5jbHVkZS9saW51eC9nZnAuaGAgYW5kIGBtbS9wYWdlX2FsbG9jLmNgOiBCb3RoIGhhdmUgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgIG1vZGlmaWNhdGlvbnMsIHJlbW92aW5nIGBfX21lbWluaXRgLiBUaGlzIHNjcmVhbXMgbWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlcy4KKiAgIGBrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY2AsIGBrZXJuZWwvZG1hL2RpcmVjdC5jYCwgYW5kIGBrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNgOiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBkbWFfZnJlZV9jb250aWd1b3VzYCwgYF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AsIGFuZCBgZG1hX2NvbW1vbl9hbGxvY19wYWdlc2AgcmVzcGVjdGl2ZWx5LgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyByZXBsYWNpbmcgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYGFsbG9jX3BhZ2VzX2V4YWN0X25pZGAgYW5kIGFzc29jaWF0ZWQgZnJlZWluZyBmdW5jdGlvbnMgbGlrZSBgZnJlZV9wYWdlc19leGFjdGAgd2l0aGluIERNQSBhbGxvY2F0aW9uIHBhdGhzLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSB2aWEgZnV6emluZyB3aXRoIHN5emthbGxlcj8gRE1BIGFsbG9jYXRpb24gaXMgdXNlZCBhbGwgb3ZlciB0aGUgcGxhY2UuIEkmIzM5O20gdGFsa2luZyBkcml2ZXJzIChuZXRkZXYsIHZpcnRpbywgc291bmQsIERSTSwgVVNCLCBhbmQgcHJvYmFibHkgbW9yZSksIHZpcnR1YWwgZGV2aWNlcyAodmlydGlvIGFnYWluKSwgYW5kIGV2ZW4gc3lzY2FsbHMgKGRtYS1idWYsIG1lZGlhLCBzb3VuZCwgL2Rldi8uLi4geW91IG5hbWUgaXQpIHdoaWNoIG1lYW5zIHRoaXMgaXMgKip2ZXJ5IGxpa2VseSoqIHJlYWNoYWJsZS4gVGhpcyBpcyBjb3JlIHN0dWZmLCBtb2RpZnlpbmcgZXhlY3V0YWJsZSBjb2RlIGluIG1tIGFuZCBETUEgbWFwcGluZywgd2hpY2ggbWFrZXMgaXQgaGlnaC1wcmlvcml0eS4KCkxldCYjMzk7cyBjaGVjayB0aGUgY3JpdGVyaWE6CiYjMzQ7Q29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4mIzM0OyBXZWxsLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGluIGBtbS9gIGFuZCB0b3VjaGluZyBETUEsIHdoaWNoIGlzIGZ1bmRhbWVudGFsLgomIzM0O1JlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLiYjMzQ7IEl0ICpjb3VsZCogZmFsbCB1bmRlciB0aGlzLCBkZXBlbmRpbmcgb24gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuCgpNeSBpbnR1aXRpb24gc2F5czogKipXb3J0aEZ1enppbmcgPSBUcnVlKiouCgpOb3cgSSYjMzk7bGwgZGlnIGludG8gYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBhbmQgdXNlIHRoZSB0b29saW5nIHRvIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4YWN0IGNoYW5nZXMgYW5kIGRldGVybWluZSB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21tdV9kbWFfYWxsb2NfcGFnZXN8ZG1hX2FsbG9jX2NvbnRpZ3VvdXN8ZG1hX2ZyZWVfY29udGlndW91c3xfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXN8ZG1hX2NvbW1vbl9hbGxvY19wYWdlc3xhbGxvY19wYWdlc19leGFjdF9uaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZG1hJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9kbWEvY29udGlndW91cy5jPTM5Mz1zdGF0aWMgc3RydWN0IHBhZ2UgKmNtYV9hbGxvY19hbGlnbmVkKHN0cnVjdCBjbWEgKmNtYSwgc2l6ZV90IHNpemUsIGdmcF90IGdmcClcbi0tXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00MDAtLyoqXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzo0MDE6ICogZG1hX2FsbG9jX2NvbnRpZ3VvdXMoKSAtIGFsbG9jYXRlIGNvbnRpZ3VvdXMgcGFnZXNcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQwMi0gKiBAZGV2OiAgIFBvaW50ZXIgdG8gZGV2aWNlIGZvciB3aGljaCB0aGUgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQuXG4tLVxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDE0LSAqL1xua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDE1OnN0cnVjdCBwYWdlICpkbWFfYWxsb2NfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBnZnBfdCBnZnApXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00MTYte1xuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ0Ni0vKipcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ0NzogKiBkbWFfZnJlZV9jb250aWd1b3VzKCkgLSByZWxlYXNlIGFsbG9jYXRlZCBwYWdlc1xua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDQ4LSAqIEBkZXY6ICAgUG9pbnRlciB0byBkZXZpY2UgZm9yIHdoaWNoIHRoZSBwYWdlcyB3ZXJlIGFsbG9jYXRlZC5cbi0tXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTEtICpcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ1MjogKiBUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIG1lbW9yeSBhbGxvY2F0ZWQgYnkgZG1hX2FsbG9jX2NvbnRpZ3VvdXMoKS4gQXMgdGhlXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTMtICogY21hX3JlbGVhc2UgcmV0dXJucyBmYWxzZSB3aGVuIHByb3ZpZGVkIHBhZ2VzIGRvIG5vdCBiZWxvbmcgdG8gY29udGlndW91c1xuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ1Ni0gKi9cbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ1Nzp2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTgte1xuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9MTA0PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19zd2lvdGxiKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy0xMTYtXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjExNzpzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxua2VybmVsL2RtYS9kaXJlY3QuYy0xMTgtXHRcdGdmcF90IGdmcCwgYm9vbCBhbGxvd19oaWdobWVtKVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTI3LVx0Z2ZwIHw9IGRtYV9kaXJlY3Rfb3B0aW1hbF9nZnBfbWFzayhkZXYsIFx1MDAyNnBoeXNfbGltaXQpO1xua2VybmVsL2RtYS9kaXJlY3QuYzoxMjg6XHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApO1xua2VybmVsL2RtYS9kaXJlY3QuYy0xMjktXHRpZiAocGFnZSkge1xuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTMzLVxua2VybmVsL2RtYS9kaXJlY3QuYzoxMzQ6XHRcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTM1LVx0fVxua2VybmVsL2RtYS9kaXJlY3QuYy0xMzYtXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjEzNzpcdHdoaWxlICgodmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQobm9kZSwgc2l6ZSwgZ2ZwKSkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvZG1hL2RpcmVjdC5jLTEzOC1cdCAgICAgICAhZG1hX2NvaGVyZW50X29rKGRldiwgdmlydF90b19waHlzKHZhKSwgc2l6ZSkpIHtcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTE4ND1zdGF0aWMgdm9pZCAqZG1hX2RpcmVjdF9hbGxvY19ub19tYXBwaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy0xODgtXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjE4OTpcdHBhZ2UgPSBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBnZnAgXHUwMDI2IH5fX0dGUF9aRVJPLCB0cnVlKTtcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTkwLVx0aWYgKCFwYWdlKVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9MjA0PXZvaWQgKmRtYV9kaXJlY3RfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5MC1cdC8qIHdlIGFsd2F5cyBtYW51YWxseSB6ZXJvIHRoZSBtZW1vcnkgb25jZSB3ZSBhcmUgZG9uZSAqL1xua2VybmVsL2RtYS9kaXJlY3QuYzoyOTE6XHRwYWdlID0gX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKGRldiwgc2l6ZSwgZ2ZwIFx1MDAyNiB+X19HRlBfWkVSTywgYWxsb3dfaGlnaG1lbSk7XG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5Mi1cdGlmICghcGFnZSlcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5Ni1cdC8qXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjI5NzpcdCAqIGRtYV9hbGxvY19jb250aWd1b3VzIGNhbiByZXR1cm4gaGlnaG1lbSBwYWdlcyBkZXBlbmRpbmcgb24gYVxua2VybmVsL2RtYS9kaXJlY3QuYy0yOTgtXHQgKiBjb21iaW5hdGlvbiB0aGUgY21hPSBhcmd1bWVudHMgYW5kIHBlci1hcmNoIHNldHVwLiAgVGhlc2UgbmVlZCB0byBiZVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmMtMzU0LVx0aWYgKCFzd2lvdGxiX2ZyZWUoZGV2LCBwYWdlLCBzaXplKSlcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MzU1Olx0XHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgc2l6ZSk7XG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM1Ni1cdHJldHVybiBOVUxMO1xuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9MzYxPXZvaWQgZG1hX2RpcmVjdF9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy0zODEtXHRcdC8qIGNwdV9hZGRyIGlzIGEgc3RydWN0IHBhZ2UgY29va2llLCBub3QgYSBrZXJuZWwgYWRkcmVzcyAqL1xua2VybmVsL2RtYS9kaXJlY3QuYzozODI6XHRcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBjcHVfYWRkciwgc2l6ZSk7XG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM4My1cdFx0cmV0dXJuO1xuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmMtNDMwLVx0ZWxzZVxua2VybmVsL2RtYS9kaXJlY3QuYzo0MzE6XHRcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBkbWFfZGlyZWN0X3RvX3BhZ2UoZGV2LCBkbWFfYWRkciksIHNpemUpO1xua2VybmVsL2RtYS9kaXJlY3QuYy00MzItfVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9NDM0PXN0cnVjdCBwYWdlICpkbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy00NTYtXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjQ1NzpcdHBhZ2UgPSBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBnZnAsIGZhbHNlKTtcbmtlcm5lbC9kbWEvZGlyZWN0LmMtNDU4LVx0aWYgKCFwYWdlKVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9NDc0PXZvaWQgZG1hX2RpcmVjdF9mcmVlX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy01MDItXHRlbHNlXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjUwMzpcdFx0ZG1hX2ZyZWVfY29udGlndW91cyhkZXYsIHBhZ2UsIHNpemUpO1xua2VybmVsL2RtYS9kaXJlY3QuYy01MDQtfVxuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jPTcxNz1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmMtNzMyLVx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjczMzpcdFx0cmV0dXJuIGRtYV9jb21tb25fYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBkaXIsIGdmcCk7XG5rZXJuZWwvZG1hL21hcHBpbmcuYy03MzQtXHRpZiAoIW9wcy1cdTAwM2VhbGxvY19wYWdlc19vcClcbi0tXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmM9MzU9aW50IGRtYV9jb21tb25fbW1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYy02MS1cbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYzo2MjpzdHJ1Y3QgcGFnZSAqZG1hX2NvbW1vbl9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jLTYzLVx0XHRkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIGdmcF90IGdmcClcbi0tXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtNjgtXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmM6Njk6XHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApO1xua2VybmVsL2RtYS9vcHNfaGVscGVycy5jLTcwLVx0aWYgKCFwYWdlKSB7XG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmM6NzE6XHRcdHZvaWQgKnZhID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKGRldl90b19ub2RlKGRldiksIHNpemUsIGdmcCk7XG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtNzItXG4tLVxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jLTg1LVx0aWYgKCpkbWFfaGFuZGxlID09IERNQV9NQVBQSU5HX0VSUk9SKSB7XG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmM6ODY6XHRcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYy04Ny1cdFx0cmV0dXJuIE5VTEw7XG4tLVxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jPTk0PXZvaWQgZG1hX2NvbW1vbl9mcmVlX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYy0xMDQtXHRcdFx0XHRETUFfQVRUUl9TS0lQX0NQVV9TWU5DKTtcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYzoxMDU6XHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgc2l6ZSk7XG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtMTA2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTMwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIElPTU1VIElzc3VlcyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHNlZWluZyBzb21ldGhpbmcgdGhhdCBzbWVsbHMgbGlrZSBhIERNQSBvciBJT01NVSBwcm9ibGVtLiBHaXZlbiB0aGUgZ2VuZXJhbCBuYXR1cmUgb2YgdGhlIHN5bXB0b21zLCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gYnJvYWRlbiBvdXIgc2NvcGUgYSBiaXQgYmV5b25kIHRoZSBvYnZpb3VzIHN1c3BlY3QuIFdoaWxlIEkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBsaWtlbHkgY3VscHJpdCwgSSBzaG91bGQgYWxzbyBjaGVjayBvdXQgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGUgaXNzdWUgaXNuJiMzOTt0IGFzIGxvY2FsaXplZCBhcyBpbml0aWFsbHkgYmVsaWV2ZWQsIGFuZCBpdCBtaWdodCBiZSBzdGVtbWluZyBmcm9tIHNvbWUgbW9yZSBnZW5lcmljIERNQSBjb25maWd1cmF0aW9uLCBpbml0aWFsaXphdGlvbiwgb3IgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoYXQgbW9kdWxlLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBpbiB0aGUgcHV6emxlIGFuZCBuZWVkcyB0byBiZSBydWxlZCBvdXQgKG9yIGluISkgcXVpY2tseS4gVGhhdCBmaWxlIG9mdGVuIGNvbnRhaW5zIGdsb2JhbCBJT01NVSBzZXR1cCB0aGF0IGNvdWxkIGV4cGxhaW4gdGhlc2Ugc3ltcHRvbXMsIG9yIGEgbWlzY29uZmlndXJhdGlvbiBjb3VsZCBiZSBvY2N1cnJpbmcgaW4gdGhhdCBzcGFjZS4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tbXVfZG1hX2FsbG9jX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jPTg3Nz1zdGF0aWMgdm9pZCBfX2lvbW11X2RtYV9mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBjb3VudClcbi0tXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTg4My1cbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM6ODg0OnN0YXRpYyBzdHJ1Y3QgcGFnZSAqKl9faW9tbXVfZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMtODg1LVx0XHR1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGxvbmcgb3JkZXJfbWFzaywgZ2ZwX3QgZ2ZwKVxuLS1cbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM9OTQwPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKl9faW9tbXVfZG1hX2FsbG9jX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMtOTY3LVx0Y291bnQgPSBQQUdFX0FMSUdOKHNpemUpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYzo5Njg6XHRwYWdlcyA9IF9faW9tbXVfZG1hX2FsbG9jX3BhZ2VzKGRldiwgY291bnQsIGFsbG9jX3NpemVzIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy05NjktXHRcdFx0XHRcdGdmcCk7XG4tLVxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy05NzktXHQgKiBSZW1vdmUgdGhlIHpvbmUvcG9saWN5IGZsYWdzIGZyb20gdGhlIEdGUCAtIHRoZXNlIGFyZSBhcHBsaWVkIHRvIHRoZVxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYzo5ODA6XHQgKiBfX2lvbW11X2RtYV9hbGxvY19wYWdlcygpIGJ1dCBhcmUgbm90IHVzZWQgZm9yIHRoZSBzdXBwb3J0aW5nXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTk4MS1cdCAqIGludGVybmFsIGFsbG9jYXRpb25zIHRoYXQgZm9sbG93LlxuLS1cbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM9MTYxND12b2lkIGlvbW11X2RtYV9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLFxuLS1cbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMtMTYyMC1cbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM6MTYyMTpzdGF0aWMgdm9pZCAqaW9tbXVfZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTE2MjItXHRcdHN0cnVjdCBwYWdlICoqcGFnZXAsIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBhdHRycylcbi0tXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jPTE2NjA9dm9pZCAqaW9tbXVfZG1hX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmhhbmRsZSxcbi0tXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTE2ODYtXHR9IGVsc2Uge1xuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYzoxNjg3Olx0XHRjcHVfYWRkciA9IGlvbW11X2RtYV9hbGxvY19wYWdlcyhkZXYsIHNpemUsIFx1MDAyNnBhZ2UsIGdmcCwgYXR0cnMpO1xuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy0xNjg4LVx0XHRpZiAoIWNwdV9hZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEV4YWN0LVNpemUgUGFnZSBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgY29yZSBvZiBtZW1vcnkgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGV4YWN0LXNpemUgcGFnZSBhbGxvY2F0aW9ucyB3b3JrLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggTlVNQSBub2Rlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYCBmdW5jdGlvbi4gVGhpcyBzaG91bGQgYmUgd2hlcmUgdGhlIG1hZ2ljIGJlZ2lucyDigJMgZmlndXJpbmcgb3V0IGhvdyB3ZSBnZXQgdGhvc2UgcHJlY2lzZWx5IHNpemVkIHBhZ2VzIHRoYXQgYXJlbuKAmXQgYSBwb3dlciBvZiB0d28sIGFuZCBob3cgdGhlIE5VTUEgbm9kZSAobmlkKSBnZXRzIGludm9sdmVkLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgaW5pdGlhbCBzZXR1cCwgdGhlIGNob2ljZSBvZiB6b25lLCBhbmQgYW55IHBvdGVudGlhbCBmYWxsYmFjayBtZWNoYW5pc21zIGlmIGEgc3VpdGFibGUgcGFnZSBpc24mIzM5O3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBub3Byb2ZgIGFzcGVjdCB0b287IGlzIHRoaXMgYWJvdXQgcHJvZmlsaW5nIG9yIHN0YXRpc3RpY3MgZ2F0aGVyaW5nIGJlaW5nIHNraXBwZWQ/CgpUaGVuLCB0aGUgbmF0dXJhbCBmb2xsb3ctdXAgaXMgYGZyZWVfcGFnZXNfZXhhY3RgLiBJIG5lZWQgdG8gdHJhY2sgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBleGFjdC1zaXplIHBhZ2VzLiBXaGF0IGRvZXMgdGhlIGRlYWxsb2NhdGlvbiBwcm9jZXNzIGVudGFpbD8gRG9lcyBpdCBzaW1wbHkgcmV0dXJuIHRoZW0gdG8gdGhlIGFwcHJvcHJpYXRlIGZyZWUgbGlzdCwgb3IgYXJlIHRoZXJlIG1vcmUgY29tcGxleCBvcGVyYXRpb25zIGludm9sdmVkLCBzdWNoIGFzIG1lcmdpbmcgd2l0aCBhZGphY2VudCBwYWdlcyB0byBmb3JtIGxhcmdlciBibG9ja3M/IFdoYXQgaGFwcGVucyB0byB0aGUgbWV0YWRhdGE/IFRoaXMgaXMgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgZnJhZ21lbnRhdGlvbiBhbmQgZW5zdXJpbmcgZWZmaWNpZW50IG1lbW9yeSB1dGlsaXphdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBib29ra2VlcGluZyBpcyBtYWludGFpbmVkLCBmcm9tIGFsbG9jYXRpb24gdG8gZGVhbGxvY2F0aW9uLCB0byBmdWxseSBncmFzcCB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMgb2YgdGhpcyBleGFjdC1zaXplIHN0cmF0ZWd5LiBgbW0vcGFnZV9hbGxvYy5jYCBpdCBpcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU2MzA6XHQgKlx0XHRcdCAgIHBhZ2VzIG9uIGEgbm9kZS5cbjU2MzE6XHQgKiBAbmlkOiB0aGUgcHJlZmVycmVkIG5vZGUgSUQgd2hlcmUgbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWRcbjU2MzI6XHQgKiBAc2l6ZTogdGhlIG51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZVxuNTYzMzpcdCAqIEBnZnBfbWFzazogR0ZQIGZsYWdzIGZvciB0aGUgYWxsb2NhdGlvbiwgbXVzdCBub3QgY29udGFpbiBfX0dGUF9DT01QXG41NjM0Olx0ICpcbjU2MzU6XHQgKiBMaWtlIGFsbG9jX3BhZ2VzX2V4YWN0KCksIGJ1dCB0cnkgdG8gYWxsb2NhdGUgb24gbm9kZSBuaWQgZmlyc3QgYmVmb3JlIGZhbGxpbmdcbjU2MzY6XHQgKiBiYWNrLlxuNTYzNzpcdCAqXG41NjM4Olx0ICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYXJlYSBvciAlTlVMTCBpbiBjYXNlIG9mIGVycm9yLlxuNTYzOTpcdCAqL1xuNTY0MDpcdHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxuNTY0MTpcdHtcbjU2NDI6XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTtcbjU2NDM6XHRcdHN0cnVjdCBwYWdlICpwO1xuNTY0NDpcdFxuNTY0NTpcdFx0aWYgKFdBUk5fT05fT05DRShnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX0NPTVAgfCBfX0dGUF9ISUdITUVNKSkpXG41NjQ2Olx0XHRcdGdmcF9tYXNrIFx1MDAyNj0gfihfX0dGUF9DT01QIHwgX19HRlBfSElHSE1FTSk7XG41NjQ3Olx0XG41NjQ4Olx0XHRwID0gYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YobmlkLCBnZnBfbWFzaywgb3JkZXIpO1xuNTY0OTpcdFx0aWYgKCFwKVxuNTY1MDpcdFx0XHRyZXR1cm4gTlVMTDtcbjU2NTE6XHRcdHJldHVybiBtYWtlX2FsbG9jX2V4YWN0KCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwKSwgb3JkZXIsIHNpemUpO1xuNTY1MjpcdH1cbjU2NTM6XHRcbjU2NTQ6XHQvKipcbjU2NTU6XHQgKiBmcmVlX3BhZ2VzX2V4YWN0IC0gcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIHZpYSBhbGxvY19wYWdlc19leGFjdCgpXG41NjU2Olx0ICogQHZpcnQ6IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBhbGxvY19wYWdlc19leGFjdC5cbjU2NTc6XHQgKiBAc2l6ZTogc2l6ZSBvZiBhbGxvY2F0aW9uLCBzYW1lIHZhbHVlIGFzIHBhc3NlZCB0byBhbGxvY19wYWdlc19leGFjdCgpLlxuNTY1ODpcdCAqXG41NjU5Olx0ICogUmVsZWFzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gYWxsb2NfcGFnZXNfZXhhY3QuXG41NjYwOlx0ICovXG41NjYxOlx0dm9pZCBmcmVlX3BhZ2VzX2V4YWN0KHZvaWQgKnZpcnQsIHNpemVfdCBzaXplKVxuNTY2MjpcdHtcbjU2NjM6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXZpcnQ7XG41NjY0Olx0XHR1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHIgJiM0MzsgUEFHRV9BTElHTihzaXplKTtcbjU2NjU6XHRcbjU2NjY6XHRcdHdoaWxlIChhZGRyIFx1MDAzYyBlbmQpIHtcbjU2Njc6XHRcdFx0ZnJlZV9wYWdlKGFkZHIpO1xuNTY2ODpcdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG41NjY5Olx0XHR9XG41NjcwOlx0fVxuNTY3MTpcdEVYUE9SVF9TWU1CT0woZnJlZV9wYWdlc19leGFjdCk7XG41NjcyOlx0XG41NjczOlx0LyoqXG41Njc0Olx0ICogbnJfZnJlZV96b25lX3BhZ2VzIC0gY291bnQgbnVtYmVyIG9mIHBhZ2VzIGJleW9uZCBoaWdoIHdhdGVybWFya1xuNTY3NTpcdCAqIEBvZmZzZXQ6IFRoZSB6b25lIGluZGV4IG9mIHRoZSBoaWdoZXN0IHpvbmVcbjU2NzY6XHQgKlxuNTY3NzpcdCAqIG5yX2ZyZWVfem9uZV9wYWdlcygpIGNvdW50cyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHdoaWNoIGFyZSBiZXlvbmQgdGhlXG41Njc4Olx0ICogaGlnaCB3YXRlcm1hcmsgd2l0aGluIGFsbCB6b25lcyBhdCBvciBiZWxvdyBhIGdpdmVuIHpvbmUgaW5kZXguICBGb3IgZWFjaFxuNTY3OTpcdCAqIHpvbmUsIHRoZSBudW1iZXIgb2YgcGFnZXMgaXMgY2FsY3VsYXRlZCBhczpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMxNQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRE1BIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGNsb3NlbHkgYXQgdGhlc2UgY2hhbmdlcywgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnYXRoZXJlZC4gVGhlIGtleSBhcmVhIG9mIG1vZGlmaWNhdGlvbiBhcHBlYXJzIHRvIGJlIGFyb3VuZCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIERNQSBhbGxvY2F0aW9ucywgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBtb3JlIHByZWNpc2Ugc2l6aW5nIGFuZCBmcmVlaW5nLgoKSW5pdGlhbGx5LCBJIHNlZSB0aGF0IGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYCBoYWQgdGhlIGBfX21lbWluaXRgIHRhZywgbGltaXRpbmcgaXRzIHVzZSB0byBlYXJseSBpbml0aWFsaXphdGlvbiBvciBtZW1vcnkgaG90cGx1ZyBzY2VuYXJpb3MuIFJlbW92aW5nIHRoaXMgdGFnIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgb3BlbnMgdGhlIGRvb3IgZm9yIHJ1bnRpbWUgY2FsbHMsIHBhcnRpY3VsYXJseSBmcm9tIERNQSBhbGxvY2F0b3JzIGxpa2UgYF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AsIGBpb21tdV9kbWFfYWxsb2NfcGFnZXNgLCBhbmQgZnJpZW5kcy4gIFByZXZpb3VzbHksIHRoZXNlIGZ1bmN0aW9ucyB1c2VkIGBhbGxvY19wYWdlc19ub2RlYCB3aXRoIGEgcG93ZXItb2YtdHdvIHBhZ2UgYmxvY2sgYWxsb2NhdGlvbiwgd2hpY2ggaXMgYSBjb21wb3VuZCBvciBidWRkeSBvcmRlciBhbGxvY2F0aW9uLiBCdXQgaXQgZGlkbiYjMzk7dCBoYW5kbGUgdGhlIHVudXNlZCAmIzM0O3RhaWwmIzM0OyBwYWdlcyBlZmZpY2llbnRseS4KCk5vdywgdGhlIGludHJvZHVjdGlvbiBvZiBgbWFrZV9hbGxvY19leGFjdGAgaXMgY3JpdGljYWwuIEl0JiMzOTtzIGludm9rZWQgYnkgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZGAsIGFsbG93aW5nIHRoZSBhbGxvY2F0ZWQgYmxvY2sgdG8gYmUgc3BsaXQgYW5kIGFueSB1bnVzZWQgdGFpbCBwYWdlcyAoYmV5b25kIHRoZSByZXF1ZXN0ZWQgYHNpemVgKSB0byBiZSBmcmVlZC4gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBpbiBtZW1vcnkgdXRpbGl6YXRpb24sIGFzIGl0IGF2b2lkcyBpbnRlcm5hbCBmcmFnbWVudGF0aW9uLgoKRnVydGhlcm1vcmUsIG9uIHRoZSBkZWFsbG9jYXRpb24gc2lkZSwgdGhlIGBkbWFfZnJlZV9jb250aWd1b3VzYCBjYWxscyBhcmUgbm93IHVzaW5nIGBmcmVlX3BhZ2VzX2V4YWN0YCBmb3IgZnJlZWluZywgc3BlY2lmaWNhbGx5IGBmcmVlX3BhZ2VzX2V4YWN0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgc2l6ZSlgIGluc3RlYWQgb2YgdGhlIG9sZCBgX19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSlgLiBUaGlzIGlzIGFub3RoZXIgcGllY2UgdGhhdCBhbGlnbnMgd2l0aCB0aGUgZXhhY3Qtc2l6ZSBhbGxvY2F0aW9uIGxvZ2ljLgoKVGhlIG1haW4gdGFrZWF3YXkgaXMgdGhhdCB0aGlzIGNoYW5nZSBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGJlaGF2aW9yIGFjcm9zcyBETUEgZGlyZWN0LCBETUEgb3BzIGhlbHBlcnMsIERNQSBDTUEsIGFuZCBJT01NVSBETUEgYWxsb2NhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIHRob3NlIGFyZWFzLgoKT25lIG90aGVyIGNvbmNlcm4gaXMgdGhhdCBpZiBhbnkgY2FsbGVyIHBhc3NlcyBgX19HRlBfQ09NUGAgb3IgYF9fR0ZQX0hJR0hNRU1gIGZsYWdzIHRvIGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYCwgaXQgd2lsbCB0cmlnZ2VyIGEgYFdBUk5fT05fT05DRWAgd2hpY2ggbWlnaHQgaW50cm9kdWNlIGtlcm5lbCB3YXJuaW5ncywgd2hpY2ggSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBpbiBtb3JlIGRlcHRoLgoKRmluYWxseSwgSeKAmXZlIGFsc28gY2hlY2tlZCB0aGUgYWZmZWN0ZWQgZmlsZXM6IGBkcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jYCAodW5kZXIgYENPTkZJR19JT01NVV9ETUFgKSwgYGtlcm5lbC9kbWEvY29udGlndW91cy5jYCAoYENPTkZJR19ETUFfQ01BYCksIGBrZXJuZWwvZG1hL2RpcmVjdC5jYCAoY29yZSBETUEgbWFwcGluZyksIGBrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNgIChgQ09ORklHX0RNQV9PUFNfSEVMUEVSU2Agb3IgYENPTkZJR19ETUFfT1BTYC9gQ09ORklHX0hBU19ETUFgKSwgYW5kIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGUgYG1tL3BhZ2VfYWxsb2MuY2AuIEkgd2lsbCBub3cgbG9vayBjbG9zZWx5IGF0IHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgIGFuZCBga2VybmVsL2RtYS9LY29uZmlnYCB0byB1bmRlcnN0YW5kIGFueSBjb25maWd1cmF0aW9uIGltcGFjdHMuIFRoaXMgaXMgYSBjb21wbGV4IGNoYW5nZSB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgc2NydXRpbnkgYWNyb3NzIHZhcmlvdXMgRE1BIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWEtaW9tbXVcXC5vfGNvbnRpZ3VvdXNcXC5vfG9wc19oZWxwZXJzXFwub3xkaXJlY3RcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU9MTMzPW9iai0kKENPTkZJR19QUEMzMilcdFx0JiM0Mzs9IGVudHJ5XzMyLm8gc2V0dXBfMzIubyBlYXJseV8zMi5vIHN0YXRpY19jYWxsLm9cbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU6MTM0Om9iai0kKENPTkZJR19QUEM2NClcdFx0JiM0Mzs9IGRtYS1pb21tdS5vIGlvbW11Lm9cbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUtMTM1LW9iai0kKENPTkZJR19LR0RCKVx0XHQmIzQzOz0ga2dkYi5vXG4tLVxuYXJjaC94ODYvcGNpL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX1BDSV9CSU9TKVx0XHQmIzQzOz0gcGNiaW9zLm9cbmFyY2gveDg2L3BjaS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19QQ0lfTU1DT05GSUcpXHQmIzQzOz0gbW1jb25maWdfJChCSVRTKS5vIGRpcmVjdC5vIG1tY29uZmlnLXNoYXJlZC5vXG5hcmNoL3g4Ni9wY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUENJX0RJUkVDVClcdCYjNDM7PSBkaXJlY3Qub1xuYXJjaC94ODYvcGNpL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1BDSV9PTFBDKVx0XHQmIzQzOz0gb2xwYy5vXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvTWFrZWZpbGU9ND1tbHg1X2liLXkgOj0gYWgubyBcXFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L01ha2VmaWxlLTgtXHQgICAgIGNxLm8gXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L01ha2VmaWxlOjk6XHQgICAgIGRhdGFfZGlyZWN0Lm8gXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L01ha2VmaWxlLTEwLVx0ICAgICBkbS5vIFxcXG4tLVxuZHJpdmVycy9pb21tdS9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfSU9NTVVfREVCVUdGUykgJiM0Mzs9IGlvbW11LWRlYnVnZnMub1xuZHJpdmVycy9pb21tdS9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfSU9NTVVfRE1BKSAmIzQzOz0gZG1hLWlvbW11Lm9cbmRyaXZlcnMvaW9tbXUvTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX0lPTU1VX0lPX1BHVEFCTEUpICYjNDM7PSBpby1wZ3RhYmxlLm9cbi0tXG5kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19SSVNDVl9JTlRDKVx0XHQmIzQzOz0gaXJxLXJpc2N2LWludGMub1xuZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfUklTQ1ZfQVBMSUMpXHRcdCYjNDM7PSBpcnEtcmlzY3YtYXBsaWMtbWFpbi5vIGlycS1yaXNjdi1hcGxpYy1kaXJlY3Qub1xuZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlLTEwNi1vYmotJChDT05GSUdfUklTQ1ZfQVBMSUNfTVNJKVx0XHQmIzQzOz0gaXJxLXJpc2N2LWFwbGljLW1zaS5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTI2PW1seDVfY29yZS0kKENPTkZJR19NTFg1X0NPUkVfRU4pICYjNDM7PSBlbi9ycXQubyBlbi90aXIubyBlbi9yc3MubyBlbi9yeF9yZXMubyBcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS0zMS1cdFx0ZW4veHNrL3NldHVwLm8gZW4veHNrL3J4Lm8gZW4veHNrL3R4Lm8gZW4vZGV2bGluay5vIGVuL3B0cC5vIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU6MzI6XHRcdGVuL3Fvcy5vIGVuL2h0Yi5vIGVuL3RyYXAubyBlbi9mc190dF9yZWRpcmVjdC5vIGVuL3NlbHEubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTMzLVx0XHRsaWIvY3J5cHRvLm8gbGliL3NkLm8gZW4vcGNpZV9jb25nX2V2ZW50Lm9cbi0tXG5kcml2ZXJzL3hlbi9NYWtlZmlsZT00Mj1vYmotJChDT05GSUdfWEVOX0dSQU5UX0RNQV9PUFMpXHRcdCYjNDM7PSBncmFudC1kbWEtb3BzLm9cbmRyaXZlcnMveGVuL01ha2VmaWxlOjQzOm9iai0kKENPTkZJR19YRU5fR1JBTlRfRE1BX0lPTU1VKVx0JiM0Mzs9IGdyYW50LWRtYS1pb21tdS5vXG4tLVxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtOS1cdFx0ZXh0ZW50c19zdGF0dXMubyBmaWxlLm8gZnNtYXAubyBmc3luYy5vIGhhc2gubyBpYWxsb2MubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMDpcdFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG4tLVxuZnMvbmZzL01ha2VmaWxlPTk9bmZzLXkgXHRcdFx0Oj0gY2xpZW50Lm8gZGlyLm8gZmlsZS5vIGdldHJvb3QubyBpbm9kZS5vIHN1cGVyLm8gXFxcbmZzL25mcy9NYWtlZmlsZToxMDpcdFx0XHQgICBpby5vIGRpcmVjdC5vIHBhZ2VsaXN0Lm8gcmVhZC5vIHN5bWxpbmsubyB1bmxpbmsubyBcXFxuZnMvbmZzL01ha2VmaWxlLTExLVx0XHRcdCAgIHdyaXRlLm8gbmFtZXNwYWNlLm8gbW91bnRfY2xudC5vIG5mc3RyYWNlLm8gXFxcbi0tXG5mcy9uaWxmczIvTWFrZWZpbGU9Mz1uaWxmczIteSA6PSBpbm9kZS5vIGZpbGUubyBkaXIubyBzdXBlci5vIG5hbWVpLm8gcGFnZS5vIG1kdC5vIFxcXG5mcy9uaWxmczIvTWFrZWZpbGU6NDpcdGJ0bm9kZS5vIGJtYXAubyBidHJlZS5vIGRpcmVjdC5vIGRhdC5vIHJlY292ZXJ5Lm8gXFxcbmZzL25pbGZzMi9NYWtlZmlsZS01LVx0dGhlX25pbGZzLm8gc2VnYnVmLm8gc2VnbWVudC5vIGNwZmlsZS5vIHN1ZmlsZS5vIFxcXG4tLVxuZnMvc21iL2NsaWVudC9NYWtlZmlsZT0yOT1jaWZzLSQoQ09ORklHX0NJRlNfRlNDQUNIRSkgJiM0Mzs9IGZzY2FjaGUub1xuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0zMC1cbmZzL3NtYi9jbGllbnQvTWFrZWZpbGU6MzE6Y2lmcy0kKENPTkZJR19DSUZTX1NNQl9ESVJFQ1QpICYjNDM7PSBzbWJkaXJlY3Qub1xuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0zMi1cbi0tXG5mcy9zbWIvc21iZGlyZWN0L01ha2VmaWxlLTUtXG5mcy9zbWIvc21iZGlyZWN0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1NNQkRJUkVDVCkgJiM0Mzs9IHNtYmRpcmVjdC5vXG5mcy9zbWIvc21iZGlyZWN0L01ha2VmaWxlLTctXG4tLVxuZnMvc3F1YXNoZnMvTWFrZWZpbGU9OT1zcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19GSUxFX0NBQ0hFKSAmIzQzOz0gZmlsZV9jYWNoZS5vXG5mcy9zcXVhc2hmcy9NYWtlZmlsZToxMDpzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19GSUxFX0RJUkVDVCkgJiM0Mzs9IGZpbGVfZGlyZWN0Lm9cbmZzL3NxdWFzaGZzL01ha2VmaWxlLTExLXNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0RFQ09NUF9TSU5HTEUpICYjNDM7PSBkZWNvbXByZXNzb3Jfc2luZ2xlLm9cbi0tXG5rZXJuZWwvZG1hL01ha2VmaWxlLTItXG5rZXJuZWwvZG1hL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0hBU19ETUEpXHRcdFx0JiM0Mzs9IG1hcHBpbmcubyBkaXJlY3Qub1xua2VybmVsL2RtYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ETUFfT1BTX0hFTFBFUlMpXHRcdCYjNDM7PSBvcHNfaGVscGVycy5vXG5rZXJuZWwvZG1hL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX0FSQ0hfSEFTX0RNQV9PUFMpXHRcdCYjNDM7PSBkdW1teS5vXG5rZXJuZWwvZG1hL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0RNQV9DTUEpXHRcdFx0JiM0Mzs9IGNvbnRpZ3VvdXMub1xua2VybmVsL2RtYS9NYWtlZmlsZS03LW9iai0kKENPTkZJR19ETUFfREVDTEFSRV9DT0hFUkVOVClcdCYjNDM7PSBjb2hlcmVudC5vXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX0JSSURHRV9FQlRfRE5BVCkgJiM0Mzs9IGVidF9kbmF0Lm9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19CUklER0VfRUJUX1JFRElSRUNUKSAmIzQzOz0gZWJ0X3JlZGlyZWN0Lm9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlLTM2LW9iai0kKENPTkZJR19CUklER0VfRUJUX1NOQVQpICYjNDM7PSBlYnRfc25hdC5vXG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jPTM2NzA9c3RhdGljIGludCBkZWNvZGVfTU9TRE9wUmVwbHkoY29uc3Qgc3RydWN0IGNlcGhfbXNnICptc2csIHN0cnVjdCBNT1NET3BSZXBseSAqbSlcbi0tXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMzczNi1cdH0gZWxzZSB7XG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6MzczNzpcdFx0Y2VwaF9vbG9jX2luaXQoXHUwMDI2bS1cdTAwM2VyZWRpcmVjdC5vbG9jKTtcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zNzM4LVx0fVxuLS1cbm5ldC9jZXBoL29zZF9jbGllbnQuYz0zNzUwPXN0YXRpYyB2b2lkIGhhbmRsZV9yZXBseShzdHJ1Y3QgY2VwaF9vc2QgKm9zZCwgc3RydWN0IGNlcGhfbXNnICptc2cpXG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM3NzUtXG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6Mzc3NjpcdG0ucmVkaXJlY3Qub2xvYy5wb29sX25zID0gcmVxLVx1MDAzZXJfdC50YXJnZXRfb2xvYy5wb29sX25zO1xubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM3NzctXHRyZXQgPSBkZWNvZGVfTU9TRE9wUmVwbHkobXNnLCBcdTAwMjZtKTtcbm5ldC9jZXBoL29zZF9jbGllbnQuYzozNzc4Olx0bS5yZWRpcmVjdC5vbG9jLnBvb2xfbnMgPSBOVUxMO1xubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM3NzktXHRpZiAocmV0KSB7XG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM4MDAtXG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6MzgwMTpcdGlmICghY2VwaF9vbG9jX2VtcHR5KFx1MDAyNm0ucmVkaXJlY3Qub2xvYykpIHtcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zODAyLVx0XHRkb3V0KFwmIzM0O3JlcSAlcCB0aWQgJWxsdSByZWRpcmVjdCBwb29sICVsbGRcXG5cJiMzNDssIHJlcSwgcmVxLVx1MDAzZXJfdGlkLFxubmV0L2NlcGgvb3NkX2NsaWVudC5jOjM4MDM6XHRcdCAgICAgbS5yZWRpcmVjdC5vbG9jLnBvb2wpO1xubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM4MDQtXHRcdHVubGlua19yZXF1ZXN0KG9zZCwgcmVxKTtcbi0tXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMzgxMC1cdFx0ICovXG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6MzgxMTpcdFx0cmVxLVx1MDAzZXJfdC50YXJnZXRfb2xvYy5wb29sID0gbS5yZWRpcmVjdC5vbG9jLnBvb2w7XG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMzgxMi1cdFx0cmVxLVx1MDAzZXJfZmxhZ3MgfD0gQ0VQSF9PU0RfRkxBR19SRURJUkVDVEVEIHxcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTYwPW9iai0kKENPTkZJR19ORl9OQVQpICYjNDM7PSBuZl9uYXQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo2MTpuZl9uYXQtJChDT05GSUdfTkZfTkFUX1JFRElSRUNUKSAmIzQzOz0gbmZfbmF0X3JlZGlyZWN0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNjItbmZfbmF0LSQoQ09ORklHX05GX05BVF9NQVNRVUVSQURFKSAmIzQzOz0gbmZfbmF0X21hc3F1ZXJhZGUub1xuLS1cbnNhbXBsZXMvZnRyYWNlL01ha2VmaWxlLTItXG5zYW1wbGVzL2Z0cmFjZS9NYWtlZmlsZTozOm9iai0kKENPTkZJR19TQU1QTEVfRlRSQUNFX0RJUkVDVCkgJiM0Mzs9IGZ0cmFjZS1kaXJlY3Qub1xuc2FtcGxlcy9mdHJhY2UvTWFrZWZpbGUtNC1vYmotJChDT05GSUdfU0FNUExFX0ZUUkFDRV9ESVJFQ1QpICYjNDM7PSBmdHJhY2UtZGlyZWN0LXRvby5vXG4tLVxuc2NyaXB0cy9zYm9tL3Rlc3RzL2NtZF9ncmFwaC90ZXN0X3NhdmVkY21kX3BhcnNlci5weT0xMz1jbGFzcyBUZXN0U2F2ZWRDbWRQYXJzZXIodW5pdHRlc3QuVGVzdENhc2UpOlxuLS1cbnNjcmlwdHMvc2JvbS90ZXN0cy9jbWRfZ3JhcGgvdGVzdF9zYXZlZGNtZF9wYXJzZXIucHktMTk0LSAgICBkZWYgdGVzdF9hcl9wcmludGZfbmVzdGVkKHNlbGYpOlxuc2NyaXB0cy9zYm9tL3Rlc3RzL2NtZF9ncmFwaC90ZXN0X3NhdmVkY21kX3BhcnNlci5weToxOTU6ICAgICAgICBjbWQgPSAmIzM5O3JtIC1mIGFyY2gveDg2L3BjaS9idWlsdC1pbi5hOyAgcHJpbnRmIFwmIzM0O2FyY2gveDg2L3BjaS8lcyBcJiMzNDsgaTM4Ni5vIGluaXQubyBtbWNvbmZpZ182NC5vIGRpcmVjdC5vIG1tY29uZmlnLXNoYXJlZC5vIGZpeHVwLm8gYWNwaS5vIC4uLlxuc2NyaXB0cy9zYm9tL3Rlc3RzL2NtZF9ncmFwaC90ZXN0X3NhdmVkY21kX3BhcnNlci5weToxOTY6ICAgICAgICBleHBlY3RlZCA9IFwmIzM0O2FyY2gveDg2L3BjaS9pMzg2Lm8gYXJjaC94ODYvcGNpL2luaXQubyBhcmNoL3g4Ni9wY2kvbW1jb25maWdfNjQubyBhcmNoL3g4Ni9wY2kvZGlyZWN0Lm8gYXJjaC94ODYvcGNpL21tY29uZmlnLXNoYXJlZC5vIGFyYy4uLlxuc2NyaXB0cy9zYm9tL3Rlc3RzL2NtZF9ncmFwaC90ZXN0X3NhdmVkY21kX3BhcnNlci5weS0xOTctICAgICAgICBzZWxmLl9hc3NlcnRfcGFyc2luZyhjbWQsIGV4cGVjdGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS2VybmVsIERNQSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpcyBga2VybmVsL2RtYS9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBzdWJzeXN0ZW0gbGl2ZSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIHdoYXQgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBmb3IgZGlmZmVyZW50IGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMgYW5kIHVzZSBjYXNlcy4gVGhpcyBLY29uZmlnIGZpbGUgaXMgdGhlIGxpbmNocGluIGZvciBjb250cm9sbGluZyB0aGUgRE1BIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgIFRoZSBwcmltYXJ5IERNQSBjb250cm9sbGVyIHNlbGVjdGlvbiBhbmQgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpb25zLgoqICAgVGhlIG9wdGlvbnMgcmVsYXRlZCB0byBkaWZmZXJlbnQgRE1BIGVuZ2luZXMuCiogICBBbnkgZmxhZ3MgcmVsYXRlZCB0byBkZWJ1Z2dpbmcgYW5kIGVycm9yIGhhbmRsaW5nLgoqICAgSG93IHRoZSBETUEgZnJhbWV3b3JrIGludGVyYWN0cyB3aXRoIG90aGVyIGNvcmUga2VybmVsIGNvbXBvbmVudHMuCiogICBBbnkgZGVmYXVsdCB2YWx1ZXMgYW5kIHBvdGVudGlhbCBvdmVycmlkZXMuCiogICBJZiB0aGVyZSBhcmUgYW55IG5ldyBmZWF0dXJlcyBpbiBETUEgdGhhdCBoYXZlIGJlZW4gaW50cm9kdWNlZC4KCkJ5IG1ldGhvZGljYWxseSByZXZpZXdpbmcgdGhlIGBLY29uZmlnYCBmaWxlLCBJIHNob3VsZCBnYWluIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIERNQSBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCwgYW5kIHdoZXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgbXkgd29yayBjYW4gYmUgZm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2RtYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIE5PX0RNQVxuICAgNDpcdFx0Ym9vbFxuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBIQVNfRE1BXG4gICA3Olx0XHRib29sXG4gICA4Olx0XHRkZXBlbmRzIG9uICFOT19ETUFcbiAgIDk6XHRcdGRlZmF1bHQgeVxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBETUFfT1BTX0hFTFBFUlNcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcbiAgMTQ6XHQjXG4gIDE1Olx0IyBJT01NVSBkcml2ZXJzIHRoYXQgY2FuIGJ5cGFzcyB0aGUgSU9NTVUgY29kZSBhbmQgb3B0aW9uYWxseSB1c2UgdGhlIGRpcmVjdFxuICAxNjpcdCMgbWFwcGluZyBmYXN0IHBhdGggc2hvdWxkIHNlbGVjdCB0aGlzIG9wdGlvbiBhbmQgc2V0IHRoZSBkbWFfb3BzX2J5cGFzc1xuICAxNzpcdCMgZmxhZyBpbiBzdHJ1Y3QgZGV2aWNlIHdoZXJlIGFwcGxpY2FibGVcbiAgMTg6XHQjXG4gIDE5Olx0Y29uZmlnIERNQV9PUFNfQllQQVNTXG4gIDIwOlx0XHRib29sXG4gIDIxOlx0XG4gIDIyOlx0IyBMZXRzIHBsYXRmb3JtIElPTU1VIGRyaXZlciBjaG9vc2UgYmV0d2VlbiBieXBhc3MgYW5kIElPTU1VXG4gIDIzOlx0Y29uZmlnIEFSQ0hfSEFTX0RNQV9NQVBfRElSRUNUXG4gIDI0Olx0XHRib29sXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIE5FRURfU0dfRE1BX0ZMQUdTXG4gIDI3Olx0XHRib29sXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIE5FRURfU0dfRE1BX0xFTkdUSFxuICAzMDpcdFx0Ym9vbFxuICAzMTpcdFxuICAzMjpcdGNvbmZpZyBORUVEX0RNQV9NQVBfU1RBVEVcbiAgMzM6XHRcdGJvb2xcbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgQVJDSF9ETUFfQUREUl9UXzY0QklUXG4gIDM2Olx0XHRkZWZfYm9vbCA2NEJJVCB8fCBQSFlTX0FERFJfVF82NEJJVFxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBBUkNIX0hBU19ETUFfU0VUX01BU0tcbiAgMzk6XHRcdGJvb2xcbiAgNDA6XHRcbiAgNDE6XHQjXG4gIDQyOlx0IyBTZWxlY3QgdGhpcyBvcHRpb24gaWYgdGhlIGFyY2hpdGVjdHVyZSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIGZvclxuICA0MzpcdCMgRE1BX0FUVFJfV1JJVEVfQ09NQklORS4gIE5vcm1hbGx5IHRoZSBcJiMzNDt1bmNhY2hlZFwmIzM0OyBtYXBwaW5nIHNob3VsZCBiZSB3aGF0XG4gIDQ0Olx0IyBwZW9wbGUgdGhpbmsgb2Ygd2hlbiBzYXlpbmcgd3JpdGUgY29tYmluZSwgc28gdmVyeSBmZXcgcGxhdGZvcm1zIHNob3VsZFxuICA0NTpcdCMgbmVlZCB0byBlbmFibGUgdGhpcy5cbiAgNDY6XHQjXG4gIDQ3Olx0Y29uZmlnIEFSQ0hfSEFTX0RNQV9XUklURV9DT01CSU5FXG4gIDQ4Olx0XHRib29sXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIERNQV9ERUNMQVJFX0NPSEVSRU5UXG4gIDUxOlx0XHRib29sXG4gIDUyOlx0XG4gIDUzOlx0Y29uZmlnIEFSQ0hfSEFTX1NFVFVQX0RNQV9PUFNcbiAgNTQ6XHRcdGJvb2xcbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgQVJDSF9IQVNfVEVBUkRPV05fRE1BX09QU1xuICA1NzpcdFx0Ym9vbFxuICA1ODpcdFxuICA1OTpcdGNvbmZpZyBBUkNIX0hBU19TWU5DX0RNQV9GT1JfREVWSUNFXG4gIDYwOlx0XHRib29sXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIEFSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFVcbiAgNjM6XHRcdGJvb2xcbiAgNjQ6XHRcdHNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEVcbiAgNjU6XHRcbiAgNjY6XHRjb25maWcgQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTExcbiAgNjc6XHRcdGJvb2xcbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgQVJDSF9IQVNfRE1BX1BSRVBfQ09IRVJFTlRcbiAgNzA6XHRcdGJvb2xcbiAgNzE6XHRcbiAgNzI6XHRjb25maWcgQVJDSF9IQVNfRk9SQ0VfRE1BX1VORU5DUllQVEVEXG4gIDczOlx0XHRib29sXG4gIDc0Olx0XG4gIDc1Olx0Y29uZmlnIEFSQ0hfSEFTX0JBVENIRURfRE1BX1NZTkNcbiAgNzY6XHRcdGJvb2xcbiAgNzc6XHRcbiAgNzg6XHQjXG4gIDc5Olx0IyBTZWxlY3QgdGhpcyBvcHRpb24gaWYgdGhlIGFyY2hpdGVjdHVyZSBhc3N1bWVzIERNQSBkZXZpY2VzIGFyZSBjb2hlcmVudFxuICA4MDpcdCMgYnkgZGVmYXVsdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQ2hlY2tpbmcgYGtlcm5lbC9kbWEvS2NvbmZpZ2AqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIERNQSBzdWJzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGRlZmluZWQgYW5kIGhvdyBpdCYjMzk7cyBzdHJ1Y3R1cmVkIHdpdGhpbiBga2VybmVsL2RtYS9LY29uZmlnYC4gVGhpcyBmaWxlIGlzIGNydWNpYWw7IGl0IGRpY3RhdGVzIHdoYXQgZnVuY3Rpb25hbGl0eSBjYW4gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHJlbGF0ZWQgdG8gRGlyZWN0IE1lbW9yeSBBY2Nlc3MuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgRE1BIGNvbnRyb2xsZXJzLCB0aGUgdmFyaW91cyBkZXZpY2UgZHJpdmVycywgYW5kIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgpJJiMzOTtsbCBiZSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3I6CgoqICAgKipUb3AtbGV2ZWwgb3B0aW9uczoqKiBXaGF0IGFyZSB0aGUgbWFpbiBmZWF0dXJlcyBlbmFibGVkIG9yIGRpc2FibGVkIGhlcmU/IEFyZSB0aGVyZSBvdmVyYWxsIHN3aXRjaGVzIGZvciB0aGUgRE1BIHN1YnN5c3RlbSBvciBzcGVjaWZpYyBjb250cm9sbGVyIGZhbWlsaWVzPwoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBhcmUgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBvcHRpb25zPyBEb2VzIGVuYWJsaW5nIG9uZSBvcHRpb24gYXV0b21hdGljYWxseSBlbmFibGUgb3RoZXJzPyBBcmUgdGhlcmUgY29uZmxpY3RzIHRoYXQgbmVlZCB0byBiZSB1bmRlcnN0b29kPwoqICAgKipEZWZhdWx0czoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBkaWZmZXJlbnQgb3B0aW9ucz8gVGhhdCYjMzk7bGwgaGVscCB1bmRlcnN0YW5kIHRoZSBjb21tb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIERNQSBzdWJzeXN0ZW0uCiogICAqKkhlbHAgdGV4dDoqKiBBcmUgdGhlIGRlc2NyaXB0aW9ucyBmb3IgdGhlIG9wdGlvbnMgY2xlYXIgYW5kIGRldGFpbGVkIGVub3VnaD8gVGhpcyB3aWxsIGhlbHAgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgdXNlIGFuZCBlZmZlY3RzIG9mIGVhY2ggb3B0aW9uIGZvciBkaWZmZXJlbnQgaGFyZHdhcmUgYW5kIHVzZSBjYXNlcy4KKiAgICoqQXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnM6KiogSXMgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyB0YXJnZXRlZCB0byBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzLCBhbmQgaG93IHRoYXQgaXMgaGFuZGxlZD8KKiAgICoqTmV3IG9yIGNoYW5nZWQgb3B0aW9uczoqKiBBbnkgcmVjZW50IGNvbW1pdHMgdGhhdCBoYXZlIGFkZGVkIG9yIG1vZGlmaWVkIG9wdGlvbnMsIGFuZCB3aGF0IHJlYXNvbmluZyB3YXMgYmVoaW5kIHRob3NlIGNoYW5nZXMuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyB0aGUgRE1BIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZCBhbmQgaG93IGl0IGFsbG93cyBkZXZlbG9wZXJzIHRvIGN1c3RvbWl6ZSB0aGUgRE1BIGZ1bmN0aW9uYWxpdHkgaW4gdGhlaXIga2VybmVscy4gVGhpcyB3aWxsIGluZm9ybSBteSBkZWNpc2lvbnMgb24gaG93IHRvIGludGVncmF0ZSB0aGUgRE1BIHN5c3RlbSB3aXRoIG90aGVyIGNvbXBvbmVudHMgb3IgdHJvdWJsZXNob290IGFueSBETUEtcmVsYXRlZCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2RtYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MTpcdCNcbiAgODI6XHRjb25maWcgQVJDSF9ETUFfREVGQVVMVF9DT0hFUkVOVFxuICA4MzpcdFx0Ym9vbFxuICA4NDpcdFxuICA4NTpcdGNvbmZpZyBTV0lPVExCXG4gIDg2Olx0XHRib29sXG4gIDg3Olx0XHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXG4gIDg4Olx0XG4gIDg5Olx0Y29uZmlnIFNXSU9UTEJfREVGQVVMVF9TSVpFX01CXG4gIDkwOlx0XHRpbnQgXCYjMzQ7RGVmYXVsdCBTV0lPVExCIGJvdW5jZSBidWZmZXIgc2l6ZSBpbiBNQlwmIzM0O1xuICA5MTpcdFx0ZGVwZW5kcyBvbiBTV0lPVExCXG4gIDkyOlx0XHRyYW5nZSAxIDY0XG4gIDkzOlx0XHRkZWZhdWx0IDY0XG4gIDk0Olx0XHRoZWxwXG4gIDk1Olx0XHQgIFNldHMgdGhlIGRlZmF1bHQgc2l6ZSBvZiB0aGUgc29mdHdhcmUgSU8gVExCIChTV0lPVExCKSBib3VuY2UgYnVmZmVyXG4gIDk2Olx0XHQgIHBvb2wgYWxsb2NhdGVkIGF0IGJvb3QgdGltZS4gVGhlIGRlZmF1bHQgaXMgNjQgTUIuXG4gIDk3Olx0XG4gIDk4Olx0XHQgIE9uIG1lbW9yeS1jb25zdHJhaW5lZCBlbWJlZGRlZCBvciBtb2JpbGUgcGxhdGZvcm1zIChlLmcuLCB0aG9zZSB3aXRoXG4gIDk5Olx0XHQgIGEgaGFyZHdhcmUgSU9NTVUgc3VjaCBhcyBBUk0gU01NVSBjb3ZlcmluZyBtb3N0IERNQS1jYXBhYmxlIGRldmljZXMpLFxuIDEwMDpcdFx0ICBhIHNtYWxsZXIgdmFsdWUgc3VjaCBhcyA0IG9yIDggTUIgbWF5IGJlIHN1ZmZpY2llbnQuIFRoZSBTV0lPVExCIGlzXG4gMTAxOlx0XHQgIHRoZW4gb25seSBuZWVkZWQgZm9yIGRldmljZXMgdGhhdCBieXBhc3MgdGhlIElPTU1VIG9yIGhhdmUgcmVzdHJpY3RlZFxuIDEwMjpcdFx0ICBETUEgYWRkcmVzcyByYW5nZXMuXG4gMTAzOlx0XG4gMTA0Olx0XHQgIFRoZSBtaW5pbXVtIGFsbG93ZWQgdmFsdWUgaXMgMSBNQi4gVGhpcyBjb21waWxlLXRpbWUgZGVmYXVsdCBjYW4gYmVcbiAxMDU6XHRcdCAgb3ZlcnJpZGRlbiBhdCBydW50aW1lIHVzaW5nIHRoZSBcJiMzNDtzd2lvdGxiPVx1MDAzY25zbGFic1x1MDAzZVwmIzM0OyBrZXJuZWwgY29tbWFuZCBsaW5lXG4gMTA2Olx0XHQgIHBhcmFtZXRlci4gUmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbiAxMDc6XHRcdCAgZm9yIGRldGFpbHMuXG4gMTA4Olx0XG4gMTA5Olx0XHQgIElmIHVuc3VyZSwgbGVhdmUgYXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgNjQuXG4gMTEwOlx0XG4gMTExOlx0Y29uZmlnIFNXSU9UTEJfRFlOQU1JQ1xuIDExMjpcdFx0Ym9vbCBcJiMzNDtEeW5hbWljIGFsbG9jYXRpb24gb2YgRE1BIGJvdW5jZSBidWZmZXJzXCYjMzQ7XG4gMTEzOlx0XHRkZWZhdWx0IG5cbiAxMTQ6XHRcdGRlcGVuZHMgb24gU1dJT1RMQlxuIDExNTpcdFx0aGVscFxuIDExNjpcdFx0ICBUaGlzIGVuYWJsZXMgZHluYW1pYyByZXNpemluZyBvZiB0aGUgc29mdHdhcmUgSU8gVExCLiBUaGUga2VybmVsXG4gMTE3Olx0XHQgIHN0YXJ0cyB3aXRoIG9uZSBtZW1vcnkgcG9vbCBhdCBib290IGFuZCBpdCB3aWxsIGFsbG9jYXRlIGFkZGl0aW9uYWxcbiAxMTg6XHRcdCAgcG9vbHMgYXMgbmVlZGVkLiBUbyByZWR1Y2UgcnVuLXRpbWUga2VybmVsIG1lbW9yeSByZXF1aXJlbWVudHMsIHlvdVxuIDExOTpcdFx0ICBtYXkgaGF2ZSB0byBzcGVjaWZ5IGEgc21hbGxlciBzaXplIG9mIHRoZSBpbml0aWFsIHBvb2wgdXNpbmdcbiAxMjA6XHRcdCAgXCYjMzQ7c3dpb3RsYj1cJiMzNDsgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuXG4gMTIxOlx0XG4gMTIyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTIzOlx0XG4gMTI0Olx0Y29uZmlnIERNQV9CT1VOQ0VfVU5BTElHTkVEX0tNQUxMT0NcbiAxMjU6XHRcdGJvb2xcbiAxMjY6XHRcdGRlcGVuZHMgb24gU1dJT1RMQlxuIDEyNzpcdFxuIDEyODpcdGNvbmZpZyBETUFfTkVFRF9TWU5DXG4gMTI5Olx0XHRkZWZfYm9vbCBBUkNIX0hBU19TWU5DX0RNQV9GT1JfREVWSUNFIHx8IEFSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFUgfHwgXFxcbiAxMzA6XHRcdFx0IEFSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFVfQUxMIHx8IERNQV9BUElfREVCVUcgfHwgXFxcbiAxMzE6XHRcdFx0IEFSQ0hfSEFTX0RNQV9PUFMgfHwgU1dJT1RMQlxuIDEzMjpcdFxuIDEzMzpcdGNvbmZpZyBETUFfUkVTVFJJQ1RFRF9QT09MXG4gMTM0Olx0XHRib29sIFwmIzM0O0RNQSBSZXN0cmljdGVkIFBvb2xcJiMzNDtcbiAxMzU6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IE9GX1JFU0VSVkVEX01FTSBcdTAwMjZcdTAwMjYgU1dJT1RMQlxuIDEzNjpcdFx0aGVscFxuIDEzNzpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgcmVzdHJpY3RlZCBETUEgcG9vbHMgd2hpY2ggcHJvdmlkZSBhIGxldmVsIG9mXG4gMTM4Olx0XHQgIERNQSBtZW1vcnkgcHJvdGVjdGlvbiBvbiBzeXN0ZW1zIHdpdGggbGltaXRlZCBoYXJkd2FyZSBwcm90ZWN0aW9uXG4gMTM5Olx0XHQgIGNhcGFiaWxpdGllcywgc3VjaCBhcyB0aG9zZSBsYWNraW5nIGFuIElPTU1VLlxuIDE0MDpcdFxuIDE0MTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWVcbiAxNDI6XHRcdCAgXHUwMDNjRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Jlc2VydmVkLW1lbW9yeS9yZXNlcnZlZC1tZW1vcnkudHh0XHUwMDNlXG4gMTQzOlx0XHQgIGFuZCBcdTAwM2NrZXJuZWwvZG1hL3N3aW90bGIuY1x1MDAzZS5cbiAxNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7blwmIzM0Oy5cbiAxNDU6XHRcbiAxNDY6XHQjXG4gMTQ3Olx0IyBTaG91bGQgYmUgc2VsZWN0ZWQgaWYgd2UgY2FuIG1tYXAgbm9uLWNvaGVyZW50IG1hcHBpbmdzIHRvIHVzZXJzcGFjZS5cbiAxNDg6XHQjIFRoZSBvbmx5IHRoaW5nIHRoYXQgaXMgcmVhbGx5IHJlcXVpcmVkIGlzIGEgd2F5IHRvIHNldCBhbiB1bmNhY2hlZCBiaXRcbiAxNDk6XHQjIGluIHRoZSBwYWdldGFibGVzXG4gMTUwOlx0I1xuIDE1MTpcdGNvbmZpZyBETUFfTk9OQ09IRVJFTlRfTU1BUFxuIDE1MjpcdFx0ZGVmYXVsdCB5IGlmICFNTVVcbiAxNTM6XHRcdGJvb2xcbiAxNTQ6XHRcbiAxNTU6XHRjb25maWcgRE1BX0NPSEVSRU5UX1BPT0xcbiAxNTY6XHRcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuIDE1NzpcdFx0Ym9vbFxuIDE1ODpcdFxuIDE1OTpcdGNvbmZpZyBETUFfR0xPQkFMX1BPT0xcbiAxNjA6XHRcdHNlbGVjdCBETUFfREVDTEFSRV9DT0hFUkVOVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEwNwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yIChDTUEpIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG5haWwgZG93biBob3cgdGhlIENNQSBjb25maWd1cmF0aW9uIGlzIGhhbmRsZWQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBlaXRoZXIgYGtlcm5lbC9kbWEvS2NvbmZpZ2Agb3IsIGlmIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNpZGUgbW9yZSBnZW5lcmFsbHksIGBtbS9LY29uZmlnYC4gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIGxvY2F0aW9ucyBmb3IgZGVmaW5pbmcgYW5kIGVuYWJsaW5nIGBDT05GSUdfRE1BX0NNQWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgcG9zc2libGUgaW50cmljYWNpZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBib29sYCBvciBgdHJpc3RhdGVgIGRlZmluaXRpb24sIGxpa2VseSB3aXRoIHNvbWUgc3VwcG9ydGluZyBoZWxwIHRleHQuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBJIG1pZ2h0IHNlZSBjb25kaXRpb25hbCBibG9ja3MgYmFzZWQgb24gc3BlY2lmaWMgQ1BVIGZlYXR1cmVzIG9yIG1lbW9yeSBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIFRoaXMgc2hvdWxkIHF1aWNrbHkgY2xhcmlmeSB0aGUgY3VycmVudCBzdGF0ZSBvZiBETUEgQ01BIGluIHRoaXMga2VybmVsIGJ1aWxkIGFuZCBob3cgaXQmIzM5O3MgY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERNQV9DTUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2RtYS9LY29uZmlnPTE3Mz1jb25maWcgQVJDSF9IQVNfRE1BX0FMTE9DXG4tLVxua2VybmVsL2RtYS9LY29uZmlnLTE3OC1cbmtlcm5lbC9kbWEvS2NvbmZpZzoxNzk6Y29uZmlnIERNQV9DTUFcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODAtXHRib29sIFwmIzM0O0RNQSBDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIERNQSBLY29uZmlnKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdGhlIGFuc3dlciBsaWVzIHdpdGhpbiB0aGUgRE1BIGNvbmZpZ3VyYXRpb24sIHNvIGxldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvZG1hL0tjb25maWdgLiBBbmQsIGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHNpbWlsYXIgaXNzdWVzLCBJJiMzOTtsbCBzdGFydCBteSBkZXRhaWxlZCByZXZpZXcgYXJvdW5kIGxpbmUgMTc5LiBIb3BlZnVsbHksIHRoZSBhbnN3ZXIgaXMgd2l0aGluIHRoYXQgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZG1hL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3NTpcdFx0ZGVwZW5kcyBvbiAhRE1BX0RJUkVDVF9SRU1BUFxuIDE3NjpcdFx0ZGVwZW5kcyBvbiAhRE1BX0dMT0JBTF9QT09MXG4gMTc3Olx0XHRib29sXG4gMTc4Olx0XG4gMTc5Olx0Y29uZmlnIERNQV9DTUFcbiAxODA6XHRcdGJvb2wgXCYjMzQ7RE1BIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclwmIzM0O1xuIDE4MTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0RNQV9DT05USUdVT1VTIFx1MDAyNlx1MDAyNiBDTUFcbiAxODI6XHRcdGhlbHBcbiAxODM6XHRcdCAgVGhpcyBlbmFibGVzIHRoZSBDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3Igd2hpY2ggYWxsb3dzIGRyaXZlcnNcbiAxODQ6XHRcdCAgdG8gYWxsb2NhdGUgYmlnIHBoeXNpY2FsbHktY29udGlndW91cyBibG9ja3Mgb2YgbWVtb3J5IGZvciB1c2Ugd2l0aFxuIDE4NTpcdFx0ICBoYXJkd2FyZSBjb21wb25lbnRzIHRoYXQgZG8gbm90IHN1cHBvcnQgSS9PIG1hcCBub3Igc2NhdHRlci1nYXRoZXIuXG4gMTg2Olx0XG4gMTg3Olx0XHQgIFlvdSBjYW4gZGlzYWJsZSBDTUEgYnkgc3BlY2lmeWluZyBcJiMzNDtjbWE9MFwmIzM0OyBvbiB0aGUga2VybmVsJiMzOTtzIGNvbW1hbmRcbiAxODg6XHRcdCAgbGluZS5cbiAxODk6XHRcbiAxOTA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIFx1MDAzY2tlcm5lbC9kbWEvY29udGlndW91cy5jXHUwMDNlLlxuIDE5MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBcJiMzNDtuXCYjMzQ7LlxuIDE5MjpcdFxuIDE5MzpcdGlmICBETUFfQ01BXG4gMTk0Olx0XG4gMTk1Olx0Y29uZmlnIERNQV9OVU1BX0NNQVxuIDE5NjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc2VwYXJhdGUgRE1BIENvbnRpZ3VvdXMgTWVtb3J5IEFyZWEgZm9yIE5VTUEgTm9kZVwmIzM0O1xuIDE5NzpcdFx0ZGVwZW5kcyBvbiBOVU1BXG4gMTk4Olx0XHRoZWxwXG4gMTk5Olx0XHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBnZXQgbnVtYSBDTUEgYXJlYXMgc28gdGhhdCBOVU1BIGRldmljZXNcbiAyMDA6XHRcdCAgY2FuIGdldCBsb2NhbCBtZW1vcnkgYnkgRE1BIGNvaGVyZW50IEFQSXMuXG4gMjAxOlx0XG4gMjAyOlx0XHQgIFlvdSBjYW4gc2V0IHRoZSBzaXplIG9mIHBlcm51bWEgQ01BIGJ5IHNwZWNpZnlpbmcgXCYjMzQ7Y21hX3Blcm51bWE9c2l6ZVwmIzM0O1xuIDIwMzpcdFx0ICBvciBzZXQgdGhlIG5vZGUgaWQgYW5kIGl0cyBzaXplIG9mIENNQSBieSBzcGVjaWZ5aW5nIFwmIzM0O251bWFfY21hPVxuIDIwNDpcdFx0ICBcdTAwM2Nub2RlXHUwMDNlOnNpemVbLFx1MDAzY25vZGVcdTAwM2U6c2l6ZV1cJiMzNDsgb24gdGhlIGtlcm5lbCYjMzk7cyBjb21tYW5kIGxpbmUuIEFuZCBpblxuIDIwNTpcdFx0ICByYXJlIGNhc2UgdGhhdCB0aGUgYWJvdmUgMiBhcmUgYm90aCBzZXR1cCwgdGhlbiB0aGUgXCYjMzQ7bnVtYV9jbWE9XCYjMzQ7XG4gMjA2Olx0XHQgIHRha2VzIHByaW9yaXR5IGZvciB0aGUgc3BlY2lmaWVkIG51bWEgbm9kZXMuXG4gMjA3Olx0XG4gMjA4Olx0Y29uZmlnIENNQV9TSVpFX1BFUk5VTUFcbiAyMDk6XHRcdGJvb2wgXCYjMzQ7RGVmYXVsdCBDTUEgYXJlYSBwZXIgTlVNQSBub2RlXCYjMzQ7XG4gMjEwOlx0XHRkZXBlbmRzIG9uIERNQV9OVU1BX0NNQVxuIDIxMTpcdFx0ZGVmYXVsdCB5XG4gMjEyOlx0XHRoZWxwXG4gMjEzOlx0XHQgIE9uIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gb25lIE5VTUEgbm9kZSwgdGhlIHNlbGVjdGVkIENNQVxuIDIxNDpcdFx0ICBhcmVhIHNpemUgd2lsbCBiZSBhbHNvIGFsbG9jYXRlZCBvbiBlYWNoIGFkZGl0aW9uYWwgbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgSU9NTVUgRE1BIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgSU9NTVVfRE1BYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byB0aGUgYGRyaXZlcnMvaW9tbXUvS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2suIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyBpdCBoYXMuIEtub3dpbmcgdGhpcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgSU9NTVUgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9NTVVfRE1BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L0tjb25maWc9MTQ4PWNvbmZpZyBPRl9JT01NVVxuLS1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xNTItIyBJT01NVS1hZ25vc3RpYyBETUEtbWFwcGluZyBsYXllclxuZHJpdmVycy9pb21tdS9LY29uZmlnOjE1Mzpjb25maWcgSU9NTVVfRE1BXG5kcml2ZXJzL2lvbW11L0tjb25maWctMTU0LVx0ZGVmX2Jvb2wgQVJNNjQgfHwgWDg2IHx8IFMzOTBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NTQKCQkJCQkJCW91dHB1dDogMjY2CgkJCQkJCQl0aG91Z2h0czogMTczNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2VzIGZvciBGb2N1c2VkIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNoYW5nZXMgYW5kIGlzb2xhdGUgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIGZ1enppbmcuICBJJiMzOTttIGxvb2tpbmcgYXQgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgIGFuZCBvdGhlciBhZmZlY3RlZCBmdW5jdGlvbnMuICBTcGVjaWZpY2FsbHksIEkmIzM5O3ZlIGlkZW50aWZpZWQ6CgoqICAgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLgoqICAgYGRtYV9mcmVlX2NvbnRpZ3VvdXNgIGluIGBrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhgLgoqICAgYF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AgKHN0YXRpYykgaW4gYGtlcm5lbC9kbWEvZGlyZWN0LmNgLCBjYWxsZWQgYnkgYGRtYV9kaXJlY3RfYWxsb2NgLCBgZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AsIGFuZCBgZG1hX2RpcmVjdF9hbGxvY19ub19tYXBwaW5nYC4KKiAgIGBkbWFfY29tbW9uX2FsbG9jX3BhZ2VzYCBpbiBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYC4KKiAgIGBpb21tdV9kbWFfYWxsb2NfcGFnZXNgIChzdGF0aWMpIGluIGBkcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jYCwgY2FsbGVkIGJ5IGBpb21tdV9kbWFfYWxsb2NgLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBhcmUgc3VpdGFibGUgZm9jdXMgc3ltYm9scy4gIFJlbWVtYmVyaW5nIHRoZSBndWlkZWxpbmVzLCB3ZSBtdXN0IGF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyBsaWtlIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMuICBIb3dldmVyLCBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZmAgc2VlbXMgc3BlY2lmaWMsIGEgaGVscGVyIGZvciBhbGxvY2F0aW5nIHBhZ2VzIHdpdGggZXhhY3Qgbm9kZSBJRCwgZGlzdGluY3QgZnJvbSwgc2F5LCBga21hbGxvY2Agb3IgYF9fYWxsb2NfcGFnZXNgLgoKSSYjMzk7bSByZXZpc2l0aW5nIHRoZSBjaGFuZ2VkIGZ1bmN0aW9ucyBhZ2FpbiwgdGhpcyB0aW1lIGZvY3VzaW5nIG9uIHRoZWlyIGNvbnRleHQ6CgoxLiAgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgOiBgaW9tbXVfZG1hX2FsbG9jX3BhZ2VzYCAoc3RhdGljKSBhbmQgaXRzIGNhbGxlciBgaW9tbXVfZG1hX2FsbG9jYC4KMi4gIGBrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY2A6IGBkbWFfZnJlZV9jb250aWd1b3VzYC4KMy4gIGBrZXJuZWwvZG1hL2RpcmVjdC5jYDogYF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AgKHN0YXRpYykgYW5kIGNhbGxlcnMgYGRtYV9kaXJlY3RfYWxsb2NfcGFnZXNgLCBgZG1hX2RpcmVjdF9hbGxvY2AsIGFuZCBgZG1hX2RpcmVjdF9hbGxvY19ub19tYXBwaW5nYC4KNC4gIGBrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNgOiBgZG1hX2NvbW1vbl9hbGxvY19wYWdlc2AuCjUuICBgbW0vcGFnZV9hbGxvYy5jYDogYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgLgoKVGhlc2Ugc2VlbSB0byBiZSBETUEgYWxsb2NhdGlvbiBvciBleGFjdC1uaWQgcGFnZSBhbGxvY2F0aW9uIGZ1bmN0aW9ucywgbWFraW5nIHRoZW0gZ29vZCBjYW5kaWRhdGVzLiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCBoZXJlLiBJJiMzOTttIGdvaW5nIHRvIGNvbnN1bHQgdGhlIGBnaXQgbG9nYCBhbmQgdGhlIGBnaXQgZGlmZmAgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKQ2hlY2tpbmcgdGhlIGRpZmYgcmV2ZWFscyBhIGZldyBtb3JlIGRldGFpbHM6CiogICBgaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oYCBpbmNsdWRlcyBhbiBpbmxpbmUgYGRtYV9mcmVlX2NvbnRpZ3VvdXNgIHdoZW4gYCFDT05GSUdfRE1BX0NNQWAuCiogICBgaW5jbHVkZS9saW51eC9nZnAuaGA6IGRlY2xhcmVzIGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYC4KCkkmIzM5O2xsIGNoZWNrIHRoZSBjb25maWcgcmVxdWlyZW1lbnRzOgoqICAgYERNQV9DTUFgIGZvciBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgLgoqICAgYElPTU1VX0RNQWAgZm9yIGBkcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jYC4KKiAgIGBETUFfT1BTX0hFTFBFUlNgIGZvciBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYC4KCk9uIHRoZSB0YXJnZXQgYW1kNjQgYXJjaGl0ZWN0dXJlLCBgSEFTX0RNQWAgaXMgZGVmYXVsdCAmIzM5O3kmIzM5Oy4gYElPTU1VX0RNQWAgaXMgZGVmYXVsdCBmb3IgWDg2IHNvIGxpa2VseSBlbmFibGVkLiAgYERNQV9DTUFgIGRlcGVuZHMgb24gYEhBVkVfRE1BX0NPTlRJR1VPVVMgJmFtcDsmYW1wOyBDTUFgLiAgYERNQV9PUFNfSEVMUEVSU2AgaXMgYm9vbC4gSSBjb25jbHVkZSB0aGF0IGBDTUFgLCBgRE1BX0NNQWAsIGBJT01NVV9ETUFgLCBhbmQgYERNQV9PUFNfSEVMUEVSU2AgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4KCldpdGggYWxsIG9mIHRoaXMgSSBjYW4gbm93IGRlZmluZSB0aGUgRm9jdXNTeW1ib2xzOgoKKiAgIGBkbWFfZnJlZV9jb250aWd1b3VzYAoqICAgYF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AKKiAgIGBkbWFfY29tbW9uX2FsbG9jX3BhZ2VzYAoqICAgYGlvbW11X2RtYV9hbGxvY19wYWdlc2AKKiAgIGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYAoqICAgYGRtYV9kaXJlY3RfYWxsb2NfcGFnZXNgCiogICBgZG1hX2RpcmVjdF9hbGxvY2AKKiAgIGBpb21tdV9kbWFfYWxsb2NgCgpGaW5hbGx5LCBhIHF1aWNrIG5vdGUgYWJvdXQgc3RhdGljIGZ1bmN0aW9uczogYWx0aG91Z2ggdGhleSBhcmUgc3RhdGljIGluIHRoZWlyIC5jIGZpbGUsIHdpdGggZGVidWcgaW5mbyBlbmFibGVkLCB0aGVpciBzeW1ib2xzIGFyZSB2aXNpYmxlLiBJbmNsdWRpbmcgYm90aCB0aGUgc3RhdGljIGFuZCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIGVuc3VyZXMgY29tcGxldGUgY292ZXJhZ2UKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RE1BX0NNQSYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7SU9NTVVfRE1BJiMzNDssCiAgICAmIzM0O0RNQV9PUFNfSEVMUEVSUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YmIzM0OywKICAgICYjMzQ7ZG1hX2ZyZWVfY29udGlndW91cyYjMzQ7LAogICAgJiMzNDtfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7ZG1hX2NvbW1vbl9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDtpb21tdV9kbWFfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7ZG1hX2RpcmVjdF9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDtkbWFfZGlyZWN0X2FsbG9jJiMzNDssCiAgICAmIzM0O2lvbW11X2RtYV9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGFjcm9zcyBtdWx0aXBsZSBjb3JlIHN1YnN5c3RlbXMgKGtlcm5lbC9kbWEvLCBtbS8sIGRyaXZlcnMvaW9tbXUvKS4gSXQgcmVwbGFjZXMgcG93ZXItb2YtdHdvIHBhZ2UgYWxsb2NhdGlvbnMgYW5kIF9fZnJlZV9wYWdlcygpIHdpdGggYWxsb2NfcGFnZXNfZXhhY3RfbmlkKCkgYW5kIGZyZWVfcGFnZXNfZXhhY3QoKSwgd2hpY2ggc3BsaXRzIGFuZCBmcmVlcyB0cmFpbGluZyB1bnVzZWQgcGFnZXMuIFRoaXMgY2hhbmdlcyBtZW1vcnkgYWxpZ25tZW50LCBwYWdlIGNvdW50IHRyYWNraW5nLCBhbmQgaW50cm9kdWNlcyBwb3RlbnRpYWwgcnVudGltZSBhc3NlcnRpb24gdmlvbGF0aW9ucyBpbiBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKCkgaWYgY2FsbGVycyBwYXNzIGNlcnRhaW4gR0ZQIGZsYWdzLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBETUEgYWxsb2NhdGlvbnMgaW4gdmlydHVhbGl6ZWQgYW5kIGVtdWxhdGVkIGRldmljZSBkcml2ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtETUFfQ01BJiMzNDssCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtJT01NVV9ETUEmIzM0OywKICAgICYjMzQ7RE1BX09QU19IRUxQRVJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZiYjMzQ7LAogICAgJiMzNDtkbWFfZnJlZV9jb250aWd1b3VzJiMzNDssCiAgICAmIzM0O19fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDtkbWFfY29tbW9uX2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvbW11X2RtYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDtkbWFfZGlyZWN0X2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2RtYV9kaXJlY3RfYWxsb2MmIzM0OywKICAgICYjMzQ7aW9tbXVfZG1hX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBETUEgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgYWNyb3NzIG11bHRpcGxlIGNvcmUgc3Vic3lzdGVtcyAoa2VybmVsL2RtYS8sIG1tLywgZHJpdmVycy9pb21tdS8pLiBJdCByZXBsYWNlcyBwb3dlci1vZi10d28gcGFnZSBhbGxvY2F0aW9ucyBhbmQgX19mcmVlX3BhZ2VzKCkgd2l0aCBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpLCB3aGljaCBzcGxpdHMgYW5kIGZyZWVzIHRyYWlsaW5nIHVudXNlZCBwYWdlcy4gVGhpcyBjaGFuZ2VzIG1lbW9yeSBhbGlnbm1lbnQsIHBhZ2UgY291bnQgdHJhY2tpbmcsIGFuZCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBydW50aW1lIGFzc2VydGlvbiB2aW9sYXRpb25zIGluIGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoKSBpZiBjYWxsZXJzIHBhc3MgY2VydGFpbiBHRlAgZmxhZ3MuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIERNQSBhbGxvY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQgZGV2aWNlIGRyaXZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhbGxiYWNrIHBhdGhzIChpbiBkbWEtaW9tbXUsIGRtYS1kaXJlY3QsIGFuZCBvcHNfaGVscGVycykgdG8gdXNlIGFsbG9jX3BhZ2VzX2V4YWN0X25pZCgpIGFuZCBmcmVlX3BhZ2VzX2V4YWN0KCkgaW5zdGVhZCBvZiBhbGxvY19wYWdlc19ub2RlKCkgYW5kIF9fZnJlZV9wYWdlcygpIHdpdGggcGFnZSBvcmRlcnMuIEl0IGFsc28gcmVtb3ZlcyB0aGUgX19tZW1pbml0IGFubm90YXRpb24gZnJvbSBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKCkuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgYWZmZWN0IHBhZ2UtbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkgYW5kIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBETUEgc3Vic3lzdGVtLiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSB6ZXJvZWQgKHZpYSBtZW1zZXQpIG9yIG1hbmFnZWQgcGVyIHN0YW5kYXJkIERNQSBzdWJzeXN0ZW0gY29udmVudGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcGFnZSBsaWZldGltZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdG9yIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGU2NWI1YzhhZTA1NWFjYTE5MWMxMzE2ZTlhZjM3NGQwZGFkNjU1ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDE6NDc6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYwppbmRleCA1OGM2MjQ1MTNjZDQzLi44ZjI2MmM4MzgwMmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMKQEAgLTE2MjgsMTAgJiM0MzsxNjI4LDEyIEBAIHN0YXRpYyB2b2lkICppb21tdV9kbWFfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAl2b2lkICpjcHVfYWRkcjsKIAogCXBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIGFsbG9jX3NpemUsIGdmcCk7Ci0JaWYgKCFwYWdlKQotCQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIGdldF9vcmRlcihhbGxvY19zaXplKSk7Ci0JaWYgKCFwYWdlKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJaWYgKCFwYWdlKSB7CiYjNDM7CQljcHVfYWRkciA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBhbGxvY19zaXplLCBnZnApOwomIzQzOwkJaWYgKCFjcHVfYWRkcikKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoY3B1X2FkZHIpOwomIzQzOwl9CiAKIAlpZiAoIWNvaGVyZW50IHx8IFBhZ2VIaWdoTWVtKHBhZ2UpKSB7CiAJCXBncHJvdF90IHByb3QgPSBkbWFfcGdwcm90KGRldiwgUEFHRV9LRVJORUwsIGF0dHJzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaAppbmRleCA4ZmFlMmI3ZGViMjBkLi4zZWYzMDAzNzEzYTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oCkBAIC0xNDMsNyAmIzQzOzE0Myw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2ZyZWVfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAogCQlzaXplX3Qgc2l6ZSkKIHsKLQlfX2ZyZWVfcGFnZXMocGFnZSwgZ2V0X29yZGVyKHNpemUpKTsKJiM0MzsJZnJlZV9wYWdlc19leGFjdChwYWdlX2FkZHJlc3MocGFnZSksIHNpemUpOwogfQogI2VuZGlmIC8qIENPTkZJR19ETUFfQ01BKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKaW5kZXggODcyYmM1M2YzMmVjOC4uYWE0NjAxODA1ZjIxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC0zMjksNyAmIzQzOzMyOSw3IEBAIHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spIF9fYWxsb2Nfc2l6ZSgxKTsKIAogdm9pZCBmcmVlX3BhZ2VzX2V4YWN0KHZvaWQgKnZpcnQsIHNpemVfdCBzaXplKTsKIAotX19tZW1pbml0IHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMik7CiYjNDM7dm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spIF9fYWxsb2Nfc2l6ZSgyKTsKICNkZWZpbmUgYWxsb2NfcGFnZXNfZXhhY3RfbmlkKC4uLikJCQkJCVwKIAlhbGxvY19ob29rcyhhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKF9fVkFfQVJHU19fKSkKIApkaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYwppbmRleCA2NjA5MzQ2MDU4NGU4Li45MDkzN2RjN2M2MjdkIDEwMDY0NAotLS0gYS9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYwpAQCAtNDUxLDggJiM0Mzs0NTEsOCBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKQogICoKICAqIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgbWVtb3J5IGFsbG9jYXRlZCBieSBkbWFfYWxsb2NfY29udGlndW91cygpLiBBcyB0aGUKICAqIGNtYV9yZWxlYXNlIHJldHVybnMgZmFsc2Ugd2hlbiBwcm92aWRlZCBwYWdlcyBkbyBub3QgYmVsb25nIHRvIGNvbnRpZ3VvdXMKLSAqIGFyZWEgYW5kIHRydWUgb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHRoZW4gZG9lcyBhIGZhbGxiYWNrIF9fZnJlZV9wYWdlcygpCi0gKiB1cG9uIGEgZmFsc2UtcmV0dXJuLgomIzQzOyAqIGFyZWEgYW5kIHRydWUgb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHRoZW4gZG9lcyBhIGZhbGxiYWNrCiYjNDM7ICogZnJlZV9wYWdlc19leGFjdCgpIHVwb24gYSBmYWxzZS1yZXR1cm4uCiAgKi8KIHZvaWQgZG1hX2ZyZWVfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgc2l6ZSkKIHsKQEAgLTQ3Niw3ICYjNDM7NDc2LDcgQEAgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKQogCX0KIAogCS8qIG5vdCBpbiBhbnkgY21hLCBmcmVlIGZyb20gYnVkZHkgKi8KLQlfX2ZyZWVfcGFnZXMocGFnZSwgZ2V0X29yZGVyKHNpemUpKTsKJiM0MzsJZnJlZV9wYWdlc19leGFjdChwYWdlX2FkZHJlc3MocGFnZSksIHNpemUpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9kaXJlY3QuYyBiL2tlcm5lbC9kbWEvZGlyZWN0LmMKaW5kZXggZGE2NjVjYTIyZDVjMC4uZWE2NDQ1M2Q3MzcwYSAxMDA2NDQKLS0tIGEva2VybmVsL2RtYS9kaXJlY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL2RpcmVjdC5jCkBAIC0xMjAsNiAmIzQzOzEyMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJaW50IG5vZGUgPSBkZXZfdG9fbm9kZShkZXYpOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXU2NCBwaHlzX2xpbWl0OwomIzQzOwl2b2lkICp2YTsKIAogCVdBUk5fT05fT05DRSghUEFHRV9BTElHTkVEKHNpemUpKTsKIApAQCAtMTMzLDkgJiM0MzsxMzQsOSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQlkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgc2l6ZSk7CiAJfQogCi0Jd2hpbGUgKChwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIGdldF9vcmRlcihzaXplKSkpCi0JICAgICAgICZhbXA7JmFtcDsgIWRtYV9jb2hlcmVudF9vayhkZXYsIHBhZ2VfdG9fcGh5cyhwYWdlKSwgc2l6ZSkpIHsKLQkJX19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7CiYjNDM7CXdoaWxlICgodmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQobm9kZSwgc2l6ZSwgZ2ZwKSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIWRtYV9jb2hlcmVudF9vayhkZXYsIHZpcnRfdG9fcGh5cyh2YSksIHNpemUpKSB7CiYjNDM7CQlmcmVlX3BhZ2VzX2V4YWN0KHZhLCBzaXplKTsKIAogCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEzMikgJmFtcDsmYW1wOwogCQkgICAgcGh5c19saW1pdCAmbHQ7IERNQV9CSVRfTUFTSyg2NCkgJmFtcDsmYW1wOwpAQCAtMTQ2LDYgJiM0MzsxNDcsNyBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQllbHNlCiAJCQlyZXR1cm4gTlVMTDsKIAl9CiYjNDM7CXBhZ2UgPSB2YSA/IHZpcnRfdG9fcGFnZSh2YSkgOiBOVUxMOwogCiAJcmV0dXJuIHBhZ2U7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMgYi9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMKaW5kZXggNmI1ZjkyMDhkMzFjMC4uNWNkZjNmNjBjZjQ3OSAxMDA2NDQKLS0tIGEva2VybmVsL2RtYS9vcHNfaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYwpAQCAtNjcsMTAgJiM0Mzs2NywxMyBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2NvbW1vbl9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCXBoeXNfYWRkcl90IHBoeXM7CiAKIAlwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApOwotCWlmICghcGFnZSkKLQkJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUoZGV2X3RvX25vZGUoZGV2KSwgZ2ZwLCBnZXRfb3JkZXIoc2l6ZSkpOwotCWlmICghcGFnZSkKLQkJcmV0dXJuIE5VTEw7CiYjNDM7CWlmICghcGFnZSkgewomIzQzOwkJdm9pZCAqdmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQoZGV2X3RvX25vZGUoZGV2KSwgc2l6ZSwgZ2ZwKTsKJiM0MzsKJiM0MzsJCWlmICghdmEpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQlwYWdlID0gdmlydF90b19wYWdlKHZhKTsKJiM0MzsJfQogCiAJcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsKIAlpZiAodXNlX2RtYV9pb21tdShkZXYpKQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IGM0ZGM2MWVjNjYzZWUuLmQzYTEzNWRmY2RkM2QgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTU2MzcsNyAmIzQzOzU2MzcsNyBAQCBFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZik7CiAgKgogICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYXJlYSBvciAlTlVMTCBpbiBjYXNlIG9mIGVycm9yLgogICovCi12b2lkICogX19tZW1pbml0IGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKQomIzQzO3ZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKQogewogCXVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKIAlzdHJ1Y3QgcGFnZSAqcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBETUEgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOIHNjcnV0aW55LiBGcm9tIGEgY3Vyc29yeSBnbGFuY2UsIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gZm9yIERNQSBtZW1vcnkgYWxsb2NhdGlvbi4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgpGaXJzdCwgdGhlIHBhdGNoIHByaW1hcmlseSBmb2N1c2VzIG9uIGhvdyBjb250aWd1b3VzIERNQSBtZW1vcnkgaXMgaGFuZGxlZCB3aGVuIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBpc24mIzM5O3QgYXZhaWxhYmxlIG9yIGZhaWxzLiBCZWZvcmUgdGhpcywgdGhlIHN5c3RlbSB3YXMgdXNpbmcgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYGdldF9vcmRlcihzaXplKWAuIFRoaXMgbWVhbnQgaXQgd291bGQgYWxsb2NhdGUgYSBwb3dlci1vZi10d28gbnVtYmVyIG9mIHBhZ2VzLCBldmVuIGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSB3YXNuJiMzOTt0IGEgcG93ZXIgb2YgdHdvLiBUaGUgcG90ZW50aWFsIHByb2JsZW0gd2FzIHRoZSBhbGxvY2F0aW9uIG9mIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkIHdoaWNoIG1lYW5zIHRoZSB1bnVzZWQgcGFnZXMgd2VyZSBlaXRoZXIgYmVpbmcgd2FzdGVkIG9yIGluY29ycmVjdGx5IGRlYWxsb2NhdGVkLiBXaGVuIGZyZWVpbmcgdGhvc2UgcGFnZXMsIHRoZSBjb2RlIHdhcyB1c2luZyBgX19mcmVlX3BhZ2VzYCB0byBkZWFsbG9jYXRlIHRoZSBwb3dlciBvZiB0d28gb2YgcGFnZXMuCgpOb3csIHRoZSBwYXRjaCByZXBsYWNlcyB0aGlzIHdpdGggYGFsbG9jX3BhZ2VzX2V4YWN0X25pZGAgYW5kIGBmcmVlX3BhZ2VzX2V4YWN0YC4gVGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgcGFydCBiZWdpbnMuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBgYWxsb2NfcGFnZXNfZXhhY3RgIHNlZW1zIHRvIGFsbG9jYXRlIGEgcG93ZXItb2YtdHdvIGJsb2NrIG9mIHBhZ2VzLCBidXQgaW1tZWRpYXRlbHkgcmVsZWFzZXMgdGhlIHVudXNlZCBwYWdlcyBiYWNrIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhbGxvY2F0aW5nIGEgYmxvY2sgYW5kIHRoZW4gdHJpbW1pbmcgaXQgZG93biB0byB0aGUgZXhhY3Qgc2l6ZS4gYGZyZWVfcGFnZXNfZXhhY3RgIHRoZW4gZnJlZXMgb25seSB0aGUgZXhhY3QgbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBhbGxvY2F0ZWQgKGFsaWduZWQgdG8gYFBBR0VfU0laRWApLiBUaGlzIGlzIGEgY2xlYXIgaW1wcm92ZW1lbnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgZWZmaWNpZW5jeS4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYWxsb2NfcGFnZXNfZXhhY3RgIGFuZCBgZnJlZV9wYWdlc19leGFjdGAgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBjb250aWd1b3VzIERNQSBhbGxvY2F0aW9ucy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlJiMzOTtzIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdGhlIERNQSBlbmdpbmUgb3IgdXNlcnNwYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB3aGVyZSBhbmQgaG93IHRoZSBtZW1vcnkgaXMgY2xlYXJlZCAoaWYgYXQgYWxsKSB3aXRoaW4gdGhlc2UgbmV3IGZ1bmN0aW9ucy4gSSYjMzk7bGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IHBvdGVudGlhbCBvZmYtYnktb25lIGVycm9ycyBvciBib3VuZHMgdmlvbGF0aW9ucyBkdXJpbmcgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwcm9jZXNzLiBHaXZlbiB0aGUgZXhpc3RpbmcgY29kZSYjMzk7cyByZWxpYW5jZSBvbiBwb3dlci1vZi10d28gYWxsb2NhdGlvbnMsIGl0IHdvdWxkIGJlIGltcG9ydGFudCB0byBtYWtlIHN1cmUgdGhlIHRyaW1taW5nIG9wZXJhdGlvbnMgZG9uJiMzOTt0IGludHJvZHVjZSB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2V4YWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tmZW5jZS9jb3JlLmM9OTk4PXN0YXRpYyBpbnQga2ZlbmNlX2luaXRfbGF0ZSh2b2lkKVxuLS1cbm1tL2tmZW5jZS9jb3JlLmMtMTAyNS1cbm1tL2tmZW5jZS9jb3JlLmM6MTAyNjpcdF9fa2ZlbmNlX3Bvb2wgPSBhbGxvY19wYWdlc19leGFjdChLRkVOQ0VfUE9PTF9TSVpFLFxubW0va2ZlbmNlL2NvcmUuYy0xMDI3LVx0XHRcdFx0XHQgIEdGUF9LRVJORUwgfCBfX0dGUF9TS0lQX0tBU0FOKTtcbi0tXG5tbS9rZmVuY2UvY29yZS5jLTEwMzAtXG5tbS9rZmVuY2UvY29yZS5jOjEwMzE6XHRrZmVuY2VfbWV0YWRhdGFfaW5pdCA9IGFsbG9jX3BhZ2VzX2V4YWN0KEtGRU5DRV9NRVRBREFUQV9TSVpFLFxubW0va2ZlbmNlL2NvcmUuYy0xMDMyLVx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMIHwgX19HRlBfU0tJUF9LQVNBTik7XG4tLVxubW0vbW1faW5pdC5jPTIzNjA9dm9pZCAqX19pbml0IGFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSxcbi0tXG5tbS9tbV9pbml0LmMtMjQzOS1cdFx0XHQgKiBzb21lIHBhZ2VzIGF0IHRoZSBlbmQgb2YgaGFzaCB0YWJsZSB3aGljaFxubW0vbW1faW5pdC5jOjI0NDA6XHRcdFx0ICogYWxsb2NfcGFnZXNfZXhhY3QoKSBhdXRvbWF0aWNhbGx5IGRvZXNcbm1tL21tX2luaXQuYy0yNDQxLVx0XHRcdCAqL1xubW0vbW1faW5pdC5jOjI0NDI6XHRcdFx0dGFibGUgPSBhbGxvY19wYWdlc19leGFjdChzaXplLCBnZnBfZmxhZ3MpO1xubW0vbW1faW5pdC5jLTI0NDMtXHRcdFx0a21lbWxlYWtfYWxsb2ModGFibGUsIHNpemUsIDEsIGdmcF9mbGFncyk7XG4tLVxubW0vbm9tbXUuYz05MTQ9c3RhdGljIGludCBkb19tbWFwX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbm9tbXUuYy05NTgtXG5tbS9ub21tdS5jOjk1OTpcdGJhc2UgPSBhbGxvY19wYWdlc19leGFjdCh0b3RhbCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7XG5tbS9ub21tdS5jLTk2MC1cdGlmICghYmFzZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTU4MT1zdGF0aWMgdm9pZCAqbWFrZV9hbGxvY19leGFjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTYwMC0vKipcbm1tL3BhZ2VfYWxsb2MuYzo1NjAxOiAqIGFsbG9jX3BhZ2VzX2V4YWN0IC0gYWxsb2NhdGUgYW4gZXhhY3QgbnVtYmVyIHBoeXNpY2FsbHktY29udGlndW91cyBwYWdlcy5cbm1tL3BhZ2VfYWxsb2MuYy01NjAyLSAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU2MTQtICovXG5tbS9wYWdlX2FsbG9jLmM6NTYxNTp2b2lkICphbGxvY19wYWdlc19leGFjdF9ub3Byb2Yoc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxubW0vcGFnZV9hbGxvYy5jLTU2MTYte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy01NjI1LX1cbm1tL3BhZ2VfYWxsb2MuYzo1NjI2OkVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01NjI3LVxubW0vcGFnZV9hbGxvYy5jLTU2MjgtLyoqXG5tbS9wYWdlX2FsbG9jLmM6NTYyOTogKiBhbGxvY19wYWdlc19leGFjdF9uaWQgLSBhbGxvY2F0ZSBhbiBleGFjdCBudW1iZXIgb2YgcGh5c2ljYWxseS1jb250aWd1b3VzXG5tbS9wYWdlX2FsbG9jLmMtNTYzMC0gKlx0XHRcdCAgIHBhZ2VzIG9uIGEgbm9kZS5cbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTYzNC0gKlxubW0vcGFnZV9hbGxvYy5jOjU2MzU6ICogTGlrZSBhbGxvY19wYWdlc19leGFjdCgpLCBidXQgdHJ5IHRvIGFsbG9jYXRlIG9uIG5vZGUgbmlkIGZpcnN0IGJlZm9yZSBmYWxsaW5nXG5tbS9wYWdlX2FsbG9jLmMtNTYzNi0gKiBiYWNrLlxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01NjM5LSAqL1xubW0vcGFnZV9hbGxvYy5jOjU2NDA6dm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXG5tbS9wYWdlX2FsbG9jLmMtNTY0MS17XG4tLVxubW0vcGFnZV9hbGxvYy5jLTU2NTQtLyoqXG5tbS9wYWdlX2FsbG9jLmM6NTY1NTogKiBmcmVlX3BhZ2VzX2V4YWN0IC0gcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIHZpYSBhbGxvY19wYWdlc19leGFjdCgpXG5tbS9wYWdlX2FsbG9jLmM6NTY1NjogKiBAdmlydDogdGhlIHZhbHVlIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzX2V4YWN0LlxubW0vcGFnZV9hbGxvYy5jOjU2NTc6ICogQHNpemU6IHNpemUgb2YgYWxsb2NhdGlvbiwgc2FtZSB2YWx1ZSBhcyBwYXNzZWQgdG8gYWxsb2NfcGFnZXNfZXhhY3QoKS5cbm1tL3BhZ2VfYWxsb2MuYy01NjU4LSAqXG5tbS9wYWdlX2FsbG9jLmM6NTY1OTogKiBSZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBhbGxvY19wYWdlc19leGFjdC5cbm1tL3BhZ2VfYWxsb2MuYy01NjYwLSAqL1xuLS1cbm1tL3BhZ2VfZXh0LmM9MjY1PXN0YXRpYyB2b2lkICpfX21lbWluaXQgYWxsb2NfcGFnZV9leHQoc2l6ZV90IHNpemUsIGludCBuaWQpXG4tLVxubW0vcGFnZV9leHQuYy0yNjktXG5tbS9wYWdlX2V4dC5jOjI3MDpcdGFkZHIgPSBhbGxvY19wYWdlc19leGFjdF9uaWQobmlkLCBzaXplLCBmbGFncyk7XG5tbS9wYWdlX2V4dC5jLTI3MS1cdGlmIChhZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIENvZGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgYG1tL3BhZ2VfYWxsb2MuY2AsIGZvY3VzaW5nIG9uIGxpbmVzIHJvdWdobHkgYmV0d2VlbiA1NTgwIGFuZCA1NjYwLiBUaGF0IHJhbmdlIGlzIGxpa2VseSB0byBjb250YWluIHNvbWUgY3J1Y2lhbCBhbGxvY2F0aW9uIGxvZ2ljLCBwcm9iYWJseSBhIGNvcmUgZnVuY3Rpb24gb3IgYSBzaWduaWZpY2FudCBwYXJ0IG9mIGEgbGFyZ2VyIGFsbG9jYXRpb24gc2NoZW1lLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaXNtcyBhdCBwbGF5IOKAkyBob3cgdGhlIGtlcm5lbCBjaG9vc2VzIGFuZCBhc3NpZ25zIHBoeXNpY2FsIHBhZ2VzIHRvIHNhdGlzZnkgbWVtb3J5IHJlcXVlc3RzLiBJJiMzOTttIGhvcGluZyB0byBpZGVudGlmeSB0aGUgc3BlY2lmaWMgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBpbnZvbHZlZCBpbiBlaXRoZXIgdGhlIGRpcmVjdCBhbGxvY2F0aW9uIG9mIHBhZ2VzIGZyb20gdGhlIHN5c3RlbSBvciB0aGUgbWFuYWdlbWVudCBvZiB0aGUgcGFnZSBjYWNoZS4gSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IGFueSBsb29wcywgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIGludHJpY2F0ZSBjYWxjdWxhdGlvbnMgcmVsYXRlZCB0byBwYWdlIGF2YWlsYWJpbGl0eSwgbm9kZSBzZWxlY3Rpb24sIHpvbmUgY29uc2lkZXJhdGlvbiwgYW5kIHBvdGVudGlhbGx5LCBmcmFnbWVudGF0aW9uIGF2b2lkYW5jZSBzdHJhdGVnaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTU4MDpcdFxuNTU4MTpcdHN0YXRpYyB2b2lkICptYWtlX2FsbG9jX2V4YWN0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IG9yZGVyLFxuNTU4MjpcdFx0XHRzaXplX3Qgc2l6ZSlcbjU1ODM6XHR7XG41NTg0Olx0XHRpZiAoYWRkcikge1xuNTU4NTpcdFx0XHR1bnNpZ25lZCBsb25nIG5yID0gRElWX1JPVU5EX1VQKHNpemUsIFBBR0VfU0laRSk7XG41NTg2Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKCh2b2lkICopYWRkcik7XG41NTg3Olx0XHRcdHN0cnVjdCBwYWdlICpsYXN0ID0gcGFnZSAmIzQzOyBucjtcbjU1ODg6XHRcbjU1ODk6XHRcdFx0X19zcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTtcbjU1OTA6XHRcdFx0d2hpbGUgKHBhZ2UgXHUwMDNjIC0tbGFzdClcbjU1OTE6XHRcdFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKGxhc3QpO1xuNTU5MjpcdFxuNTU5MzpcdFx0XHRsYXN0ID0gcGFnZSAmIzQzOyAoMVVMIFx1MDAzY1x1MDAzYyBvcmRlcik7XG41NTk0Olx0XHRcdGZvciAocGFnZSAmIzQzOz0gbnI7IHBhZ2UgXHUwMDNjIGxhc3Q7IHBhZ2UmIzQzOyYjNDM7KVxuNTU5NTpcdFx0XHRcdF9fZnJlZV9wYWdlc19vayhwYWdlLCAwLCBGUElfVE9fVEFJTCk7XG41NTk2Olx0XHR9XG41NTk3Olx0XHRyZXR1cm4gKHZvaWQgKilhZGRyO1xuNTU5ODpcdH1cbjU1OTk6XHRcbjU2MDA6XHQvKipcbjU2MDE6XHQgKiBhbGxvY19wYWdlc19leGFjdCAtIGFsbG9jYXRlIGFuIGV4YWN0IG51bWJlciBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgcGFnZXMuXG41NjAyOlx0ICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGVcbjU2MDM6XHQgKiBAZ2ZwX21hc2s6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb24sIG11c3Qgbm90IGNvbnRhaW4gX19HRlBfQ09NUFxuNTYwNDpcdCAqXG41NjA1Olx0ICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGFsbG9jX3BhZ2VzKCksIGV4Y2VwdCB0aGF0IGl0IGFsbG9jYXRlcyB0aGVcbjU2MDY6XHQgKiBtaW5pbXVtIG51bWJlciBvZiBwYWdlcyB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0LiAgYWxsb2NfcGFnZXMoKSBjYW4gb25seVxuNTYwNzpcdCAqIGFsbG9jYXRlIG1lbW9yeSBpbiBwb3dlci1vZi10d28gcGFnZXMuXG41NjA4Olx0ICpcbjU2MDk6XHQgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gbGltaXRlZCBieSBNQVhfUEFHRV9PUkRFUi5cbjU2MTA6XHQgKlxuNTYxMTpcdCAqIE1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJlbGVhc2VkIGJ5IGZyZWVfcGFnZXNfZXhhY3QoKS5cbjU2MTI6XHQgKlxuNTYxMzpcdCAqIFJldHVybjogcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGFyZWEgb3IgJU5VTEwgaW4gY2FzZSBvZiBlcnJvci5cbjU2MTQ6XHQgKi9cbjU2MTU6XHR2b2lkICphbGxvY19wYWdlc19leGFjdF9ub3Byb2Yoc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxuNTYxNjpcdHtcbjU2MTc6XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTtcbjU2MTg6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbjU2MTk6XHRcbjU2MjA6XHRcdGlmIChXQVJOX09OX09OQ0UoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9DT01QIHwgX19HRlBfSElHSE1FTSkpKVxuNTYyMTpcdFx0XHRnZnBfbWFzayBcdTAwMjY9IH4oX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pO1xuNTYyMjpcdFxuNTYyMzpcdFx0YWRkciA9IGdldF9mcmVlX3BhZ2VzX25vcHJvZihnZnBfbWFzaywgb3JkZXIpO1xuNTYyNDpcdFx0cmV0dXJuIG1ha2VfYWxsb2NfZXhhY3QoYWRkciwgb3JkZXIsIHNpemUpO1xuNTYyNTpcdH1cbjU2MjY6XHRFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZik7XG41NjI3Olx0XG41NjI4Olx0LyoqXG41NjI5Olx0ICogYWxsb2NfcGFnZXNfZXhhY3RfbmlkIC0gYWxsb2NhdGUgYW4gZXhhY3QgbnVtYmVyIG9mIHBoeXNpY2FsbHktY29udGlndW91c1xuNTYzMDpcdCAqXHRcdFx0ICAgcGFnZXMgb24gYSBub2RlLlxuNTYzMTpcdCAqIEBuaWQ6IHRoZSBwcmVmZXJyZWQgbm9kZSBJRCB3aGVyZSBtZW1vcnkgc2hvdWxkIGJlIGFsbG9jYXRlZFxuNTYzMjpcdCAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlXG41NjMzOlx0ICogQGdmcF9tYXNrOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uLCBtdXN0IG5vdCBjb250YWluIF9fR0ZQX0NPTVBcbjU2MzQ6XHQgKlxuNTYzNTpcdCAqIExpa2UgYWxsb2NfcGFnZXNfZXhhY3QoKSwgYnV0IHRyeSB0byBhbGxvY2F0ZSBvbiBub2RlIG5pZCBmaXJzdCBiZWZvcmUgZmFsbGluZ1xuNTYzNjpcdCAqIGJhY2suXG41NjM3Olx0ICpcbjU2Mzg6XHQgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9yICVOVUxMIGluIGNhc2Ugb2YgZXJyb3IuXG41NjM5Olx0ICovXG41NjQwOlx0dm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXG41NjQxOlx0e1xuNTY0MjpcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpO1xuNTY0MzpcdFx0c3RydWN0IHBhZ2UgKnA7XG41NjQ0Olx0XG41NjQ1Olx0XHRpZiAoV0FSTl9PTl9PTkNFKGdmcF9tYXNrIFx1MDAyNiAoX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pKSlcbjU2NDY6XHRcdFx0Z2ZwX21hc2sgXHUwMDI2PSB+KF9fR0ZQX0NPTVAgfCBfX0dGUF9ISUdITUVNKTtcbjU2NDc6XHRcbjU2NDg6XHRcdHAgPSBhbGxvY19wYWdlc19ub2RlX25vcHJvZihuaWQsIGdmcF9tYXNrLCBvcmRlcik7XG41NjQ5Olx0XHRpZiAoIXApXG41NjUwOlx0XHRcdHJldHVybiBOVUxMO1xuNTY1MTpcdFx0cmV0dXJuIG1ha2VfYWxsb2NfZXhhY3QoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHApLCBvcmRlciwgc2l6ZSk7XG41NjUyOlx0fVxuNTY1MzpcdFxuNTY1NDpcdC8qKlxuNTY1NTpcdCAqIGZyZWVfcGFnZXNfZXhhY3QgLSByZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgdmlhIGFsbG9jX3BhZ2VzX2V4YWN0KClcbjU2NTY6XHQgKiBAdmlydDogdGhlIHZhbHVlIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzX2V4YWN0LlxuNTY1NzpcdCAqIEBzaXplOiBzaXplIG9mIGFsbG9jYXRpb24sIHNhbWUgdmFsdWUgYXMgcGFzc2VkIHRvIGFsbG9jX3BhZ2VzX2V4YWN0KCkuXG41NjU4Olx0ICpcbjU2NTk6XHQgKiBSZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBhbGxvY19wYWdlc19leGFjdC5cbjU2NjA6XHQgKi9cbjU2NjE6XHR2b2lkIGZyZWVfcGFnZXNfZXhhY3Qodm9pZCAqdmlydCwgc2l6ZV90IHNpemUpXG41NjYyOlx0e1xuNTY2MzpcdFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpdmlydDtcbjU2NjQ6XHRcdHVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciAmIzQzOyBQQUdFX0FMSUdOKHNpemUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDE3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgRE1BIEFsbG9jYXRpb24gQ29udGV4dCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWxsb2NhdGlvbiBjb250ZXh0IGJldHRlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBETUEgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZXhhbWluZSBgZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY2AgYmVjYXVzZSBpdCYjMzk7cyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBJT01NVSwgd2hpY2ggb2Z0ZW4gaW50ZXJhY3RzIHdpdGggRE1BLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgaW5zaWdodCBpbnRvIGhvdyBETUEgYWxsb2NhdGlvbnMgYXJlIGhhbmRsZWQgd2hlbiBhbiBJT01NVSBpcyBpbiB0aGUgcGljdHVyZSwgbG9va2luZyBmb3IgYWxsb2NhdGlvbiBjYWxscyBvciBzcGVjaWZpYyBJT01NVSBpbnRlcmFjdGlvbnMuCgpUaGVuLCBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB1cCBieSBzY3J1dGluaXppbmcgYGtlcm5lbC9kbWEvZGlyZWN0LmNgIGFuZCBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYC4gVGhlc2UgZmlsZXMgYXJlIG1vcmUgZ2VuZXJhbCBETUEgaW1wbGVtZW50YXRpb24gYXNwZWN0cywgYW5kIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkLCBub24tSU9NTVUgRE1BIG9wZXJhdGlvbnMsIGFsbG9jYXRpb24gaGVscGVycywgYW5kIHBvdGVudGlhbGx5IHNvbWUgb3ZlcmFyY2hpbmcgRE1BIGZyYW1ld29yayBkZXRhaWxzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHdpbGwgaGVscCBtZSBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUuIExvb2tpbmcgYXQgYWxsIHRocmVlIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgdGhlIGRpZmZlcmVuY2UsIGlmIGFueSwgYmV0d2VlbiBJT01NVSBhbmQgbm9uLUlPTU1VIGFsbG9jYXRpb25zLiBJdCBpcyB0aW1lIHRvIGdldCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MjA6XHRcbjE2MjE6XHRzdGF0aWMgdm9pZCAqaW9tbXVfZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4xNjIyOlx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZXAsIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBhdHRycylcbjE2MjM6XHR7XG4xNjI0Olx0XHRib29sIGNvaGVyZW50ID0gZGV2X2lzX2RtYV9jb2hlcmVudChkZXYpO1xuMTYyNTpcdFx0c2l6ZV90IGFsbG9jX3NpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xuMTYyNjpcdFx0aW50IG5vZGUgPSBkZXZfdG9fbm9kZShkZXYpO1xuMTYyNzpcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuMTYyODpcdFx0dm9pZCAqY3B1X2FkZHI7XG4xNjI5Olx0XG4xNjMwOlx0XHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBhbGxvY19zaXplLCBnZnApO1xuMTYzMTpcdFx0aWYgKCFwYWdlKSB7XG4xNjMyOlx0XHRcdGNwdV9hZGRyID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5vZGUsIGFsbG9jX3NpemUsIGdmcCk7XG4xNjMzOlx0XHRcdGlmICghY3B1X2FkZHIpXG4xNjM0Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4xNjM1Olx0XHRcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2UoY3B1X2FkZHIpO1xuMTYzNjpcdFx0fVxuMTYzNzpcdFxuMTYzODpcdFx0aWYgKCFjb2hlcmVudCB8fCBQYWdlSGlnaE1lbShwYWdlKSkge1xuMTYzOTpcdFx0XHRwZ3Byb3RfdCBwcm90ID0gZG1hX3BncHJvdChkZXYsIFBBR0VfS0VSTkVMLCBhdHRycyk7XG4xNjQwOlx0XG4xNjQxOlx0XHRcdGNwdV9hZGRyID0gZG1hX2NvbW1vbl9jb250aWd1b3VzX3JlbWFwKHBhZ2UsIGFsbG9jX3NpemUsXG4xNjQyOlx0XHRcdFx0XHRwcm90LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuMTY0MzpcdFx0XHRpZiAoIWNwdV9hZGRyKVxuMTY0NDpcdFx0XHRcdGdvdG8gb3V0X2ZyZWVfcGFnZXM7XG4xNjQ1Olx0XG4xNjQ2Olx0XHRcdGlmICghY29oZXJlbnQpXG4xNjQ3Olx0XHRcdFx0YXJjaF9kbWFfcHJlcF9jb2hlcmVudChwYWdlLCBzaXplKTtcbjE2NDg6XHRcdH0gZWxzZSB7XG4xNjQ5Olx0XHRcdGNwdV9hZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpO1xuMTY1MDpcdFx0fVxuMTY1MTpcdFxuMTY1MjpcdFx0KnBhZ2VwID0gcGFnZTtcbjE2NTM6XHRcdG1lbXNldChjcHVfYWRkciwgMCwgYWxsb2Nfc2l6ZSk7XG4xNjU0Olx0XHRyZXR1cm4gY3B1X2FkZHI7XG4xNjU1Olx0b3V0X2ZyZWVfcGFnZXM6XG4xNjU2Olx0XHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgYWxsb2Nfc2l6ZSk7XG4xNjU3Olx0XHRyZXR1cm4gTlVMTDtcbjE2NTg6XHR9XG4xNjU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBETUEgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgZm9jdXMgaXMgb24gbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB0aGUgRE1BLXNwZWNpZmljIHBhcnRzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgbWVtc2V0KGNwdV9hZGRyLCAwLCBhbGxvY19zaXplKTtgIGNhbGwgd2l0aGluIGBpb21tdV9kbWFfYWxsb2NfcGFnZXNgLiBUaGlzIGlzIHdoZXJlIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGdldHRpbmcgaW5pdGlhbGl6ZWQsIGxpa2VseSB0byBhIGNsZWFuIHN0YXRlLiBUaGF0JiMzOTtzIGdvb2QgcHJhY3RpY2UgZm9yIHNlY3VyaXR5IGFuZCBjb25zaXN0ZW5jeSwgbWFraW5nIHN1cmUgdGhlcmUmIzM5O3Mgbm8gbGVmdG92ZXIgZGF0YSBmcm9tIHByZXZpb3VzIHVzYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGlmIHRoaXMgemVyb2luZyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLCBvciBpZiB0aGVyZSBhcmUgc2NlbmFyaW9zIHdoZXJlIGl0IGNvdWxkIGJlIG9wdGltaXplZC4KCk5vdywgSSYjMzk7bSBoZWFkaW5nIG92ZXIgdG8gYGtlcm5lbC9kbWEvZGlyZWN0LmNgIGFuZCBmb2N1c2luZyBvbiB0aGUgMTIwLTE4MCBsaW5lIHJhbmdlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBsb3dlci1sZXZlbCBETUEtcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhlcmUsIHByb2JhYmx5IHRoZSBvbmVzIHRoYXQgYWN0dWFsbHkgaGFuZGxlIHRoZSBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZyBhbmQgYWxsb2NhdGlvbiBpZiB0aGlzIGlzIGEgZGlyZWN0IG1hcHBlZCBzeXN0ZW0uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgRE1BIHJlZ2lvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBtYXliZSBob3cgdGhleSBhcmUgcmVsYXRlZC4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSByZWxhdGlvbnNoaXAgdG8gdGhlIGtlcm5lbCYjMzk7cyBwYWdlIGFsbG9jYXRvciwgaG93IHRoZSBhZGRyZXNzZXMgYXJlIHRyYW5zbGF0ZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgSU9NTVUuIFRoaXMgcGFydCBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LiBJIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl04oCZcyBhbGwgYWJvdXQgdGhlIGFsbG9jYXRpb24sIG1hcHBpbmcsIGFuZCB0cmFuc2ZlciBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9kbWEvZGlyZWN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdH1cbiAxMTY6XHRcbiAxMTc6XHRzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIDExODpcdFx0XHRnZnBfdCBnZnAsIGJvb2wgYWxsb3dfaGlnaG1lbSlcbiAxMTk6XHR7XG4gMTIwOlx0XHRpbnQgbm9kZSA9IGRldl90b19ub2RlKGRldik7XG4gMTIxOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiAxMjI6XHRcdHU2NCBwaHlzX2xpbWl0O1xuIDEyMzpcdFx0dm9pZCAqdmE7XG4gMTI0Olx0XG4gMTI1Olx0XHRXQVJOX09OX09OQ0UoIVBBR0VfQUxJR05FRChzaXplKSk7XG4gMTI2Olx0XG4gMTI3Olx0XHRnZnAgfD0gZG1hX2RpcmVjdF9vcHRpbWFsX2dmcF9tYXNrKGRldiwgXHUwMDI2cGh5c19saW1pdCk7XG4gMTI4Olx0XHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApO1xuIDEyOTpcdFx0aWYgKHBhZ2UpIHtcbiAxMzA6XHRcdFx0aWYgKGRtYV9jb2hlcmVudF9vayhkZXYsIHBhZ2VfdG9fcGh5cyhwYWdlKSwgc2l6ZSkgXHUwMDI2XHUwMDI2XG4gMTMxOlx0XHRcdCAgICAoYWxsb3dfaGlnaG1lbSB8fCAhUGFnZUhpZ2hNZW0ocGFnZSkpKVxuIDEzMjpcdFx0XHRcdHJldHVybiBwYWdlO1xuIDEzMzpcdFxuIDEzNDpcdFx0XHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgc2l6ZSk7XG4gMTM1Olx0XHR9XG4gMTM2Olx0XG4gMTM3Olx0XHR3aGlsZSAoKHZhID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5vZGUsIHNpemUsIGdmcCkpIFx1MDAyNlx1MDAyNlxuIDEzODpcdFx0ICAgICAgICFkbWFfY29oZXJlbnRfb2soZGV2LCB2aXJ0X3RvX3BoeXModmEpLCBzaXplKSkge1xuIDEzOTpcdFx0XHRmcmVlX3BhZ2VzX2V4YWN0KHZhLCBzaXplKTtcbiAxNDA6XHRcbiAxNDE6XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BMzIpIFx1MDAyNlx1MDAyNlxuIDE0MjpcdFx0XHQgICAgcGh5c19saW1pdCBcdTAwM2MgRE1BX0JJVF9NQVNLKDY0KSBcdTAwMjZcdTAwMjZcbiAxNDM6XHRcdFx0ICAgICEoZ2ZwIFx1MDAyNiAoR0ZQX0RNQTMyIHwgR0ZQX0RNQSkpKVxuIDE0NDpcdFx0XHRcdGdmcCB8PSBHRlBfRE1BMzI7XG4gMTQ1Olx0XHRcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BKSBcdTAwMjZcdTAwMjYgIShnZnAgXHUwMDI2IEdGUF9ETUEpKVxuIDE0NjpcdFx0XHRcdGdmcCA9IChnZnAgXHUwMDI2IH5HRlBfRE1BMzIpIHwgR0ZQX0RNQTtcbiAxNDc6XHRcdFx0ZWxzZVxuIDE0ODpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDE0OTpcdFx0fVxuIDE1MDpcdFx0cGFnZSA9IHZhID8gdmlydF90b19wYWdlKHZhKSA6IE5VTEw7XG4gMTUxOlx0XG4gMTUyOlx0XHRyZXR1cm4gcGFnZTtcbiAxNTM6XHR9XG4gMTU0Olx0XG4gMTU1Olx0LypcbiAxNTY6XHQgKiBDaGVjayBpZiBhIHBvdGVudGlhbGx5IGJsb2NraW5nIG9wZXJhdGlvbnMgbmVlZHMgdG8gZGlwIGludG8gdGhlIGF0b21pY1xuIDE1NzpcdCAqIHBvb2xzIGZvciB0aGUgZ2l2ZW4gZGV2aWNlL2dmcC5cbiAxNTg6XHQgKi9cbiAxNTk6XHRzdGF0aWMgYm9vbCBkbWFfZGlyZWN0X3VzZV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgZ2ZwX3QgZ2ZwKVxuIDE2MDpcdHtcbiAxNjE6XHRcdHJldHVybiAhZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSBcdTAwMjZcdTAwMjYgIWlzX3N3aW90bGJfZm9yX2FsbG9jKGRldik7XG4gMTYyOlx0fVxuIDE2MzpcdFxuIDE2NDpcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19mcm9tX3Bvb2woc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiAxNjU6XHRcdFx0ZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgdm9pZCAqKmNwdV9hZGRyLCBnZnBfdCBnZnAsXG4gMTY2Olx0XHRcdHVuc2lnbmVkIGxvbmcgYXR0cnMpXG4gMTY3Olx0e1xuIDE2ODpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gMTY5Olx0XHR1NjQgcGh5c19saW1pdDtcbiAxNzA6XHRcbiAxNzE6XHRcdGlmIChXQVJOX09OX09OQ0UoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9DT0hFUkVOVF9QT09MKSkpXG4gMTcyOlx0XHRcdHJldHVybiBOVUxMO1xuIDE3MzpcdFxuIDE3NDpcdFx0Z2ZwIHw9IGRtYV9kaXJlY3Rfb3B0aW1hbF9nZnBfbWFzayhkZXYsIFx1MDAyNnBoeXNfbGltaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQ2FsbGVycyBvZiBgX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzYCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGRpcmVjdCBtZW1vcnkgYWNjZXNzIChETUEpIGFsbG9jYXRpb24gd2l0aCBgX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hlcmUgYXJlIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgdXNlIGZvciB0aGlzPyBXaGF0IHN5c3RlbXMgb3IgZGV2aWNlcyBhcmUgKnJlbHlpbmcqIG9uIHRoaXMgc3BlY2lmaWMgcGF0aD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgaGVyZS4gVGhlIG5hbWUgaW1wbGllcyBhIGRpcmVjdCwgaGFyZHdhcmUtZmFjaW5nIGFsbG9jYXRpb247IHRoaXMgdXN1YWxseSBoYXMgc2VyaW91cyBjb25zdHJhaW50cyBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KClNvLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBiYWNrLiBDaGVja2luZyBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gaXMgYWJzb2x1dGVseSB0aGUgcmlnaHQgbW92ZS4gSSBuZWVkIHRvIGtub3c6IEFyZSB3ZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZHJpdmVycyB0aGF0IGFyZSB2ZXJ5IGxvdyBsZXZlbD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaGlnaC1wZXJmb3JtYW5jZSBuZXR3b3JraW5nIHN0YWNrcyB0aGF0IGFyZSBkaXJlY3RseSBtYXBwaW5nIG1lbW9yeT8gQXJlIHdlIGxvb2tpbmcgYXQgYW55dGhpbmcgaW52b2x2aW5nIHJlYWwtdGltZSBjb25zdHJhaW50cz8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbnMgaXMgZ29pbmcgdG8gYmUga2V5LiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyB0aGVzZSBjYWxsZXJzIGFyZSBtYW5pcHVsYXRpbmcgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGFsbG9jYXRlZCBtZW1vcnkuCgpUaGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIGFsbG9jYXRpb24gdGhpcyB3YXkgY2FuIGJlIGh1Z2UsIGJ1dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBraW5kIG9mIGhhcmR3YXJlIGludm9sdmVkIGluIHJlcXVlc3RpbmcgRE1BIGFjY2VzcyBpcyBhbHNvIHZpdGFsLiBJbiBteSBtaW5kLCBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zOiBJcyB0aGVyZSBhbnkgcG9zc2liaWxpdHkgb2YgY29udGVudGlvbj8gQ291bGQgd2UgYmUgZGVhbGluZyB3aXRoIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoZSBtZW1vcnkgY29udHJvbGxlciBvciBjYWNoZSBjb2hlcmVuY3k/IFdoYXQgYWJvdXQgTlVNQSBjb25zaWRlcmF0aW9ucyBpZiB0aGlzIGlzIGEgc3lzdGVtIHdpdGggbm9uLXVuaWZvcm0gbWVtb3J5IGFjY2Vzcz8gVGhlIGNhbGxlcnMgd2lsbCBwcm92aWRlIHRob3NlIGFuc3dlcnMuIEZyb20gdGhhdCBpbmZvcm1hdGlvbiwgSSBjYW4gYmV0dGVyIGFzc2VzcyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneS4gSSBuZWVkIHRvIGxvb2sgZm9yIHBhdHRlcm5zLCBhbmQgYW5vbWFsaWVzLCB0byBmbGFnIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBXaGF0IGFyZSB0aGUgc2l6ZSByZXF1ZXN0cz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGZyYWdtZW50YXRpb24gaXNzdWVzPyBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHBvc3NpYmxlIGRlYWRsb2NrcyBhcyB3ZWxsLiBVbHRpbWF0ZWx5LCBhbnkgaXNzdWVzIGhlcmUgY291bGQgYWZmZWN0IG11bHRpcGxlIGxheWVycyBpbiB0aGUgc3lzdGVtLCBwb3RlbnRpYWxseSBjYXNjYWRpbmcgYWxsIHRoZSB3YXkgdXAgdG8gdXNlciBzcGFjZSBhbmQgYXBwbGljYXRpb24gcGVyZm9ybWFuY2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aG9zZSBjYWxsZXJzIGFyZSB0ZWxsaW5nIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZG1hLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZG1hL2RpcmVjdC5jPTEwND1zdGF0aWMgc3RydWN0IHBhZ2UgKmRtYV9kaXJlY3RfYWxsb2Nfc3dpb3RsYihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTE2LVxua2VybmVsL2RtYS9kaXJlY3QuYzoxMTc6c3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTE4LVx0XHRnZnBfdCBnZnAsIGJvb2wgYWxsb3dfaGlnaG1lbSlcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTE4ND1zdGF0aWMgdm9pZCAqZG1hX2RpcmVjdF9hbGxvY19ub19tYXBwaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy0xODgtXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjE4OTpcdHBhZ2UgPSBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBnZnAgXHUwMDI2IH5fX0dGUF9aRVJPLCB0cnVlKTtcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTkwLVx0aWYgKCFwYWdlKVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9MjA0PXZvaWQgKmRtYV9kaXJlY3RfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5MC1cdC8qIHdlIGFsd2F5cyBtYW51YWxseSB6ZXJvIHRoZSBtZW1vcnkgb25jZSB3ZSBhcmUgZG9uZSAqL1xua2VybmVsL2RtYS9kaXJlY3QuYzoyOTE6XHRwYWdlID0gX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKGRldiwgc2l6ZSwgZ2ZwIFx1MDAyNiB+X19HRlBfWkVSTywgYWxsb3dfaGlnaG1lbSk7XG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5Mi1cdGlmICghcGFnZSlcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTQzND1zdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmMtNDU2LVxua2VybmVsL2RtYS9kaXJlY3QuYzo0NTc6XHRwYWdlID0gX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKGRldiwgc2l6ZSwgZ2ZwLCBmYWxzZSk7XG5rZXJuZWwvZG1hL2RpcmVjdC5jLTQ1OC1cdGlmICghcGFnZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyOTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBvcHNfaGVscGVycy5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHByb2JsZW0mIzM5O3MgbGlrZWx5IHNvbWV3aGVyZSB3aXRoaW4gdGhlIERNQSBvcGVyYXRpb24gaGVscGVycywgc28gbXkgZmlyc3Qgc3RvcCBpcyBkZWZpbml0ZWx5IGBrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIERNQSBzdWJzeXN0ZW0uIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gb2J2aW91cyBjdWxwcml0IGluIGhvdyByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgaG93IHRyYW5zZmVycyBhcmUgaW5pdGlhdGVkLCBvciBwZXJoYXBzIGluIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IG1hcHBpbmcuIEkmIzM5O20gaG9waW5nIEkgY2FuIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgcXVpY2tseS4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSB3ZWxsLWNvbW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZG1hL29wc19oZWxwZXJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdHN0cnVjdCBwYWdlICpkbWFfY29tbW9uX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gIDYzOlx0XHRcdGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgZ2ZwX3QgZ2ZwKVxuICA2NDpcdHtcbiAgNjU6XHRcdGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTtcbiAgNjY6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuICA2NzpcdFx0cGh5c19hZGRyX3QgcGh5cztcbiAgNjg6XHRcbiAgNjk6XHRcdHBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIHNpemUsIGdmcCk7XG4gIDcwOlx0XHRpZiAoIXBhZ2UpIHtcbiAgNzE6XHRcdFx0dm9pZCAqdmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQoZGV2X3RvX25vZGUoZGV2KSwgc2l6ZSwgZ2ZwKTtcbiAgNzI6XHRcbiAgNzM6XHRcdFx0aWYgKCF2YSlcbiAgNzQ6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiAgNzU6XHRcdFx0cGFnZSA9IHZpcnRfdG9fcGFnZSh2YSk7XG4gIDc2Olx0XHR9XG4gIDc3Olx0XG4gIDc4Olx0XHRwaHlzID0gcGFnZV90b19waHlzKHBhZ2UpO1xuICA3OTpcdFx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcbiAgODA6XHRcdFx0KmRtYV9oYW5kbGUgPSBpb21tdV9kbWFfbWFwX3BoeXMoZGV2LCBwaHlzLCBzaXplLCBkaXIsXG4gIDgxOlx0XHRcdFx0XHRcdFx0IERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xuICA4MjpcdFx0ZWxzZVxuICA4MzpcdFx0XHQqZG1hX2hhbmRsZSA9IG9wcy1cdTAwM2VtYXBfcGh5cyhkZXYsIHBoeXMsIHNpemUsIGRpcixcbiAgODQ6XHRcdFx0XHRcdFx0ICAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xuICA4NTpcdFx0aWYgKCpkbWFfaGFuZGxlID09IERNQV9NQVBQSU5HX0VSUk9SKSB7XG4gIDg2Olx0XHRcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcbiAgODc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDg4Olx0XHR9XG4gIDg5Olx0XG4gIDkwOlx0XHRtZW1zZXQocGFnZV9hZGRyZXNzKHBhZ2UpLCAwLCBzaXplKTtcbiAgOTE6XHRcdHJldHVybiBwYWdlO1xuICA5MjpcdH1cbiAgOTM6XHRcbiAgOTQ6XHR2b2lkIGRtYV9jb21tb25fZnJlZV9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiAgOTU6XHRcdFx0ZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXG4gIDk2Olx0e1xuICA5NzpcdFx0Y29uc3Qgc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpO1xuICA5ODpcdFxuICA5OTpcdFx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMTEKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogOTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFuYWx5c2lzIG9mIERNQSBNZW1vcnkgQWxsb2NhdGlvbiBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IGltcHJvdmluZyB0aGUgZWZmaWNpZW5jeSBvZiBETUEgbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSBieSBtb3ZpbmcgZnJvbSB0aGUgb2xkIGBhbGxvY19wYWdlc19ub2RlYC9gX19mcmVlX3BhZ2VzYCBhcHByb2FjaCAod2hpY2ggY291bGQgbGVhZCB0byB3YXN0ZWQgcGFnZXMgd2l0aCBub24tcG93ZXItb2YtMiBhbGxvY2F0aW9ucykgdG8gdGhlIG1vcmUgcHJlY2lzZSBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkYC9gZnJlZV9wYWdlc19leGFjdGAgY2FsbHMuIFRoZSBnb2FsIGlzIHRvIGF2b2lkIHRob3NlIGFsbG9jYXRpb24vZnJlZWluZyBtaXNtYXRjaGVzIGJldHdlZW4gQ01BIGFuZCB0aGUgYnVkZHkgYWxsb2NhdG9yLCBlbnN1cmluZyB3ZSBnZXQgKmV4YWN0bHkqIHRoZSBwYWdlcyByZXF1ZXN0ZWQuIFRoYXQmIzM5O3MgYSBzb2xpZCBvcHRpbWl6YXRpb24uCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBLTVNBTiB2dWxuZXJhYmlsaXRpZXM/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3Q6CgoxLiAgKipLZXJuZWwtdG8tVXNlciBTcGFjZSBEYXRhIExlYWtzOioqIE5vLiBUaGUgcGF0Y2ggaXNuJiMzOTt0IG1vZGlmeWluZyBvciBpbnRyb2R1Y2luZyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyBzdHJpY3RseSBhYm91dCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudC4KCjIuICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgRGVwZW5kZW5jaWVzOioqIE5vcGUuIFRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgaGluZ2VzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gVGhlIGFsbG9jYXRpb25zIGFuZCBmcmVlcyBhcmUgY2xlYW4uCgozLiAgKipVbmluaXRpYWxpemVkIEZpZWxkcyBpbiBDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBBZ2Fpbiwgbm8uIFRoZSBtZW1vcnkgYnVmZmVycyBhcmUgZWl0aGVyIGV4cGxpY2l0bHkgYG1lbXNldGAgKHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UpIG9yIGluaXRpYWxpemVkIGJ5IERNQSBjYWxsZXJzLiBUaGUgcGF0Y2ggaXNuJiMzOTt0IHRvdWNoaW5nIGFueSBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZXhpc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBJdCYjMzk7cyBqdXN0IHR3ZWFraW5nICpob3cqIHdlIGFsbG9jYXRlIGFuZCBmcmVlIHRoZSBwaHlzaWNhbCBwYWdlcy4KCjQuICAqKkJvdW5kcyBDaGVjayBJc3N1ZXMgTGVhZGluZyB0byBVbmluaXRpYWxpemVkIE1lbW9yeSBBY2Nlc3M6KiogVGhpcyBpcyB3aGVyZSB3ZSBuZWVkIHRvIGJlIGV4dHJhIGNhcmVmdWwsIGJ1dCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCBuby4gVGhlIGJ1ZmZlciBzaXplIGlzIGhhbmRsZWQgY29ycmVjdGx5LiBBY2Nlc3NpbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgc2l6ZSAoYHNpemVgIG9yIGBhbGxvY19zaXplYCkgaW4gdGhpcyBuZXcgc2V0dXAgd291bGQgdHJpZ2dlciBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHBhZ2UgZmF1bHRzLCAqbm90KiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHdpdGhpbiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gSW4gZmFjdCwgaWYgYW55dGhpbmcsIGl0JiMzOTtzIHNhZmVyLCBhcyBpdCBzaG91bGQgYmUgaGl0dGluZyBmcmVlZCBwYWdlcywgd2hpY2ggd291bGQgYWxlcnQgdXMgZmFzdGVyLgoKU28sIGJhc2VkIG9uIHRoaXMgdGhvcm91Z2ggYW5hbHlzaXMsIEkgY2FuJiMzOTt0IHNlZSBhbnkgS01TQU4tc3BlY2lmaWMgYnVncyBpbnRyb2R1Y2VkLiBUaGVzZSBjaGFuZ2VzIGFyZSBleGNsdXNpdmVseSByZWxhdGVkIHRvIERNQSBtZW1vcnkgbWFuYWdlbWVudCBhdCB0aGUgcGFnZSBsZXZlbC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGluZGl2aWR1YWwgZmlsZSBjaGFuZ2VzIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbjoKCiogICBgaW9tbXVfZG1hX2FsbG9jX3BhZ2VzYDogUmVwbGFjaW5nIGBhbGxvY19wYWdlc19ub2RlYCB3aXRoIGBhbGxvY19wYWdlc19leGFjdF9uaWRgIGZvbGxvd2VkIGJ5IGEgYG1lbXNldGAgdG8gemVyby4gU2FmZS4KCiogICBgZG1hLW1hcC1vcHMuaGAsIGBjb250aWd1b3VzLmNgLCBgZGlyZWN0LmNgLCBgb3BzX2hlbHBlcnMuY2A6IFVzaW5nIGBmcmVlX3BhZ2VzX2V4YWN0YCBpbnN0ZWFkIG9mIGBfX2ZyZWVfcGFnZXNgLiBGaW5lLCB0aGlzIGlzIHByZWNpc2VseSB3aGF0IHdlIGFyZSBkb2luZyB0byBhdm9pZCB0aG9zZSBwYWdlIHdhc3RlIHByb2JsZW1zLgoKKiAgIGBpbmNsdWRlL2xpbnV4L2dmcC5oYCwgYG1tL3BhZ2VfYWxsb2MuY2A6IFJlbW92aW5nIGBfX21lbWluaXRgLiBUaGlzIG1ha2VzIHRoZSBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkYCBmdW5jdGlvbiB1c2FibGUgb3V0c2lkZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSwgd2hpY2ggaXMgbmVlZGVkLiBNYWtlcyBzZW5zZSBmb3IgRE1BIGNvZGUuCgpBbGwgb2YgdGhlc2UgY2hhbmdlcyBhcmUgYWJvdXQgZmluZXIgZ3JhbnVsYXJpdHkgb2YgcGFnZSBhbGxvY2F0aW9uL2ZyZWVpbmcgZm9yIERNQSBvcGVyYXRpb25zLiBJZiB0aGVyZSBhcmUgYW55IGJ1Z3MsIHRoZXkmIzM5O2xsIGJlIHJlZ3VsYXIgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzOiBpbnZhbGlkIGZyZWVzLCBwYWdlIHJlZmVyZW5jZSBjb3VudCBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgZXhpc3RpbmcgS0FTQU4sIHBhZ2Vfb3duZXIvcGFnZV9wb2lzb25pbmcsIGFuZCBnZW5lcmFsIGtlcm5lbCBkZWJ1Z2dlcnMgaGFuZGxlIHRob3NlIGNhc2VzLiBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4KCkFsbCBjbGVhci4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBETUEgbWVtb3J5IGFsbG9jYXRpb24gZmFsbGJhY2sgcGF0aHMgKGluIGRtYS1pb21tdSwgZG1hLWRpcmVjdCwgYW5kIG9wc19oZWxwZXJzKSB0byB1c2UgYWxsb2NfcGFnZXNfZXhhY3RfbmlkKCkgYW5kIGZyZWVfcGFnZXNfZXhhY3QoKSBpbnN0ZWFkIG9mIGFsbG9jX3BhZ2VzX25vZGUoKSBhbmQgX19mcmVlX3BhZ2VzKCkgd2l0aCBwYWdlIG9yZGVycy4gSXQgYWxzbyByZW1vdmVzIHRoZSBfX21lbWluaXQgYW5ub3RhdGlvbiBmcm9tIGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoKS5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBhZmZlY3QgcGFnZS1sZXZlbCBtZW1vcnkgYWxsb2NhdGlvbiBncmFudWxhcml0eSBhbmQgZnJlZWluZyBsb2dpYyB3aXRoaW4gdGhlIERNQSBzdWJzeXN0ZW0uIFRoZSBhbGxvY2F0ZWQgbWVtb3J5IGJ1ZmZlcnMgYXJlIGVpdGhlciBleHBsaWNpdGx5IHplcm9lZCAodmlhIG1lbXNldCkgb3IgbWFuYWdlZCBwZXIgc3RhbmRhcmQgRE1BIHN1YnN5c3RlbSBjb252ZW50aW9ucywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBwYWdlIGxpZmV0aW1lLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYXJlIGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgcGFnZSBhbGxvY2F0b3IgZGVidWdnaW5nIHRvb2xzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhbGxiYWNrIHBhdGhzIChpbiBkbWEtaW9tbXUsIGRtYS1kaXJlY3QsIGFuZCBvcHNfaGVscGVycykgdG8gdXNlIGFsbG9jX3BhZ2VzX2V4YWN0X25pZCgpIGFuZCBmcmVlX3BhZ2VzX2V4YWN0KCkgaW5zdGVhZCBvZiBhbGxvY19wYWdlc19ub2RlKCkgYW5kIF9fZnJlZV9wYWdlcygpIHdpdGggcGFnZSBvcmRlcnMuIEl0IGFsc28gcmVtb3ZlcyB0aGUgX19tZW1pbml0IGFubm90YXRpb24gZnJvbSBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKCkuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgYWZmZWN0IHBhZ2UtbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkgYW5kIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBETUEgc3Vic3lzdGVtLiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSB6ZXJvZWQgKHZpYSBtZW1zZXQpIG9yIG1hbmFnZWQgcGVyIHN0YW5kYXJkIERNQSBzdWJzeXN0ZW0gY29udmVudGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcGFnZSBsaWZldGltZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdG9yIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzoxMC45NzQ2OTM1MDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDk2ODM4MDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJETUFfQ01BXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIklPTU1VX0RNQVwiLFxuICAgIFwiRE1BX09QU19IRUxQRVJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZlwiLFxuICAgIFwiZG1hX2ZyZWVfY29udGlndW91c1wiLFxuICAgIFwiX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJkbWFfY29tbW9uX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJpb21tdV9kbWFfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9kaXJlY3RfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9kaXJlY3RfYWxsb2NcIixcbiAgICBcImlvbW11X2RtYV9hbGxvY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERNQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWxsYmFjayBwYXRocyAoaW4gZG1hLWlvbW11LCBkbWEtZGlyZWN0LCBhbmQgb3BzX2hlbHBlcnMpIHRvIHVzZSBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpIGluc3RlYWQgb2YgYWxsb2NfcGFnZXNfbm9kZSgpIGFuZCBfX2ZyZWVfcGFnZXMoKSB3aXRoIHBhZ2Ugb3JkZXJzLiBJdCBhbHNvIHJlbW92ZXMgdGhlIF9fbWVtaW5pdCBhbm5vdGF0aW9uIGZyb20gYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZigpLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgYWZmZWN0IHBhZ2UtbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkgYW5kIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBETUEgc3Vic3lzdGVtLiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSB6ZXJvZWQgKHZpYSBtZW1zZXQpIG9yIG1hbmFnZWQgcGVyIHN0YW5kYXJkIERNQSBzdWJzeXN0ZW0gY29udmVudGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcGFnZSBsaWZldGltZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdG9yIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBETUEgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgYWNyb3NzIG11bHRpcGxlIGNvcmUgc3Vic3lzdGVtcyAoa2VybmVsL2RtYS8sIG1tLywgZHJpdmVycy9pb21tdS8pLiBJdCByZXBsYWNlcyBwb3dlci1vZi10d28gcGFnZSBhbGxvY2F0aW9ucyBhbmQgX19mcmVlX3BhZ2VzKCkgd2l0aCBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpLCB3aGljaCBzcGxpdHMgYW5kIGZyZWVzIHRyYWlsaW5nIHVudXNlZCBwYWdlcy4gVGhpcyBjaGFuZ2VzIG1lbW9yeSBhbGlnbm1lbnQsIHBhZ2UgY291bnQgdHJhY2tpbmcsIGFuZCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBydW50aW1lIGFzc2VydGlvbiB2aW9sYXRpb25zIGluIGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoKSBpZiBjYWxsZXJzIHBhc3MgY2VydGFpbiBHRlAgZmxhZ3MuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIERNQSBhbGxvY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQgZGV2aWNlIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ3OjEwLjk3NDY5OTM4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NjAxMTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRlNjViNWM4YWUwNTVhY2ExOTFjMTMxNmU5YWYzNzRkMGRhZDY1NWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAwMTo0NzowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY1xcbmluZGV4IDU4YzYyNDUxM2NkNDMuLjhmMjYyYzgzODAyYzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY1xcbisrKyBiL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNcXG5AQCAtMTYyOCwxMCArMTYyOCwxMiBAQCBzdGF0aWMgdm9pZCAqaW9tbXVfZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIFxcdHZvaWQgKmNwdV9hZGRyO1xcbiBcXG4gXFx0cGFnZSA9IGRtYV9hbGxvY19jb250aWd1b3VzKGRldiwgYWxsb2Nfc2l6ZSwgZ2ZwKTtcXG4tXFx0aWYgKCFwYWdlKVxcbi1cXHRcXHRwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIGdldF9vcmRlcihhbGxvY19zaXplKSk7XFxuLVxcdGlmICghcGFnZSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdGlmICghcGFnZSkge1xcbitcXHRcXHRjcHVfYWRkciA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBhbGxvY19zaXplLCBnZnApO1xcbitcXHRcXHRpZiAoIWNwdV9hZGRyKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0cGFnZSA9IHZpcnRfdG9fcGFnZShjcHVfYWRkcik7XFxuK1xcdH1cXG4gXFxuIFxcdGlmICghY29oZXJlbnQgfHwgUGFnZUhpZ2hNZW0ocGFnZSkpIHtcXG4gXFx0XFx0cGdwcm90X3QgcHJvdCA9IGRtYV9wZ3Byb3QoZGV2LCBQQUdFX0tFUk5FTCwgYXR0cnMpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcXG5pbmRleCA4ZmFlMmI3ZGViMjBkLi4zZWYzMDAzNzEzYTY5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxcbkBAIC0xNDMsNyArMTQzLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4gc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0c2l6ZV90IHNpemUpXFxuIHtcXG4tXFx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XFxuK1xcdGZyZWVfcGFnZXNfZXhhY3QocGFnZV9hZGRyZXNzKHBhZ2UpLCBzaXplKTtcXG4gfVxcbiAjZW5kaWYgLyogQ09ORklHX0RNQV9DTUEqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcXG5pbmRleCA4NzJiYzUzZjMyZWM4Li5hYTQ2MDE4MDVmMjFhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oXFxuQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkICphbGxvY19wYWdlc19leGFjdF9ub3Byb2Yoc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMSk7XFxuIFxcbiB2b2lkIGZyZWVfcGFnZXNfZXhhY3Qodm9pZCAqdmlydCwgc2l6ZV90IHNpemUpO1xcbiBcXG4tX19tZW1pbml0IHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMik7XFxuK3ZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMik7XFxuICNkZWZpbmUgYWxsb2NfcGFnZXNfZXhhY3RfbmlkKC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoX19WQV9BUkdTX18pKVxcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xcbmluZGV4IDY2MDkzNDYwNTg0ZTguLjkwOTM3ZGM3YzYyN2QgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2RtYS9jb250aWd1b3VzLmNcXG4rKysgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xcbkBAIC00NTEsOCArNDUxLDggQEAgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGdmcF90IGdmcClcXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb250aWd1b3VzKCkuIEFzIHRoZVxcbiAgKiBjbWFfcmVsZWFzZSByZXR1cm5zIGZhbHNlIHdoZW4gcHJvdmlkZWQgcGFnZXMgZG8gbm90IGJlbG9uZyB0byBjb250aWd1b3VzXFxuLSAqIGFyZWEgYW5kIHRydWUgb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHRoZW4gZG9lcyBhIGZhbGxiYWNrIF9fZnJlZV9wYWdlcygpXFxuLSAqIHVwb24gYSBmYWxzZS1yZXR1cm4uXFxuKyAqIGFyZWEgYW5kIHRydWUgb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHRoZW4gZG9lcyBhIGZhbGxiYWNrXFxuKyAqIGZyZWVfcGFnZXNfZXhhY3QoKSB1cG9uIGEgZmFsc2UtcmV0dXJuLlxcbiAgKi9cXG4gdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKVxcbiB7XFxuQEAgLTQ3Niw3ICs0NzYsNyBAQCB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIG5vdCBpbiBhbnkgY21hLCBmcmVlIGZyb20gYnVkZHkgKi9cXG4tXFx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XFxuK1xcdGZyZWVfcGFnZXNfZXhhY3QocGFnZV9hZGRyZXNzKHBhZ2UpLCBzaXplKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9kaXJlY3QuYyBiL2tlcm5lbC9kbWEvZGlyZWN0LmNcXG5pbmRleCBkYTY2NWNhMjJkNWMwLi5lYTY0NDUzZDczNzBhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9kbWEvZGlyZWN0LmNcXG4rKysgYi9rZXJuZWwvZG1hL2RpcmVjdC5jXFxuQEAgLTEyMCw2ICsxMjAsNyBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbiBcXHRpbnQgbm9kZSA9IGRldl90b19ub2RlKGRldik7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHR1NjQgcGh5c19saW1pdDtcXG4rXFx0dm9pZCAqdmE7XFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoIVBBR0VfQUxJR05FRChzaXplKSk7XFxuIFxcbkBAIC0xMzMsOSArMTM0LDkgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4gXFx0XFx0ZG1hX2ZyZWVfY29udGlndW91cyhkZXYsIHBhZ2UsIHNpemUpO1xcbiBcXHR9XFxuIFxcbi1cXHR3aGlsZSAoKHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgZ2V0X29yZGVyKHNpemUpKSlcXG4tXFx0ICAgICAgIFxcdTAwMjZcXHUwMDI2ICFkbWFfY29oZXJlbnRfb2soZGV2LCBwYWdlX3RvX3BoeXMocGFnZSksIHNpemUpKSB7XFxuLVxcdFxcdF9fZnJlZV9wYWdlcyhwYWdlLCBnZXRfb3JkZXIoc2l6ZSkpO1xcbitcXHR3aGlsZSAoKHZhID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5vZGUsIHNpemUsIGdmcCkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAhZG1hX2NvaGVyZW50X29rKGRldiwgdmlydF90b19waHlzKHZhKSwgc2l6ZSkpIHtcXG4rXFx0XFx0ZnJlZV9wYWdlc19leGFjdCh2YSwgc2l6ZSk7XFxuIFxcbiBcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEzMikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHBoeXNfbGltaXQgXFx1MDAzYyBETUFfQklUX01BU0soNjQpIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTE0Niw2ICsxNDcsNyBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuK1xcdHBhZ2UgPSB2YSA/IHZpcnRfdG9fcGFnZSh2YSkgOiBOVUxMO1xcbiBcXG4gXFx0cmV0dXJuIHBhZ2U7XFxuIH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9vcHNfaGVscGVycy5jIGIva2VybmVsL2RtYS9vcHNfaGVscGVycy5jXFxuaW5kZXggNmI1ZjkyMDhkMzFjMC4uNWNkZjNmNjBjZjQ3OSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcXG4rKysgYi9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcXG5AQCAtNjcsMTAgKzY3LDEzIEBAIHN0cnVjdCBwYWdlICpkbWFfY29tbW9uX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIFxcdHBoeXNfYWRkcl90IHBoeXM7XFxuIFxcbiBcXHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApO1xcbi1cXHRpZiAoIXBhZ2UpXFxuLVxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKGRldl90b19ub2RlKGRldiksIGdmcCwgZ2V0X29yZGVyKHNpemUpKTtcXG4tXFx0aWYgKCFwYWdlKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0aWYgKCFwYWdlKSB7XFxuK1xcdFxcdHZvaWQgKnZhID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKGRldl90b19ub2RlKGRldiksIHNpemUsIGdmcCk7XFxuK1xcbitcXHRcXHRpZiAoIXZhKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0cGFnZSA9IHZpcnRfdG9fcGFnZSh2YSk7XFxuK1xcdH1cXG4gXFxuIFxcdHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSk7XFxuIFxcdGlmICh1c2VfZG1hX2lvbW11KGRldikpXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IGM0ZGM2MWVjNjYzZWUuLmQzYTEzNWRmY2RkM2QgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXFxuKysrIGIvbW0vcGFnZV9hbGxvYy5jXFxuQEAgLTU2MzcsNyArNTYzNyw3IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKTtcXG4gICpcXG4gICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYXJlYSBvciAlTlVMTCBpbiBjYXNlIG9mIGVycm9yLlxcbiAgKi9cXG4tdm9pZCAqIF9fbWVtaW5pdCBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaylcXG4rdm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6MTIuMjUxMzU1NjAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NjIwNjAyNjY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJETUFfQ01BXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIklPTU1VX0RNQVwiLFxuICAgIFwiRE1BX09QU19IRUxQRVJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZlwiLFxuICAgIFwiZG1hX2ZyZWVfY29udGlndW91c1wiLFxuICAgIFwiX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJkbWFfY29tbW9uX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJpb21tdV9kbWFfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9kaXJlY3RfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9kaXJlY3RfYWxsb2NcIixcbiAgICBcImlvbW11X2RtYV9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBETUEgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgYWNyb3NzIG11bHRpcGxlIGNvcmUgc3Vic3lzdGVtcyAoa2VybmVsL2RtYS8sIG1tLywgZHJpdmVycy9pb21tdS8pLiBJdCByZXBsYWNlcyBwb3dlci1vZi10d28gcGFnZSBhbGxvY2F0aW9ucyBhbmQgX19mcmVlX3BhZ2VzKCkgd2l0aCBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpLCB3aGljaCBzcGxpdHMgYW5kIGZyZWVzIHRyYWlsaW5nIHVudXNlZCBwYWdlcy4gVGhpcyBjaGFuZ2VzIG1lbW9yeSBhbGlnbm1lbnQsIHBhZ2UgY291bnQgdHJhY2tpbmcsIGFuZCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBydW50aW1lIGFzc2VydGlvbiB2aW9sYXRpb25zIGluIGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoKSBpZiBjYWxsZXJzIHBhc3MgY2VydGFpbiBHRlAgZmxhZ3MuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIERNQSBhbGxvY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQgZGV2aWNlIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGU2NWI1YzhhZTA1NWFjYTE5MWMxMzE2ZTlhZjM3NGQwZGFkNjU1ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDE6NDc6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY1xuaW5kZXggNThjNjI0NTEzY2Q0My4uOGYyNjJjODM4MDJjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNcbisrKyBiL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNcbkBAIC0xNjI4LDEwICsxNjI4LDEyIEBAIHN0YXRpYyB2b2lkICppb21tdV9kbWFfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdHZvaWQgKmNwdV9hZGRyO1xuIFxuIFx0cGFnZSA9IGRtYV9hbGxvY19jb250aWd1b3VzKGRldiwgYWxsb2Nfc2l6ZSwgZ2ZwKTtcbi1cdGlmICghcGFnZSlcbi1cdFx0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwLCBnZXRfb3JkZXIoYWxsb2Nfc2l6ZSkpO1xuLVx0aWYgKCFwYWdlKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdGlmICghcGFnZSkge1xuK1x0XHRjcHVfYWRkciA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBhbGxvY19zaXplLCBnZnApO1xuK1x0XHRpZiAoIWNwdV9hZGRyKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRwYWdlID0gdmlydF90b19wYWdlKGNwdV9hZGRyKTtcbitcdH1cbiBcbiBcdGlmICghY29oZXJlbnQgfHwgUGFnZUhpZ2hNZW0ocGFnZSkpIHtcbiBcdFx0cGdwcm90X3QgcHJvdCA9IGRtYV9wZ3Byb3QoZGV2LCBQQUdFX0tFUk5FTCwgYXR0cnMpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxuaW5kZXggOGZhZTJiN2RlYjIwZC4uM2VmMzAwMzcxM2E2OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXG5AQCAtMTQzLDcgKzE0Myw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0c2l6ZV90IHNpemUpXG4ge1xuLVx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4rXHRmcmVlX3BhZ2VzX2V4YWN0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgc2l6ZSk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfRE1BX0NNQSovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcbmluZGV4IDg3MmJjNTNmMzJlYzguLmFhNDYwMTgwNWYyMWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oXG5AQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spIF9fYWxsb2Nfc2l6ZSgxKTtcbiBcbiB2b2lkIGZyZWVfcGFnZXNfZXhhY3Qodm9pZCAqdmlydCwgc2l6ZV90IHNpemUpO1xuIFxuLV9fbWVtaW5pdCB2b2lkICphbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaykgX19hbGxvY19zaXplKDIpO1xuK3ZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMik7XG4gI2RlZmluZSBhbGxvY19wYWdlc19leGFjdF9uaWQoLi4uKVx0XHRcdFx0XHRcXFxuIFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuaW5kZXggNjYwOTM0NjA1ODRlOC4uOTA5MzdkYzdjNjI3ZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvY29udGlndW91cy5jXG4rKysgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuQEAgLTQ1MSw4ICs0NTEsOCBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKVxuICAqXG4gICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb250aWd1b3VzKCkuIEFzIHRoZVxuICAqIGNtYV9yZWxlYXNlIHJldHVybnMgZmFsc2Ugd2hlbiBwcm92aWRlZCBwYWdlcyBkbyBub3QgYmVsb25nIHRvIGNvbnRpZ3VvdXNcbi0gKiBhcmVhIGFuZCB0cnVlIG90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiB0aGVuIGRvZXMgYSBmYWxsYmFjayBfX2ZyZWVfcGFnZXMoKVxuLSAqIHVwb24gYSBmYWxzZS1yZXR1cm4uXG4rICogYXJlYSBhbmQgdHJ1ZSBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdGhlbiBkb2VzIGEgZmFsbGJhY2tcbisgKiBmcmVlX3BhZ2VzX2V4YWN0KCkgdXBvbiBhIGZhbHNlLXJldHVybi5cbiAgKi9cbiB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXG4ge1xuQEAgLTQ3Niw3ICs0NzYsNyBAQCB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXG4gXHR9XG4gXG4gXHQvKiBub3QgaW4gYW55IGNtYSwgZnJlZSBmcm9tIGJ1ZGR5ICovXG4tXHRfX2ZyZWVfcGFnZXMocGFnZSwgZ2V0X29yZGVyKHNpemUpKTtcbitcdGZyZWVfcGFnZXNfZXhhY3QocGFnZV9hZGRyZXNzKHBhZ2UpLCBzaXplKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2RpcmVjdC5jIGIva2VybmVsL2RtYS9kaXJlY3QuY1xuaW5kZXggZGE2NjVjYTIyZDVjMC4uZWE2NDQ1M2Q3MzcwYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvZGlyZWN0LmNcbisrKyBiL2tlcm5lbC9kbWEvZGlyZWN0LmNcbkBAIC0xMjAsNiArMTIwLDcgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdGludCBub2RlID0gZGV2X3RvX25vZGUoZGV2KTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0dTY0IHBoeXNfbGltaXQ7XG4rXHR2b2lkICp2YTtcbiBcbiBcdFdBUk5fT05fT05DRSghUEFHRV9BTElHTkVEKHNpemUpKTtcbiBcbkBAIC0xMzMsOSArMTM0LDkgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0ZG1hX2ZyZWVfY29udGlndW91cyhkZXYsIHBhZ2UsIHNpemUpO1xuIFx0fVxuIFxuLVx0d2hpbGUgKChwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIGdldF9vcmRlcihzaXplKSkpXG4tXHQgICAgICAgXHUwMDI2XHUwMDI2ICFkbWFfY29oZXJlbnRfb2soZGV2LCBwYWdlX3RvX3BoeXMocGFnZSksIHNpemUpKSB7XG4tXHRcdF9fZnJlZV9wYWdlcyhwYWdlLCBnZXRfb3JkZXIoc2l6ZSkpO1xuK1x0d2hpbGUgKCh2YSA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBzaXplLCBnZnApKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAhZG1hX2NvaGVyZW50X29rKGRldiwgdmlydF90b19waHlzKHZhKSwgc2l6ZSkpIHtcbitcdFx0ZnJlZV9wYWdlc19leGFjdCh2YSwgc2l6ZSk7XG4gXG4gXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19aT05FX0RNQTMyKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBoeXNfbGltaXQgXHUwMDNjIERNQV9CSVRfTUFTSyg2NCkgXHUwMDI2XHUwMDI2XG5AQCAtMTQ2LDYgKzE0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRcdGVsc2VcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbitcdHBhZ2UgPSB2YSA/IHZpcnRfdG9fcGFnZSh2YSkgOiBOVUxMO1xuIFxuIFx0cmV0dXJuIHBhZ2U7XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYyBiL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuY1xuaW5kZXggNmI1ZjkyMDhkMzFjMC4uNWNkZjNmNjBjZjQ3OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuY1xuKysrIGIva2VybmVsL2RtYS9vcHNfaGVscGVycy5jXG5AQCAtNjcsMTAgKzY3LDEzIEBAIHN0cnVjdCBwYWdlICpkbWFfY29tbW9uX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRwaHlzX2FkZHJfdCBwaHlzO1xuIFxuIFx0cGFnZSA9IGRtYV9hbGxvY19jb250aWd1b3VzKGRldiwgc2l6ZSwgZ2ZwKTtcbi1cdGlmICghcGFnZSlcbi1cdFx0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUoZGV2X3RvX25vZGUoZGV2KSwgZ2ZwLCBnZXRfb3JkZXIoc2l6ZSkpO1xuLVx0aWYgKCFwYWdlKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdGlmICghcGFnZSkge1xuK1x0XHR2b2lkICp2YSA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChkZXZfdG9fbm9kZShkZXYpLCBzaXplLCBnZnApO1xuK1xuK1x0XHRpZiAoIXZhKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRwYWdlID0gdmlydF90b19wYWdlKHZhKTtcbitcdH1cbiBcbiBcdHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSk7XG4gXHRpZiAodXNlX2RtYV9pb21tdShkZXYpKVxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggYzRkYzYxZWM2NjNlZS4uZDNhMTM1ZGZjZGQzZCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTYzNyw3ICs1NjM3LDcgQEAgRVhQT1JUX1NZTUJPTChhbGxvY19wYWdlc19leGFjdF9ub3Byb2YpO1xuICAqXG4gICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYXJlYSBvciAlTlVMTCBpbiBjYXNlIG9mIGVycm9yLlxuICAqL1xuLXZvaWQgKiBfX21lbWluaXQgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXG4rdm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXG4ge1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpO1xuIFx0c3RydWN0IHBhZ2UgKnA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzoxMi4yNTEzNTcyNDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTM2MTEyNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRNQS9NZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBSZXZpZXc6IFBvdGVudGlhbCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVmaW5pdGVseSBoaXR0aW5nIHNvbWUga2V5IGFyZWFzOiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIERNQSBzdWJzeXN0ZW0uIEknbSBzZWVpbmcgY2hhbmdlcyBpbjpcblxuKiAgIGBkcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jYDogU3BlY2lmaWNhbGx5LCBgaW9tbXVfZG1hX2FsbG9jX3BhZ2VzYFxuKiAgIGBpbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhgOiBMb29rcyBsaWtlIGBkbWFfZnJlZV9jb250aWd1b3VzYCBpcyBpbnZvbHZlZC5cbiogICBgaW5jbHVkZS9saW51eC9nZnAuaGAgYW5kIGBtbS9wYWdlX2FsbG9jLmNgOiBCb3RoIGhhdmUgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgIG1vZGlmaWNhdGlvbnMsIHJlbW92aW5nIGBfX21lbWluaXRgLiBUaGlzIHNjcmVhbXMgbWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlcy5cbiogICBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgLCBga2VybmVsL2RtYS9kaXJlY3QuY2AsIGFuZCBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYDogSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgZG1hX2ZyZWVfY29udGlndW91c2AsIGBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXNgLCBhbmQgYGRtYV9jb21tb25fYWxsb2NfcGFnZXNgIHJlc3BlY3RpdmVseS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyByZXBsYWNpbmcgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYGFsbG9jX3BhZ2VzX2V4YWN0X25pZGAgYW5kIGFzc29jaWF0ZWQgZnJlZWluZyBmdW5jdGlvbnMgbGlrZSBgZnJlZV9wYWdlc19leGFjdGAgd2l0aGluIERNQSBhbGxvY2F0aW9uIHBhdGhzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgcmVhY2hhYmxlIHZpYSBmdXp6aW5nIHdpdGggc3l6a2FsbGVyPyBETUEgYWxsb2NhdGlvbiBpcyB1c2VkIGFsbCBvdmVyIHRoZSBwbGFjZS4gSSdtIHRhbGtpbmcgZHJpdmVycyAobmV0ZGV2LCB2aXJ0aW8sIHNvdW5kLCBEUk0sIFVTQiwgYW5kIHByb2JhYmx5IG1vcmUpLCB2aXJ0dWFsIGRldmljZXMgKHZpcnRpbyBhZ2FpbiksIGFuZCBldmVuIHN5c2NhbGxzIChkbWEtYnVmLCBtZWRpYSwgc291bmQsIC9kZXYvLi4uIHlvdSBuYW1lIGl0KSB3aGljaCBtZWFucyB0aGlzIGlzICoqdmVyeSBsaWtlbHkqKiByZWFjaGFibGUuIFRoaXMgaXMgY29yZSBzdHVmZiwgbW9kaWZ5aW5nIGV4ZWN1dGFibGUgY29kZSBpbiBtbSBhbmQgRE1BIG1hcHBpbmcsIHdoaWNoIG1ha2VzIGl0IGhpZ2gtcHJpb3JpdHkuXG5cbkxldCdzIGNoZWNrIHRoZSBjcml0ZXJpYTpcblwiQ29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cIiBXZWxsLCBpdCdzIGRlZmluaXRlbHkgaW4gYG1tL2AgYW5kIHRvdWNoaW5nIERNQSwgd2hpY2ggaXMgZnVuZGFtZW50YWwuXG5cIlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlwiIEl0ICpjb3VsZCogZmFsbCB1bmRlciB0aGlzLCBkZXBlbmRpbmcgb24gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuXG5cbk15IGludHVpdGlvbiBzYXlzOiAqKldvcnRoRnV6emluZyA9IFRydWUqKi5cblxuTm93IEknbGwgZGlnIGludG8gYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBhbmQgdXNlIHRoZSB0b29saW5nIHRvIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4YWN0IGNoYW5nZXMgYW5kIGRldGVybWluZSB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgzNywiT3V0cHV0VG9rZW5zIjo3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ3OjE4Ljc4NzQ3MTg0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTcyMTcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21tdV9kbWFfYWxsb2NfcGFnZXN8ZG1hX2FsbG9jX2NvbnRpZ3VvdXN8ZG1hX2ZyZWVfY29udGlndW91c3xfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXN8ZG1hX2NvbW1vbl9hbGxvY19wYWdlc3xhbGxvY19wYWdlc19leGFjdF9uaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2RtYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYz0zOTM9c3RhdGljIHN0cnVjdCBwYWdlICpjbWFfYWxsb2NfYWxpZ25lZChzdHJ1Y3QgY21hICpjbWEsIHNpemVfdCBzaXplLCBnZnBfdCBnZnApXFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00MDAtLyoqXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDAxOiAqIGRtYV9hbGxvY19jb250aWd1b3VzKCkgLSBhbGxvY2F0ZSBjb250aWd1b3VzIHBhZ2VzXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDAyLSAqIEBkZXY6ICAgUG9pbnRlciB0byBkZXZpY2UgZm9yIHdoaWNoIHRoZSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZC5cXG4tLVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQxNC0gKi9cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzo0MTU6c3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGdmcF90IGdmcClcXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00MTYte1xcbi0tXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDQ2LS8qKlxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ0NzogKiBkbWFfZnJlZV9jb250aWd1b3VzKCkgLSByZWxlYXNlIGFsbG9jYXRlZCBwYWdlc1xcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ0OC0gKiBAZGV2OiAgIFBvaW50ZXIgdG8gZGV2aWNlIGZvciB3aGljaCB0aGUgcGFnZXMgd2VyZSBhbGxvY2F0ZWQuXFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTEtICpcXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzo0NTI6ICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb250aWd1b3VzKCkuIEFzIHRoZVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ1My0gKiBjbWFfcmVsZWFzZSByZXR1cm5zIGZhbHNlIHdoZW4gcHJvdmlkZWQgcGFnZXMgZG8gbm90IGJlbG9uZyB0byBjb250aWd1b3VzXFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTYtICovXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDU3OnZvaWQgZG1hX2ZyZWVfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgc2l6ZSlcXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTgte1xcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYz0xMDQ9c3RhdGljIHN0cnVjdCBwYWdlICpkbWFfZGlyZWN0X2FsbG9jX3N3aW90bGIoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTE2LVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MTE3OnN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxua2VybmVsL2RtYS9kaXJlY3QuYy0xMTgtXFx0XFx0Z2ZwX3QgZ2ZwLCBib29sIGFsbG93X2hpZ2htZW0pXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTEyNy1cXHRnZnAgfD0gZG1hX2RpcmVjdF9vcHRpbWFsX2dmcF9tYXNrKGRldiwgXFx1MDAyNnBoeXNfbGltaXQpO1xcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MTI4OlxcdHBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIHNpemUsIGdmcCk7XFxua2VybmVsL2RtYS9kaXJlY3QuYy0xMjktXFx0aWYgKHBhZ2UpIHtcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTMzLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MTM0OlxcdFxcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTEzNS1cXHR9XFxua2VybmVsL2RtYS9kaXJlY3QuYy0xMzYtXFxua2VybmVsL2RtYS9kaXJlY3QuYzoxMzc6XFx0d2hpbGUgKCh2YSA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBzaXplLCBnZnApKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTM4LVxcdCAgICAgICAhZG1hX2NvaGVyZW50X29rKGRldiwgdmlydF90b19waHlzKHZhKSwgc2l6ZSkpIHtcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM9MTg0PXN0YXRpYyB2b2lkICpkbWFfZGlyZWN0X2FsbG9jX25vX21hcHBpbmcoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTg4LVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MTg5OlxcdHBhZ2UgPSBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBnZnAgXFx1MDAyNiB+X19HRlBfWkVSTywgdHJ1ZSk7XFxua2VybmVsL2RtYS9kaXJlY3QuYy0xOTAtXFx0aWYgKCFwYWdlKVxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYz0yMDQ9dm9pZCAqZG1hX2RpcmVjdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYy0yOTAtXFx0Lyogd2UgYWx3YXlzIG1hbnVhbGx5IHplcm8gdGhlIG1lbW9yeSBvbmNlIHdlIGFyZSBkb25lICovXFxua2VybmVsL2RtYS9kaXJlY3QuYzoyOTE6XFx0cGFnZSA9IF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhkZXYsIHNpemUsIGdmcCBcXHUwMDI2IH5fX0dGUF9aRVJPLCBhbGxvd19oaWdobWVtKTtcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5Mi1cXHRpZiAoIXBhZ2UpXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5Ni1cXHQvKlxcbmtlcm5lbC9kbWEvZGlyZWN0LmM6Mjk3OlxcdCAqIGRtYV9hbGxvY19jb250aWd1b3VzIGNhbiByZXR1cm4gaGlnaG1lbSBwYWdlcyBkZXBlbmRpbmcgb24gYVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMjk4LVxcdCAqIGNvbWJpbmF0aW9uIHRoZSBjbWE9IGFyZ3VtZW50cyBhbmQgcGVyLWFyY2ggc2V0dXAuICBUaGVzZSBuZWVkIHRvIGJlXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM1NC1cXHRpZiAoIXN3aW90bGJfZnJlZShkZXYsIHBhZ2UsIHNpemUpKVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MzU1OlxcdFxcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM1Ni1cXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM9MzYxPXZvaWQgZG1hX2RpcmVjdF9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM4MS1cXHRcXHQvKiBjcHVfYWRkciBpcyBhIHN0cnVjdCBwYWdlIGNvb2tpZSwgbm90IGEga2VybmVsIGFkZHJlc3MgKi9cXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjM4MjpcXHRcXHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgY3B1X2FkZHIsIHNpemUpO1xcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMzgzLVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtNDMwLVxcdGVsc2VcXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjQzMTpcXHRcXHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgZG1hX2RpcmVjdF90b19wYWdlKGRldiwgZG1hX2FkZHIpLCBzaXplKTtcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTQzMi19XFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTQzND1zdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYy00NTYtXFxua2VybmVsL2RtYS9kaXJlY3QuYzo0NTc6XFx0cGFnZSA9IF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhkZXYsIHNpemUsIGdmcCwgZmFsc2UpO1xcbmtlcm5lbC9kbWEvZGlyZWN0LmMtNDU4LVxcdGlmICghcGFnZSlcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM9NDc0PXZvaWQgZG1hX2RpcmVjdF9mcmVlX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTUwMi1cXHRlbHNlXFxua2VybmVsL2RtYS9kaXJlY3QuYzo1MDM6XFx0XFx0ZG1hX2ZyZWVfY29udGlndW91cyhkZXYsIHBhZ2UsIHNpemUpO1xcbmtlcm5lbC9kbWEvZGlyZWN0LmMtNTA0LX1cXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jPTcxNz1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYy03MzItXFx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo3MzM6XFx0XFx0cmV0dXJuIGRtYV9jb21tb25fYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBkaXIsIGdmcCk7XFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNzM0LVxcdGlmICghb3BzLVxcdTAwM2VhbGxvY19wYWdlc19vcClcXG4tLVxcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYz0zNT1pbnQgZG1hX2NvbW1vbl9tbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtNjEtXFxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jOjYyOnN0cnVjdCBwYWdlICpkbWFfY29tbW9uX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jLTYzLVxcdFxcdGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgZ2ZwX3QgZ2ZwKVxcbi0tXFxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jLTY4LVxcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYzo2OTpcXHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApO1xcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYy03MC1cXHRpZiAoIXBhZ2UpIHtcXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmM6NzE6XFx0XFx0dm9pZCAqdmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQoZGV2X3RvX25vZGUoZGV2KSwgc2l6ZSwgZ2ZwKTtcXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtNzItXFxuLS1cXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtODUtXFx0aWYgKCpkbWFfaGFuZGxlID09IERNQV9NQVBQSU5HX0VSUk9SKSB7XFxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jOjg2OlxcdFxcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtODctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmM9OTQ9dm9pZCBkbWFfY29tbW9uX2ZyZWVfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtMTA0LVxcdFxcdFxcdFxcdERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYzoxMDU6XFx0ZG1hX2ZyZWVfY29udGlndW91cyhkZXYsIHBhZ2UsIHNpemUpO1xcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYy0xMDYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzoxOC44MzkyMDUzNjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUwOTM4Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBJT01NVSBJc3N1ZXMqKlxuXG5SaWdodCwgc28gd2UncmUgc2VlaW5nIHNvbWV0aGluZyB0aGF0IHNtZWxscyBsaWtlIGEgRE1BIG9yIElPTU1VIHByb2JsZW0uIEdpdmVuIHRoZSBnZW5lcmFsIG5hdHVyZSBvZiB0aGUgc3ltcHRvbXMsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGJyb2FkZW4gb3VyIHNjb3BlIGEgYml0IGJleW9uZCB0aGUgb2J2aW91cyBzdXNwZWN0LiBXaGlsZSBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBsaWtlbHkgY3VscHJpdCwgSSBzaG91bGQgYWxzbyBjaGVjayBvdXQgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgLiBJdCdzIHBvc3NpYmxlIHRoZSBpc3N1ZSBpc24ndCBhcyBsb2NhbGl6ZWQgYXMgaW5pdGlhbGx5IGJlbGlldmVkLCBhbmQgaXQgbWlnaHQgYmUgc3RlbW1pbmcgZnJvbSBzb21lIG1vcmUgZ2VuZXJpYyBETUEgY29uZmlndXJhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGF0IG1vZHVsZS4gSXQncyBhIGtleSBwaWVjZSBpbiB0aGUgcHV6emxlIGFuZCBuZWVkcyB0byBiZSBydWxlZCBvdXQgKG9yIGluISkgcXVpY2tseS4gVGhhdCBmaWxlIG9mdGVuIGNvbnRhaW5zIGdsb2JhbCBJT01NVSBzZXR1cCB0aGF0IGNvdWxkIGV4cGxhaW4gdGhlc2Ugc3ltcHRvbXMsIG9yIGEgbWlzY29uZmlndXJhdGlvbiBjb3VsZCBiZSBvY2N1cnJpbmcgaW4gdGhhdCBzcGFjZS4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzoyMC45OTAxNDYyODdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3ODIyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tbXVfZG1hX2FsbG9jX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYz04Nzc9c3RhdGljIHZvaWQgX19pb21tdV9kbWFfZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgY291bnQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTg4My1cXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jOjg4NDpzdGF0aWMgc3RydWN0IHBhZ2UgKipfX2lvbW11X2RtYV9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy04ODUtXFx0XFx0dW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBsb25nIG9yZGVyX21hc2ssIGdmcF90IGdmcClcXG4tLVxcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM9OTQwPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKl9faW9tbXVfZG1hX2FsbG9jX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy05NjctXFx0Y291bnQgPSBQQUdFX0FMSUdOKHNpemUpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYzo5Njg6XFx0cGFnZXMgPSBfX2lvbW11X2RtYV9hbGxvY19wYWdlcyhkZXYsIGNvdW50LCBhbGxvY19zaXplcyBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMtOTY5LVxcdFxcdFxcdFxcdFxcdGdmcCk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTk3OS1cXHQgKiBSZW1vdmUgdGhlIHpvbmUvcG9saWN5IGZsYWdzIGZyb20gdGhlIEdGUCAtIHRoZXNlIGFyZSBhcHBsaWVkIHRvIHRoZVxcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM6OTgwOlxcdCAqIF9faW9tbXVfZG1hX2FsbG9jX3BhZ2VzKCkgYnV0IGFyZSBub3QgdXNlZCBmb3IgdGhlIHN1cHBvcnRpbmdcXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTk4MS1cXHQgKiBpbnRlcm5hbCBhbGxvY2F0aW9ucyB0aGF0IGZvbGxvdy5cXG4tLVxcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM9MTYxND12b2lkIGlvbW11X2RtYV9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLFxcbi0tXFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy0xNjIwLVxcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM6MTYyMTpzdGF0aWMgdm9pZCAqaW9tbXVfZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy0xNjIyLVxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZXAsIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBhdHRycylcXG4tLVxcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM9MTY2MD12b2lkICppb21tdV9kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxcbi0tXFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy0xNjg2LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYzoxNjg3OlxcdFxcdGNwdV9hZGRyID0gaW9tbXVfZG1hX2FsbG9jX3BhZ2VzKGRldiwgc2l6ZSwgXFx1MDAyNnBhZ2UsIGdmcCwgYXR0cnMpO1xcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMtMTY4OC1cXHRcXHRpZiAoIWNwdV9hZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzoyMS4wMzg5MzQ1MzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDM0MzE4NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEV4YWN0LVNpemUgUGFnZSBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZXhhY3Qtc2l6ZSBwYWdlIGFsbG9jYXRpb25zIHdvcmssIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBOVU1BIG5vZGVzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZmAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGJlIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMg4oCTIGZpZ3VyaW5nIG91dCBob3cgd2UgZ2V0IHRob3NlIHByZWNpc2VseSBzaXplZCBwYWdlcyB0aGF0IGFyZW7igJl0IGEgcG93ZXIgb2YgdHdvLCBhbmQgaG93IHRoZSBOVU1BIG5vZGUgKG5pZCkgZ2V0cyBpbnZvbHZlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAsIHRoZSBjaG9pY2Ugb2Ygem9uZSwgYW5kIGFueSBwb3RlbnRpYWwgZmFsbGJhY2sgbWVjaGFuaXNtcyBpZiBhIHN1aXRhYmxlIHBhZ2UgaXNuJ3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYG5vcHJvZmAgYXNwZWN0IHRvbzsgaXMgdGhpcyBhYm91dCBwcm9maWxpbmcgb3Igc3RhdGlzdGljcyBnYXRoZXJpbmcgYmVpbmcgc2tpcHBlZD9cblxuVGhlbiwgdGhlIG5hdHVyYWwgZm9sbG93LXVwIGlzIGBmcmVlX3BhZ2VzX2V4YWN0YC4gSSBuZWVkIHRvIHRyYWNrIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgZXhhY3Qtc2l6ZSBwYWdlcy4gV2hhdCBkb2VzIHRoZSBkZWFsbG9jYXRpb24gcHJvY2VzcyBlbnRhaWw/IERvZXMgaXQgc2ltcGx5IHJldHVybiB0aGVtIHRvIHRoZSBhcHByb3ByaWF0ZSBmcmVlIGxpc3QsIG9yIGFyZSB0aGVyZSBtb3JlIGNvbXBsZXggb3BlcmF0aW9ucyBpbnZvbHZlZCwgc3VjaCBhcyBtZXJnaW5nIHdpdGggYWRqYWNlbnQgcGFnZXMgdG8gZm9ybSBsYXJnZXIgYmxvY2tzPyBXaGF0IGhhcHBlbnMgdG8gdGhlIG1ldGFkYXRhPyBUaGlzIGlzIGNyaXRpY2FsIGZvciBwcmV2ZW50aW5nIGZyYWdtZW50YXRpb24gYW5kIGVuc3VyaW5nIGVmZmljaWVudCBtZW1vcnkgdXRpbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYm9va2tlZXBpbmcgaXMgbWFpbnRhaW5lZCwgZnJvbSBhbGxvY2F0aW9uIHRvIGRlYWxsb2NhdGlvbiwgdG8gZnVsbHkgZ3Jhc3AgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgcG90ZW50aWFsIHBpdGZhbGxzIG9mIHRoaXMgZXhhY3Qtc2l6ZSBzdHJhdGVneS4gYG1tL3BhZ2VfYWxsb2MuY2AgaXQgaXMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzoyNC4wNzMyNTUwOTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU2MzA6XFx0ICpcXHRcXHRcXHQgICBwYWdlcyBvbiBhIG5vZGUuXFxuNTYzMTpcXHQgKiBAbmlkOiB0aGUgcHJlZmVycmVkIG5vZGUgSUQgd2hlcmUgbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWRcXG41NjMyOlxcdCAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlXFxuNTYzMzpcXHQgKiBAZ2ZwX21hc2s6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb24sIG11c3Qgbm90IGNvbnRhaW4gX19HRlBfQ09NUFxcbjU2MzQ6XFx0ICpcXG41NjM1OlxcdCAqIExpa2UgYWxsb2NfcGFnZXNfZXhhY3QoKSwgYnV0IHRyeSB0byBhbGxvY2F0ZSBvbiBub2RlIG5pZCBmaXJzdCBiZWZvcmUgZmFsbGluZ1xcbjU2MzY6XFx0ICogYmFjay5cXG41NjM3OlxcdCAqXFxuNTYzODpcXHQgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9yICVOVUxMIGluIGNhc2Ugb2YgZXJyb3IuXFxuNTYzOTpcXHQgKi9cXG41NjQwOlxcdHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxcbjU2NDE6XFx0e1xcbjU2NDI6XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpO1xcbjU2NDM6XFx0XFx0c3RydWN0IHBhZ2UgKnA7XFxuNTY0NDpcXHRcXG41NjQ1OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pKSlcXG41NjQ2OlxcdFxcdFxcdGdmcF9tYXNrIFxcdTAwMjY9IH4oX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pO1xcbjU2NDc6XFx0XFxuNTY0ODpcXHRcXHRwID0gYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YobmlkLCBnZnBfbWFzaywgb3JkZXIpO1xcbjU2NDk6XFx0XFx0aWYgKCFwKVxcbjU2NTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuNTY1MTpcXHRcXHRyZXR1cm4gbWFrZV9hbGxvY19leGFjdCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocCksIG9yZGVyLCBzaXplKTtcXG41NjUyOlxcdH1cXG41NjUzOlxcdFxcbjU2NTQ6XFx0LyoqXFxuNTY1NTpcXHQgKiBmcmVlX3BhZ2VzX2V4YWN0IC0gcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIHZpYSBhbGxvY19wYWdlc19leGFjdCgpXFxuNTY1NjpcXHQgKiBAdmlydDogdGhlIHZhbHVlIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzX2V4YWN0LlxcbjU2NTc6XFx0ICogQHNpemU6IHNpemUgb2YgYWxsb2NhdGlvbiwgc2FtZSB2YWx1ZSBhcyBwYXNzZWQgdG8gYWxsb2NfcGFnZXNfZXhhY3QoKS5cXG41NjU4OlxcdCAqXFxuNTY1OTpcXHQgKiBSZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBhbGxvY19wYWdlc19leGFjdC5cXG41NjYwOlxcdCAqL1xcbjU2NjE6XFx0dm9pZCBmcmVlX3BhZ2VzX2V4YWN0KHZvaWQgKnZpcnQsIHNpemVfdCBzaXplKVxcbjU2NjI6XFx0e1xcbjU2NjM6XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpdmlydDtcXG41NjY0OlxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIFBBR0VfQUxJR04oc2l6ZSk7XFxuNTY2NTpcXHRcXG41NjY2OlxcdFxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZW5kKSB7XFxuNTY2NzpcXHRcXHRcXHRmcmVlX3BhZ2UoYWRkcik7XFxuNTY2ODpcXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG41NjY5OlxcdFxcdH1cXG41NjcwOlxcdH1cXG41NjcxOlxcdEVYUE9SVF9TWU1CT0woZnJlZV9wYWdlc19leGFjdCk7XFxuNTY3MjpcXHRcXG41NjczOlxcdC8qKlxcbjU2NzQ6XFx0ICogbnJfZnJlZV96b25lX3BhZ2VzIC0gY291bnQgbnVtYmVyIG9mIHBhZ2VzIGJleW9uZCBoaWdoIHdhdGVybWFya1xcbjU2NzU6XFx0ICogQG9mZnNldDogVGhlIHpvbmUgaW5kZXggb2YgdGhlIGhpZ2hlc3Qgem9uZVxcbjU2NzY6XFx0ICpcXG41Njc3OlxcdCAqIG5yX2ZyZWVfem9uZV9wYWdlcygpIGNvdW50cyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHdoaWNoIGFyZSBiZXlvbmQgdGhlXFxuNTY3ODpcXHQgKiBoaWdoIHdhdGVybWFyayB3aXRoaW4gYWxsIHpvbmVzIGF0IG9yIGJlbG93IGEgZ2l2ZW4gem9uZSBpbmRleC4gIEZvciBlYWNoXFxuNTY3OTpcXHQgKiB6b25lLCB0aGUgbnVtYmVyIG9mIHBhZ2VzIGlzIGNhbGN1bGF0ZWQgYXM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ3OjI0LjA3MzUxNzU4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMzc5NzQ4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIERNQSBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgY2xvc2VseSBhdCB0aGVzZSBjaGFuZ2VzLCBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBnYXRoZXJlZC4gVGhlIGtleSBhcmVhIG9mIG1vZGlmaWNhdGlvbiBhcHBlYXJzIHRvIGJlIGFyb3VuZCBob3cgd2UncmUgaGFuZGxpbmcgRE1BIGFsbG9jYXRpb25zLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIG1vcmUgcHJlY2lzZSBzaXppbmcgYW5kIGZyZWVpbmcuXG5cbkluaXRpYWxseSwgSSBzZWUgdGhhdCBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZmAgaGFkIHRoZSBgX19tZW1pbml0YCB0YWcsIGxpbWl0aW5nIGl0cyB1c2UgdG8gZWFybHkgaW5pdGlhbGl6YXRpb24gb3IgbWVtb3J5IGhvdHBsdWcgc2NlbmFyaW9zLiBSZW1vdmluZyB0aGlzIHRhZyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IG9wZW5zIHRoZSBkb29yIGZvciBydW50aW1lIGNhbGxzLCBwYXJ0aWN1bGFybHkgZnJvbSBETUEgYWxsb2NhdG9ycyBsaWtlIGBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXNgLCBgaW9tbXVfZG1hX2FsbG9jX3BhZ2VzYCwgYW5kIGZyaWVuZHMuICBQcmV2aW91c2x5LCB0aGVzZSBmdW5jdGlvbnMgdXNlZCBgYWxsb2NfcGFnZXNfbm9kZWAgd2l0aCBhIHBvd2VyLW9mLXR3byBwYWdlIGJsb2NrIGFsbG9jYXRpb24sIHdoaWNoIGlzIGEgY29tcG91bmQgb3IgYnVkZHkgb3JkZXIgYWxsb2NhdGlvbi4gQnV0IGl0IGRpZG4ndCBoYW5kbGUgdGhlIHVudXNlZCBcInRhaWxcIiBwYWdlcyBlZmZpY2llbnRseS5cblxuTm93LCB0aGUgaW50cm9kdWN0aW9uIG9mIGBtYWtlX2FsbG9jX2V4YWN0YCBpcyBjcml0aWNhbC4gSXQncyBpbnZva2VkIGJ5IGBhbGxvY19wYWdlc19leGFjdF9uaWRgLCBhbGxvd2luZyB0aGUgYWxsb2NhdGVkIGJsb2NrIHRvIGJlIHNwbGl0IGFuZCBhbnkgdW51c2VkIHRhaWwgcGFnZXMgKGJleW9uZCB0aGUgcmVxdWVzdGVkIGBzaXplYCkgdG8gYmUgZnJlZWQuIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgaW4gbWVtb3J5IHV0aWxpemF0aW9uLCBhcyBpdCBhdm9pZHMgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbi5cblxuRnVydGhlcm1vcmUsIG9uIHRoZSBkZWFsbG9jYXRpb24gc2lkZSwgdGhlIGBkbWFfZnJlZV9jb250aWd1b3VzYCBjYWxscyBhcmUgbm93IHVzaW5nIGBmcmVlX3BhZ2VzX2V4YWN0YCBmb3IgZnJlZWluZywgc3BlY2lmaWNhbGx5IGBmcmVlX3BhZ2VzX2V4YWN0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgc2l6ZSlgIGluc3RlYWQgb2YgdGhlIG9sZCBgX19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSlgLiBUaGlzIGlzIGFub3RoZXIgcGllY2UgdGhhdCBhbGlnbnMgd2l0aCB0aGUgZXhhY3Qtc2l6ZSBhbGxvY2F0aW9uIGxvZ2ljLlxuXG5UaGUgbWFpbiB0YWtlYXdheSBpcyB0aGF0IHRoaXMgY2hhbmdlIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gYmVoYXZpb3IgYWNyb3NzIERNQSBkaXJlY3QsIERNQSBvcHMgaGVscGVycywgRE1BIENNQSwgYW5kIElPTU1VIERNQSBhbGxvY2F0aW9ucy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiB0aG9zZSBhcmVhcy5cblxuT25lIG90aGVyIGNvbmNlcm4gaXMgdGhhdCBpZiBhbnkgY2FsbGVyIHBhc3NlcyBgX19HRlBfQ09NUGAgb3IgYF9fR0ZQX0hJR0hNRU1gIGZsYWdzIHRvIGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYCwgaXQgd2lsbCB0cmlnZ2VyIGEgYFdBUk5fT05fT05DRWAgd2hpY2ggbWlnaHQgaW50cm9kdWNlIGtlcm5lbCB3YXJuaW5ncywgd2hpY2ggSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBpbiBtb3JlIGRlcHRoLlxuXG5GaW5hbGx5LCBJ4oCZdmUgYWxzbyBjaGVja2VkIHRoZSBhZmZlY3RlZCBmaWxlczogYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgICh1bmRlciBgQ09ORklHX0lPTU1VX0RNQWApLCBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgIChgQ09ORklHX0RNQV9DTUFgKSwgYGtlcm5lbC9kbWEvZGlyZWN0LmNgIChjb3JlIERNQSBtYXBwaW5nKSwgYGtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuY2AgKGBDT05GSUdfRE1BX09QU19IRUxQRVJTYCBvciBgQ09ORklHX0RNQV9PUFNgL2BDT05GSUdfSEFTX0RNQWApLCBhbmQgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZSBgbW0vcGFnZV9hbGxvYy5jYC4gSSB3aWxsIG5vdyBsb29rIGNsb3NlbHkgYXQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY2AgYW5kIGBrZXJuZWwvZG1hL0tjb25maWdgIHRvIHVuZGVyc3RhbmQgYW55IGNvbmZpZ3VyYXRpb24gaW1wYWN0cy4gVGhpcyBpcyBhIGNvbXBsZXggY2hhbmdlIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBzY3J1dGlueSBhY3Jvc3MgdmFyaW91cyBETUEgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzE1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6MjkuMjExNDk2NDExWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjk5OTE0NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtYS1pb21tdVxcXFwub3xjb250aWd1b3VzXFxcXC5vfG9wc19oZWxwZXJzXFxcXC5vfGRpcmVjdFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZT0xMzM9b2JqLSQoQ09ORklHX1BQQzMyKVxcdFxcdCs9IGVudHJ5XzMyLm8gc2V0dXBfMzIubyBlYXJseV8zMi5vIHN0YXRpY19jYWxsLm9cXG5hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlOjEzNDpvYmotJChDT05GSUdfUFBDNjQpXFx0XFx0Kz0gZG1hLWlvbW11Lm8gaW9tbXUub1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUtMTM1LW9iai0kKENPTkZJR19LR0RCKVxcdFxcdCs9IGtnZGIub1xcbi0tXFxuYXJjaC94ODYvcGNpL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX1BDSV9CSU9TKVxcdFxcdCs9IHBjYmlvcy5vXFxuYXJjaC94ODYvcGNpL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1BDSV9NTUNPTkZJRylcXHQrPSBtbWNvbmZpZ18kKEJJVFMpLm8gZGlyZWN0Lm8gbW1jb25maWctc2hhcmVkLm9cXG5hcmNoL3g4Ni9wY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUENJX0RJUkVDVClcXHQrPSBkaXJlY3Qub1xcbmFyY2gveDg2L3BjaS9NYWtlZmlsZS03LW9iai0kKENPTkZJR19QQ0lfT0xQQylcXHRcXHQrPSBvbHBjLm9cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L01ha2VmaWxlPTQ9bWx4NV9pYi15IDo9IGFoLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvTWFrZWZpbGUtOC1cXHQgICAgIGNxLm8gXFxcXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L01ha2VmaWxlOjk6XFx0ICAgICBkYXRhX2RpcmVjdC5vIFxcXFxcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9NYWtlZmlsZS0xMC1cXHQgICAgIGRtLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9pb21tdS9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfSU9NTVVfREVCVUdGUykgKz0gaW9tbXUtZGVidWdmcy5vXFxuZHJpdmVycy9pb21tdS9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfSU9NTVVfRE1BKSArPSBkbWEtaW9tbXUub1xcbmRyaXZlcnMvaW9tbXUvTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX0lPTU1VX0lPX1BHVEFCTEUpICs9IGlvLXBndGFibGUub1xcbi0tXFxuZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfUklTQ1ZfSU5UQylcXHRcXHQrPSBpcnEtcmlzY3YtaW50Yy5vXFxuZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfUklTQ1ZfQVBMSUMpXFx0XFx0Kz0gaXJxLXJpc2N2LWFwbGljLW1haW4ubyBpcnEtcmlzY3YtYXBsaWMtZGlyZWN0Lm9cXG5kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGUtMTA2LW9iai0kKENPTkZJR19SSVNDVl9BUExJQ19NU0kpXFx0XFx0Kz0gaXJxLXJpc2N2LWFwbGljLW1zaS5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9MjY9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfQ09SRV9FTikgKz0gZW4vcnF0Lm8gZW4vdGlyLm8gZW4vcnNzLm8gZW4vcnhfcmVzLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTMxLVxcdFxcdGVuL3hzay9zZXR1cC5vIGVuL3hzay9yeC5vIGVuL3hzay90eC5vIGVuL2RldmxpbmsubyBlbi9wdHAubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjMyOlxcdFxcdGVuL3Fvcy5vIGVuL2h0Yi5vIGVuL3RyYXAubyBlbi9mc190dF9yZWRpcmVjdC5vIGVuL3NlbHEubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTMzLVxcdFxcdGxpYi9jcnlwdG8ubyBsaWIvc2QubyBlbi9wY2llX2NvbmdfZXZlbnQub1xcbi0tXFxuZHJpdmVycy94ZW4vTWFrZWZpbGU9NDI9b2JqLSQoQ09ORklHX1hFTl9HUkFOVF9ETUFfT1BTKVxcdFxcdCs9IGdyYW50LWRtYS1vcHMub1xcbmRyaXZlcnMveGVuL01ha2VmaWxlOjQzOm9iai0kKENPTkZJR19YRU5fR1JBTlRfRE1BX0lPTU1VKVxcdCs9IGdyYW50LWRtYS1pb21tdS5vXFxuLS1cXG5mcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtOS1cXHRcXHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEwOlxcdFxcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG4tLVxcbmZzL25mcy9NYWtlZmlsZT05PW5mcy15IFxcdFxcdFxcdDo9IGNsaWVudC5vIGRpci5vIGZpbGUubyBnZXRyb290Lm8gaW5vZGUubyBzdXBlci5vIFxcXFxcXG5mcy9uZnMvTWFrZWZpbGU6MTA6XFx0XFx0XFx0ICAgaW8ubyBkaXJlY3QubyBwYWdlbGlzdC5vIHJlYWQubyBzeW1saW5rLm8gdW5saW5rLm8gXFxcXFxcbmZzL25mcy9NYWtlZmlsZS0xMS1cXHRcXHRcXHQgICB3cml0ZS5vIG5hbWVzcGFjZS5vIG1vdW50X2NsbnQubyBuZnN0cmFjZS5vIFxcXFxcXG4tLVxcbmZzL25pbGZzMi9NYWtlZmlsZT0zPW5pbGZzMi15IDo9IGlub2RlLm8gZmlsZS5vIGRpci5vIHN1cGVyLm8gbmFtZWkubyBwYWdlLm8gbWR0Lm8gXFxcXFxcbmZzL25pbGZzMi9NYWtlZmlsZTo0OlxcdGJ0bm9kZS5vIGJtYXAubyBidHJlZS5vIGRpcmVjdC5vIGRhdC5vIHJlY292ZXJ5Lm8gXFxcXFxcbmZzL25pbGZzMi9NYWtlZmlsZS01LVxcdHRoZV9uaWxmcy5vIHNlZ2J1Zi5vIHNlZ21lbnQubyBjcGZpbGUubyBzdWZpbGUubyBcXFxcXFxuLS1cXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlPTI5PWNpZnMtJChDT05GSUdfQ0lGU19GU0NBQ0hFKSArPSBmc2NhY2hlLm9cXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTMwLVxcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGU6MzE6Y2lmcy0kKENPTkZJR19DSUZTX1NNQl9ESVJFQ1QpICs9IHNtYmRpcmVjdC5vXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0zMi1cXG4tLVxcbmZzL3NtYi9zbWJkaXJlY3QvTWFrZWZpbGUtNS1cXG5mcy9zbWIvc21iZGlyZWN0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1NNQkRJUkVDVCkgKz0gc21iZGlyZWN0Lm9cXG5mcy9zbWIvc21iZGlyZWN0L01ha2VmaWxlLTctXFxuLS1cXG5mcy9zcXVhc2hmcy9NYWtlZmlsZT05PXNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0ZJTEVfQ0FDSEUpICs9IGZpbGVfY2FjaGUub1xcbmZzL3NxdWFzaGZzL01ha2VmaWxlOjEwOnNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0ZJTEVfRElSRUNUKSArPSBmaWxlX2RpcmVjdC5vXFxuZnMvc3F1YXNoZnMvTWFrZWZpbGUtMTEtc3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfREVDT01QX1NJTkdMRSkgKz0gZGVjb21wcmVzc29yX3NpbmdsZS5vXFxuLS1cXG5rZXJuZWwvZG1hL01ha2VmaWxlLTItXFxua2VybmVsL2RtYS9NYWtlZmlsZTozOm9iai0kKENPTkZJR19IQVNfRE1BKVxcdFxcdFxcdCs9IG1hcHBpbmcubyBkaXJlY3Qub1xcbmtlcm5lbC9kbWEvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfRE1BX09QU19IRUxQRVJTKVxcdFxcdCs9IG9wc19oZWxwZXJzLm9cXG5rZXJuZWwvZG1hL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX0FSQ0hfSEFTX0RNQV9PUFMpXFx0XFx0Kz0gZHVtbXkub1xcbmtlcm5lbC9kbWEvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfRE1BX0NNQSlcXHRcXHRcXHQrPSBjb250aWd1b3VzLm9cXG5rZXJuZWwvZG1hL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX0RNQV9ERUNMQVJFX0NPSEVSRU5UKVxcdCs9IGNvaGVyZW50Lm9cXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlPTM0PW9iai0kKENPTkZJR19CUklER0VfRUJUX0ROQVQpICs9IGVidF9kbmF0Lm9cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfQlJJREdFX0VCVF9SRURJUkVDVCkgKz0gZWJ0X3JlZGlyZWN0Lm9cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZS0zNi1vYmotJChDT05GSUdfQlJJREdFX0VCVF9TTkFUKSArPSBlYnRfc25hdC5vXFxuLS1cXG5uZXQvY2VwaC9vc2RfY2xpZW50LmM9MzY3MD1zdGF0aWMgaW50IGRlY29kZV9NT1NET3BSZXBseShjb25zdCBzdHJ1Y3QgY2VwaF9tc2cgKm1zZywgc3RydWN0IE1PU0RPcFJlcGx5ICptKVxcbi0tXFxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM3MzYtXFx0fSBlbHNlIHtcXG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6MzczNzpcXHRcXHRjZXBoX29sb2NfaW5pdChcXHUwMDI2bS1cXHUwMDNlcmVkaXJlY3Qub2xvYyk7XFxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM3MzgtXFx0fVxcbi0tXFxubmV0L2NlcGgvb3NkX2NsaWVudC5jPTM3NTA9c3RhdGljIHZvaWQgaGFuZGxlX3JlcGx5KHN0cnVjdCBjZXBoX29zZCAqb3NkLCBzdHJ1Y3QgY2VwaF9tc2cgKm1zZylcXG4tLVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zNzc1LVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYzozNzc2OlxcdG0ucmVkaXJlY3Qub2xvYy5wb29sX25zID0gcmVxLVxcdTAwM2VyX3QudGFyZ2V0X29sb2MucG9vbF9ucztcXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMzc3Ny1cXHRyZXQgPSBkZWNvZGVfTU9TRE9wUmVwbHkobXNnLCBcXHUwMDI2bSk7XFxubmV0L2NlcGgvb3NkX2NsaWVudC5jOjM3Nzg6XFx0bS5yZWRpcmVjdC5vbG9jLnBvb2xfbnMgPSBOVUxMO1xcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zNzc5LVxcdGlmIChyZXQpIHtcXG4tLVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zODAwLVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYzozODAxOlxcdGlmICghY2VwaF9vbG9jX2VtcHR5KFxcdTAwMjZtLnJlZGlyZWN0Lm9sb2MpKSB7XFxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM4MDItXFx0XFx0ZG91dChcXFwicmVxICVwIHRpZCAlbGx1IHJlZGlyZWN0IHBvb2wgJWxsZFxcXFxuXFxcIiwgcmVxLCByZXEtXFx1MDAzZXJfdGlkLFxcbm5ldC9jZXBoL29zZF9jbGllbnQuYzozODAzOlxcdFxcdCAgICAgbS5yZWRpcmVjdC5vbG9jLnBvb2wpO1xcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zODA0LVxcdFxcdHVubGlua19yZXF1ZXN0KG9zZCwgcmVxKTtcXG4tLVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zODEwLVxcdFxcdCAqL1xcbm5ldC9jZXBoL29zZF9jbGllbnQuYzozODExOlxcdFxcdHJlcS1cXHUwMDNlcl90LnRhcmdldF9vbG9jLnBvb2wgPSBtLnJlZGlyZWN0Lm9sb2MucG9vbDtcXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMzgxMi1cXHRcXHRyZXEtXFx1MDAzZXJfZmxhZ3MgfD0gQ0VQSF9PU0RfRkxBR19SRURJUkVDVEVEIHxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NjA9b2JqLSQoQ09ORklHX05GX05BVCkgKz0gbmZfbmF0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjYxOm5mX25hdC0kKENPTkZJR19ORl9OQVRfUkVESVJFQ1QpICs9IG5mX25hdF9yZWRpcmVjdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS02Mi1uZl9uYXQtJChDT05GSUdfTkZfTkFUX01BU1FVRVJBREUpICs9IG5mX25hdF9tYXNxdWVyYWRlLm9cXG4tLVxcbnNhbXBsZXMvZnRyYWNlL01ha2VmaWxlLTItXFxuc2FtcGxlcy9mdHJhY2UvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfU0FNUExFX0ZUUkFDRV9ESVJFQ1QpICs9IGZ0cmFjZS1kaXJlY3Qub1xcbnNhbXBsZXMvZnRyYWNlL01ha2VmaWxlLTQtb2JqLSQoQ09ORklHX1NBTVBMRV9GVFJBQ0VfRElSRUNUKSArPSBmdHJhY2UtZGlyZWN0LXRvby5vXFxuLS1cXG5zY3JpcHRzL3Nib20vdGVzdHMvY21kX2dyYXBoL3Rlc3Rfc2F2ZWRjbWRfcGFyc2VyLnB5PTEzPWNsYXNzIFRlc3RTYXZlZENtZFBhcnNlcih1bml0dGVzdC5UZXN0Q2FzZSk6XFxuLS1cXG5zY3JpcHRzL3Nib20vdGVzdHMvY21kX2dyYXBoL3Rlc3Rfc2F2ZWRjbWRfcGFyc2VyLnB5LTE5NC0gICAgZGVmIHRlc3RfYXJfcHJpbnRmX25lc3RlZChzZWxmKTpcXG5zY3JpcHRzL3Nib20vdGVzdHMvY21kX2dyYXBoL3Rlc3Rfc2F2ZWRjbWRfcGFyc2VyLnB5OjE5NTogICAgICAgIGNtZCA9ICdybSAtZiBhcmNoL3g4Ni9wY2kvYnVpbHQtaW4uYTsgIHByaW50ZiBcXFwiYXJjaC94ODYvcGNpLyVzIFxcXCIgaTM4Ni5vIGluaXQubyBtbWNvbmZpZ182NC5vIGRpcmVjdC5vIG1tY29uZmlnLXNoYXJlZC5vIGZpeHVwLm8gYWNwaS5vIC4uLlxcbnNjcmlwdHMvc2JvbS90ZXN0cy9jbWRfZ3JhcGgvdGVzdF9zYXZlZGNtZF9wYXJzZXIucHk6MTk2OiAgICAgICAgZXhwZWN0ZWQgPSBcXFwiYXJjaC94ODYvcGNpL2kzODYubyBhcmNoL3g4Ni9wY2kvaW5pdC5vIGFyY2gveDg2L3BjaS9tbWNvbmZpZ182NC5vIGFyY2gveDg2L3BjaS9kaXJlY3QubyBhcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLm8gYXJjLi4uXFxuc2NyaXB0cy9zYm9tL3Rlc3RzL2NtZF9ncmFwaC90ZXN0X3NhdmVkY21kX3BhcnNlci5weS0xOTctICAgICAgICBzZWxmLl9hc3NlcnRfcGFyc2luZyhjbWQsIGV4cGVjdGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzozMS45MTE0MTkwOTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzcwNDY1Mzk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgRE1BIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyB0byBsb29rIGlzIGBrZXJuZWwvZG1hL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIHN1YnN5c3RlbSBsaXZlIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgZm9yIGRpZmZlcmVudCBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzIGFuZCB1c2UgY2FzZXMuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBsaW5jaHBpbiBmb3IgY29udHJvbGxpbmcgdGhlIERNQSBmdW5jdGlvbmFsaXR5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgVGhlIHByaW1hcnkgRE1BIGNvbnRyb2xsZXIgc2VsZWN0aW9uIGFuZCBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnMuXG4qICAgVGhlIG9wdGlvbnMgcmVsYXRlZCB0byBkaWZmZXJlbnQgRE1BIGVuZ2luZXMuXG4qICAgQW55IGZsYWdzIHJlbGF0ZWQgdG8gZGVidWdnaW5nIGFuZCBlcnJvciBoYW5kbGluZy5cbiogICBIb3cgdGhlIERNQSBmcmFtZXdvcmsgaW50ZXJhY3RzIHdpdGggb3RoZXIgY29yZSBrZXJuZWwgY29tcG9uZW50cy5cbiogICBBbnkgZGVmYXVsdCB2YWx1ZXMgYW5kIHBvdGVudGlhbCBvdmVycmlkZXMuXG4qICAgSWYgdGhlcmUgYXJlIGFueSBuZXcgZmVhdHVyZXMgaW4gRE1BIHRoYXQgaGF2ZSBiZWVuIGludHJvZHVjZWQuXG5cbkJ5IG1ldGhvZGljYWxseSByZXZpZXdpbmcgdGhlIGBLY29uZmlnYCBmaWxlLCBJIHNob3VsZCBnYWluIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIERNQSBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCwgYW5kIHdoZXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgbXkgd29yayBjYW4gYmUgZm91bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzU1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6MzUuNjE2MDc1NDIxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvZG1hL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0Y29uZmlnIE5PX0RNQVxcbiAgIDQ6XFx0XFx0Ym9vbFxcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgSEFTX0RNQVxcbiAgIDc6XFx0XFx0Ym9vbFxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiAhTk9fRE1BXFxuICAgOTpcXHRcXHRkZWZhdWx0IHlcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIERNQV9PUFNfSEVMUEVSU1xcbiAgMTI6XFx0XFx0Ym9vbFxcbiAgMTM6XFx0XFxuICAxNDpcXHQjXFxuICAxNTpcXHQjIElPTU1VIGRyaXZlcnMgdGhhdCBjYW4gYnlwYXNzIHRoZSBJT01NVSBjb2RlIGFuZCBvcHRpb25hbGx5IHVzZSB0aGUgZGlyZWN0XFxuICAxNjpcXHQjIG1hcHBpbmcgZmFzdCBwYXRoIHNob3VsZCBzZWxlY3QgdGhpcyBvcHRpb24gYW5kIHNldCB0aGUgZG1hX29wc19ieXBhc3NcXG4gIDE3OlxcdCMgZmxhZyBpbiBzdHJ1Y3QgZGV2aWNlIHdoZXJlIGFwcGxpY2FibGVcXG4gIDE4OlxcdCNcXG4gIDE5OlxcdGNvbmZpZyBETUFfT1BTX0JZUEFTU1xcbiAgMjA6XFx0XFx0Ym9vbFxcbiAgMjE6XFx0XFxuICAyMjpcXHQjIExldHMgcGxhdGZvcm0gSU9NTVUgZHJpdmVyIGNob29zZSBiZXR3ZWVuIGJ5cGFzcyBhbmQgSU9NTVVcXG4gIDIzOlxcdGNvbmZpZyBBUkNIX0hBU19ETUFfTUFQX0RJUkVDVFxcbiAgMjQ6XFx0XFx0Ym9vbFxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgTkVFRF9TR19ETUFfRkxBR1NcXG4gIDI3OlxcdFxcdGJvb2xcXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIE5FRURfU0dfRE1BX0xFTkdUSFxcbiAgMzA6XFx0XFx0Ym9vbFxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgTkVFRF9ETUFfTUFQX1NUQVRFXFxuICAzMzpcXHRcXHRib29sXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBBUkNIX0RNQV9BRERSX1RfNjRCSVRcXG4gIDM2OlxcdFxcdGRlZl9ib29sIDY0QklUIHx8IFBIWVNfQUREUl9UXzY0QklUXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBBUkNIX0hBU19ETUFfU0VUX01BU0tcXG4gIDM5OlxcdFxcdGJvb2xcXG4gIDQwOlxcdFxcbiAgNDE6XFx0I1xcbiAgNDI6XFx0IyBTZWxlY3QgdGhpcyBvcHRpb24gaWYgdGhlIGFyY2hpdGVjdHVyZSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIGZvclxcbiAgNDM6XFx0IyBETUFfQVRUUl9XUklURV9DT01CSU5FLiAgTm9ybWFsbHkgdGhlIFxcXCJ1bmNhY2hlZFxcXCIgbWFwcGluZyBzaG91bGQgYmUgd2hhdFxcbiAgNDQ6XFx0IyBwZW9wbGUgdGhpbmsgb2Ygd2hlbiBzYXlpbmcgd3JpdGUgY29tYmluZSwgc28gdmVyeSBmZXcgcGxhdGZvcm1zIHNob3VsZFxcbiAgNDU6XFx0IyBuZWVkIHRvIGVuYWJsZSB0aGlzLlxcbiAgNDY6XFx0I1xcbiAgNDc6XFx0Y29uZmlnIEFSQ0hfSEFTX0RNQV9XUklURV9DT01CSU5FXFxuICA0ODpcXHRcXHRib29sXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBETUFfREVDTEFSRV9DT0hFUkVOVFxcbiAgNTE6XFx0XFx0Ym9vbFxcbiAgNTI6XFx0XFxuICA1MzpcXHRjb25maWcgQVJDSF9IQVNfU0VUVVBfRE1BX09QU1xcbiAgNTQ6XFx0XFx0Ym9vbFxcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgQVJDSF9IQVNfVEVBUkRPV05fRE1BX09QU1xcbiAgNTc6XFx0XFx0Ym9vbFxcbiAgNTg6XFx0XFxuICA1OTpcXHRjb25maWcgQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0RFVklDRVxcbiAgNjA6XFx0XFx0Ym9vbFxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVVxcbiAgNjM6XFx0XFx0Ym9vbFxcbiAgNjQ6XFx0XFx0c2VsZWN0IE5FRURfRE1BX01BUF9TVEFURVxcbiAgNjU6XFx0XFxuICA2NjpcXHRjb25maWcgQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTExcXG4gIDY3OlxcdFxcdGJvb2xcXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UXFxuICA3MDpcXHRcXHRib29sXFxuICA3MTpcXHRcXG4gIDcyOlxcdGNvbmZpZyBBUkNIX0hBU19GT1JDRV9ETUFfVU5FTkNSWVBURURcXG4gIDczOlxcdFxcdGJvb2xcXG4gIDc0OlxcdFxcbiAgNzU6XFx0Y29uZmlnIEFSQ0hfSEFTX0JBVENIRURfRE1BX1NZTkNcXG4gIDc2OlxcdFxcdGJvb2xcXG4gIDc3OlxcdFxcbiAgNzg6XFx0I1xcbiAgNzk6XFx0IyBTZWxlY3QgdGhpcyBvcHRpb24gaWYgdGhlIGFyY2hpdGVjdHVyZSBhc3N1bWVzIERNQSBkZXZpY2VzIGFyZSBjb2hlcmVudFxcbiAgODA6XFx0IyBieSBkZWZhdWx0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzozNS42MTYxOTQwNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIxMzY2Mjg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipDaGVja2luZyBga2VybmVsL2RtYS9LY29uZmlnYCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIERNQSBzdWJzeXN0ZW0ncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gc2VlIHdoYXQncyBkZWZpbmVkIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkIHdpdGhpbiBga2VybmVsL2RtYS9LY29uZmlnYC4gVGhpcyBmaWxlIGlzIGNydWNpYWw7IGl0IGRpY3RhdGVzIHdoYXQgZnVuY3Rpb25hbGl0eSBjYW4gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHJlbGF0ZWQgdG8gRGlyZWN0IE1lbW9yeSBBY2Nlc3MuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgRE1BIGNvbnRyb2xsZXJzLCB0aGUgdmFyaW91cyBkZXZpY2UgZHJpdmVycywgYW5kIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cbkknbGwgYmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yOlxuXG4qICAgKipUb3AtbGV2ZWwgb3B0aW9uczoqKiBXaGF0IGFyZSB0aGUgbWFpbiBmZWF0dXJlcyBlbmFibGVkIG9yIGRpc2FibGVkIGhlcmU/IEFyZSB0aGVyZSBvdmVyYWxsIHN3aXRjaGVzIGZvciB0aGUgRE1BIHN1YnN5c3RlbSBvciBzcGVjaWZpYyBjb250cm9sbGVyIGZhbWlsaWVzP1xuKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgYXJlIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gb3B0aW9ucz8gRG9lcyBlbmFibGluZyBvbmUgb3B0aW9uIGF1dG9tYXRpY2FsbHkgZW5hYmxlIG90aGVycz8gQXJlIHRoZXJlIGNvbmZsaWN0cyB0aGF0IG5lZWQgdG8gYmUgdW5kZXJzdG9vZD9cbiogICAqKkRlZmF1bHRzOioqIFdoYXQgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGRpZmZlcmVudCBvcHRpb25zPyBUaGF0J2xsIGhlbHAgdW5kZXJzdGFuZCB0aGUgY29tbW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBETUEgc3Vic3lzdGVtLlxuKiAgICoqSGVscCB0ZXh0OioqIEFyZSB0aGUgZGVzY3JpcHRpb25zIGZvciB0aGUgb3B0aW9ucyBjbGVhciBhbmQgZGV0YWlsZWQgZW5vdWdoPyBUaGlzIHdpbGwgaGVscCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCB1c2UgYW5kIGVmZmVjdHMgb2YgZWFjaCBvcHRpb24gZm9yIGRpZmZlcmVudCBoYXJkd2FyZSBhbmQgdXNlIGNhc2VzLlxuKiAgICoqQXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnM6KiogSXMgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyB0YXJnZXRlZCB0byBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzLCBhbmQgaG93IHRoYXQgaXMgaGFuZGxlZD9cbiogICAqKk5ldyBvciBjaGFuZ2VkIG9wdGlvbnM6KiogQW55IHJlY2VudCBjb21taXRzIHRoYXQgaGF2ZSBhZGRlZCBvciBtb2RpZmllZCBvcHRpb25zLCBhbmQgd2hhdCByZWFzb25pbmcgd2FzIGJlaGluZCB0aG9zZSBjaGFuZ2VzLlxuXG5Fc3NlbnRpYWxseSwgSSdtIGFpbWluZyBmb3IgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IHRoZSBETUEgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkIGFuZCBob3cgaXQgYWxsb3dzIGRldmVsb3BlcnMgdG8gY3VzdG9taXplIHRoZSBETUEgZnVuY3Rpb25hbGl0eSBpbiB0aGVpciBrZXJuZWxzLiBUaGlzIHdpbGwgaW5mb3JtIG15IGRlY2lzaW9ucyBvbiBob3cgdG8gaW50ZWdyYXRlIHRoZSBETUEgc3lzdGVtIHdpdGggb3RoZXIgY29tcG9uZW50cyBvciB0cm91Ymxlc2hvb3QgYW55IERNQS1yZWxhdGVkIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ3OjM4LjgyOTg2MDAxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2RtYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgxOlxcdCNcXG4gIDgyOlxcdGNvbmZpZyBBUkNIX0RNQV9ERUZBVUxUX0NPSEVSRU5UXFxuICA4MzpcXHRcXHRib29sXFxuICA4NDpcXHRcXG4gIDg1OlxcdGNvbmZpZyBTV0lPVExCXFxuICA4NjpcXHRcXHRib29sXFxuICA4NzpcXHRcXHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXFxuICA4ODpcXHRcXG4gIDg5OlxcdGNvbmZpZyBTV0lPVExCX0RFRkFVTFRfU0laRV9NQlxcbiAgOTA6XFx0XFx0aW50IFxcXCJEZWZhdWx0IFNXSU9UTEIgYm91bmNlIGJ1ZmZlciBzaXplIGluIE1CXFxcIlxcbiAgOTE6XFx0XFx0ZGVwZW5kcyBvbiBTV0lPVExCXFxuICA5MjpcXHRcXHRyYW5nZSAxIDY0XFxuICA5MzpcXHRcXHRkZWZhdWx0IDY0XFxuICA5NDpcXHRcXHRoZWxwXFxuICA5NTpcXHRcXHQgIFNldHMgdGhlIGRlZmF1bHQgc2l6ZSBvZiB0aGUgc29mdHdhcmUgSU8gVExCIChTV0lPVExCKSBib3VuY2UgYnVmZmVyXFxuICA5NjpcXHRcXHQgIHBvb2wgYWxsb2NhdGVkIGF0IGJvb3QgdGltZS4gVGhlIGRlZmF1bHQgaXMgNjQgTUIuXFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdCAgT24gbWVtb3J5LWNvbnN0cmFpbmVkIGVtYmVkZGVkIG9yIG1vYmlsZSBwbGF0Zm9ybXMgKGUuZy4sIHRob3NlIHdpdGhcXG4gIDk5OlxcdFxcdCAgYSBoYXJkd2FyZSBJT01NVSBzdWNoIGFzIEFSTSBTTU1VIGNvdmVyaW5nIG1vc3QgRE1BLWNhcGFibGUgZGV2aWNlcyksXFxuIDEwMDpcXHRcXHQgIGEgc21hbGxlciB2YWx1ZSBzdWNoIGFzIDQgb3IgOCBNQiBtYXkgYmUgc3VmZmljaWVudC4gVGhlIFNXSU9UTEIgaXNcXG4gMTAxOlxcdFxcdCAgdGhlbiBvbmx5IG5lZWRlZCBmb3IgZGV2aWNlcyB0aGF0IGJ5cGFzcyB0aGUgSU9NTVUgb3IgaGF2ZSByZXN0cmljdGVkXFxuIDEwMjpcXHRcXHQgIERNQSBhZGRyZXNzIHJhbmdlcy5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0ICBUaGUgbWluaW11bSBhbGxvd2VkIHZhbHVlIGlzIDEgTUIuIFRoaXMgY29tcGlsZS10aW1lIGRlZmF1bHQgY2FuIGJlXFxuIDEwNTpcXHRcXHQgIG92ZXJyaWRkZW4gYXQgcnVudGltZSB1c2luZyB0aGUgXFxcInN3aW90bGI9XFx1MDAzY25zbGFic1xcdTAwM2VcXFwiIGtlcm5lbCBjb21tYW5kIGxpbmVcXG4gMTA2OlxcdFxcdCAgcGFyYW1ldGVyLiBSZWZlciB0byBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbiAxMDc6XFx0XFx0ICBmb3IgZGV0YWlscy5cXG4gMTA4OlxcdFxcbiAxMDk6XFx0XFx0ICBJZiB1bnN1cmUsIGxlYXZlIGF0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIDY0LlxcbiAxMTA6XFx0XFxuIDExMTpcXHRjb25maWcgU1dJT1RMQl9EWU5BTUlDXFxuIDExMjpcXHRcXHRib29sIFxcXCJEeW5hbWljIGFsbG9jYXRpb24gb2YgRE1BIGJvdW5jZSBidWZmZXJzXFxcIlxcbiAxMTM6XFx0XFx0ZGVmYXVsdCBuXFxuIDExNDpcXHRcXHRkZXBlbmRzIG9uIFNXSU9UTEJcXG4gMTE1OlxcdFxcdGhlbHBcXG4gMTE2OlxcdFxcdCAgVGhpcyBlbmFibGVzIGR5bmFtaWMgcmVzaXppbmcgb2YgdGhlIHNvZnR3YXJlIElPIFRMQi4gVGhlIGtlcm5lbFxcbiAxMTc6XFx0XFx0ICBzdGFydHMgd2l0aCBvbmUgbWVtb3J5IHBvb2wgYXQgYm9vdCBhbmQgaXQgd2lsbCBhbGxvY2F0ZSBhZGRpdGlvbmFsXFxuIDExODpcXHRcXHQgIHBvb2xzIGFzIG5lZWRlZC4gVG8gcmVkdWNlIHJ1bi10aW1lIGtlcm5lbCBtZW1vcnkgcmVxdWlyZW1lbnRzLCB5b3VcXG4gMTE5OlxcdFxcdCAgbWF5IGhhdmUgdG8gc3BlY2lmeSBhIHNtYWxsZXIgc2l6ZSBvZiB0aGUgaW5pdGlhbCBwb29sIHVzaW5nXFxuIDEyMDpcXHRcXHQgIFxcXCJzd2lvdGxiPVxcXCIgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuXFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0Y29uZmlnIERNQV9CT1VOQ0VfVU5BTElHTkVEX0tNQUxMT0NcXG4gMTI1OlxcdFxcdGJvb2xcXG4gMTI2OlxcdFxcdGRlcGVuZHMgb24gU1dJT1RMQlxcbiAxMjc6XFx0XFxuIDEyODpcXHRjb25maWcgRE1BX05FRURfU1lOQ1xcbiAxMjk6XFx0XFx0ZGVmX2Jvb2wgQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0RFVklDRSB8fCBBUkNIX0hBU19TWU5DX0RNQV9GT1JfQ1BVIHx8IFxcXFxcXG4gMTMwOlxcdFxcdFxcdCBBUkNIX0hBU19TWU5DX0RNQV9GT1JfQ1BVX0FMTCB8fCBETUFfQVBJX0RFQlVHIHx8IFxcXFxcXG4gMTMxOlxcdFxcdFxcdCBBUkNIX0hBU19ETUFfT1BTIHx8IFNXSU9UTEJcXG4gMTMyOlxcdFxcbiAxMzM6XFx0Y29uZmlnIERNQV9SRVNUUklDVEVEX1BPT0xcXG4gMTM0OlxcdFxcdGJvb2wgXFxcIkRNQSBSZXN0cmljdGVkIFBvb2xcXFwiXFxuIDEzNTpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IE9GX1JFU0VSVkVEX01FTSBcXHUwMDI2XFx1MDAyNiBTV0lPVExCXFxuIDEzNjpcXHRcXHRoZWxwXFxuIDEzNzpcXHRcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciByZXN0cmljdGVkIERNQSBwb29scyB3aGljaCBwcm92aWRlIGEgbGV2ZWwgb2ZcXG4gMTM4OlxcdFxcdCAgRE1BIG1lbW9yeSBwcm90ZWN0aW9uIG9uIHN5c3RlbXMgd2l0aCBsaW1pdGVkIGhhcmR3YXJlIHByb3RlY3Rpb25cXG4gMTM5OlxcdFxcdCAgY2FwYWJpbGl0aWVzLCBzdWNoIGFzIHRob3NlIGxhY2tpbmcgYW4gSU9NTVUuXFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlXFxuIDE0MjpcXHRcXHQgIFxcdTAwM2NEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXJ2ZWQtbWVtb3J5L3Jlc2VydmVkLW1lbW9yeS50eHRcXHUwMDNlXFxuIDE0MzpcXHRcXHQgIGFuZCBcXHUwMDNja2VybmVsL2RtYS9zd2lvdGxiLmNcXHUwMDNlLlxcbiAxNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiblxcXCIuXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdCNcXG4gMTQ3OlxcdCMgU2hvdWxkIGJlIHNlbGVjdGVkIGlmIHdlIGNhbiBtbWFwIG5vbi1jb2hlcmVudCBtYXBwaW5ncyB0byB1c2Vyc3BhY2UuXFxuIDE0ODpcXHQjIFRoZSBvbmx5IHRoaW5nIHRoYXQgaXMgcmVhbGx5IHJlcXVpcmVkIGlzIGEgd2F5IHRvIHNldCBhbiB1bmNhY2hlZCBiaXRcXG4gMTQ5OlxcdCMgaW4gdGhlIHBhZ2V0YWJsZXNcXG4gMTUwOlxcdCNcXG4gMTUxOlxcdGNvbmZpZyBETUFfTk9OQ09IRVJFTlRfTU1BUFxcbiAxNTI6XFx0XFx0ZGVmYXVsdCB5IGlmICFNTVVcXG4gMTUzOlxcdFxcdGJvb2xcXG4gMTU0OlxcdFxcbiAxNTU6XFx0Y29uZmlnIERNQV9DT0hFUkVOVF9QT09MXFxuIDE1NjpcXHRcXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG4gMTU3OlxcdFxcdGJvb2xcXG4gMTU4OlxcdFxcbiAxNTk6XFx0Y29uZmlnIERNQV9HTE9CQUxfUE9PTFxcbiAxNjA6XFx0XFx0c2VsZWN0IERNQV9ERUNMQVJFX0NPSEVSRU5UXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ3OjM4LjgzMDAwNjAwNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDE1MzgxOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvciAoQ01BKSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbmFpbCBkb3duIGhvdyB0aGUgQ01BIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBlaXRoZXIgYGtlcm5lbC9kbWEvS2NvbmZpZ2Agb3IsIGlmIGl0J3MgcmVsYXRlZCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2lkZSBtb3JlIGdlbmVyYWxseSwgYG1tL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgbG9jYXRpb25zIGZvciBkZWZpbmluZyBhbmQgZW5hYmxpbmcgYENPTkZJR19ETUFfQ01BYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGFueSBwb3NzaWJsZSBpbnRyaWNhY2llcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgYm9vbGAgb3IgYHRyaXN0YXRlYCBkZWZpbml0aW9uLCBsaWtlbHkgd2l0aCBzb21lIHN1cHBvcnRpbmcgaGVscCB0ZXh0LiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSwgSSBtaWdodCBzZWUgY29uZGl0aW9uYWwgYmxvY2tzIGJhc2VkIG9uIHNwZWNpZmljIENQVSBmZWF0dXJlcyBvciBtZW1vcnkgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuIFRoaXMgc2hvdWxkIHF1aWNrbHkgY2xhcmlmeSB0aGUgY3VycmVudCBzdGF0ZSBvZiBETUEgQ01BIGluIHRoaXMga2VybmVsIGJ1aWxkIGFuZCBob3cgaXQncyBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzEwNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6NDEuMjQ1MzkwODc3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMTk4MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfQ01BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZG1hL0tjb25maWc9MTczPWNvbmZpZyBBUkNIX0hBU19ETUFfQUxMT0NcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xNzgtXFxua2VybmVsL2RtYS9LY29uZmlnOjE3OTpjb25maWcgRE1BX0NNQVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODAtXFx0Ym9vbCBcXFwiRE1BIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6NDIuODk4NTk1NDE4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NjU3NTY0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRE1BIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoZSBhbnN3ZXIgbGllcyB3aXRoaW4gdGhlIERNQSBjb25maWd1cmF0aW9uLCBzbyBsZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYGtlcm5lbC9kbWEvS2NvbmZpZ2AuIEFuZCwgYmFzZWQgb24gbXkgcGFzdCBleHBlcmllbmNlIHdpdGggc2ltaWxhciBpc3N1ZXMsIEknbGwgc3RhcnQgbXkgZGV0YWlsZWQgcmV2aWV3IGFyb3VuZCBsaW5lIDE3OS4gSG9wZWZ1bGx5LCB0aGUgYW5zd2VyIGlzIHdpdGhpbiB0aGF0IHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDc4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6NDUuNTY0MzU0NDE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9kbWEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzU6XFx0XFx0ZGVwZW5kcyBvbiAhRE1BX0RJUkVDVF9SRU1BUFxcbiAxNzY6XFx0XFx0ZGVwZW5kcyBvbiAhRE1BX0dMT0JBTF9QT09MXFxuIDE3NzpcXHRcXHRib29sXFxuIDE3ODpcXHRcXG4gMTc5OlxcdGNvbmZpZyBETUFfQ01BXFxuIDE4MDpcXHRcXHRib29sIFxcXCJETUEgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXFxcIlxcbiAxODE6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0RNQV9DT05USUdVT1VTIFxcdTAwMjZcXHUwMDI2IENNQVxcbiAxODI6XFx0XFx0aGVscFxcbiAxODM6XFx0XFx0ICBUaGlzIGVuYWJsZXMgdGhlIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvciB3aGljaCBhbGxvd3MgZHJpdmVyc1xcbiAxODQ6XFx0XFx0ICB0byBhbGxvY2F0ZSBiaWcgcGh5c2ljYWxseS1jb250aWd1b3VzIGJsb2NrcyBvZiBtZW1vcnkgZm9yIHVzZSB3aXRoXFxuIDE4NTpcXHRcXHQgIGhhcmR3YXJlIGNvbXBvbmVudHMgdGhhdCBkbyBub3Qgc3VwcG9ydCBJL08gbWFwIG5vciBzY2F0dGVyLWdhdGhlci5cXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0ICBZb3UgY2FuIGRpc2FibGUgQ01BIGJ5IHNwZWNpZnlpbmcgXFxcImNtYT0wXFxcIiBvbiB0aGUga2VybmVsJ3MgY29tbWFuZFxcbiAxODg6XFx0XFx0ICBsaW5lLlxcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBcXHUwMDNja2VybmVsL2RtYS9jb250aWd1b3VzLmNcXHUwMDNlLlxcbiAxOTE6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiblxcXCIuXFxuIDE5MjpcXHRcXG4gMTkzOlxcdGlmICBETUFfQ01BXFxuIDE5NDpcXHRcXG4gMTk1OlxcdGNvbmZpZyBETUFfTlVNQV9DTUFcXG4gMTk2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzZXBhcmF0ZSBETUEgQ29udGlndW91cyBNZW1vcnkgQXJlYSBmb3IgTlVNQSBOb2RlXFxcIlxcbiAxOTc6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BXFxuIDE5ODpcXHRcXHRoZWxwXFxuIDE5OTpcXHRcXHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBnZXQgbnVtYSBDTUEgYXJlYXMgc28gdGhhdCBOVU1BIGRldmljZXNcXG4gMjAwOlxcdFxcdCAgY2FuIGdldCBsb2NhbCBtZW1vcnkgYnkgRE1BIGNvaGVyZW50IEFQSXMuXFxuIDIwMTpcXHRcXG4gMjAyOlxcdFxcdCAgWW91IGNhbiBzZXQgdGhlIHNpemUgb2YgcGVybnVtYSBDTUEgYnkgc3BlY2lmeWluZyBcXFwiY21hX3Blcm51bWE9c2l6ZVxcXCJcXG4gMjAzOlxcdFxcdCAgb3Igc2V0IHRoZSBub2RlIGlkIGFuZCBpdHMgc2l6ZSBvZiBDTUEgYnkgc3BlY2lmeWluZyBcXFwibnVtYV9jbWE9XFxuIDIwNDpcXHRcXHQgIFxcdTAwM2Nub2RlXFx1MDAzZTpzaXplWyxcXHUwMDNjbm9kZVxcdTAwM2U6c2l6ZV1cXFwiIG9uIHRoZSBrZXJuZWwncyBjb21tYW5kIGxpbmUuIEFuZCBpblxcbiAyMDU6XFx0XFx0ICByYXJlIGNhc2UgdGhhdCB0aGUgYWJvdmUgMiBhcmUgYm90aCBzZXR1cCwgdGhlbiB0aGUgXFxcIm51bWFfY21hPVxcXCJcXG4gMjA2OlxcdFxcdCAgdGFrZXMgcHJpb3JpdHkgZm9yIHRoZSBzcGVjaWZpZWQgbnVtYSBub2Rlcy5cXG4gMjA3OlxcdFxcbiAyMDg6XFx0Y29uZmlnIENNQV9TSVpFX1BFUk5VTUFcXG4gMjA5OlxcdFxcdGJvb2wgXFxcIkRlZmF1bHQgQ01BIGFyZWEgcGVyIE5VTUEgbm9kZVxcXCJcXG4gMjEwOlxcdFxcdGRlcGVuZHMgb24gRE1BX05VTUFfQ01BXFxuIDIxMTpcXHRcXHRkZWZhdWx0IHlcXG4gMjEyOlxcdFxcdGhlbHBcXG4gMjEzOlxcdFxcdCAgT24gc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgTlVNQSBub2RlLCB0aGUgc2VsZWN0ZWQgQ01BXFxuIDIxNDpcXHRcXHQgIGFyZWEgc2l6ZSB3aWxsIGJlIGFsc28gYWxsb2NhdGVkIG9uIGVhY2ggYWRkaXRpb25hbCBub2RlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0Nzo0NS41NjQ0MjYwNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzOTk4NDcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIElPTU1VIERNQSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgSU9NTVVfRE1BYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0J3MgaGVhZCBvdmVyIHRvIHRoZSBgZHJpdmVycy9pb21tdS9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vay4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIGhvdyBpdCdzIGRlZmluZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyBpdCBoYXMuIEtub3dpbmcgdGhpcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgSU9NTVUgcGljdHVyZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mjc1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0Nzo0Ny40MDQ0MTUxMzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3OTEyMTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9NTVVfRE1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pb21tdS9LY29uZmlnPTE0OD1jb25maWcgT0ZfSU9NTVVcXG4tLVxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xNTItIyBJT01NVS1hZ25vc3RpYyBETUEtbWFwcGluZyBsYXllclxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZzoxNTM6Y29uZmlnIElPTU1VX0RNQVxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xNTQtXFx0ZGVmX2Jvb2wgQVJNNjQgfHwgWDg2IHx8IFMzOTBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6NDguMTgzNTQwOTM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMTk2ODAxMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZXMgZm9yIEZvY3VzZWQgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNoYW5nZXMgYW5kIGlzb2xhdGUgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIGZ1enppbmcuICBJJ20gbG9va2luZyBhdCBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZmAgYW5kIG90aGVyIGFmZmVjdGVkIGZ1bmN0aW9ucy4gIFNwZWNpZmljYWxseSwgSSd2ZSBpZGVudGlmaWVkOlxuXG4qICAgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLlxuKiAgIGBkbWFfZnJlZV9jb250aWd1b3VzYCBpbiBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgIGFuZCBgaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oYC5cbiogICBgX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzYCAoc3RhdGljKSBpbiBga2VybmVsL2RtYS9kaXJlY3QuY2AsIGNhbGxlZCBieSBgZG1hX2RpcmVjdF9hbGxvY2AsIGBkbWFfZGlyZWN0X2FsbG9jX3BhZ2VzYCwgYW5kIGBkbWFfZGlyZWN0X2FsbG9jX25vX21hcHBpbmdgLlxuKiAgIGBkbWFfY29tbW9uX2FsbG9jX3BhZ2VzYCBpbiBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYC5cbiogICBgaW9tbXVfZG1hX2FsbG9jX3BhZ2VzYCAoc3RhdGljKSBpbiBgZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY2AsIGNhbGxlZCBieSBgaW9tbXVfZG1hX2FsbG9jYC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBhcmUgc3VpdGFibGUgZm9jdXMgc3ltYm9scy4gIFJlbWVtYmVyaW5nIHRoZSBndWlkZWxpbmVzLCB3ZSBtdXN0IGF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyBsaWtlIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMuICBIb3dldmVyLCBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZmAgc2VlbXMgc3BlY2lmaWMsIGEgaGVscGVyIGZvciBhbGxvY2F0aW5nIHBhZ2VzIHdpdGggZXhhY3Qgbm9kZSBJRCwgZGlzdGluY3QgZnJvbSwgc2F5LCBga21hbGxvY2Agb3IgYF9fYWxsb2NfcGFnZXNgLlxuXG5JJ20gcmV2aXNpdGluZyB0aGUgY2hhbmdlZCBmdW5jdGlvbnMgYWdhaW4sIHRoaXMgdGltZSBmb2N1c2luZyBvbiB0aGVpciBjb250ZXh0OlxuXG4xLiAgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgOiBgaW9tbXVfZG1hX2FsbG9jX3BhZ2VzYCAoc3RhdGljKSBhbmQgaXRzIGNhbGxlciBgaW9tbXVfZG1hX2FsbG9jYC5cbjIuICBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgOiBgZG1hX2ZyZWVfY29udGlndW91c2AuXG4zLiAgYGtlcm5lbC9kbWEvZGlyZWN0LmNgOiBgX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzYCAoc3RhdGljKSBhbmQgY2FsbGVycyBgZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AsIGBkbWFfZGlyZWN0X2FsbG9jYCwgYW5kIGBkbWFfZGlyZWN0X2FsbG9jX25vX21hcHBpbmdgLlxuNC4gIGBrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNgOiBgZG1hX2NvbW1vbl9hbGxvY19wYWdlc2AuXG41LiAgYG1tL3BhZ2VfYWxsb2MuY2A6IGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYC5cblxuVGhlc2Ugc2VlbSB0byBiZSBETUEgYWxsb2NhdGlvbiBvciBleGFjdC1uaWQgcGFnZSBhbGxvY2F0aW9uIGZ1bmN0aW9ucywgbWFraW5nIHRoZW0gZ29vZCBjYW5kaWRhdGVzLiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCBoZXJlLiBJJ20gZ29pbmcgdG8gY29uc3VsdCB0aGUgYGdpdCBsb2dgIGFuZCB0aGUgYGdpdCBkaWZmYCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuQ2hlY2tpbmcgdGhlIGRpZmYgcmV2ZWFscyBhIGZldyBtb3JlIGRldGFpbHM6XG4qICAgYGluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaGAgaW5jbHVkZXMgYW4gaW5saW5lIGBkbWFfZnJlZV9jb250aWd1b3VzYCB3aGVuIGAhQ09ORklHX0RNQV9DTUFgLlxuKiAgIGBpbmNsdWRlL2xpbnV4L2dmcC5oYDogZGVjbGFyZXMgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgLlxuXG5JJ2xsIGNoZWNrIHRoZSBjb25maWcgcmVxdWlyZW1lbnRzOlxuKiAgIGBETUFfQ01BYCBmb3IgYGtlcm5lbC9kbWEvY29udGlndW91cy5jYC5cbiogICBgSU9NTVVfRE1BYCBmb3IgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgLlxuKiAgIGBETUFfT1BTX0hFTFBFUlNgIGZvciBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYC5cblxuT24gdGhlIHRhcmdldCBhbWQ2NCBhcmNoaXRlY3R1cmUsIGBIQVNfRE1BYCBpcyBkZWZhdWx0ICd5Jy4gYElPTU1VX0RNQWAgaXMgZGVmYXVsdCBmb3IgWDg2IHNvIGxpa2VseSBlbmFibGVkLiAgYERNQV9DTUFgIGRlcGVuZHMgb24gYEhBVkVfRE1BX0NPTlRJR1VPVVMgXHUwMDI2XHUwMDI2IENNQWAuICBgRE1BX09QU19IRUxQRVJTYCBpcyBib29sLiBJIGNvbmNsdWRlIHRoYXQgYENNQWAsIGBETUFfQ01BYCwgYElPTU1VX0RNQWAsIGFuZCBgRE1BX09QU19IRUxQRVJTYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5XaXRoIGFsbCBvZiB0aGlzIEkgY2FuIG5vdyBkZWZpbmUgdGhlIEZvY3VzU3ltYm9sczpcblxuKiAgIGBkbWFfZnJlZV9jb250aWd1b3VzYFxuKiAgIGBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXNgXG4qICAgYGRtYV9jb21tb25fYWxsb2NfcGFnZXNgXG4qICAgYGlvbW11X2RtYV9hbGxvY19wYWdlc2BcbiogICBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZmBcbiogICBgZG1hX2RpcmVjdF9hbGxvY19wYWdlc2BcbiogICBgZG1hX2RpcmVjdF9hbGxvY2BcbiogICBgaW9tbXVfZG1hX2FsbG9jYFxuXG5GaW5hbGx5LCBhIHF1aWNrIG5vdGUgYWJvdXQgc3RhdGljIGZ1bmN0aW9uczogYWx0aG91Z2ggdGhleSBhcmUgc3RhdGljIGluIHRoZWlyIC5jIGZpbGUsIHdpdGggZGVidWcgaW5mbyBlbmFibGVkLCB0aGVpciBzeW1ib2xzIGFyZSB2aXNpYmxlLiBJbmNsdWRpbmcgYm90aCB0aGUgc3RhdGljIGFuZCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIGVuc3VyZXMgY29tcGxldGUgY292ZXJhZ2VcblxuIiwiSW5wdXRUb2tlbnMiOjE4NTU0LCJPdXRwdXRUb2tlbnMiOjI2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6NTguMzgwMzQ0NTIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwMzQ5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRNQV9DTUFcIixcbiAgICBcIkNNQVwiLFxuICAgIFwiSU9NTVVfRE1BXCIsXG4gICAgXCJETUFfT1BTX0hFTFBFUlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mXCIsXG4gICAgXCJkbWFfZnJlZV9jb250aWd1b3VzXCIsXG4gICAgXCJfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9jb21tb25fYWxsb2NfcGFnZXNcIixcbiAgICBcImlvbW11X2RtYV9hbGxvY19wYWdlc1wiLFxuICAgIFwiZG1hX2RpcmVjdF9hbGxvY19wYWdlc1wiLFxuICAgIFwiZG1hX2RpcmVjdF9hbGxvY1wiLFxuICAgIFwiaW9tbXVfZG1hX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIERNQSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYyBhY3Jvc3MgbXVsdGlwbGUgY29yZSBzdWJzeXN0ZW1zIChrZXJuZWwvZG1hLywgbW0vLCBkcml2ZXJzL2lvbW11LykuIEl0IHJlcGxhY2VzIHBvd2VyLW9mLXR3byBwYWdlIGFsbG9jYXRpb25zIGFuZCBfX2ZyZWVfcGFnZXMoKSB3aXRoIGFsbG9jX3BhZ2VzX2V4YWN0X25pZCgpIGFuZCBmcmVlX3BhZ2VzX2V4YWN0KCksIHdoaWNoIHNwbGl0cyBhbmQgZnJlZXMgdHJhaWxpbmcgdW51c2VkIHBhZ2VzLiBUaGlzIGNoYW5nZXMgbWVtb3J5IGFsaWdubWVudCwgcGFnZSBjb3VudCB0cmFja2luZywgYW5kIGludHJvZHVjZXMgcG90ZW50aWFsIHJ1bnRpbWUgYXNzZXJ0aW9uIHZpb2xhdGlvbnMgaW4gYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZigpIGlmIGNhbGxlcnMgcGFzcyBjZXJ0YWluIEdGUCBmbGFncy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgRE1BIGFsbG9jYXRpb25zIGluIHZpcnR1YWxpemVkIGFuZCBlbXVsYXRlZCBkZXZpY2UgZHJpdmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJETUFfQ01BXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIklPTU1VX0RNQVwiLFxuICAgIFwiRE1BX09QU19IRUxQRVJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZlwiLFxuICAgIFwiZG1hX2ZyZWVfY29udGlndW91c1wiLFxuICAgIFwiX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJkbWFfY29tbW9uX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJpb21tdV9kbWFfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9kaXJlY3RfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9kaXJlY3RfYWxsb2NcIixcbiAgICBcImlvbW11X2RtYV9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBETUEgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgYWNyb3NzIG11bHRpcGxlIGNvcmUgc3Vic3lzdGVtcyAoa2VybmVsL2RtYS8sIG1tLywgZHJpdmVycy9pb21tdS8pLiBJdCByZXBsYWNlcyBwb3dlci1vZi10d28gcGFnZSBhbGxvY2F0aW9ucyBhbmQgX19mcmVlX3BhZ2VzKCkgd2l0aCBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpLCB3aGljaCBzcGxpdHMgYW5kIGZyZWVzIHRyYWlsaW5nIHVudXNlZCBwYWdlcy4gVGhpcyBjaGFuZ2VzIG1lbW9yeSBhbGlnbm1lbnQsIHBhZ2UgY291bnQgdHJhY2tpbmcsIGFuZCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBydW50aW1lIGFzc2VydGlvbiB2aW9sYXRpb25zIGluIGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoKSBpZiBjYWxsZXJzIHBhc3MgY2VydGFpbiBHRlAgZmxhZ3MuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIERNQSBhbGxvY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQgZGV2aWNlIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ3OjU4LjQ1NzM4NTIzOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0ODU2NzM0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0Nzo1OC40NTc4MjUyMDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzQ4NTIyODc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERNQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWxsYmFjayBwYXRocyAoaW4gZG1hLWlvbW11LCBkbWEtZGlyZWN0LCBhbmQgb3BzX2hlbHBlcnMpIHRvIHVzZSBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpIGluc3RlYWQgb2YgYWxsb2NfcGFnZXNfbm9kZSgpIGFuZCBfX2ZyZWVfcGFnZXMoKSB3aXRoIHBhZ2Ugb3JkZXJzLiBJdCBhbHNvIHJlbW92ZXMgdGhlIF9fbWVtaW5pdCBhbm5vdGF0aW9uIGZyb20gYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZigpLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgYWZmZWN0IHBhZ2UtbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkgYW5kIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBETUEgc3Vic3lzdGVtLiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSB6ZXJvZWQgKHZpYSBtZW1zZXQpIG9yIG1hbmFnZWQgcGVyIHN0YW5kYXJkIERNQSBzdWJzeXN0ZW0gY29udmVudGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcGFnZSBsaWZldGltZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdG9yIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRlNjViNWM4YWUwNTVhY2ExOTFjMTMxNmU5YWYzNzRkMGRhZDY1NWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDAxOjQ3OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNcbmluZGV4IDU4YzYyNDUxM2NkNDMuLjhmMjYyYzgzODAyYzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jXG4rKysgYi9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jXG5AQCAtMTYyOCwxMCArMTYyOCwxMiBAQCBzdGF0aWMgdm9pZCAqaW9tbXVfZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHR2b2lkICpjcHVfYWRkcjtcbiBcbiBcdHBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIGFsbG9jX3NpemUsIGdmcCk7XG4tXHRpZiAoIXBhZ2UpXG4tXHRcdHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgZ2V0X29yZGVyKGFsbG9jX3NpemUpKTtcbi1cdGlmICghcGFnZSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4rXHRpZiAoIXBhZ2UpIHtcbitcdFx0Y3B1X2FkZHIgPSBhbGxvY19wYWdlc19leGFjdF9uaWQobm9kZSwgYWxsb2Nfc2l6ZSwgZ2ZwKTtcbitcdFx0aWYgKCFjcHVfYWRkcilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0cGFnZSA9IHZpcnRfdG9fcGFnZShjcHVfYWRkcik7XG4rXHR9XG4gXG4gXHRpZiAoIWNvaGVyZW50IHx8IFBhZ2VIaWdoTWVtKHBhZ2UpKSB7XG4gXHRcdHBncHJvdF90IHByb3QgPSBkbWFfcGdwcm90KGRldiwgUEFHRV9LRVJORUwsIGF0dHJzKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcbmluZGV4IDhmYWUyYjdkZWIyMGQuLjNlZjMwMDM3MTNhNjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxuQEAgLTE0Myw3ICsxNDMsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpkbWFfYWxsb2NfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdHNpemVfdCBzaXplKVxuIHtcbi1cdF9fZnJlZV9wYWdlcyhwYWdlLCBnZXRfb3JkZXIoc2l6ZSkpO1xuK1x0ZnJlZV9wYWdlc19leGFjdChwYWdlX2FkZHJlc3MocGFnZSksIHNpemUpO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0RNQV9DTUEqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oXG5pbmRleCA4NzJiYzUzZjMyZWM4Li5hYTQ2MDE4MDVmMjFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaFxuQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkICphbGxvY19wYWdlc19leGFjdF9ub3Byb2Yoc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMSk7XG4gXG4gdm9pZCBmcmVlX3BhZ2VzX2V4YWN0KHZvaWQgKnZpcnQsIHNpemVfdCBzaXplKTtcbiBcbi1fX21lbWluaXQgdm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spIF9fYWxsb2Nfc2l6ZSgyKTtcbit2b2lkICphbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaykgX19hbGxvY19zaXplKDIpO1xuICNkZWZpbmUgYWxsb2NfcGFnZXNfZXhhY3RfbmlkKC4uLilcdFx0XHRcdFx0XFxcbiBcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvY29udGlndW91cy5jIGIva2VybmVsL2RtYS9jb250aWd1b3VzLmNcbmluZGV4IDY2MDkzNDYwNTg0ZTguLjkwOTM3ZGM3YzYyN2QgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuKysrIGIva2VybmVsL2RtYS9jb250aWd1b3VzLmNcbkBAIC00NTEsOCArNDUxLDggQEAgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGdmcF90IGdmcClcbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgbWVtb3J5IGFsbG9jYXRlZCBieSBkbWFfYWxsb2NfY29udGlndW91cygpLiBBcyB0aGVcbiAgKiBjbWFfcmVsZWFzZSByZXR1cm5zIGZhbHNlIHdoZW4gcHJvdmlkZWQgcGFnZXMgZG8gbm90IGJlbG9uZyB0byBjb250aWd1b3VzXG4tICogYXJlYSBhbmQgdHJ1ZSBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdGhlbiBkb2VzIGEgZmFsbGJhY2sgX19mcmVlX3BhZ2VzKClcbi0gKiB1cG9uIGEgZmFsc2UtcmV0dXJuLlxuKyAqIGFyZWEgYW5kIHRydWUgb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHRoZW4gZG9lcyBhIGZhbGxiYWNrXG4rICogZnJlZV9wYWdlc19leGFjdCgpIHVwb24gYSBmYWxzZS1yZXR1cm4uXG4gICovXG4gdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKVxuIHtcbkBAIC00NzYsNyArNDc2LDcgQEAgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKVxuIFx0fVxuIFxuIFx0Lyogbm90IGluIGFueSBjbWEsIGZyZWUgZnJvbSBidWRkeSAqL1xuLVx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4rXHRmcmVlX3BhZ2VzX2V4YWN0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgc2l6ZSk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9kaXJlY3QuYyBiL2tlcm5lbC9kbWEvZGlyZWN0LmNcbmluZGV4IGRhNjY1Y2EyMmQ1YzAuLmVhNjQ0NTNkNzM3MGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL2RpcmVjdC5jXG4rKysgYi9rZXJuZWwvZG1hL2RpcmVjdC5jXG5AQCAtMTIwLDYgKzEyMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRpbnQgbm9kZSA9IGRldl90b19ub2RlKGRldik7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHU2NCBwaHlzX2xpbWl0O1xuK1x0dm9pZCAqdmE7XG4gXG4gXHRXQVJOX09OX09OQ0UoIVBBR0VfQUxJR05FRChzaXplKSk7XG4gXG5AQCAtMTMzLDkgKzEzNCw5IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcbiBcdH1cbiBcbi1cdHdoaWxlICgocGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwLCBnZXRfb3JkZXIoc2l6ZSkpKVxuLVx0ICAgICAgIFx1MDAyNlx1MDAyNiAhZG1hX2NvaGVyZW50X29rKGRldiwgcGFnZV90b19waHlzKHBhZ2UpLCBzaXplKSkge1xuLVx0XHRfX2ZyZWVfcGFnZXMocGFnZSwgZ2V0X29yZGVyKHNpemUpKTtcbitcdHdoaWxlICgodmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQobm9kZSwgc2l6ZSwgZ2ZwKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgIWRtYV9jb2hlcmVudF9vayhkZXYsIHZpcnRfdG9fcGh5cyh2YSksIHNpemUpKSB7XG4rXHRcdGZyZWVfcGFnZXNfZXhhY3QodmEsIHNpemUpO1xuIFxuIFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEzMikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwaHlzX2xpbWl0IFx1MDAzYyBETUFfQklUX01BU0soNjQpIFx1MDAyNlx1MDAyNlxuQEAgLTE0Niw2ICsxNDcsNyBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0XHRlbHNlXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4rXHRwYWdlID0gdmEgPyB2aXJ0X3RvX3BhZ2UodmEpIDogTlVMTDtcbiBcbiBcdHJldHVybiBwYWdlO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMgYi9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcbmluZGV4IDZiNWY5MjA4ZDMxYzAuLjVjZGYzZjYwY2Y0NzkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcbisrKyBiL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuY1xuQEAgLTY3LDEwICs2NywxMyBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2NvbW1vbl9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0cGh5c19hZGRyX3QgcGh5cztcbiBcbiBcdHBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIHNpemUsIGdmcCk7XG4tXHRpZiAoIXBhZ2UpXG4tXHRcdHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKGRldl90b19ub2RlKGRldiksIGdmcCwgZ2V0X29yZGVyKHNpemUpKTtcbi1cdGlmICghcGFnZSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4rXHRpZiAoIXBhZ2UpIHtcbitcdFx0dm9pZCAqdmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQoZGV2X3RvX25vZGUoZGV2KSwgc2l6ZSwgZ2ZwKTtcbitcbitcdFx0aWYgKCF2YSlcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0cGFnZSA9IHZpcnRfdG9fcGFnZSh2YSk7XG4rXHR9XG4gXG4gXHRwaHlzID0gcGFnZV90b19waHlzKHBhZ2UpO1xuIFx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGM0ZGM2MWVjNjYzZWUuLmQzYTEzNWRmY2RkM2QgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTU2MzcsNyArNTYzNyw3IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKTtcbiAgKlxuICAqIFJldHVybjogcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGFyZWEgb3IgJU5VTEwgaW4gY2FzZSBvZiBlcnJvci5cbiAgKi9cbi12b2lkICogX19tZW1pbml0IGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxuK3ZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxuIHtcbiBcdHVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTtcbiBcdHN0cnVjdCBwYWdlICpwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6NTguNDU3ODI2MjE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MDI3NjI2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBETUEgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTiBzY3J1dGlueS4gRnJvbSBhIGN1cnNvcnkgZ2xhbmNlLCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uIGZvciBETUEgbWVtb3J5IGFsbG9jYXRpb24uIExldCdzIGJyZWFrIGl0IGRvd246XG5cbkZpcnN0LCB0aGUgcGF0Y2ggcHJpbWFyaWx5IGZvY3VzZXMgb24gaG93IGNvbnRpZ3VvdXMgRE1BIG1lbW9yeSBpcyBoYW5kbGVkIHdoZW4gQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIGlzbid0IGF2YWlsYWJsZSBvciBmYWlscy4gQmVmb3JlIHRoaXMsIHRoZSBzeXN0ZW0gd2FzIHVzaW5nIGBhbGxvY19wYWdlc19ub2RlYCB3aXRoIGBnZXRfb3JkZXIoc2l6ZSlgLiBUaGlzIG1lYW50IGl0IHdvdWxkIGFsbG9jYXRlIGEgcG93ZXItb2YtdHdvIG51bWJlciBvZiBwYWdlcywgZXZlbiBpZiB0aGUgcmVxdWVzdGVkIHNpemUgd2Fzbid0IGEgcG93ZXIgb2YgdHdvLiBUaGUgcG90ZW50aWFsIHByb2JsZW0gd2FzIHRoZSBhbGxvY2F0aW9uIG9mIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkIHdoaWNoIG1lYW5zIHRoZSB1bnVzZWQgcGFnZXMgd2VyZSBlaXRoZXIgYmVpbmcgd2FzdGVkIG9yIGluY29ycmVjdGx5IGRlYWxsb2NhdGVkLiBXaGVuIGZyZWVpbmcgdGhvc2UgcGFnZXMsIHRoZSBjb2RlIHdhcyB1c2luZyBgX19mcmVlX3BhZ2VzYCB0byBkZWFsbG9jYXRlIHRoZSBwb3dlciBvZiB0d28gb2YgcGFnZXMuXG5cbk5vdywgdGhlIHBhdGNoIHJlcGxhY2VzIHRoaXMgd2l0aCBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkYCBhbmQgYGZyZWVfcGFnZXNfZXhhY3RgLiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGJlZ2lucy4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGBhbGxvY19wYWdlc19leGFjdGAgc2VlbXMgdG8gYWxsb2NhdGUgYSBwb3dlci1vZi10d28gYmxvY2sgb2YgcGFnZXMsIGJ1dCBpbW1lZGlhdGVseSByZWxlYXNlcyB0aGUgdW51c2VkIHBhZ2VzIGJhY2sgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvci4gRXNzZW50aWFsbHksIGl0J3MgYWxsb2NhdGluZyBhIGJsb2NrIGFuZCB0aGVuIHRyaW1taW5nIGl0IGRvd24gdG8gdGhlIGV4YWN0IHNpemUuIGBmcmVlX3BhZ2VzX2V4YWN0YCB0aGVuIGZyZWVzIG9ubHkgdGhlIGV4YWN0IG51bWJlciBvZiBwYWdlcyB0aGF0IHdlcmUgYWxsb2NhdGVkIChhbGlnbmVkIHRvIGBQQUdFX1NJWkVgKS4gVGhpcyBpcyBhIGNsZWFyIGltcHJvdmVtZW50IGluIG1lbW9yeSBtYW5hZ2VtZW50IGVmZmljaWVuY3kuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYWxsb2NfcGFnZXNfZXhhY3RgIGFuZCBgZnJlZV9wYWdlc19leGFjdGAgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBjb250aWd1b3VzIERNQSBhbGxvY2F0aW9ucy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlJ3MgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB0aGUgRE1BIGVuZ2luZSBvciB1c2Vyc3BhY2UuIEknbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgd2hlcmUgYW5kIGhvdyB0aGUgbWVtb3J5IGlzIGNsZWFyZWQgKGlmIGF0IGFsbCkgd2l0aGluIHRoZXNlIG5ldyBmdW5jdGlvbnMuIEknbGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IHBvdGVudGlhbCBvZmYtYnktb25lIGVycm9ycyBvciBib3VuZHMgdmlvbGF0aW9ucyBkdXJpbmcgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwcm9jZXNzLiBHaXZlbiB0aGUgZXhpc3RpbmcgY29kZSdzIHJlbGlhbmNlIG9uIHBvd2VyLW9mLXR3byBhbGxvY2F0aW9ucywgaXQgd291bGQgYmUgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB0aGUgdHJpbW1pbmcgb3BlcmF0aW9ucyBkb24ndCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDQ5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MDMuMDYwNTkxNTk2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ1NjkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19leGFjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2ZlbmNlL2NvcmUuYz05OTg9c3RhdGljIGludCBrZmVuY2VfaW5pdF9sYXRlKHZvaWQpXFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jLTEwMjUtXFxubW0va2ZlbmNlL2NvcmUuYzoxMDI2OlxcdF9fa2ZlbmNlX3Bvb2wgPSBhbGxvY19wYWdlc19leGFjdChLRkVOQ0VfUE9PTF9TSVpFLFxcbm1tL2tmZW5jZS9jb3JlLmMtMTAyNy1cXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUwgfCBfX0dGUF9TS0lQX0tBU0FOKTtcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTAzMC1cXG5tbS9rZmVuY2UvY29yZS5jOjEwMzE6XFx0a2ZlbmNlX21ldGFkYXRhX2luaXQgPSBhbGxvY19wYWdlc19leGFjdChLRkVOQ0VfTUVUQURBVEFfU0laRSxcXG5tbS9rZmVuY2UvY29yZS5jLTEwMzItXFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUwgfCBfX0dGUF9TS0lQX0tBU0FOKTtcXG4tLVxcbm1tL21tX2luaXQuYz0yMzYwPXZvaWQgKl9faW5pdCBhbGxvY19sYXJnZV9zeXN0ZW1faGFzaChjb25zdCBjaGFyICp0YWJsZW5hbWUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMjQzOS1cXHRcXHRcXHQgKiBzb21lIHBhZ2VzIGF0IHRoZSBlbmQgb2YgaGFzaCB0YWJsZSB3aGljaFxcbm1tL21tX2luaXQuYzoyNDQwOlxcdFxcdFxcdCAqIGFsbG9jX3BhZ2VzX2V4YWN0KCkgYXV0b21hdGljYWxseSBkb2VzXFxubW0vbW1faW5pdC5jLTI0NDEtXFx0XFx0XFx0ICovXFxubW0vbW1faW5pdC5jOjI0NDI6XFx0XFx0XFx0dGFibGUgPSBhbGxvY19wYWdlc19leGFjdChzaXplLCBnZnBfZmxhZ3MpO1xcbm1tL21tX2luaXQuYy0yNDQzLVxcdFxcdFxcdGttZW1sZWFrX2FsbG9jKHRhYmxlLCBzaXplLCAxLCBnZnBfZmxhZ3MpO1xcbi0tXFxubW0vbm9tbXUuYz05MTQ9c3RhdGljIGludCBkb19tbWFwX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ub21tdS5jLTk1OC1cXG5tbS9ub21tdS5jOjk1OTpcXHRiYXNlID0gYWxsb2NfcGFnZXNfZXhhY3QodG90YWwgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7XFxubW0vbm9tbXUuYy05NjAtXFx0aWYgKCFiYXNlKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTU1ODE9c3RhdGljIHZvaWQgKm1ha2VfYWxsb2NfZXhhY3QodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTYwMC0vKipcXG5tbS9wYWdlX2FsbG9jLmM6NTYwMTogKiBhbGxvY19wYWdlc19leGFjdCAtIGFsbG9jYXRlIGFuIGV4YWN0IG51bWJlciBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgcGFnZXMuXFxubW0vcGFnZV9hbGxvYy5jLTU2MDItICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGVcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01NjE0LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1NjE1OnZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXFxubW0vcGFnZV9hbGxvYy5jLTU2MTYte1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU2MjUtfVxcbm1tL3BhZ2VfYWxsb2MuYzo1NjI2OkVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTYyNy1cXG5tbS9wYWdlX2FsbG9jLmMtNTYyOC0vKipcXG5tbS9wYWdlX2FsbG9jLmM6NTYyOTogKiBhbGxvY19wYWdlc19leGFjdF9uaWQgLSBhbGxvY2F0ZSBhbiBleGFjdCBudW1iZXIgb2YgcGh5c2ljYWxseS1jb250aWd1b3VzXFxubW0vcGFnZV9hbGxvYy5jLTU2MzAtICpcXHRcXHRcXHQgICBwYWdlcyBvbiBhIG5vZGUuXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTYzNC0gKlxcbm1tL3BhZ2VfYWxsb2MuYzo1NjM1OiAqIExpa2UgYWxsb2NfcGFnZXNfZXhhY3QoKSwgYnV0IHRyeSB0byBhbGxvY2F0ZSBvbiBub2RlIG5pZCBmaXJzdCBiZWZvcmUgZmFsbGluZ1xcbm1tL3BhZ2VfYWxsb2MuYy01NjM2LSAqIGJhY2suXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTYzOS0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTY0MDp2b2lkICphbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaylcXG5tbS9wYWdlX2FsbG9jLmMtNTY0MS17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTY1NC0vKipcXG5tbS9wYWdlX2FsbG9jLmM6NTY1NTogKiBmcmVlX3BhZ2VzX2V4YWN0IC0gcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIHZpYSBhbGxvY19wYWdlc19leGFjdCgpXFxubW0vcGFnZV9hbGxvYy5jOjU2NTY6ICogQHZpcnQ6IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBhbGxvY19wYWdlc19leGFjdC5cXG5tbS9wYWdlX2FsbG9jLmM6NTY1NzogKiBAc2l6ZTogc2l6ZSBvZiBhbGxvY2F0aW9uLCBzYW1lIHZhbHVlIGFzIHBhc3NlZCB0byBhbGxvY19wYWdlc19leGFjdCgpLlxcbm1tL3BhZ2VfYWxsb2MuYy01NjU4LSAqXFxubW0vcGFnZV9hbGxvYy5jOjU2NTk6ICogUmVsZWFzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gYWxsb2NfcGFnZXNfZXhhY3QuXFxubW0vcGFnZV9hbGxvYy5jLTU2NjAtICovXFxuLS1cXG5tbS9wYWdlX2V4dC5jPTI2NT1zdGF0aWMgdm9pZCAqX19tZW1pbml0IGFsbG9jX3BhZ2VfZXh0KHNpemVfdCBzaXplLCBpbnQgbmlkKVxcbi0tXFxubW0vcGFnZV9leHQuYy0yNjktXFxubW0vcGFnZV9leHQuYzoyNzA6XFx0YWRkciA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChuaWQsIHNpemUsIGZsYWdzKTtcXG5tbS9wYWdlX2V4dC5jLTI3MS1cXHRpZiAoYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MDMuMTMyMDUxMjE0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTk5NjE5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGBtbS9wYWdlX2FsbG9jLmNgLCBmb2N1c2luZyBvbiBsaW5lcyByb3VnaGx5IGJldHdlZW4gNTU4MCBhbmQgNTY2MC4gVGhhdCByYW5nZSBpcyBsaWtlbHkgdG8gY29udGFpbiBzb21lIGNydWNpYWwgYWxsb2NhdGlvbiBsb2dpYywgcHJvYmFibHkgYSBjb3JlIGZ1bmN0aW9uIG9yIGEgc2lnbmlmaWNhbnQgcGFydCBvZiBhIGxhcmdlciBhbGxvY2F0aW9uIHNjaGVtZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaXNtcyBhdCBwbGF5IOKAkyBob3cgdGhlIGtlcm5lbCBjaG9vc2VzIGFuZCBhc3NpZ25zIHBoeXNpY2FsIHBhZ2VzIHRvIHNhdGlzZnkgbWVtb3J5IHJlcXVlc3RzLiBJJ20gaG9waW5nIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGludm9sdmVkIGluIGVpdGhlciB0aGUgZGlyZWN0IGFsbG9jYXRpb24gb2YgcGFnZXMgZnJvbSB0aGUgc3lzdGVtIG9yIHRoZSBtYW5hZ2VtZW50IG9mIHRoZSBwYWdlIGNhY2hlLiBJJ2xsIG5lZWQgdG8gZGlzc2VjdCBhbnkgbG9vcHMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciBpbnRyaWNhdGUgY2FsY3VsYXRpb25zIHJlbGF0ZWQgdG8gcGFnZSBhdmFpbGFiaWxpdHksIG5vZGUgc2VsZWN0aW9uLCB6b25lIGNvbnNpZGVyYXRpb24sIGFuZCBwb3RlbnRpYWxseSwgZnJhZ21lbnRhdGlvbiBhdm9pZGFuY2Ugc3RyYXRlZ2llcy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzY3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MDYuMDUyMDE1Njc1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Njg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTU4MCxcbiAgXCJMaW5lQ291bnRcIjogODVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTU4MDpcXHRcXG41NTgxOlxcdHN0YXRpYyB2b2lkICptYWtlX2FsbG9jX2V4YWN0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IG9yZGVyLFxcbjU1ODI6XFx0XFx0XFx0c2l6ZV90IHNpemUpXFxuNTU4MzpcXHR7XFxuNTU4NDpcXHRcXHRpZiAoYWRkcikge1xcbjU1ODU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBuciA9IERJVl9ST1VORF9VUChzaXplLCBQQUdFX1NJWkUpO1xcbjU1ODY6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoKHZvaWQgKilhZGRyKTtcXG41NTg3OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpsYXN0ID0gcGFnZSArIG5yO1xcbjU1ODg6XFx0XFxuNTU4OTpcXHRcXHRcXHRfX3NwbGl0X3BhZ2UocGFnZSwgb3JkZXIpO1xcbjU1OTA6XFx0XFx0XFx0d2hpbGUgKHBhZ2UgXFx1MDAzYyAtLWxhc3QpXFxuNTU5MTpcXHRcXHRcXHRcXHRzZXRfcGFnZV9yZWZjb3VudGVkKGxhc3QpO1xcbjU1OTI6XFx0XFxuNTU5MzpcXHRcXHRcXHRsYXN0ID0gcGFnZSArICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbjU1OTQ6XFx0XFx0XFx0Zm9yIChwYWdlICs9IG5yOyBwYWdlIFxcdTAwM2MgbGFzdDsgcGFnZSsrKVxcbjU1OTU6XFx0XFx0XFx0XFx0X19mcmVlX3BhZ2VzX29rKHBhZ2UsIDAsIEZQSV9UT19UQUlMKTtcXG41NTk2OlxcdFxcdH1cXG41NTk3OlxcdFxcdHJldHVybiAodm9pZCAqKWFkZHI7XFxuNTU5ODpcXHR9XFxuNTU5OTpcXHRcXG41NjAwOlxcdC8qKlxcbjU2MDE6XFx0ICogYWxsb2NfcGFnZXNfZXhhY3QgLSBhbGxvY2F0ZSBhbiBleGFjdCBudW1iZXIgcGh5c2ljYWxseS1jb250aWd1b3VzIHBhZ2VzLlxcbjU2MDI6XFx0ICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGVcXG41NjAzOlxcdCAqIEBnZnBfbWFzazogR0ZQIGZsYWdzIGZvciB0aGUgYWxsb2NhdGlvbiwgbXVzdCBub3QgY29udGFpbiBfX0dGUF9DT01QXFxuNTYwNDpcXHQgKlxcbjU2MDU6XFx0ICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGFsbG9jX3BhZ2VzKCksIGV4Y2VwdCB0aGF0IGl0IGFsbG9jYXRlcyB0aGVcXG41NjA2OlxcdCAqIG1pbmltdW0gbnVtYmVyIG9mIHBhZ2VzIHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QuICBhbGxvY19wYWdlcygpIGNhbiBvbmx5XFxuNTYwNzpcXHQgKiBhbGxvY2F0ZSBtZW1vcnkgaW4gcG93ZXItb2YtdHdvIHBhZ2VzLlxcbjU2MDg6XFx0ICpcXG41NjA5OlxcdCAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBsaW1pdGVkIGJ5IE1BWF9QQUdFX09SREVSLlxcbjU2MTA6XFx0ICpcXG41NjExOlxcdCAqIE1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJlbGVhc2VkIGJ5IGZyZWVfcGFnZXNfZXhhY3QoKS5cXG41NjEyOlxcdCAqXFxuNTYxMzpcXHQgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9yICVOVUxMIGluIGNhc2Ugb2YgZXJyb3IuXFxuNTYxNDpcXHQgKi9cXG41NjE1OlxcdHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuNTYxNjpcXHR7XFxuNTYxNzpcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7XFxuNTYxODpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuNTYxOTpcXHRcXG41NjIwOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pKSlcXG41NjIxOlxcdFxcdFxcdGdmcF9tYXNrIFxcdTAwMjY9IH4oX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pO1xcbjU2MjI6XFx0XFxuNTYyMzpcXHRcXHRhZGRyID0gZ2V0X2ZyZWVfcGFnZXNfbm9wcm9mKGdmcF9tYXNrLCBvcmRlcik7XFxuNTYyNDpcXHRcXHRyZXR1cm4gbWFrZV9hbGxvY19leGFjdChhZGRyLCBvcmRlciwgc2l6ZSk7XFxuNTYyNTpcXHR9XFxuNTYyNjpcXHRFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZik7XFxuNTYyNzpcXHRcXG41NjI4OlxcdC8qKlxcbjU2Mjk6XFx0ICogYWxsb2NfcGFnZXNfZXhhY3RfbmlkIC0gYWxsb2NhdGUgYW4gZXhhY3QgbnVtYmVyIG9mIHBoeXNpY2FsbHktY29udGlndW91c1xcbjU2MzA6XFx0ICpcXHRcXHRcXHQgICBwYWdlcyBvbiBhIG5vZGUuXFxuNTYzMTpcXHQgKiBAbmlkOiB0aGUgcHJlZmVycmVkIG5vZGUgSUQgd2hlcmUgbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWRcXG41NjMyOlxcdCAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlXFxuNTYzMzpcXHQgKiBAZ2ZwX21hc2s6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb24sIG11c3Qgbm90IGNvbnRhaW4gX19HRlBfQ09NUFxcbjU2MzQ6XFx0ICpcXG41NjM1OlxcdCAqIExpa2UgYWxsb2NfcGFnZXNfZXhhY3QoKSwgYnV0IHRyeSB0byBhbGxvY2F0ZSBvbiBub2RlIG5pZCBmaXJzdCBiZWZvcmUgZmFsbGluZ1xcbjU2MzY6XFx0ICogYmFjay5cXG41NjM3OlxcdCAqXFxuNTYzODpcXHQgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9yICVOVUxMIGluIGNhc2Ugb2YgZXJyb3IuXFxuNTYzOTpcXHQgKi9cXG41NjQwOlxcdHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxcbjU2NDE6XFx0e1xcbjU2NDI6XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpO1xcbjU2NDM6XFx0XFx0c3RydWN0IHBhZ2UgKnA7XFxuNTY0NDpcXHRcXG41NjQ1OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pKSlcXG41NjQ2OlxcdFxcdFxcdGdmcF9tYXNrIFxcdTAwMjY9IH4oX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pO1xcbjU2NDc6XFx0XFxuNTY0ODpcXHRcXHRwID0gYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YobmlkLCBnZnBfbWFzaywgb3JkZXIpO1xcbjU2NDk6XFx0XFx0aWYgKCFwKVxcbjU2NTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuNTY1MTpcXHRcXHRyZXR1cm4gbWFrZV9hbGxvY19leGFjdCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocCksIG9yZGVyLCBzaXplKTtcXG41NjUyOlxcdH1cXG41NjUzOlxcdFxcbjU2NTQ6XFx0LyoqXFxuNTY1NTpcXHQgKiBmcmVlX3BhZ2VzX2V4YWN0IC0gcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIHZpYSBhbGxvY19wYWdlc19leGFjdCgpXFxuNTY1NjpcXHQgKiBAdmlydDogdGhlIHZhbHVlIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzX2V4YWN0LlxcbjU2NTc6XFx0ICogQHNpemU6IHNpemUgb2YgYWxsb2NhdGlvbiwgc2FtZSB2YWx1ZSBhcyBwYXNzZWQgdG8gYWxsb2NfcGFnZXNfZXhhY3QoKS5cXG41NjU4OlxcdCAqXFxuNTY1OTpcXHQgKiBSZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBhbGxvY19wYWdlc19leGFjdC5cXG41NjYwOlxcdCAqL1xcbjU2NjE6XFx0dm9pZCBmcmVlX3BhZ2VzX2V4YWN0KHZvaWQgKnZpcnQsIHNpemVfdCBzaXplKVxcbjU2NjI6XFx0e1xcbjU2NjM6XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpdmlydDtcXG41NjY0OlxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIFBBR0VfQUxJR04oc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ4OjA2LjA1MjM2NDE0NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQ4MDQyMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBETUEgQWxsb2NhdGlvbiBDb250ZXh0KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gY29udGV4dCBiZXR0ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgRE1BIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZXhhbWluZSBgZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY2AgYmVjYXVzZSBpdCdzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIElPTU1VLCB3aGljaCBvZnRlbiBpbnRlcmFjdHMgd2l0aCBETUEuIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gaG93IERNQSBhbGxvY2F0aW9ucyBhcmUgaGFuZGxlZCB3aGVuIGFuIElPTU1VIGlzIGluIHRoZSBwaWN0dXJlLCBsb29raW5nIGZvciBhbGxvY2F0aW9uIGNhbGxzIG9yIHNwZWNpZmljIElPTU1VIGludGVyYWN0aW9ucy5cblxuVGhlbiwgSSdtIGdvaW5nIHRvIGZvbGxvdyB1cCBieSBzY3J1dGluaXppbmcgYGtlcm5lbC9kbWEvZGlyZWN0LmNgIGFuZCBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYC4gVGhlc2UgZmlsZXMgYXJlIG1vcmUgZ2VuZXJhbCBETUEgaW1wbGVtZW50YXRpb24gYXNwZWN0cywgYW5kIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQsIG5vbi1JT01NVSBETUEgb3BlcmF0aW9ucywgYWxsb2NhdGlvbiBoZWxwZXJzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBvdmVyYXJjaGluZyBETUEgZnJhbWV3b3JrIGRldGFpbHMuIFVuZGVyc3RhbmRpbmcgdGhlc2Ugd2lsbCBoZWxwIG1lIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZS4gTG9va2luZyBhdCBhbGwgdGhyZWUgd2lsbCBoZWxwIG1lIGRldGVybWluZSB0aGUgZGlmZmVyZW5jZSwgaWYgYW55LCBiZXR3ZWVuIElPTU1VIGFuZCBub24tSU9NTVUgYWxsb2NhdGlvbnMuIEl0IGlzIHRpbWUgdG8gZ2V0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ4OjA4LjkwMDQwOTU3OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjIwOlxcdFxcbjE2MjE6XFx0c3RhdGljIHZvaWQgKmlvbW11X2RtYV9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbjE2MjI6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIGF0dHJzKVxcbjE2MjM6XFx0e1xcbjE2MjQ6XFx0XFx0Ym9vbCBjb2hlcmVudCA9IGRldl9pc19kbWFfY29oZXJlbnQoZGV2KTtcXG4xNjI1OlxcdFxcdHNpemVfdCBhbGxvY19zaXplID0gUEFHRV9BTElHTihzaXplKTtcXG4xNjI2OlxcdFxcdGludCBub2RlID0gZGV2X3RvX25vZGUoZGV2KTtcXG4xNjI3OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4xNjI4OlxcdFxcdHZvaWQgKmNwdV9hZGRyO1xcbjE2Mjk6XFx0XFxuMTYzMDpcXHRcXHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBhbGxvY19zaXplLCBnZnApO1xcbjE2MzE6XFx0XFx0aWYgKCFwYWdlKSB7XFxuMTYzMjpcXHRcXHRcXHRjcHVfYWRkciA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBhbGxvY19zaXplLCBnZnApO1xcbjE2MzM6XFx0XFx0XFx0aWYgKCFjcHVfYWRkcilcXG4xNjM0OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE2MzU6XFx0XFx0XFx0cGFnZSA9IHZpcnRfdG9fcGFnZShjcHVfYWRkcik7XFxuMTYzNjpcXHRcXHR9XFxuMTYzNzpcXHRcXG4xNjM4OlxcdFxcdGlmICghY29oZXJlbnQgfHwgUGFnZUhpZ2hNZW0ocGFnZSkpIHtcXG4xNjM5OlxcdFxcdFxcdHBncHJvdF90IHByb3QgPSBkbWFfcGdwcm90KGRldiwgUEFHRV9LRVJORUwsIGF0dHJzKTtcXG4xNjQwOlxcdFxcbjE2NDE6XFx0XFx0XFx0Y3B1X2FkZHIgPSBkbWFfY29tbW9uX2NvbnRpZ3VvdXNfcmVtYXAocGFnZSwgYWxsb2Nfc2l6ZSxcXG4xNjQyOlxcdFxcdFxcdFxcdFxcdHByb3QsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuMTY0MzpcXHRcXHRcXHRpZiAoIWNwdV9hZGRyKVxcbjE2NDQ6XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZV9wYWdlcztcXG4xNjQ1OlxcdFxcbjE2NDY6XFx0XFx0XFx0aWYgKCFjb2hlcmVudClcXG4xNjQ3OlxcdFxcdFxcdFxcdGFyY2hfZG1hX3ByZXBfY29oZXJlbnQocGFnZSwgc2l6ZSk7XFxuMTY0ODpcXHRcXHR9IGVsc2Uge1xcbjE2NDk6XFx0XFx0XFx0Y3B1X2FkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7XFxuMTY1MDpcXHRcXHR9XFxuMTY1MTpcXHRcXG4xNjUyOlxcdFxcdCpwYWdlcCA9IHBhZ2U7XFxuMTY1MzpcXHRcXHRtZW1zZXQoY3B1X2FkZHIsIDAsIGFsbG9jX3NpemUpO1xcbjE2NTQ6XFx0XFx0cmV0dXJuIGNwdV9hZGRyO1xcbjE2NTU6XFx0b3V0X2ZyZWVfcGFnZXM6XFxuMTY1NjpcXHRcXHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgYWxsb2Nfc2l6ZSk7XFxuMTY1NzpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNjU4OlxcdH1cXG4xNjU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0ODowOC45MDA1MjcxMTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5MzI0MDA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgRE1BIEFsbG9jYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBmb2N1cyBpcyBvbiBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBETUEtc3BlY2lmaWMgcGFydHMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBtZW1zZXQoY3B1X2FkZHIsIDAsIGFsbG9jX3NpemUpO2AgY2FsbCB3aXRoaW4gYGlvbW11X2RtYV9hbGxvY19wYWdlc2AuIFRoaXMgaXMgd2hlcmUgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgZ2V0dGluZyBpbml0aWFsaXplZCwgbGlrZWx5IHRvIGEgY2xlYW4gc3RhdGUuIFRoYXQncyBnb29kIHByYWN0aWNlIGZvciBzZWN1cml0eSBhbmQgY29uc2lzdGVuY3ksIG1ha2luZyBzdXJlIHRoZXJlJ3Mgbm8gbGVmdG92ZXIgZGF0YSBmcm9tIHByZXZpb3VzIHVzYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGlmIHRoaXMgemVyb2luZyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLCBvciBpZiB0aGVyZSBhcmUgc2NlbmFyaW9zIHdoZXJlIGl0IGNvdWxkIGJlIG9wdGltaXplZC5cblxuTm93LCBJJ20gaGVhZGluZyBvdmVyIHRvIGBrZXJuZWwvZG1hL2RpcmVjdC5jYCBhbmQgZm9jdXNpbmcgb24gdGhlIDEyMC0xODAgbGluZSByYW5nZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBsb3dlci1sZXZlbCBETUEtcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhlcmUsIHByb2JhYmx5IHRoZSBvbmVzIHRoYXQgYWN0dWFsbHkgaGFuZGxlIHRoZSBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZyBhbmQgYWxsb2NhdGlvbiBpZiB0aGlzIGlzIGEgZGlyZWN0IG1hcHBlZCBzeXN0ZW0uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgRE1BIHJlZ2lvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBtYXliZSBob3cgdGhleSBhcmUgcmVsYXRlZC4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIHJlbGF0aW9uc2hpcCB0byB0aGUga2VybmVsJ3MgcGFnZSBhbGxvY2F0b3IsIGhvdyB0aGUgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIElPTU1VLiBUaGlzIHBhcnQgaXMgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJdOKAmXMgYWxsIGFib3V0IHRoZSBhbGxvY2F0aW9uLCBtYXBwaW5nLCBhbmQgdHJhbnNmZXIgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MTEuMzkzNzY5Njk3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvZG1hL2RpcmVjdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHR9XFxuIDExNjpcXHRcXG4gMTE3OlxcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIDExODpcXHRcXHRcXHRnZnBfdCBnZnAsIGJvb2wgYWxsb3dfaGlnaG1lbSlcXG4gMTE5OlxcdHtcXG4gMTIwOlxcdFxcdGludCBub2RlID0gZGV2X3RvX25vZGUoZGV2KTtcXG4gMTIxOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiAxMjI6XFx0XFx0dTY0IHBoeXNfbGltaXQ7XFxuIDEyMzpcXHRcXHR2b2lkICp2YTtcXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0V0FSTl9PTl9PTkNFKCFQQUdFX0FMSUdORUQoc2l6ZSkpO1xcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHRnZnAgfD0gZG1hX2RpcmVjdF9vcHRpbWFsX2dmcF9tYXNrKGRldiwgXFx1MDAyNnBoeXNfbGltaXQpO1xcbiAxMjg6XFx0XFx0cGFnZSA9IGRtYV9hbGxvY19jb250aWd1b3VzKGRldiwgc2l6ZSwgZ2ZwKTtcXG4gMTI5OlxcdFxcdGlmIChwYWdlKSB7XFxuIDEzMDpcXHRcXHRcXHRpZiAoZG1hX2NvaGVyZW50X29rKGRldiwgcGFnZV90b19waHlzKHBhZ2UpLCBzaXplKSBcXHUwMDI2XFx1MDAyNlxcbiAxMzE6XFx0XFx0XFx0ICAgIChhbGxvd19oaWdobWVtIHx8ICFQYWdlSGlnaE1lbShwYWdlKSkpXFxuIDEzMjpcXHRcXHRcXHRcXHRyZXR1cm4gcGFnZTtcXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0XFx0ZG1hX2ZyZWVfY29udGlndW91cyhkZXYsIHBhZ2UsIHNpemUpO1xcbiAxMzU6XFx0XFx0fVxcbiAxMzY6XFx0XFxuIDEzNzpcXHRcXHR3aGlsZSAoKHZhID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5vZGUsIHNpemUsIGdmcCkpIFxcdTAwMjZcXHUwMDI2XFxuIDEzODpcXHRcXHQgICAgICAgIWRtYV9jb2hlcmVudF9vayhkZXYsIHZpcnRfdG9fcGh5cyh2YSksIHNpemUpKSB7XFxuIDEzOTpcXHRcXHRcXHRmcmVlX3BhZ2VzX2V4YWN0KHZhLCBzaXplKTtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BMzIpIFxcdTAwMjZcXHUwMDI2XFxuIDE0MjpcXHRcXHRcXHQgICAgcGh5c19saW1pdCBcXHUwMDNjIERNQV9CSVRfTUFTSyg2NCkgXFx1MDAyNlxcdTAwMjZcXG4gMTQzOlxcdFxcdFxcdCAgICAhKGdmcCBcXHUwMDI2IChHRlBfRE1BMzIgfCBHRlBfRE1BKSkpXFxuIDE0NDpcXHRcXHRcXHRcXHRnZnAgfD0gR0ZQX0RNQTMyO1xcbiAxNDU6XFx0XFx0XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEpIFxcdTAwMjZcXHUwMDI2ICEoZ2ZwIFxcdTAwMjYgR0ZQX0RNQSkpXFxuIDE0NjpcXHRcXHRcXHRcXHRnZnAgPSAoZ2ZwIFxcdTAwMjYgfkdGUF9ETUEzMikgfCBHRlBfRE1BO1xcbiAxNDc6XFx0XFx0XFx0ZWxzZVxcbiAxNDg6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE0OTpcXHRcXHR9XFxuIDE1MDpcXHRcXHRwYWdlID0gdmEgPyB2aXJ0X3RvX3BhZ2UodmEpIDogTlVMTDtcXG4gMTUxOlxcdFxcbiAxNTI6XFx0XFx0cmV0dXJuIHBhZ2U7XFxuIDE1MzpcXHR9XFxuIDE1NDpcXHRcXG4gMTU1OlxcdC8qXFxuIDE1NjpcXHQgKiBDaGVjayBpZiBhIHBvdGVudGlhbGx5IGJsb2NraW5nIG9wZXJhdGlvbnMgbmVlZHMgdG8gZGlwIGludG8gdGhlIGF0b21pY1xcbiAxNTc6XFx0ICogcG9vbHMgZm9yIHRoZSBnaXZlbiBkZXZpY2UvZ2ZwLlxcbiAxNTg6XFx0ICovXFxuIDE1OTpcXHRzdGF0aWMgYm9vbCBkbWFfZGlyZWN0X3VzZV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgZ2ZwX3QgZ2ZwKVxcbiAxNjA6XFx0e1xcbiAxNjE6XFx0XFx0cmV0dXJuICFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApIFxcdTAwMjZcXHUwMDI2ICFpc19zd2lvdGxiX2Zvcl9hbGxvYyhkZXYpO1xcbiAxNjI6XFx0fVxcbiAxNjM6XFx0XFxuIDE2NDpcXHRzdGF0aWMgc3RydWN0IHBhZ2UgKmRtYV9kaXJlY3RfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIDE2NTpcXHRcXHRcXHRkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCB2b2lkICoqY3B1X2FkZHIsIGdmcF90IGdmcCxcXG4gMTY2OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXR0cnMpXFxuIDE2NzpcXHR7XFxuIDE2ODpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gMTY5OlxcdFxcdHU2NCBwaHlzX2xpbWl0O1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkpKVxcbiAxNzI6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE3MzpcXHRcXG4gMTc0OlxcdFxcdGdmcCB8PSBkbWFfZGlyZWN0X29wdGltYWxfZ2ZwX21hc2soZGV2LCBcXHUwMDI2cGh5c19saW1pdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ4OjExLjM5Mzg3NjgzN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzc2NDQzNzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIENhbGxlcnMgb2YgYF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgKERNQSkgYWxsb2NhdGlvbiB3aXRoIGBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGVyZSBhcmUgdGhlIGNyaXRpY2FsIHBvaW50cyBvZiB1c2UgZm9yIHRoaXM/IFdoYXQgc3lzdGVtcyBvciBkZXZpY2VzIGFyZSAqcmVseWluZyogb24gdGhpcyBzcGVjaWZpYyBwYXRoP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucyBoZXJlLiBUaGUgbmFtZSBpbXBsaWVzIGEgZGlyZWN0LCBoYXJkd2FyZS1mYWNpbmcgYWxsb2NhdGlvbjsgdGhpcyB1c3VhbGx5IGhhcyBzZXJpb3VzIGNvbnN0cmFpbnRzIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuXG5TbywgbGV0J3MgdHJhY2UgdGhpcyBiYWNrLiBDaGVja2luZyBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gaXMgYWJzb2x1dGVseSB0aGUgcmlnaHQgbW92ZS4gSSBuZWVkIHRvIGtub3c6IEFyZSB3ZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZHJpdmVycyB0aGF0IGFyZSB2ZXJ5IGxvdyBsZXZlbD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaGlnaC1wZXJmb3JtYW5jZSBuZXR3b3JraW5nIHN0YWNrcyB0aGF0IGFyZSBkaXJlY3RseSBtYXBwaW5nIG1lbW9yeT8gQXJlIHdlIGxvb2tpbmcgYXQgYW55dGhpbmcgaW52b2x2aW5nIHJlYWwtdGltZSBjb25zdHJhaW50cz8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbnMgaXMgZ29pbmcgdG8gYmUga2V5LiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZXNlIGNhbGxlcnMgYXJlIG1hbmlwdWxhdGluZyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgYWxsb2NhdGVkIG1lbW9yeS5cblxuVGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvZiBhbGxvY2F0aW9uIHRoaXMgd2F5IGNhbiBiZSBodWdlLCBidXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUga2luZCBvZiBoYXJkd2FyZSBpbnZvbHZlZCBpbiByZXF1ZXN0aW5nIERNQSBhY2Nlc3MgaXMgYWxzbyB2aXRhbC4gSW4gbXkgbWluZCwgSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zOiBJcyB0aGVyZSBhbnkgcG9zc2liaWxpdHkgb2YgY29udGVudGlvbj8gQ291bGQgd2UgYmUgZGVhbGluZyB3aXRoIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoZSBtZW1vcnkgY29udHJvbGxlciBvciBjYWNoZSBjb2hlcmVuY3k/IFdoYXQgYWJvdXQgTlVNQSBjb25zaWRlcmF0aW9ucyBpZiB0aGlzIGlzIGEgc3lzdGVtIHdpdGggbm9uLXVuaWZvcm0gbWVtb3J5IGFjY2Vzcz8gVGhlIGNhbGxlcnMgd2lsbCBwcm92aWRlIHRob3NlIGFuc3dlcnMuIEZyb20gdGhhdCBpbmZvcm1hdGlvbiwgSSBjYW4gYmV0dGVyIGFzc2VzcyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneS4gSSBuZWVkIHRvIGxvb2sgZm9yIHBhdHRlcm5zLCBhbmQgYW5vbWFsaWVzLCB0byBmbGFnIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBXaGF0IGFyZSB0aGUgc2l6ZSByZXF1ZXN0cz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGZyYWdtZW50YXRpb24gaXNzdWVzPyBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgcG9zc2libGUgZGVhZGxvY2tzIGFzIHdlbGwuIFVsdGltYXRlbHksIGFueSBpc3N1ZXMgaGVyZSBjb3VsZCBhZmZlY3QgbXVsdGlwbGUgbGF5ZXJzIGluIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGNhc2NhZGluZyBhbGwgdGhlIHdheSB1cCB0byB1c2VyIHNwYWNlIGFuZCBhcHBsaWNhdGlvbiBwZXJmb3JtYW5jZS4gTGV0J3Mgc2VlIHdoYXQgdGhvc2UgY2FsbGVycyBhcmUgdGVsbGluZyB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ4OjE1LjE3MDMyMzMxM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1MDY3MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZG1hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZG1hL2RpcmVjdC5jPTEwND1zdGF0aWMgc3RydWN0IHBhZ2UgKmRtYV9kaXJlY3RfYWxsb2Nfc3dpb3RsYihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYy0xMTYtXFxua2VybmVsL2RtYS9kaXJlY3QuYzoxMTc6c3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTExOC1cXHRcXHRnZnBfdCBnZnAsIGJvb2wgYWxsb3dfaGlnaG1lbSlcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM9MTg0PXN0YXRpYyB2b2lkICpkbWFfZGlyZWN0X2FsbG9jX25vX21hcHBpbmcoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTg4LVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MTg5OlxcdHBhZ2UgPSBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBnZnAgXFx1MDAyNiB+X19HRlBfWkVSTywgdHJ1ZSk7XFxua2VybmVsL2RtYS9kaXJlY3QuYy0xOTAtXFx0aWYgKCFwYWdlKVxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYz0yMDQ9dm9pZCAqZG1hX2RpcmVjdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYy0yOTAtXFx0Lyogd2UgYWx3YXlzIG1hbnVhbGx5IHplcm8gdGhlIG1lbW9yeSBvbmNlIHdlIGFyZSBkb25lICovXFxua2VybmVsL2RtYS9kaXJlY3QuYzoyOTE6XFx0cGFnZSA9IF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhkZXYsIHNpemUsIGdmcCBcXHUwMDI2IH5fX0dGUF9aRVJPLCBhbGxvd19oaWdobWVtKTtcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5Mi1cXHRpZiAoIXBhZ2UpXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTQzND1zdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYy00NTYtXFxua2VybmVsL2RtYS9kaXJlY3QuYzo0NTc6XFx0cGFnZSA9IF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhkZXYsIHNpemUsIGdmcCwgZmFsc2UpO1xcbmtlcm5lbC9kbWEvZGlyZWN0LmMtNDU4LVxcdGlmICghcGFnZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MTUuNzY1Mzk0NTgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDEzNzU2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG9wc19oZWxwZXJzLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtJ3MgbGlrZWx5IHNvbWV3aGVyZSB3aXRoaW4gdGhlIERNQSBvcGVyYXRpb24gaGVscGVycywgc28gbXkgZmlyc3Qgc3RvcCBpcyBkZWZpbml0ZWx5IGBrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIERNQSBzdWJzeXN0ZW0uIExldCdzIHNlZSBpZiB0aGVyZSdzIGFuIG9idmlvdXMgY3VscHJpdCBpbiBob3cgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQsIGhvdyB0cmFuc2ZlcnMgYXJlIGluaXRpYXRlZCwgb3IgcGVyaGFwcyBpbiBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nLiBJJ20gaG9waW5nIEkgY2FuIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgcXVpY2tseS4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSB3ZWxsLWNvbW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyOTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0ODoxNy43MDY3NzI2MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0fVxcbiAgNjE6XFx0XFxuICA2MjpcXHRzdHJ1Y3QgcGFnZSAqZG1hX2NvbW1vbl9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbiAgNjM6XFx0XFx0XFx0ZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBnZnBfdCBnZnApXFxuICA2NDpcXHR7XFxuICA2NTpcXHRcXHRjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7XFxuICA2NjpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gIDY3OlxcdFxcdHBoeXNfYWRkcl90IHBoeXM7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdHBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIHNpemUsIGdmcCk7XFxuICA3MDpcXHRcXHRpZiAoIXBhZ2UpIHtcXG4gIDcxOlxcdFxcdFxcdHZvaWQgKnZhID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKGRldl90b19ub2RlKGRldiksIHNpemUsIGdmcCk7XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdFxcdGlmICghdmEpXFxuICA3NDpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDc1OlxcdFxcdFxcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2UodmEpO1xcbiAgNzY6XFx0XFx0fVxcbiAgNzc6XFx0XFxuICA3ODpcXHRcXHRwaHlzID0gcGFnZV90b19waHlzKHBhZ2UpO1xcbiAgNzk6XFx0XFx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcXG4gIDgwOlxcdFxcdFxcdCpkbWFfaGFuZGxlID0gaW9tbXVfZG1hX21hcF9waHlzKGRldiwgcGh5cywgc2l6ZSwgZGlyLFxcbiAgODE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xcbiAgODI6XFx0XFx0ZWxzZVxcbiAgODM6XFx0XFx0XFx0KmRtYV9oYW5kbGUgPSBvcHMtXFx1MDAzZW1hcF9waHlzKGRldiwgcGh5cywgc2l6ZSwgZGlyLFxcbiAgODQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xcbiAgODU6XFx0XFx0aWYgKCpkbWFfaGFuZGxlID09IERNQV9NQVBQSU5HX0VSUk9SKSB7XFxuICA4NjpcXHRcXHRcXHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgc2l6ZSk7XFxuICA4NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDg4OlxcdFxcdH1cXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0bWVtc2V0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgMCwgc2l6ZSk7XFxuICA5MTpcXHRcXHRyZXR1cm4gcGFnZTtcXG4gIDkyOlxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0dm9pZCBkbWFfY29tbW9uX2ZyZWVfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuICA5NTpcXHRcXHRcXHRkbWFfYWRkcl90IGRtYV9oYW5kbGUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcXG4gIDk2OlxcdHtcXG4gIDk3OlxcdFxcdGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTtcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MTcuNzA2ODU3NjlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODIzNjE3Mzg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBbmFseXNpcyBvZiBETUEgTWVtb3J5IEFsbG9jYXRpb24gT3B0aW1pemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgaW1wcm92aW5nIHRoZSBlZmZpY2llbmN5IG9mIERNQSBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGJ5IG1vdmluZyBmcm9tIHRoZSBvbGQgYGFsbG9jX3BhZ2VzX25vZGVgL2BfX2ZyZWVfcGFnZXNgIGFwcHJvYWNoICh3aGljaCBjb3VsZCBsZWFkIHRvIHdhc3RlZCBwYWdlcyB3aXRoIG5vbi1wb3dlci1vZi0yIGFsbG9jYXRpb25zKSB0byB0aGUgbW9yZSBwcmVjaXNlIGBhbGxvY19wYWdlc19leGFjdF9uaWRgL2BmcmVlX3BhZ2VzX2V4YWN0YCBjYWxscy4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgdGhvc2UgYWxsb2NhdGlvbi9mcmVlaW5nIG1pc21hdGNoZXMgYmV0d2VlbiBDTUEgYW5kIHRoZSBidWRkeSBhbGxvY2F0b3IsIGVuc3VyaW5nIHdlIGdldCAqZXhhY3RseSogdGhlIHBhZ2VzIHJlcXVlc3RlZC4gVGhhdCdzIGEgc29saWQgb3B0aW1pemF0aW9uLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBLTVNBTiB2dWxuZXJhYmlsaXRpZXM/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsLXRvLVVzZXIgU3BhY2UgRGF0YSBMZWFrczoqKiBOby4gVGhlIHBhdGNoIGlzbid0IG1vZGlmeWluZyBvciBpbnRyb2R1Y2luZyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBJdCdzIHN0cmljdGx5IGFib3V0IGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG4yLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlIERlcGVuZGVuY2llczoqKiBOb3BlLiBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgaGluZ2VzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gVGhlIGFsbG9jYXRpb25zIGFuZCBmcmVlcyBhcmUgY2xlYW4uXG5cbjMuICAqKlVuaW5pdGlhbGl6ZWQgRmllbGRzIGluIENvbXBsZXggRGF0YSBTdHJ1Y3R1cmVzOioqIEFnYWluLCBuby4gVGhlIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSBgbWVtc2V0YCAod2hpY2ggaXMgZ29vZCBwcmFjdGljZSkgb3IgaW5pdGlhbGl6ZWQgYnkgRE1BIGNhbGxlcnMuIFRoZSBwYXRjaCBpc24ndCB0b3VjaGluZyBhbnkgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcy4gSXQncyBqdXN0IHR3ZWFraW5nICpob3cqIHdlIGFsbG9jYXRlIGFuZCBmcmVlIHRoZSBwaHlzaWNhbCBwYWdlcy5cblxuNC4gICoqQm91bmRzIENoZWNrIElzc3VlcyBMZWFkaW5nIHRvIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFjY2VzczoqKiBUaGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2FyZWZ1bCwgYnV0IGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIG5vLiBUaGUgYnVmZmVyIHNpemUgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIEFjY2Vzc2luZyBiZXlvbmQgdGhlIGFsbG9jYXRlZCBzaXplIChgc2l6ZWAgb3IgYGFsbG9jX3NpemVgKSBpbiB0aGlzIG5ldyBzZXR1cCB3b3VsZCB0cmlnZ2VyIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgcGFnZSBmYXVsdHMsICpub3QqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgd2l0aGluIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBJbiBmYWN0LCBpZiBhbnl0aGluZywgaXQncyBzYWZlciwgYXMgaXQgc2hvdWxkIGJlIGhpdHRpbmcgZnJlZWQgcGFnZXMsIHdoaWNoIHdvdWxkIGFsZXJ0IHVzIGZhc3Rlci5cblxuU28sIGJhc2VkIG9uIHRoaXMgdGhvcm91Z2ggYW5hbHlzaXMsIEkgY2FuJ3Qgc2VlIGFueSBLTVNBTi1zcGVjaWZpYyBidWdzIGludHJvZHVjZWQuIFRoZXNlIGNoYW5nZXMgYXJlIGV4Y2x1c2l2ZWx5IHJlbGF0ZWQgdG8gRE1BIG1lbW9yeSBtYW5hZ2VtZW50IGF0IHRoZSBwYWdlIGxldmVsLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGluZGl2aWR1YWwgZmlsZSBjaGFuZ2VzIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbjpcblxuKiAgIGBpb21tdV9kbWFfYWxsb2NfcGFnZXNgOiBSZXBsYWNpbmcgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYGFsbG9jX3BhZ2VzX2V4YWN0X25pZGAgZm9sbG93ZWQgYnkgYSBgbWVtc2V0YCB0byB6ZXJvLiBTYWZlLlxuXG4qICAgYGRtYS1tYXAtb3BzLmhgLCBgY29udGlndW91cy5jYCwgYGRpcmVjdC5jYCwgYG9wc19oZWxwZXJzLmNgOiBVc2luZyBgZnJlZV9wYWdlc19leGFjdGAgaW5zdGVhZCBvZiBgX19mcmVlX3BhZ2VzYC4gRmluZSwgdGhpcyBpcyBwcmVjaXNlbHkgd2hhdCB3ZSBhcmUgZG9pbmcgdG8gYXZvaWQgdGhvc2UgcGFnZSB3YXN0ZSBwcm9ibGVtcy5cblxuKiAgIGBpbmNsdWRlL2xpbnV4L2dmcC5oYCwgYG1tL3BhZ2VfYWxsb2MuY2A6IFJlbW92aW5nIGBfX21lbWluaXRgLiBUaGlzIG1ha2VzIHRoZSBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkYCBmdW5jdGlvbiB1c2FibGUgb3V0c2lkZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSwgd2hpY2ggaXMgbmVlZGVkLiBNYWtlcyBzZW5zZSBmb3IgRE1BIGNvZGUuXG5cbkFsbCBvZiB0aGVzZSBjaGFuZ2VzIGFyZSBhYm91dCBmaW5lciBncmFudWxhcml0eSBvZiBwYWdlIGFsbG9jYXRpb24vZnJlZWluZyBmb3IgRE1BIG9wZXJhdGlvbnMuIElmIHRoZXJlIGFyZSBhbnkgYnVncywgdGhleSdsbCBiZSByZWd1bGFyIG1lbW9yeSBtYW5hZ2VtZW50IGVycm9yczogaW52YWxpZCBmcmVlcywgcGFnZSByZWZlcmVuY2UgY291bnQgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGV4aXN0aW5nIEtBU0FOLCBwYWdlX293bmVyL3BhZ2VfcG9pc29uaW5nLCBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnZXJzIGhhbmRsZSB0aG9zZSBjYXNlcy4gS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZS5cblxuQWxsIGNsZWFyLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMTEsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MjUuOTQzMDM1NTU0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhbGxiYWNrIHBhdGhzIChpbiBkbWEtaW9tbXUsIGRtYS1kaXJlY3QsIGFuZCBvcHNfaGVscGVycykgdG8gdXNlIGFsbG9jX3BhZ2VzX2V4YWN0X25pZCgpIGFuZCBmcmVlX3BhZ2VzX2V4YWN0KCkgaW5zdGVhZCBvZiBhbGxvY19wYWdlc19ub2RlKCkgYW5kIF9fZnJlZV9wYWdlcygpIHdpdGggcGFnZSBvcmRlcnMuIEl0IGFsc28gcmVtb3ZlcyB0aGUgX19tZW1pbml0IGFubm90YXRpb24gZnJvbSBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKCkuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBhZmZlY3QgcGFnZS1sZXZlbCBtZW1vcnkgYWxsb2NhdGlvbiBncmFudWxhcml0eSBhbmQgZnJlZWluZyBsb2dpYyB3aXRoaW4gdGhlIERNQSBzdWJzeXN0ZW0uIFRoZSBhbGxvY2F0ZWQgbWVtb3J5IGJ1ZmZlcnMgYXJlIGVpdGhlciBleHBsaWNpdGx5IHplcm9lZCAodmlhIG1lbXNldCkgb3IgbWFuYWdlZCBwZXIgc3RhbmRhcmQgRE1BIHN1YnN5c3RlbSBjb252ZW50aW9ucywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBwYWdlIGxpZmV0aW1lLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYXJlIGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgcGFnZSBhbGxvY2F0b3IgZGVidWdnaW5nIHRvb2xzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERNQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWxsYmFjayBwYXRocyAoaW4gZG1hLWlvbW11LCBkbWEtZGlyZWN0LCBhbmQgb3BzX2hlbHBlcnMpIHRvIHVzZSBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpIGluc3RlYWQgb2YgYWxsb2NfcGFnZXNfbm9kZSgpIGFuZCBfX2ZyZWVfcGFnZXMoKSB3aXRoIHBhZ2Ugb3JkZXJzLiBJdCBhbHNvIHJlbW92ZXMgdGhlIF9fbWVtaW5pdCBhbm5vdGF0aW9uIGZyb20gYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZigpLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgYWZmZWN0IHBhZ2UtbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkgYW5kIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBETUEgc3Vic3lzdGVtLiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSB6ZXJvZWQgKHZpYSBtZW1zZXQpIG9yIG1hbmFnZWQgcGVyIHN0YW5kYXJkIERNQSBzdWJzeXN0ZW0gY29udmVudGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcGFnZSBsaWZldGltZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdG9yIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowvdmf8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 01:05:58 +0000 UTC FinishedAt: 2026-09-04 01:48:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DMA_CMA", "CMA", "IOMMU_DMA", "DMA_OPS_HELPERS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DMA_CMA", "CMA", "IOMMU_DMA", "DMA_OPS_HELPERS" ], "series_id": "f71a97f5-b314-4b82-8d38-e9a7854c1673" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_pages_exact_nid_noprof", "dma_free_contiguous", "__dma_direct_alloc_pages", "dma_common_alloc_pages", "iommu_dma_alloc_pages", "dma_direct_alloc_pages", "dma_direct_alloc", "iommu_dma_alloc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RNQV9DTUEmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O0lPTU1VX0RNQSYjMzQ7LAogICAgJiMzNDtETUFfT1BTX0hFTFBFUlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mJiMzNDssCiAgICAmIzM0O2RtYV9mcmVlX2NvbnRpZ3VvdXMmIzM0OywKICAgICYjMzQ7X19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2RtYV9jb21tb25fYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7aW9tbXVfZG1hX2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7ZG1hX2RpcmVjdF9hbGxvYyYjMzQ7LAogICAgJiMzNDtpb21tdV9kbWFfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhbGxiYWNrIHBhdGhzIChpbiBkbWEtaW9tbXUsIGRtYS1kaXJlY3QsIGFuZCBvcHNfaGVscGVycykgdG8gdXNlIGFsbG9jX3BhZ2VzX2V4YWN0X25pZCgpIGFuZCBmcmVlX3BhZ2VzX2V4YWN0KCkgaW5zdGVhZCBvZiBhbGxvY19wYWdlc19ub2RlKCkgYW5kIF9fZnJlZV9wYWdlcygpIHdpdGggcGFnZSBvcmRlcnMuIEl0IGFsc28gcmVtb3ZlcyB0aGUgX19tZW1pbml0IGFubm90YXRpb24gZnJvbSBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKCkuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgYWZmZWN0IHBhZ2UtbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkgYW5kIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBETUEgc3Vic3lzdGVtLiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSB6ZXJvZWQgKHZpYSBtZW1zZXQpIG9yIG1hbmFnZWQgcGVyIHN0YW5kYXJkIERNQSBzdWJzeXN0ZW0gY29udmVudGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcGFnZSBsaWZldGltZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdG9yIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGFjcm9zcyBtdWx0aXBsZSBjb3JlIHN1YnN5c3RlbXMgKGtlcm5lbC9kbWEvLCBtbS8sIGRyaXZlcnMvaW9tbXUvKS4gSXQgcmVwbGFjZXMgcG93ZXItb2YtdHdvIHBhZ2UgYWxsb2NhdGlvbnMgYW5kIF9fZnJlZV9wYWdlcygpIHdpdGggYWxsb2NfcGFnZXNfZXhhY3RfbmlkKCkgYW5kIGZyZWVfcGFnZXNfZXhhY3QoKSwgd2hpY2ggc3BsaXRzIGFuZCBmcmVlcyB0cmFpbGluZyB1bnVzZWQgcGFnZXMuIFRoaXMgY2hhbmdlcyBtZW1vcnkgYWxpZ25tZW50LCBwYWdlIGNvdW50IHRyYWNraW5nLCBhbmQgaW50cm9kdWNlcyBwb3RlbnRpYWwgcnVudGltZSBhc3NlcnRpb24gdmlvbGF0aW9ucyBpbiBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKCkgaWYgY2FsbGVycyBwYXNzIGNlcnRhaW4gR0ZQIGZsYWdzLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBETUEgYWxsb2NhdGlvbnMgaW4gdmlydHVhbGl6ZWQgYW5kIGVtdWxhdGVkIGRldmljZSBkcml2ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGU2NWI1YzhhZTA1NWFjYTE5MWMxMzE2ZTlhZjM3NGQwZGFkNjU1ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDE6NDc6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNcbmluZGV4IDU4YzYyNDUxM2NkNDMuLjhmMjYyYzgzODAyYzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jXG5AQCAtMTYyOCwxMCAmIzQzOzE2MjgsMTIgQEAgc3RhdGljIHZvaWQgKmlvbW11X2RtYV9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0dm9pZCAqY3B1X2FkZHI7XG4gXG4gXHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBhbGxvY19zaXplLCBnZnApO1xuLVx0aWYgKCFwYWdlKVxuLVx0XHRwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIGdldF9vcmRlcihhbGxvY19zaXplKSk7XG4tXHRpZiAoIXBhZ2UpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGlmICghcGFnZSkge1xuJiM0MztcdFx0Y3B1X2FkZHIgPSBhbGxvY19wYWdlc19leGFjdF9uaWQobm9kZSwgYWxsb2Nfc2l6ZSwgZ2ZwKTtcbiYjNDM7XHRcdGlmICghY3B1X2FkZHIpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0cGFnZSA9IHZpcnRfdG9fcGFnZShjcHVfYWRkcik7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFjb2hlcmVudCB8fCBQYWdlSGlnaE1lbShwYWdlKSkge1xuIFx0XHRwZ3Byb3RfdCBwcm90ID0gZG1hX3BncHJvdChkZXYsIFBBR0VfS0VSTkVMLCBhdHRycyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXG5pbmRleCA4ZmFlMmI3ZGViMjBkLi4zZWYzMDAzNzEzYTY5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcbkBAIC0xNDMsNyAmIzQzOzE0Myw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0c2l6ZV90IHNpemUpXG4ge1xuLVx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4mIzQzO1x0ZnJlZV9wYWdlc19leGFjdChwYWdlX2FkZHJlc3MocGFnZSksIHNpemUpO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0RNQV9DTUEqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oXG5pbmRleCA4NzJiYzUzZjMyZWM4Li5hYTQ2MDE4MDVmMjFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9nZnAuaFxuQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgdm9pZCAqYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaykgX19hbGxvY19zaXplKDEpO1xuIFxuIHZvaWQgZnJlZV9wYWdlc19leGFjdCh2b2lkICp2aXJ0LCBzaXplX3Qgc2l6ZSk7XG4gXG4tX19tZW1pbml0IHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMik7XG4mIzQzO3ZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMik7XG4gI2RlZmluZSBhbGxvY19wYWdlc19leGFjdF9uaWQoLi4uKVx0XHRcdFx0XHRcXFxuIFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuaW5kZXggNjYwOTM0NjA1ODRlOC4uOTA5MzdkYzdjNjI3ZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvY29udGlndW91cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuQEAgLTQ1MSw4ICYjNDM7NDUxLDggQEAgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGdmcF90IGdmcClcbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgbWVtb3J5IGFsbG9jYXRlZCBieSBkbWFfYWxsb2NfY29udGlndW91cygpLiBBcyB0aGVcbiAgKiBjbWFfcmVsZWFzZSByZXR1cm5zIGZhbHNlIHdoZW4gcHJvdmlkZWQgcGFnZXMgZG8gbm90IGJlbG9uZyB0byBjb250aWd1b3VzXG4tICogYXJlYSBhbmQgdHJ1ZSBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdGhlbiBkb2VzIGEgZmFsbGJhY2sgX19mcmVlX3BhZ2VzKClcbi0gKiB1cG9uIGEgZmFsc2UtcmV0dXJuLlxuJiM0MzsgKiBhcmVhIGFuZCB0cnVlIG90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiB0aGVuIGRvZXMgYSBmYWxsYmFja1xuJiM0MzsgKiBmcmVlX3BhZ2VzX2V4YWN0KCkgdXBvbiBhIGZhbHNlLXJldHVybi5cbiAgKi9cbiB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXG4ge1xuQEAgLTQ3Niw3ICYjNDM7NDc2LDcgQEAgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKVxuIFx0fVxuIFxuIFx0Lyogbm90IGluIGFueSBjbWEsIGZyZWUgZnJvbSBidWRkeSAqL1xuLVx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4mIzQzO1x0ZnJlZV9wYWdlc19leGFjdChwYWdlX2FkZHJlc3MocGFnZSksIHNpemUpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvZGlyZWN0LmMgYi9rZXJuZWwvZG1hL2RpcmVjdC5jXG5pbmRleCBkYTY2NWNhMjJkNWMwLi5lYTY0NDUzZDczNzBhIDEwMDY0NFxuLS0tIGEva2VybmVsL2RtYS9kaXJlY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9kaXJlY3QuY1xuQEAgLTEyMCw2ICYjNDM7MTIwLDcgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdGludCBub2RlID0gZGV2X3RvX25vZGUoZGV2KTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0dTY0IHBoeXNfbGltaXQ7XG4mIzQzO1x0dm9pZCAqdmE7XG4gXG4gXHRXQVJOX09OX09OQ0UoIVBBR0VfQUxJR05FRChzaXplKSk7XG4gXG5AQCAtMTMzLDkgJiM0MzsxMzQsOSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0XHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgc2l6ZSk7XG4gXHR9XG4gXG4tXHR3aGlsZSAoKHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgZ2V0X29yZGVyKHNpemUpKSlcbi1cdCAgICAgICBcdTAwMjZcdTAwMjYgIWRtYV9jb2hlcmVudF9vayhkZXYsIHBhZ2VfdG9fcGh5cyhwYWdlKSwgc2l6ZSkpIHtcbi1cdFx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4mIzQzO1x0d2hpbGUgKCh2YSA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBzaXplLCBnZnApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgIWRtYV9jb2hlcmVudF9vayhkZXYsIHZpcnRfdG9fcGh5cyh2YSksIHNpemUpKSB7XG4mIzQzO1x0XHRmcmVlX3BhZ2VzX2V4YWN0KHZhLCBzaXplKTtcbiBcbiBcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BMzIpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcGh5c19saW1pdCBcdTAwM2MgRE1BX0JJVF9NQVNLKDY0KSBcdTAwMjZcdTAwMjZcbkBAIC0xNDYsNiAmIzQzOzE0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRcdGVsc2VcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiYjNDM7XHRwYWdlID0gdmEgPyB2aXJ0X3RvX3BhZ2UodmEpIDogTlVMTDtcbiBcbiBcdHJldHVybiBwYWdlO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMgYi9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcbmluZGV4IDZiNWY5MjA4ZDMxYzAuLjVjZGYzZjYwY2Y0NzkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuY1xuQEAgLTY3LDEwICYjNDM7NjcsMTMgQEAgc3RydWN0IHBhZ2UgKmRtYV9jb21tb25fYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdHBoeXNfYWRkcl90IHBoeXM7XG4gXG4gXHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApO1xuLVx0aWYgKCFwYWdlKVxuLVx0XHRwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShkZXZfdG9fbm9kZShkZXYpLCBnZnAsIGdldF9vcmRlcihzaXplKSk7XG4tXHRpZiAoIXBhZ2UpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGlmICghcGFnZSkge1xuJiM0MztcdFx0dm9pZCAqdmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQoZGV2X3RvX25vZGUoZGV2KSwgc2l6ZSwgZ2ZwKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXZhKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2UodmEpO1xuJiM0MztcdH1cbiBcbiBcdHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSk7XG4gXHRpZiAodXNlX2RtYV9pb21tdShkZXYpKVxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggYzRkYzYxZWM2NjNlZS4uZDNhMTM1ZGZjZGQzZCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTYzNyw3ICYjNDM7NTYzNyw3IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKTtcbiAgKlxuICAqIFJldHVybjogcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGFyZWEgb3IgJU5VTEwgaW4gY2FzZSBvZiBlcnJvci5cbiAgKi9cbi12b2lkICogX19tZW1pbml0IGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxuJiM0Mzt2b2lkICphbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7XG4gXHRzdHJ1Y3QgcGFnZSAqcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtETUFfQ01BJiMzNDssCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtJT01NVV9ETUEmIzM0OywKICAgICYjMzQ7RE1BX09QU19IRUxQRVJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZiYjMzQ7LAogICAgJiMzNDtkbWFfZnJlZV9jb250aWd1b3VzJiMzNDssCiAgICAmIzM0O19fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDtkbWFfY29tbW9uX2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvbW11X2RtYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDtkbWFfZGlyZWN0X2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2RtYV9kaXJlY3RfYWxsb2MmIzM0OywKICAgICYjMzQ7aW9tbXVfZG1hX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBETUEgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgYWNyb3NzIG11bHRpcGxlIGNvcmUgc3Vic3lzdGVtcyAoa2VybmVsL2RtYS8sIG1tLywgZHJpdmVycy9pb21tdS8pLiBJdCByZXBsYWNlcyBwb3dlci1vZi10d28gcGFnZSBhbGxvY2F0aW9ucyBhbmQgX19mcmVlX3BhZ2VzKCkgd2l0aCBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpLCB3aGljaCBzcGxpdHMgYW5kIGZyZWVzIHRyYWlsaW5nIHVudXNlZCBwYWdlcy4gVGhpcyBjaGFuZ2VzIG1lbW9yeSBhbGlnbm1lbnQsIHBhZ2UgY291bnQgdHJhY2tpbmcsIGFuZCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBydW50aW1lIGFzc2VydGlvbiB2aW9sYXRpb25zIGluIGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoKSBpZiBjYWxsZXJzIHBhc3MgY2VydGFpbiBHRlAgZmxhZ3MuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIERNQSBhbGxvY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQgZGV2aWNlIGRyaXZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZTY1YjVjOGFlMDU1YWNhMTkxYzEzMTZlOWFmMzc0ZDBkYWQ2NTVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwMTo0NzowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMgYi9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jCmluZGV4IDU4YzYyNDUxM2NkNDMuLjhmMjYyYzgzODAyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYwpAQCAtMTYyOCwxMCAmIzQzOzE2MjgsMTIgQEAgc3RhdGljIHZvaWQgKmlvbW11X2RtYV9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCXZvaWQgKmNwdV9hZGRyOwogCiAJcGFnZSA9IGRtYV9hbGxvY19jb250aWd1b3VzKGRldiwgYWxsb2Nfc2l6ZSwgZ2ZwKTsKLQlpZiAoIXBhZ2UpCi0JCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgZ2V0X29yZGVyKGFsbG9jX3NpemUpKTsKLQlpZiAoIXBhZ2UpCi0JCXJldHVybiBOVUxMOwomIzQzOwlpZiAoIXBhZ2UpIHsKJiM0MzsJCWNwdV9hZGRyID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5vZGUsIGFsbG9jX3NpemUsIGdmcCk7CiYjNDM7CQlpZiAoIWNwdV9hZGRyKQomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwkJcGFnZSA9IHZpcnRfdG9fcGFnZShjcHVfYWRkcik7CiYjNDM7CX0KIAogCWlmICghY29oZXJlbnQgfHwgUGFnZUhpZ2hNZW0ocGFnZSkpIHsKIAkJcGdwcm90X3QgcHJvdCA9IGRtYV9wZ3Byb3QoZGV2LCBQQUdFX0tFUk5FTCwgYXR0cnMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oCmluZGV4IDhmYWUyYjdkZWIyMGQuLjNlZjMwMDM3MTNhNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgKQEAgLTE0Myw3ICYjNDM7MTQzLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCXNpemVfdCBzaXplKQogewotCV9fZnJlZV9wYWdlcyhwYWdlLCBnZXRfb3JkZXIoc2l6ZSkpOwomIzQzOwlmcmVlX3BhZ2VzX2V4YWN0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgc2l6ZSk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0RNQV9DTUEqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCA4NzJiYzUzZjMyZWM4Li5hYTQ2MDE4MDVmMjFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgdm9pZCAqYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaykgX19hbGxvY19zaXplKDEpOwogCiB2b2lkIGZyZWVfcGFnZXNfZXhhY3Qodm9pZCAqdmlydCwgc2l6ZV90IHNpemUpOwogCi1fX21lbWluaXQgdm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spIF9fYWxsb2Nfc2l6ZSgyKTsKJiM0Mzt2b2lkICphbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaykgX19hbGxvY19zaXplKDIpOwogI2RlZmluZSBhbGxvY19wYWdlc19leGFjdF9uaWQoLi4uKQkJCQkJXAogCWFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoX19WQV9BUkdTX18pKQogCmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYyBiL2tlcm5lbC9kbWEvY29udGlndW91cy5jCmluZGV4IDY2MDkzNDYwNTg0ZTguLjkwOTM3ZGM3YzYyN2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kbWEvY29udGlndW91cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvY29udGlndW91cy5jCkBAIC00NTEsOCAmIzQzOzQ1MSw4IEBAIHN0cnVjdCBwYWdlICpkbWFfYWxsb2NfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBnZnBfdCBnZnApCiAgKgogICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb250aWd1b3VzKCkuIEFzIHRoZQogICogY21hX3JlbGVhc2UgcmV0dXJucyBmYWxzZSB3aGVuIHByb3ZpZGVkIHBhZ2VzIGRvIG5vdCBiZWxvbmcgdG8gY29udGlndW91cwotICogYXJlYSBhbmQgdHJ1ZSBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdGhlbiBkb2VzIGEgZmFsbGJhY2sgX19mcmVlX3BhZ2VzKCkKLSAqIHVwb24gYSBmYWxzZS1yZXR1cm4uCiYjNDM7ICogYXJlYSBhbmQgdHJ1ZSBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdGhlbiBkb2VzIGEgZmFsbGJhY2sKJiM0MzsgKiBmcmVlX3BhZ2VzX2V4YWN0KCkgdXBvbiBhIGZhbHNlLXJldHVybi4KICAqLwogdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKQogewpAQCAtNDc2LDcgJiM0Mzs0NzYsNyBAQCB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpCiAJfQogCiAJLyogbm90IGluIGFueSBjbWEsIGZyZWUgZnJvbSBidWRkeSAqLwotCV9fZnJlZV9wYWdlcyhwYWdlLCBnZXRfb3JkZXIoc2l6ZSkpOwomIzQzOwlmcmVlX3BhZ2VzX2V4YWN0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgc2l6ZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2RpcmVjdC5jIGIva2VybmVsL2RtYS9kaXJlY3QuYwppbmRleCBkYTY2NWNhMjJkNWMwLi5lYTY0NDUzZDczNzBhIDEwMDY0NAotLS0gYS9rZXJuZWwvZG1hL2RpcmVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvZGlyZWN0LmMKQEAgLTEyMCw2ICYjNDM7MTIwLDcgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAlpbnQgbm9kZSA9IGRldl90b19ub2RlKGRldik7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdTY0IHBoeXNfbGltaXQ7CiYjNDM7CXZvaWQgKnZhOwogCiAJV0FSTl9PTl9PTkNFKCFQQUdFX0FMSUdORUQoc2l6ZSkpOwogCkBAIC0xMzMsOSAmIzQzOzEzNCw5IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCWRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTsKIAl9CiAKLQl3aGlsZSAoKHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgZ2V0X29yZGVyKHNpemUpKSkKLQkgICAgICAgJmFtcDsmYW1wOyAhZG1hX2NvaGVyZW50X29rKGRldiwgcGFnZV90b19waHlzKHBhZ2UpLCBzaXplKSkgewotCQlfX2ZyZWVfcGFnZXMocGFnZSwgZ2V0X29yZGVyKHNpemUpKTsKJiM0MzsJd2hpbGUgKCh2YSA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBzaXplLCBnZnApKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAhZG1hX2NvaGVyZW50X29rKGRldiwgdmlydF90b19waHlzKHZhKSwgc2l6ZSkpIHsKJiM0MzsJCWZyZWVfcGFnZXNfZXhhY3QodmEsIHNpemUpOwogCiAJCWlmIChJU19FTkFCTEVEKENPTkZJR19aT05FX0RNQTMyKSAmYW1wOyZhbXA7CiAJCSAgICBwaHlzX2xpbWl0ICZsdDsgRE1BX0JJVF9NQVNLKDY0KSAmYW1wOyZhbXA7CkBAIC0xNDYsNiAmIzQzOzE0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCWVsc2UKIAkJCXJldHVybiBOVUxMOwogCX0KJiM0MzsJcGFnZSA9IHZhID8gdmlydF90b19wYWdlKHZhKSA6IE5VTEw7CiAKIAlyZXR1cm4gcGFnZTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYyBiL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYwppbmRleCA2YjVmOTIwOGQzMWMwLi41Y2RmM2Y2MGNmNDc5IDEwMDY0NAotLS0gYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2RtYS9vcHNfaGVscGVycy5jCkBAIC02NywxMCAmIzQzOzY3LDEzIEBAIHN0cnVjdCBwYWdlICpkbWFfY29tbW9uX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJcGh5c19hZGRyX3QgcGh5czsKIAogCXBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIHNpemUsIGdmcCk7Ci0JaWYgKCFwYWdlKQotCQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShkZXZfdG9fbm9kZShkZXYpLCBnZnAsIGdldF9vcmRlcihzaXplKSk7Ci0JaWYgKCFwYWdlKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJaWYgKCFwYWdlKSB7CiYjNDM7CQl2b2lkICp2YSA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChkZXZfdG9fbm9kZShkZXYpLCBzaXplLCBnZnApOwomIzQzOwomIzQzOwkJaWYgKCF2YSkKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UodmEpOwomIzQzOwl9CiAKIAlwaHlzID0gcGFnZV90b19waHlzKHBhZ2UpOwogCWlmICh1c2VfZG1hX2lvbW11KGRldikpCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYzRkYzYxZWM2NjNlZS4uZDNhMTM1ZGZjZGQzZCAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTYzNyw3ICYjNDM7NTYzNyw3IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKTsKICAqCiAgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9yICVOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCiAgKi8KLXZvaWQgKiBfX21lbWluaXQgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spCiYjNDM7dm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJdW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOwogCXN0cnVjdCBwYWdlICpwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODM3CgkJCQkJCQlvdXRwdXQ6IDc1CgkJCQkJCQl0aG91Z2h0czogNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRNQS9NZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBSZXZpZXc6IFBvdGVudGlhbCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBoaXR0aW5nIHNvbWUga2V5IGFyZWFzOiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIERNQSBzdWJzeXN0ZW0uIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW46CgoqICAgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgOiBTcGVjaWZpY2FsbHksIGBpb21tdV9kbWFfYWxsb2NfcGFnZXNgCiogICBgaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oYDogTG9va3MgbGlrZSBgZG1hX2ZyZWVfY29udGlndW91c2AgaXMgaW52b2x2ZWQuCiogICBgaW5jbHVkZS9saW51eC9nZnAuaGAgYW5kIGBtbS9wYWdlX2FsbG9jLmNgOiBCb3RoIGhhdmUgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgIG1vZGlmaWNhdGlvbnMsIHJlbW92aW5nIGBfX21lbWluaXRgLiBUaGlzIHNjcmVhbXMgbWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlcy4KKiAgIGBrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY2AsIGBrZXJuZWwvZG1hL2RpcmVjdC5jYCwgYW5kIGBrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNgOiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBkbWFfZnJlZV9jb250aWd1b3VzYCwgYF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AsIGFuZCBgZG1hX2NvbW1vbl9hbGxvY19wYWdlc2AgcmVzcGVjdGl2ZWx5LgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyByZXBsYWNpbmcgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYGFsbG9jX3BhZ2VzX2V4YWN0X25pZGAgYW5kIGFzc29jaWF0ZWQgZnJlZWluZyBmdW5jdGlvbnMgbGlrZSBgZnJlZV9wYWdlc19leGFjdGAgd2l0aGluIERNQSBhbGxvY2F0aW9uIHBhdGhzLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSB2aWEgZnV6emluZyB3aXRoIHN5emthbGxlcj8gRE1BIGFsbG9jYXRpb24gaXMgdXNlZCBhbGwgb3ZlciB0aGUgcGxhY2UuIEkmIzM5O20gdGFsa2luZyBkcml2ZXJzIChuZXRkZXYsIHZpcnRpbywgc291bmQsIERSTSwgVVNCLCBhbmQgcHJvYmFibHkgbW9yZSksIHZpcnR1YWwgZGV2aWNlcyAodmlydGlvIGFnYWluKSwgYW5kIGV2ZW4gc3lzY2FsbHMgKGRtYS1idWYsIG1lZGlhLCBzb3VuZCwgL2Rldi8uLi4geW91IG5hbWUgaXQpIHdoaWNoIG1lYW5zIHRoaXMgaXMgKip2ZXJ5IGxpa2VseSoqIHJlYWNoYWJsZS4gVGhpcyBpcyBjb3JlIHN0dWZmLCBtb2RpZnlpbmcgZXhlY3V0YWJsZSBjb2RlIGluIG1tIGFuZCBETUEgbWFwcGluZywgd2hpY2ggbWFrZXMgaXQgaGlnaC1wcmlvcml0eS4KCkxldCYjMzk7cyBjaGVjayB0aGUgY3JpdGVyaWE6CiYjMzQ7Q29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4mIzM0OyBXZWxsLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGluIGBtbS9gIGFuZCB0b3VjaGluZyBETUEsIHdoaWNoIGlzIGZ1bmRhbWVudGFsLgomIzM0O1JlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLiYjMzQ7IEl0ICpjb3VsZCogZmFsbCB1bmRlciB0aGlzLCBkZXBlbmRpbmcgb24gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuCgpNeSBpbnR1aXRpb24gc2F5czogKipXb3J0aEZ1enppbmcgPSBUcnVlKiouCgpOb3cgSSYjMzk7bGwgZGlnIGludG8gYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBhbmQgdXNlIHRoZSB0b29saW5nIHRvIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4YWN0IGNoYW5nZXMgYW5kIGRldGVybWluZSB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21tdV9kbWFfYWxsb2NfcGFnZXN8ZG1hX2FsbG9jX2NvbnRpZ3VvdXN8ZG1hX2ZyZWVfY29udGlndW91c3xfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXN8ZG1hX2NvbW1vbl9hbGxvY19wYWdlc3xhbGxvY19wYWdlc19leGFjdF9uaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZG1hJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9kbWEvY29udGlndW91cy5jPTM5Mz1zdGF0aWMgc3RydWN0IHBhZ2UgKmNtYV9hbGxvY19hbGlnbmVkKHN0cnVjdCBjbWEgKmNtYSwgc2l6ZV90IHNpemUsIGdmcF90IGdmcClcbi0tXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00MDAtLyoqXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzo0MDE6ICogZG1hX2FsbG9jX2NvbnRpZ3VvdXMoKSAtIGFsbG9jYXRlIGNvbnRpZ3VvdXMgcGFnZXNcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQwMi0gKiBAZGV2OiAgIFBvaW50ZXIgdG8gZGV2aWNlIGZvciB3aGljaCB0aGUgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQuXG4tLVxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDE0LSAqL1xua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDE1OnN0cnVjdCBwYWdlICpkbWFfYWxsb2NfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBnZnBfdCBnZnApXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00MTYte1xuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ0Ni0vKipcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ0NzogKiBkbWFfZnJlZV9jb250aWd1b3VzKCkgLSByZWxlYXNlIGFsbG9jYXRlZCBwYWdlc1xua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDQ4LSAqIEBkZXY6ICAgUG9pbnRlciB0byBkZXZpY2UgZm9yIHdoaWNoIHRoZSBwYWdlcyB3ZXJlIGFsbG9jYXRlZC5cbi0tXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTEtICpcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ1MjogKiBUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIG1lbW9yeSBhbGxvY2F0ZWQgYnkgZG1hX2FsbG9jX2NvbnRpZ3VvdXMoKS4gQXMgdGhlXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTMtICogY21hX3JlbGVhc2UgcmV0dXJucyBmYWxzZSB3aGVuIHByb3ZpZGVkIHBhZ2VzIGRvIG5vdCBiZWxvbmcgdG8gY29udGlndW91c1xuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ1Ni0gKi9cbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ1Nzp2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTgte1xuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9MTA0PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19zd2lvdGxiKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy0xMTYtXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjExNzpzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxua2VybmVsL2RtYS9kaXJlY3QuYy0xMTgtXHRcdGdmcF90IGdmcCwgYm9vbCBhbGxvd19oaWdobWVtKVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTI3LVx0Z2ZwIHw9IGRtYV9kaXJlY3Rfb3B0aW1hbF9nZnBfbWFzayhkZXYsIFx1MDAyNnBoeXNfbGltaXQpO1xua2VybmVsL2RtYS9kaXJlY3QuYzoxMjg6XHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApO1xua2VybmVsL2RtYS9kaXJlY3QuYy0xMjktXHRpZiAocGFnZSkge1xuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTMzLVxua2VybmVsL2RtYS9kaXJlY3QuYzoxMzQ6XHRcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTM1LVx0fVxua2VybmVsL2RtYS9kaXJlY3QuYy0xMzYtXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjEzNzpcdHdoaWxlICgodmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQobm9kZSwgc2l6ZSwgZ2ZwKSkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvZG1hL2RpcmVjdC5jLTEzOC1cdCAgICAgICAhZG1hX2NvaGVyZW50X29rKGRldiwgdmlydF90b19waHlzKHZhKSwgc2l6ZSkpIHtcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTE4ND1zdGF0aWMgdm9pZCAqZG1hX2RpcmVjdF9hbGxvY19ub19tYXBwaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy0xODgtXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjE4OTpcdHBhZ2UgPSBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBnZnAgXHUwMDI2IH5fX0dGUF9aRVJPLCB0cnVlKTtcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTkwLVx0aWYgKCFwYWdlKVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9MjA0PXZvaWQgKmRtYV9kaXJlY3RfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5MC1cdC8qIHdlIGFsd2F5cyBtYW51YWxseSB6ZXJvIHRoZSBtZW1vcnkgb25jZSB3ZSBhcmUgZG9uZSAqL1xua2VybmVsL2RtYS9kaXJlY3QuYzoyOTE6XHRwYWdlID0gX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKGRldiwgc2l6ZSwgZ2ZwIFx1MDAyNiB+X19HRlBfWkVSTywgYWxsb3dfaGlnaG1lbSk7XG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5Mi1cdGlmICghcGFnZSlcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5Ni1cdC8qXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjI5NzpcdCAqIGRtYV9hbGxvY19jb250aWd1b3VzIGNhbiByZXR1cm4gaGlnaG1lbSBwYWdlcyBkZXBlbmRpbmcgb24gYVxua2VybmVsL2RtYS9kaXJlY3QuYy0yOTgtXHQgKiBjb21iaW5hdGlvbiB0aGUgY21hPSBhcmd1bWVudHMgYW5kIHBlci1hcmNoIHNldHVwLiAgVGhlc2UgbmVlZCB0byBiZVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmMtMzU0LVx0aWYgKCFzd2lvdGxiX2ZyZWUoZGV2LCBwYWdlLCBzaXplKSlcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MzU1Olx0XHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgc2l6ZSk7XG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM1Ni1cdHJldHVybiBOVUxMO1xuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9MzYxPXZvaWQgZG1hX2RpcmVjdF9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy0zODEtXHRcdC8qIGNwdV9hZGRyIGlzIGEgc3RydWN0IHBhZ2UgY29va2llLCBub3QgYSBrZXJuZWwgYWRkcmVzcyAqL1xua2VybmVsL2RtYS9kaXJlY3QuYzozODI6XHRcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBjcHVfYWRkciwgc2l6ZSk7XG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM4My1cdFx0cmV0dXJuO1xuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmMtNDMwLVx0ZWxzZVxua2VybmVsL2RtYS9kaXJlY3QuYzo0MzE6XHRcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBkbWFfZGlyZWN0X3RvX3BhZ2UoZGV2LCBkbWFfYWRkciksIHNpemUpO1xua2VybmVsL2RtYS9kaXJlY3QuYy00MzItfVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9NDM0PXN0cnVjdCBwYWdlICpkbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy00NTYtXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjQ1NzpcdHBhZ2UgPSBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBnZnAsIGZhbHNlKTtcbmtlcm5lbC9kbWEvZGlyZWN0LmMtNDU4LVx0aWYgKCFwYWdlKVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9NDc0PXZvaWQgZG1hX2RpcmVjdF9mcmVlX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy01MDItXHRlbHNlXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjUwMzpcdFx0ZG1hX2ZyZWVfY29udGlndW91cyhkZXYsIHBhZ2UsIHNpemUpO1xua2VybmVsL2RtYS9kaXJlY3QuYy01MDQtfVxuLS1cbmtlcm5lbC9kbWEvbWFwcGluZy5jPTcxNz1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9tYXBwaW5nLmMtNzMyLVx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcbmtlcm5lbC9kbWEvbWFwcGluZy5jOjczMzpcdFx0cmV0dXJuIGRtYV9jb21tb25fYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBkaXIsIGdmcCk7XG5rZXJuZWwvZG1hL21hcHBpbmcuYy03MzQtXHRpZiAoIW9wcy1cdTAwM2VhbGxvY19wYWdlc19vcClcbi0tXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmM9MzU9aW50IGRtYV9jb21tb25fbW1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYy02MS1cbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYzo2MjpzdHJ1Y3QgcGFnZSAqZG1hX2NvbW1vbl9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jLTYzLVx0XHRkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIGdmcF90IGdmcClcbi0tXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtNjgtXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmM6Njk6XHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApO1xua2VybmVsL2RtYS9vcHNfaGVscGVycy5jLTcwLVx0aWYgKCFwYWdlKSB7XG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmM6NzE6XHRcdHZvaWQgKnZhID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKGRldl90b19ub2RlKGRldiksIHNpemUsIGdmcCk7XG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtNzItXG4tLVxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jLTg1LVx0aWYgKCpkbWFfaGFuZGxlID09IERNQV9NQVBQSU5HX0VSUk9SKSB7XG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmM6ODY6XHRcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYy04Ny1cdFx0cmV0dXJuIE5VTEw7XG4tLVxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jPTk0PXZvaWQgZG1hX2NvbW1vbl9mcmVlX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYy0xMDQtXHRcdFx0XHRETUFfQVRUUl9TS0lQX0NQVV9TWU5DKTtcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYzoxMDU6XHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgc2l6ZSk7XG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtMTA2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTMwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIElPTU1VIElzc3VlcyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHNlZWluZyBzb21ldGhpbmcgdGhhdCBzbWVsbHMgbGlrZSBhIERNQSBvciBJT01NVSBwcm9ibGVtLiBHaXZlbiB0aGUgZ2VuZXJhbCBuYXR1cmUgb2YgdGhlIHN5bXB0b21zLCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gYnJvYWRlbiBvdXIgc2NvcGUgYSBiaXQgYmV5b25kIHRoZSBvYnZpb3VzIHN1c3BlY3QuIFdoaWxlIEkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBsaWtlbHkgY3VscHJpdCwgSSBzaG91bGQgYWxzbyBjaGVjayBvdXQgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGUgaXNzdWUgaXNuJiMzOTt0IGFzIGxvY2FsaXplZCBhcyBpbml0aWFsbHkgYmVsaWV2ZWQsIGFuZCBpdCBtaWdodCBiZSBzdGVtbWluZyBmcm9tIHNvbWUgbW9yZSBnZW5lcmljIERNQSBjb25maWd1cmF0aW9uLCBpbml0aWFsaXphdGlvbiwgb3IgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoYXQgbW9kdWxlLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBpbiB0aGUgcHV6emxlIGFuZCBuZWVkcyB0byBiZSBydWxlZCBvdXQgKG9yIGluISkgcXVpY2tseS4gVGhhdCBmaWxlIG9mdGVuIGNvbnRhaW5zIGdsb2JhbCBJT01NVSBzZXR1cCB0aGF0IGNvdWxkIGV4cGxhaW4gdGhlc2Ugc3ltcHRvbXMsIG9yIGEgbWlzY29uZmlndXJhdGlvbiBjb3VsZCBiZSBvY2N1cnJpbmcgaW4gdGhhdCBzcGFjZS4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tbXVfZG1hX2FsbG9jX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jPTg3Nz1zdGF0aWMgdm9pZCBfX2lvbW11X2RtYV9mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBjb3VudClcbi0tXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTg4My1cbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM6ODg0OnN0YXRpYyBzdHJ1Y3QgcGFnZSAqKl9faW9tbXVfZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMtODg1LVx0XHR1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGxvbmcgb3JkZXJfbWFzaywgZ2ZwX3QgZ2ZwKVxuLS1cbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM9OTQwPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKl9faW9tbXVfZG1hX2FsbG9jX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMtOTY3LVx0Y291bnQgPSBQQUdFX0FMSUdOKHNpemUpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYzo5Njg6XHRwYWdlcyA9IF9faW9tbXVfZG1hX2FsbG9jX3BhZ2VzKGRldiwgY291bnQsIGFsbG9jX3NpemVzIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy05NjktXHRcdFx0XHRcdGdmcCk7XG4tLVxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy05NzktXHQgKiBSZW1vdmUgdGhlIHpvbmUvcG9saWN5IGZsYWdzIGZyb20gdGhlIEdGUCAtIHRoZXNlIGFyZSBhcHBsaWVkIHRvIHRoZVxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYzo5ODA6XHQgKiBfX2lvbW11X2RtYV9hbGxvY19wYWdlcygpIGJ1dCBhcmUgbm90IHVzZWQgZm9yIHRoZSBzdXBwb3J0aW5nXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTk4MS1cdCAqIGludGVybmFsIGFsbG9jYXRpb25zIHRoYXQgZm9sbG93LlxuLS1cbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM9MTYxND12b2lkIGlvbW11X2RtYV9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLFxuLS1cbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMtMTYyMC1cbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM6MTYyMTpzdGF0aWMgdm9pZCAqaW9tbXVfZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTE2MjItXHRcdHN0cnVjdCBwYWdlICoqcGFnZXAsIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBhdHRycylcbi0tXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jPTE2NjA9dm9pZCAqaW9tbXVfZG1hX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmhhbmRsZSxcbi0tXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTE2ODYtXHR9IGVsc2Uge1xuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYzoxNjg3Olx0XHRjcHVfYWRkciA9IGlvbW11X2RtYV9hbGxvY19wYWdlcyhkZXYsIHNpemUsIFx1MDAyNnBhZ2UsIGdmcCwgYXR0cnMpO1xuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy0xNjg4LVx0XHRpZiAoIWNwdV9hZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEV4YWN0LVNpemUgUGFnZSBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgY29yZSBvZiBtZW1vcnkgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGV4YWN0LXNpemUgcGFnZSBhbGxvY2F0aW9ucyB3b3JrLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggTlVNQSBub2Rlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYCBmdW5jdGlvbi4gVGhpcyBzaG91bGQgYmUgd2hlcmUgdGhlIG1hZ2ljIGJlZ2lucyDigJMgZmlndXJpbmcgb3V0IGhvdyB3ZSBnZXQgdGhvc2UgcHJlY2lzZWx5IHNpemVkIHBhZ2VzIHRoYXQgYXJlbuKAmXQgYSBwb3dlciBvZiB0d28sIGFuZCBob3cgdGhlIE5VTUEgbm9kZSAobmlkKSBnZXRzIGludm9sdmVkLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgaW5pdGlhbCBzZXR1cCwgdGhlIGNob2ljZSBvZiB6b25lLCBhbmQgYW55IHBvdGVudGlhbCBmYWxsYmFjayBtZWNoYW5pc21zIGlmIGEgc3VpdGFibGUgcGFnZSBpc24mIzM5O3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBub3Byb2ZgIGFzcGVjdCB0b287IGlzIHRoaXMgYWJvdXQgcHJvZmlsaW5nIG9yIHN0YXRpc3RpY3MgZ2F0aGVyaW5nIGJlaW5nIHNraXBwZWQ/CgpUaGVuLCB0aGUgbmF0dXJhbCBmb2xsb3ctdXAgaXMgYGZyZWVfcGFnZXNfZXhhY3RgLiBJIG5lZWQgdG8gdHJhY2sgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBleGFjdC1zaXplIHBhZ2VzLiBXaGF0IGRvZXMgdGhlIGRlYWxsb2NhdGlvbiBwcm9jZXNzIGVudGFpbD8gRG9lcyBpdCBzaW1wbHkgcmV0dXJuIHRoZW0gdG8gdGhlIGFwcHJvcHJpYXRlIGZyZWUgbGlzdCwgb3IgYXJlIHRoZXJlIG1vcmUgY29tcGxleCBvcGVyYXRpb25zIGludm9sdmVkLCBzdWNoIGFzIG1lcmdpbmcgd2l0aCBhZGphY2VudCBwYWdlcyB0byBmb3JtIGxhcmdlciBibG9ja3M/IFdoYXQgaGFwcGVucyB0byB0aGUgbWV0YWRhdGE/IFRoaXMgaXMgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgZnJhZ21lbnRhdGlvbiBhbmQgZW5zdXJpbmcgZWZmaWNpZW50IG1lbW9yeSB1dGlsaXphdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBib29ra2VlcGluZyBpcyBtYWludGFpbmVkLCBmcm9tIGFsbG9jYXRpb24gdG8gZGVhbGxvY2F0aW9uLCB0byBmdWxseSBncmFzcCB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMgb2YgdGhpcyBleGFjdC1zaXplIHN0cmF0ZWd5LiBgbW0vcGFnZV9hbGxvYy5jYCBpdCBpcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU2MzA6XHQgKlx0XHRcdCAgIHBhZ2VzIG9uIGEgbm9kZS5cbjU2MzE6XHQgKiBAbmlkOiB0aGUgcHJlZmVycmVkIG5vZGUgSUQgd2hlcmUgbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWRcbjU2MzI6XHQgKiBAc2l6ZTogdGhlIG51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZVxuNTYzMzpcdCAqIEBnZnBfbWFzazogR0ZQIGZsYWdzIGZvciB0aGUgYWxsb2NhdGlvbiwgbXVzdCBub3QgY29udGFpbiBfX0dGUF9DT01QXG41NjM0Olx0ICpcbjU2MzU6XHQgKiBMaWtlIGFsbG9jX3BhZ2VzX2V4YWN0KCksIGJ1dCB0cnkgdG8gYWxsb2NhdGUgb24gbm9kZSBuaWQgZmlyc3QgYmVmb3JlIGZhbGxpbmdcbjU2MzY6XHQgKiBiYWNrLlxuNTYzNzpcdCAqXG41NjM4Olx0ICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYXJlYSBvciAlTlVMTCBpbiBjYXNlIG9mIGVycm9yLlxuNTYzOTpcdCAqL1xuNTY0MDpcdHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxuNTY0MTpcdHtcbjU2NDI6XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTtcbjU2NDM6XHRcdHN0cnVjdCBwYWdlICpwO1xuNTY0NDpcdFxuNTY0NTpcdFx0aWYgKFdBUk5fT05fT05DRShnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX0NPTVAgfCBfX0dGUF9ISUdITUVNKSkpXG41NjQ2Olx0XHRcdGdmcF9tYXNrIFx1MDAyNj0gfihfX0dGUF9DT01QIHwgX19HRlBfSElHSE1FTSk7XG41NjQ3Olx0XG41NjQ4Olx0XHRwID0gYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YobmlkLCBnZnBfbWFzaywgb3JkZXIpO1xuNTY0OTpcdFx0aWYgKCFwKVxuNTY1MDpcdFx0XHRyZXR1cm4gTlVMTDtcbjU2NTE6XHRcdHJldHVybiBtYWtlX2FsbG9jX2V4YWN0KCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwKSwgb3JkZXIsIHNpemUpO1xuNTY1MjpcdH1cbjU2NTM6XHRcbjU2NTQ6XHQvKipcbjU2NTU6XHQgKiBmcmVlX3BhZ2VzX2V4YWN0IC0gcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIHZpYSBhbGxvY19wYWdlc19leGFjdCgpXG41NjU2Olx0ICogQHZpcnQ6IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBhbGxvY19wYWdlc19leGFjdC5cbjU2NTc6XHQgKiBAc2l6ZTogc2l6ZSBvZiBhbGxvY2F0aW9uLCBzYW1lIHZhbHVlIGFzIHBhc3NlZCB0byBhbGxvY19wYWdlc19leGFjdCgpLlxuNTY1ODpcdCAqXG41NjU5Olx0ICogUmVsZWFzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gYWxsb2NfcGFnZXNfZXhhY3QuXG41NjYwOlx0ICovXG41NjYxOlx0dm9pZCBmcmVlX3BhZ2VzX2V4YWN0KHZvaWQgKnZpcnQsIHNpemVfdCBzaXplKVxuNTY2MjpcdHtcbjU2NjM6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXZpcnQ7XG41NjY0Olx0XHR1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHIgJiM0MzsgUEFHRV9BTElHTihzaXplKTtcbjU2NjU6XHRcbjU2NjY6XHRcdHdoaWxlIChhZGRyIFx1MDAzYyBlbmQpIHtcbjU2Njc6XHRcdFx0ZnJlZV9wYWdlKGFkZHIpO1xuNTY2ODpcdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG41NjY5Olx0XHR9XG41NjcwOlx0fVxuNTY3MTpcdEVYUE9SVF9TWU1CT0woZnJlZV9wYWdlc19leGFjdCk7XG41NjcyOlx0XG41NjczOlx0LyoqXG41Njc0Olx0ICogbnJfZnJlZV96b25lX3BhZ2VzIC0gY291bnQgbnVtYmVyIG9mIHBhZ2VzIGJleW9uZCBoaWdoIHdhdGVybWFya1xuNTY3NTpcdCAqIEBvZmZzZXQ6IFRoZSB6b25lIGluZGV4IG9mIHRoZSBoaWdoZXN0IHpvbmVcbjU2NzY6XHQgKlxuNTY3NzpcdCAqIG5yX2ZyZWVfem9uZV9wYWdlcygpIGNvdW50cyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHdoaWNoIGFyZSBiZXlvbmQgdGhlXG41Njc4Olx0ICogaGlnaCB3YXRlcm1hcmsgd2l0aGluIGFsbCB6b25lcyBhdCBvciBiZWxvdyBhIGdpdmVuIHpvbmUgaW5kZXguICBGb3IgZWFjaFxuNTY3OTpcdCAqIHpvbmUsIHRoZSBudW1iZXIgb2YgcGFnZXMgaXMgY2FsY3VsYXRlZCBhczpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMxNQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRE1BIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGNsb3NlbHkgYXQgdGhlc2UgY2hhbmdlcywgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnYXRoZXJlZC4gVGhlIGtleSBhcmVhIG9mIG1vZGlmaWNhdGlvbiBhcHBlYXJzIHRvIGJlIGFyb3VuZCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIERNQSBhbGxvY2F0aW9ucywgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBtb3JlIHByZWNpc2Ugc2l6aW5nIGFuZCBmcmVlaW5nLgoKSW5pdGlhbGx5LCBJIHNlZSB0aGF0IGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYCBoYWQgdGhlIGBfX21lbWluaXRgIHRhZywgbGltaXRpbmcgaXRzIHVzZSB0byBlYXJseSBpbml0aWFsaXphdGlvbiBvciBtZW1vcnkgaG90cGx1ZyBzY2VuYXJpb3MuIFJlbW92aW5nIHRoaXMgdGFnIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgb3BlbnMgdGhlIGRvb3IgZm9yIHJ1bnRpbWUgY2FsbHMsIHBhcnRpY3VsYXJseSBmcm9tIERNQSBhbGxvY2F0b3JzIGxpa2UgYF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AsIGBpb21tdV9kbWFfYWxsb2NfcGFnZXNgLCBhbmQgZnJpZW5kcy4gIFByZXZpb3VzbHksIHRoZXNlIGZ1bmN0aW9ucyB1c2VkIGBhbGxvY19wYWdlc19ub2RlYCB3aXRoIGEgcG93ZXItb2YtdHdvIHBhZ2UgYmxvY2sgYWxsb2NhdGlvbiwgd2hpY2ggaXMgYSBjb21wb3VuZCBvciBidWRkeSBvcmRlciBhbGxvY2F0aW9uLiBCdXQgaXQgZGlkbiYjMzk7dCBoYW5kbGUgdGhlIHVudXNlZCAmIzM0O3RhaWwmIzM0OyBwYWdlcyBlZmZpY2llbnRseS4KCk5vdywgdGhlIGludHJvZHVjdGlvbiBvZiBgbWFrZV9hbGxvY19leGFjdGAgaXMgY3JpdGljYWwuIEl0JiMzOTtzIGludm9rZWQgYnkgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZGAsIGFsbG93aW5nIHRoZSBhbGxvY2F0ZWQgYmxvY2sgdG8gYmUgc3BsaXQgYW5kIGFueSB1bnVzZWQgdGFpbCBwYWdlcyAoYmV5b25kIHRoZSByZXF1ZXN0ZWQgYHNpemVgKSB0byBiZSBmcmVlZC4gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBpbiBtZW1vcnkgdXRpbGl6YXRpb24sIGFzIGl0IGF2b2lkcyBpbnRlcm5hbCBmcmFnbWVudGF0aW9uLgoKRnVydGhlcm1vcmUsIG9uIHRoZSBkZWFsbG9jYXRpb24gc2lkZSwgdGhlIGBkbWFfZnJlZV9jb250aWd1b3VzYCBjYWxscyBhcmUgbm93IHVzaW5nIGBmcmVlX3BhZ2VzX2V4YWN0YCBmb3IgZnJlZWluZywgc3BlY2lmaWNhbGx5IGBmcmVlX3BhZ2VzX2V4YWN0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgc2l6ZSlgIGluc3RlYWQgb2YgdGhlIG9sZCBgX19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSlgLiBUaGlzIGlzIGFub3RoZXIgcGllY2UgdGhhdCBhbGlnbnMgd2l0aCB0aGUgZXhhY3Qtc2l6ZSBhbGxvY2F0aW9uIGxvZ2ljLgoKVGhlIG1haW4gdGFrZWF3YXkgaXMgdGhhdCB0aGlzIGNoYW5nZSBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGJlaGF2aW9yIGFjcm9zcyBETUEgZGlyZWN0LCBETUEgb3BzIGhlbHBlcnMsIERNQSBDTUEsIGFuZCBJT01NVSBETUEgYWxsb2NhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIHRob3NlIGFyZWFzLgoKT25lIG90aGVyIGNvbmNlcm4gaXMgdGhhdCBpZiBhbnkgY2FsbGVyIHBhc3NlcyBgX19HRlBfQ09NUGAgb3IgYF9fR0ZQX0hJR0hNRU1gIGZsYWdzIHRvIGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYCwgaXQgd2lsbCB0cmlnZ2VyIGEgYFdBUk5fT05fT05DRWAgd2hpY2ggbWlnaHQgaW50cm9kdWNlIGtlcm5lbCB3YXJuaW5ncywgd2hpY2ggSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBpbiBtb3JlIGRlcHRoLgoKRmluYWxseSwgSeKAmXZlIGFsc28gY2hlY2tlZCB0aGUgYWZmZWN0ZWQgZmlsZXM6IGBkcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jYCAodW5kZXIgYENPTkZJR19JT01NVV9ETUFgKSwgYGtlcm5lbC9kbWEvY29udGlndW91cy5jYCAoYENPTkZJR19ETUFfQ01BYCksIGBrZXJuZWwvZG1hL2RpcmVjdC5jYCAoY29yZSBETUEgbWFwcGluZyksIGBrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNgIChgQ09ORklHX0RNQV9PUFNfSEVMUEVSU2Agb3IgYENPTkZJR19ETUFfT1BTYC9gQ09ORklHX0hBU19ETUFgKSwgYW5kIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZpbGUgYG1tL3BhZ2VfYWxsb2MuY2AuIEkgd2lsbCBub3cgbG9vayBjbG9zZWx5IGF0IHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgIGFuZCBga2VybmVsL2RtYS9LY29uZmlnYCB0byB1bmRlcnN0YW5kIGFueSBjb25maWd1cmF0aW9uIGltcGFjdHMuIFRoaXMgaXMgYSBjb21wbGV4IGNoYW5nZSB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgc2NydXRpbnkgYWNyb3NzIHZhcmlvdXMgRE1BIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWEtaW9tbXVcXC5vfGNvbnRpZ3VvdXNcXC5vfG9wc19oZWxwZXJzXFwub3xkaXJlY3RcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU9MTMzPW9iai0kKENPTkZJR19QUEMzMilcdFx0JiM0Mzs9IGVudHJ5XzMyLm8gc2V0dXBfMzIubyBlYXJseV8zMi5vIHN0YXRpY19jYWxsLm9cbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGU6MTM0Om9iai0kKENPTkZJR19QUEM2NClcdFx0JiM0Mzs9IGRtYS1pb21tdS5vIGlvbW11Lm9cbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUtMTM1LW9iai0kKENPTkZJR19LR0RCKVx0XHQmIzQzOz0ga2dkYi5vXG4tLVxuYXJjaC94ODYvcGNpL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX1BDSV9CSU9TKVx0XHQmIzQzOz0gcGNiaW9zLm9cbmFyY2gveDg2L3BjaS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19QQ0lfTU1DT05GSUcpXHQmIzQzOz0gbW1jb25maWdfJChCSVRTKS5vIGRpcmVjdC5vIG1tY29uZmlnLXNoYXJlZC5vXG5hcmNoL3g4Ni9wY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUENJX0RJUkVDVClcdCYjNDM7PSBkaXJlY3Qub1xuYXJjaC94ODYvcGNpL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1BDSV9PTFBDKVx0XHQmIzQzOz0gb2xwYy5vXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvTWFrZWZpbGU9ND1tbHg1X2liLXkgOj0gYWgubyBcXFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L01ha2VmaWxlLTgtXHQgICAgIGNxLm8gXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L01ha2VmaWxlOjk6XHQgICAgIGRhdGFfZGlyZWN0Lm8gXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L01ha2VmaWxlLTEwLVx0ICAgICBkbS5vIFxcXG4tLVxuZHJpdmVycy9pb21tdS9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfSU9NTVVfREVCVUdGUykgJiM0Mzs9IGlvbW11LWRlYnVnZnMub1xuZHJpdmVycy9pb21tdS9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfSU9NTVVfRE1BKSAmIzQzOz0gZG1hLWlvbW11Lm9cbmRyaXZlcnMvaW9tbXUvTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX0lPTU1VX0lPX1BHVEFCTEUpICYjNDM7PSBpby1wZ3RhYmxlLm9cbi0tXG5kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19SSVNDVl9JTlRDKVx0XHQmIzQzOz0gaXJxLXJpc2N2LWludGMub1xuZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfUklTQ1ZfQVBMSUMpXHRcdCYjNDM7PSBpcnEtcmlzY3YtYXBsaWMtbWFpbi5vIGlycS1yaXNjdi1hcGxpYy1kaXJlY3Qub1xuZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlLTEwNi1vYmotJChDT05GSUdfUklTQ1ZfQVBMSUNfTVNJKVx0XHQmIzQzOz0gaXJxLXJpc2N2LWFwbGljLW1zaS5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTI2PW1seDVfY29yZS0kKENPTkZJR19NTFg1X0NPUkVfRU4pICYjNDM7PSBlbi9ycXQubyBlbi90aXIubyBlbi9yc3MubyBlbi9yeF9yZXMubyBcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS0zMS1cdFx0ZW4veHNrL3NldHVwLm8gZW4veHNrL3J4Lm8gZW4veHNrL3R4Lm8gZW4vZGV2bGluay5vIGVuL3B0cC5vIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU6MzI6XHRcdGVuL3Fvcy5vIGVuL2h0Yi5vIGVuL3RyYXAubyBlbi9mc190dF9yZWRpcmVjdC5vIGVuL3NlbHEubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTMzLVx0XHRsaWIvY3J5cHRvLm8gbGliL3NkLm8gZW4vcGNpZV9jb25nX2V2ZW50Lm9cbi0tXG5kcml2ZXJzL3hlbi9NYWtlZmlsZT00Mj1vYmotJChDT05GSUdfWEVOX0dSQU5UX0RNQV9PUFMpXHRcdCYjNDM7PSBncmFudC1kbWEtb3BzLm9cbmRyaXZlcnMveGVuL01ha2VmaWxlOjQzOm9iai0kKENPTkZJR19YRU5fR1JBTlRfRE1BX0lPTU1VKVx0JiM0Mzs9IGdyYW50LWRtYS1pb21tdS5vXG4tLVxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtOS1cdFx0ZXh0ZW50c19zdGF0dXMubyBmaWxlLm8gZnNtYXAubyBmc3luYy5vIGhhc2gubyBpYWxsb2MubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMDpcdFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG4tLVxuZnMvbmZzL01ha2VmaWxlPTk9bmZzLXkgXHRcdFx0Oj0gY2xpZW50Lm8gZGlyLm8gZmlsZS5vIGdldHJvb3QubyBpbm9kZS5vIHN1cGVyLm8gXFxcbmZzL25mcy9NYWtlZmlsZToxMDpcdFx0XHQgICBpby5vIGRpcmVjdC5vIHBhZ2VsaXN0Lm8gcmVhZC5vIHN5bWxpbmsubyB1bmxpbmsubyBcXFxuZnMvbmZzL01ha2VmaWxlLTExLVx0XHRcdCAgIHdyaXRlLm8gbmFtZXNwYWNlLm8gbW91bnRfY2xudC5vIG5mc3RyYWNlLm8gXFxcbi0tXG5mcy9uaWxmczIvTWFrZWZpbGU9Mz1uaWxmczIteSA6PSBpbm9kZS5vIGZpbGUubyBkaXIubyBzdXBlci5vIG5hbWVpLm8gcGFnZS5vIG1kdC5vIFxcXG5mcy9uaWxmczIvTWFrZWZpbGU6NDpcdGJ0bm9kZS5vIGJtYXAubyBidHJlZS5vIGRpcmVjdC5vIGRhdC5vIHJlY292ZXJ5Lm8gXFxcbmZzL25pbGZzMi9NYWtlZmlsZS01LVx0dGhlX25pbGZzLm8gc2VnYnVmLm8gc2VnbWVudC5vIGNwZmlsZS5vIHN1ZmlsZS5vIFxcXG4tLVxuZnMvc21iL2NsaWVudC9NYWtlZmlsZT0yOT1jaWZzLSQoQ09ORklHX0NJRlNfRlNDQUNIRSkgJiM0Mzs9IGZzY2FjaGUub1xuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0zMC1cbmZzL3NtYi9jbGllbnQvTWFrZWZpbGU6MzE6Y2lmcy0kKENPTkZJR19DSUZTX1NNQl9ESVJFQ1QpICYjNDM7PSBzbWJkaXJlY3Qub1xuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0zMi1cbi0tXG5mcy9zbWIvc21iZGlyZWN0L01ha2VmaWxlLTUtXG5mcy9zbWIvc21iZGlyZWN0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1NNQkRJUkVDVCkgJiM0Mzs9IHNtYmRpcmVjdC5vXG5mcy9zbWIvc21iZGlyZWN0L01ha2VmaWxlLTctXG4tLVxuZnMvc3F1YXNoZnMvTWFrZWZpbGU9OT1zcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19GSUxFX0NBQ0hFKSAmIzQzOz0gZmlsZV9jYWNoZS5vXG5mcy9zcXVhc2hmcy9NYWtlZmlsZToxMDpzcXVhc2hmcy0kKENPTkZJR19TUVVBU0hGU19GSUxFX0RJUkVDVCkgJiM0Mzs9IGZpbGVfZGlyZWN0Lm9cbmZzL3NxdWFzaGZzL01ha2VmaWxlLTExLXNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0RFQ09NUF9TSU5HTEUpICYjNDM7PSBkZWNvbXByZXNzb3Jfc2luZ2xlLm9cbi0tXG5rZXJuZWwvZG1hL01ha2VmaWxlLTItXG5rZXJuZWwvZG1hL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0hBU19ETUEpXHRcdFx0JiM0Mzs9IG1hcHBpbmcubyBkaXJlY3Qub1xua2VybmVsL2RtYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ETUFfT1BTX0hFTFBFUlMpXHRcdCYjNDM7PSBvcHNfaGVscGVycy5vXG5rZXJuZWwvZG1hL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX0FSQ0hfSEFTX0RNQV9PUFMpXHRcdCYjNDM7PSBkdW1teS5vXG5rZXJuZWwvZG1hL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0RNQV9DTUEpXHRcdFx0JiM0Mzs9IGNvbnRpZ3VvdXMub1xua2VybmVsL2RtYS9NYWtlZmlsZS03LW9iai0kKENPTkZJR19ETUFfREVDTEFSRV9DT0hFUkVOVClcdCYjNDM7PSBjb2hlcmVudC5vXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX0JSSURHRV9FQlRfRE5BVCkgJiM0Mzs9IGVidF9kbmF0Lm9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19CUklER0VfRUJUX1JFRElSRUNUKSAmIzQzOz0gZWJ0X3JlZGlyZWN0Lm9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlLTM2LW9iai0kKENPTkZJR19CUklER0VfRUJUX1NOQVQpICYjNDM7PSBlYnRfc25hdC5vXG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jPTM2NzA9c3RhdGljIGludCBkZWNvZGVfTU9TRE9wUmVwbHkoY29uc3Qgc3RydWN0IGNlcGhfbXNnICptc2csIHN0cnVjdCBNT1NET3BSZXBseSAqbSlcbi0tXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMzczNi1cdH0gZWxzZSB7XG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6MzczNzpcdFx0Y2VwaF9vbG9jX2luaXQoXHUwMDI2bS1cdTAwM2VyZWRpcmVjdC5vbG9jKTtcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zNzM4LVx0fVxuLS1cbm5ldC9jZXBoL29zZF9jbGllbnQuYz0zNzUwPXN0YXRpYyB2b2lkIGhhbmRsZV9yZXBseShzdHJ1Y3QgY2VwaF9vc2QgKm9zZCwgc3RydWN0IGNlcGhfbXNnICptc2cpXG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM3NzUtXG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6Mzc3NjpcdG0ucmVkaXJlY3Qub2xvYy5wb29sX25zID0gcmVxLVx1MDAzZXJfdC50YXJnZXRfb2xvYy5wb29sX25zO1xubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM3NzctXHRyZXQgPSBkZWNvZGVfTU9TRE9wUmVwbHkobXNnLCBcdTAwMjZtKTtcbm5ldC9jZXBoL29zZF9jbGllbnQuYzozNzc4Olx0bS5yZWRpcmVjdC5vbG9jLnBvb2xfbnMgPSBOVUxMO1xubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM3NzktXHRpZiAocmV0KSB7XG4tLVxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM4MDAtXG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6MzgwMTpcdGlmICghY2VwaF9vbG9jX2VtcHR5KFx1MDAyNm0ucmVkaXJlY3Qub2xvYykpIHtcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zODAyLVx0XHRkb3V0KFwmIzM0O3JlcSAlcCB0aWQgJWxsdSByZWRpcmVjdCBwb29sICVsbGRcXG5cJiMzNDssIHJlcSwgcmVxLVx1MDAzZXJfdGlkLFxubmV0L2NlcGgvb3NkX2NsaWVudC5jOjM4MDM6XHRcdCAgICAgbS5yZWRpcmVjdC5vbG9jLnBvb2wpO1xubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM4MDQtXHRcdHVubGlua19yZXF1ZXN0KG9zZCwgcmVxKTtcbi0tXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMzgxMC1cdFx0ICovXG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6MzgxMTpcdFx0cmVxLVx1MDAzZXJfdC50YXJnZXRfb2xvYy5wb29sID0gbS5yZWRpcmVjdC5vbG9jLnBvb2w7XG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMzgxMi1cdFx0cmVxLVx1MDAzZXJfZmxhZ3MgfD0gQ0VQSF9PU0RfRkxBR19SRURJUkVDVEVEIHxcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTYwPW9iai0kKENPTkZJR19ORl9OQVQpICYjNDM7PSBuZl9uYXQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo2MTpuZl9uYXQtJChDT05GSUdfTkZfTkFUX1JFRElSRUNUKSAmIzQzOz0gbmZfbmF0X3JlZGlyZWN0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNjItbmZfbmF0LSQoQ09ORklHX05GX05BVF9NQVNRVUVSQURFKSAmIzQzOz0gbmZfbmF0X21hc3F1ZXJhZGUub1xuLS1cbnNhbXBsZXMvZnRyYWNlL01ha2VmaWxlLTItXG5zYW1wbGVzL2Z0cmFjZS9NYWtlZmlsZTozOm9iai0kKENPTkZJR19TQU1QTEVfRlRSQUNFX0RJUkVDVCkgJiM0Mzs9IGZ0cmFjZS1kaXJlY3Qub1xuc2FtcGxlcy9mdHJhY2UvTWFrZWZpbGUtNC1vYmotJChDT05GSUdfU0FNUExFX0ZUUkFDRV9ESVJFQ1QpICYjNDM7PSBmdHJhY2UtZGlyZWN0LXRvby5vXG4tLVxuc2NyaXB0cy9zYm9tL3Rlc3RzL2NtZF9ncmFwaC90ZXN0X3NhdmVkY21kX3BhcnNlci5weT0xMz1jbGFzcyBUZXN0U2F2ZWRDbWRQYXJzZXIodW5pdHRlc3QuVGVzdENhc2UpOlxuLS1cbnNjcmlwdHMvc2JvbS90ZXN0cy9jbWRfZ3JhcGgvdGVzdF9zYXZlZGNtZF9wYXJzZXIucHktMTk0LSAgICBkZWYgdGVzdF9hcl9wcmludGZfbmVzdGVkKHNlbGYpOlxuc2NyaXB0cy9zYm9tL3Rlc3RzL2NtZF9ncmFwaC90ZXN0X3NhdmVkY21kX3BhcnNlci5weToxOTU6ICAgICAgICBjbWQgPSAmIzM5O3JtIC1mIGFyY2gveDg2L3BjaS9idWlsdC1pbi5hOyAgcHJpbnRmIFwmIzM0O2FyY2gveDg2L3BjaS8lcyBcJiMzNDsgaTM4Ni5vIGluaXQubyBtbWNvbmZpZ182NC5vIGRpcmVjdC5vIG1tY29uZmlnLXNoYXJlZC5vIGZpeHVwLm8gYWNwaS5vIC4uLlxuc2NyaXB0cy9zYm9tL3Rlc3RzL2NtZF9ncmFwaC90ZXN0X3NhdmVkY21kX3BhcnNlci5weToxOTY6ICAgICAgICBleHBlY3RlZCA9IFwmIzM0O2FyY2gveDg2L3BjaS9pMzg2Lm8gYXJjaC94ODYvcGNpL2luaXQubyBhcmNoL3g4Ni9wY2kvbW1jb25maWdfNjQubyBhcmNoL3g4Ni9wY2kvZGlyZWN0Lm8gYXJjaC94ODYvcGNpL21tY29uZmlnLXNoYXJlZC5vIGFyYy4uLlxuc2NyaXB0cy9zYm9tL3Rlc3RzL2NtZF9ncmFwaC90ZXN0X3NhdmVkY21kX3BhcnNlci5weS0xOTctICAgICAgICBzZWxmLl9hc3NlcnRfcGFyc2luZyhjbWQsIGV4cGVjdGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS2VybmVsIERNQSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpcyBga2VybmVsL2RtYS9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBzdWJzeXN0ZW0gbGl2ZSB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIHdoYXQgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBmb3IgZGlmZmVyZW50IGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMgYW5kIHVzZSBjYXNlcy4gVGhpcyBLY29uZmlnIGZpbGUgaXMgdGhlIGxpbmNocGluIGZvciBjb250cm9sbGluZyB0aGUgRE1BIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgIFRoZSBwcmltYXJ5IERNQSBjb250cm9sbGVyIHNlbGVjdGlvbiBhbmQgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpb25zLgoqICAgVGhlIG9wdGlvbnMgcmVsYXRlZCB0byBkaWZmZXJlbnQgRE1BIGVuZ2luZXMuCiogICBBbnkgZmxhZ3MgcmVsYXRlZCB0byBkZWJ1Z2dpbmcgYW5kIGVycm9yIGhhbmRsaW5nLgoqICAgSG93IHRoZSBETUEgZnJhbWV3b3JrIGludGVyYWN0cyB3aXRoIG90aGVyIGNvcmUga2VybmVsIGNvbXBvbmVudHMuCiogICBBbnkgZGVmYXVsdCB2YWx1ZXMgYW5kIHBvdGVudGlhbCBvdmVycmlkZXMuCiogICBJZiB0aGVyZSBhcmUgYW55IG5ldyBmZWF0dXJlcyBpbiBETUEgdGhhdCBoYXZlIGJlZW4gaW50cm9kdWNlZC4KCkJ5IG1ldGhvZGljYWxseSByZXZpZXdpbmcgdGhlIGBLY29uZmlnYCBmaWxlLCBJIHNob3VsZCBnYWluIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIERNQSBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCwgYW5kIHdoZXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgbXkgd29yayBjYW4gYmUgZm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2RtYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIE5PX0RNQVxuICAgNDpcdFx0Ym9vbFxuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBIQVNfRE1BXG4gICA3Olx0XHRib29sXG4gICA4Olx0XHRkZXBlbmRzIG9uICFOT19ETUFcbiAgIDk6XHRcdGRlZmF1bHQgeVxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBETUFfT1BTX0hFTFBFUlNcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcbiAgMTQ6XHQjXG4gIDE1Olx0IyBJT01NVSBkcml2ZXJzIHRoYXQgY2FuIGJ5cGFzcyB0aGUgSU9NTVUgY29kZSBhbmQgb3B0aW9uYWxseSB1c2UgdGhlIGRpcmVjdFxuICAxNjpcdCMgbWFwcGluZyBmYXN0IHBhdGggc2hvdWxkIHNlbGVjdCB0aGlzIG9wdGlvbiBhbmQgc2V0IHRoZSBkbWFfb3BzX2J5cGFzc1xuICAxNzpcdCMgZmxhZyBpbiBzdHJ1Y3QgZGV2aWNlIHdoZXJlIGFwcGxpY2FibGVcbiAgMTg6XHQjXG4gIDE5Olx0Y29uZmlnIERNQV9PUFNfQllQQVNTXG4gIDIwOlx0XHRib29sXG4gIDIxOlx0XG4gIDIyOlx0IyBMZXRzIHBsYXRmb3JtIElPTU1VIGRyaXZlciBjaG9vc2UgYmV0d2VlbiBieXBhc3MgYW5kIElPTU1VXG4gIDIzOlx0Y29uZmlnIEFSQ0hfSEFTX0RNQV9NQVBfRElSRUNUXG4gIDI0Olx0XHRib29sXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIE5FRURfU0dfRE1BX0ZMQUdTXG4gIDI3Olx0XHRib29sXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIE5FRURfU0dfRE1BX0xFTkdUSFxuICAzMDpcdFx0Ym9vbFxuICAzMTpcdFxuICAzMjpcdGNvbmZpZyBORUVEX0RNQV9NQVBfU1RBVEVcbiAgMzM6XHRcdGJvb2xcbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgQVJDSF9ETUFfQUREUl9UXzY0QklUXG4gIDM2Olx0XHRkZWZfYm9vbCA2NEJJVCB8fCBQSFlTX0FERFJfVF82NEJJVFxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBBUkNIX0hBU19ETUFfU0VUX01BU0tcbiAgMzk6XHRcdGJvb2xcbiAgNDA6XHRcbiAgNDE6XHQjXG4gIDQyOlx0IyBTZWxlY3QgdGhpcyBvcHRpb24gaWYgdGhlIGFyY2hpdGVjdHVyZSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIGZvclxuICA0MzpcdCMgRE1BX0FUVFJfV1JJVEVfQ09NQklORS4gIE5vcm1hbGx5IHRoZSBcJiMzNDt1bmNhY2hlZFwmIzM0OyBtYXBwaW5nIHNob3VsZCBiZSB3aGF0XG4gIDQ0Olx0IyBwZW9wbGUgdGhpbmsgb2Ygd2hlbiBzYXlpbmcgd3JpdGUgY29tYmluZSwgc28gdmVyeSBmZXcgcGxhdGZvcm1zIHNob3VsZFxuICA0NTpcdCMgbmVlZCB0byBlbmFibGUgdGhpcy5cbiAgNDY6XHQjXG4gIDQ3Olx0Y29uZmlnIEFSQ0hfSEFTX0RNQV9XUklURV9DT01CSU5FXG4gIDQ4Olx0XHRib29sXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIERNQV9ERUNMQVJFX0NPSEVSRU5UXG4gIDUxOlx0XHRib29sXG4gIDUyOlx0XG4gIDUzOlx0Y29uZmlnIEFSQ0hfSEFTX1NFVFVQX0RNQV9PUFNcbiAgNTQ6XHRcdGJvb2xcbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgQVJDSF9IQVNfVEVBUkRPV05fRE1BX09QU1xuICA1NzpcdFx0Ym9vbFxuICA1ODpcdFxuICA1OTpcdGNvbmZpZyBBUkNIX0hBU19TWU5DX0RNQV9GT1JfREVWSUNFXG4gIDYwOlx0XHRib29sXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIEFSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFVcbiAgNjM6XHRcdGJvb2xcbiAgNjQ6XHRcdHNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEVcbiAgNjU6XHRcbiAgNjY6XHRjb25maWcgQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTExcbiAgNjc6XHRcdGJvb2xcbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgQVJDSF9IQVNfRE1BX1BSRVBfQ09IRVJFTlRcbiAgNzA6XHRcdGJvb2xcbiAgNzE6XHRcbiAgNzI6XHRjb25maWcgQVJDSF9IQVNfRk9SQ0VfRE1BX1VORU5DUllQVEVEXG4gIDczOlx0XHRib29sXG4gIDc0Olx0XG4gIDc1Olx0Y29uZmlnIEFSQ0hfSEFTX0JBVENIRURfRE1BX1NZTkNcbiAgNzY6XHRcdGJvb2xcbiAgNzc6XHRcbiAgNzg6XHQjXG4gIDc5Olx0IyBTZWxlY3QgdGhpcyBvcHRpb24gaWYgdGhlIGFyY2hpdGVjdHVyZSBhc3N1bWVzIERNQSBkZXZpY2VzIGFyZSBjb2hlcmVudFxuICA4MDpcdCMgYnkgZGVmYXVsdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQ2hlY2tpbmcgYGtlcm5lbC9kbWEvS2NvbmZpZ2AqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIERNQSBzdWJzeXN0ZW0mIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGRlZmluZWQgYW5kIGhvdyBpdCYjMzk7cyBzdHJ1Y3R1cmVkIHdpdGhpbiBga2VybmVsL2RtYS9LY29uZmlnYC4gVGhpcyBmaWxlIGlzIGNydWNpYWw7IGl0IGRpY3RhdGVzIHdoYXQgZnVuY3Rpb25hbGl0eSBjYW4gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHJlbGF0ZWQgdG8gRGlyZWN0IE1lbW9yeSBBY2Nlc3MuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgRE1BIGNvbnRyb2xsZXJzLCB0aGUgdmFyaW91cyBkZXZpY2UgZHJpdmVycywgYW5kIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgpJJiMzOTtsbCBiZSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3I6CgoqICAgKipUb3AtbGV2ZWwgb3B0aW9uczoqKiBXaGF0IGFyZSB0aGUgbWFpbiBmZWF0dXJlcyBlbmFibGVkIG9yIGRpc2FibGVkIGhlcmU/IEFyZSB0aGVyZSBvdmVyYWxsIHN3aXRjaGVzIGZvciB0aGUgRE1BIHN1YnN5c3RlbSBvciBzcGVjaWZpYyBjb250cm9sbGVyIGZhbWlsaWVzPwoqICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBhcmUgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBvcHRpb25zPyBEb2VzIGVuYWJsaW5nIG9uZSBvcHRpb24gYXV0b21hdGljYWxseSBlbmFibGUgb3RoZXJzPyBBcmUgdGhlcmUgY29uZmxpY3RzIHRoYXQgbmVlZCB0byBiZSB1bmRlcnN0b29kPwoqICAgKipEZWZhdWx0czoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBkaWZmZXJlbnQgb3B0aW9ucz8gVGhhdCYjMzk7bGwgaGVscCB1bmRlcnN0YW5kIHRoZSBjb21tb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIERNQSBzdWJzeXN0ZW0uCiogICAqKkhlbHAgdGV4dDoqKiBBcmUgdGhlIGRlc2NyaXB0aW9ucyBmb3IgdGhlIG9wdGlvbnMgY2xlYXIgYW5kIGRldGFpbGVkIGVub3VnaD8gVGhpcyB3aWxsIGhlbHAgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgdXNlIGFuZCBlZmZlY3RzIG9mIGVhY2ggb3B0aW9uIGZvciBkaWZmZXJlbnQgaGFyZHdhcmUgYW5kIHVzZSBjYXNlcy4KKiAgICoqQXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnM6KiogSXMgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyB0YXJnZXRlZCB0byBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzLCBhbmQgaG93IHRoYXQgaXMgaGFuZGxlZD8KKiAgICoqTmV3IG9yIGNoYW5nZWQgb3B0aW9uczoqKiBBbnkgcmVjZW50IGNvbW1pdHMgdGhhdCBoYXZlIGFkZGVkIG9yIG1vZGlmaWVkIG9wdGlvbnMsIGFuZCB3aGF0IHJlYXNvbmluZyB3YXMgYmVoaW5kIHRob3NlIGNoYW5nZXMuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyB0aGUgRE1BIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZCBhbmQgaG93IGl0IGFsbG93cyBkZXZlbG9wZXJzIHRvIGN1c3RvbWl6ZSB0aGUgRE1BIGZ1bmN0aW9uYWxpdHkgaW4gdGhlaXIga2VybmVscy4gVGhpcyB3aWxsIGluZm9ybSBteSBkZWNpc2lvbnMgb24gaG93IHRvIGludGVncmF0ZSB0aGUgRE1BIHN5c3RlbSB3aXRoIG90aGVyIGNvbXBvbmVudHMgb3IgdHJvdWJsZXNob290IGFueSBETUEtcmVsYXRlZCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2RtYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MTpcdCNcbiAgODI6XHRjb25maWcgQVJDSF9ETUFfREVGQVVMVF9DT0hFUkVOVFxuICA4MzpcdFx0Ym9vbFxuICA4NDpcdFxuICA4NTpcdGNvbmZpZyBTV0lPVExCXG4gIDg2Olx0XHRib29sXG4gIDg3Olx0XHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXG4gIDg4Olx0XG4gIDg5Olx0Y29uZmlnIFNXSU9UTEJfREVGQVVMVF9TSVpFX01CXG4gIDkwOlx0XHRpbnQgXCYjMzQ7RGVmYXVsdCBTV0lPVExCIGJvdW5jZSBidWZmZXIgc2l6ZSBpbiBNQlwmIzM0O1xuICA5MTpcdFx0ZGVwZW5kcyBvbiBTV0lPVExCXG4gIDkyOlx0XHRyYW5nZSAxIDY0XG4gIDkzOlx0XHRkZWZhdWx0IDY0XG4gIDk0Olx0XHRoZWxwXG4gIDk1Olx0XHQgIFNldHMgdGhlIGRlZmF1bHQgc2l6ZSBvZiB0aGUgc29mdHdhcmUgSU8gVExCIChTV0lPVExCKSBib3VuY2UgYnVmZmVyXG4gIDk2Olx0XHQgIHBvb2wgYWxsb2NhdGVkIGF0IGJvb3QgdGltZS4gVGhlIGRlZmF1bHQgaXMgNjQgTUIuXG4gIDk3Olx0XG4gIDk4Olx0XHQgIE9uIG1lbW9yeS1jb25zdHJhaW5lZCBlbWJlZGRlZCBvciBtb2JpbGUgcGxhdGZvcm1zIChlLmcuLCB0aG9zZSB3aXRoXG4gIDk5Olx0XHQgIGEgaGFyZHdhcmUgSU9NTVUgc3VjaCBhcyBBUk0gU01NVSBjb3ZlcmluZyBtb3N0IERNQS1jYXBhYmxlIGRldmljZXMpLFxuIDEwMDpcdFx0ICBhIHNtYWxsZXIgdmFsdWUgc3VjaCBhcyA0IG9yIDggTUIgbWF5IGJlIHN1ZmZpY2llbnQuIFRoZSBTV0lPVExCIGlzXG4gMTAxOlx0XHQgIHRoZW4gb25seSBuZWVkZWQgZm9yIGRldmljZXMgdGhhdCBieXBhc3MgdGhlIElPTU1VIG9yIGhhdmUgcmVzdHJpY3RlZFxuIDEwMjpcdFx0ICBETUEgYWRkcmVzcyByYW5nZXMuXG4gMTAzOlx0XG4gMTA0Olx0XHQgIFRoZSBtaW5pbXVtIGFsbG93ZWQgdmFsdWUgaXMgMSBNQi4gVGhpcyBjb21waWxlLXRpbWUgZGVmYXVsdCBjYW4gYmVcbiAxMDU6XHRcdCAgb3ZlcnJpZGRlbiBhdCBydW50aW1lIHVzaW5nIHRoZSBcJiMzNDtzd2lvdGxiPVx1MDAzY25zbGFic1x1MDAzZVwmIzM0OyBrZXJuZWwgY29tbWFuZCBsaW5lXG4gMTA2Olx0XHQgIHBhcmFtZXRlci4gUmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbiAxMDc6XHRcdCAgZm9yIGRldGFpbHMuXG4gMTA4Olx0XG4gMTA5Olx0XHQgIElmIHVuc3VyZSwgbGVhdmUgYXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgNjQuXG4gMTEwOlx0XG4gMTExOlx0Y29uZmlnIFNXSU9UTEJfRFlOQU1JQ1xuIDExMjpcdFx0Ym9vbCBcJiMzNDtEeW5hbWljIGFsbG9jYXRpb24gb2YgRE1BIGJvdW5jZSBidWZmZXJzXCYjMzQ7XG4gMTEzOlx0XHRkZWZhdWx0IG5cbiAxMTQ6XHRcdGRlcGVuZHMgb24gU1dJT1RMQlxuIDExNTpcdFx0aGVscFxuIDExNjpcdFx0ICBUaGlzIGVuYWJsZXMgZHluYW1pYyByZXNpemluZyBvZiB0aGUgc29mdHdhcmUgSU8gVExCLiBUaGUga2VybmVsXG4gMTE3Olx0XHQgIHN0YXJ0cyB3aXRoIG9uZSBtZW1vcnkgcG9vbCBhdCBib290IGFuZCBpdCB3aWxsIGFsbG9jYXRlIGFkZGl0aW9uYWxcbiAxMTg6XHRcdCAgcG9vbHMgYXMgbmVlZGVkLiBUbyByZWR1Y2UgcnVuLXRpbWUga2VybmVsIG1lbW9yeSByZXF1aXJlbWVudHMsIHlvdVxuIDExOTpcdFx0ICBtYXkgaGF2ZSB0byBzcGVjaWZ5IGEgc21hbGxlciBzaXplIG9mIHRoZSBpbml0aWFsIHBvb2wgdXNpbmdcbiAxMjA6XHRcdCAgXCYjMzQ7c3dpb3RsYj1cJiMzNDsgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuXG4gMTIxOlx0XG4gMTIyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTIzOlx0XG4gMTI0Olx0Y29uZmlnIERNQV9CT1VOQ0VfVU5BTElHTkVEX0tNQUxMT0NcbiAxMjU6XHRcdGJvb2xcbiAxMjY6XHRcdGRlcGVuZHMgb24gU1dJT1RMQlxuIDEyNzpcdFxuIDEyODpcdGNvbmZpZyBETUFfTkVFRF9TWU5DXG4gMTI5Olx0XHRkZWZfYm9vbCBBUkNIX0hBU19TWU5DX0RNQV9GT1JfREVWSUNFIHx8IEFSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFUgfHwgXFxcbiAxMzA6XHRcdFx0IEFSQ0hfSEFTX1NZTkNfRE1BX0ZPUl9DUFVfQUxMIHx8IERNQV9BUElfREVCVUcgfHwgXFxcbiAxMzE6XHRcdFx0IEFSQ0hfSEFTX0RNQV9PUFMgfHwgU1dJT1RMQlxuIDEzMjpcdFxuIDEzMzpcdGNvbmZpZyBETUFfUkVTVFJJQ1RFRF9QT09MXG4gMTM0Olx0XHRib29sIFwmIzM0O0RNQSBSZXN0cmljdGVkIFBvb2xcJiMzNDtcbiAxMzU6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IE9GX1JFU0VSVkVEX01FTSBcdTAwMjZcdTAwMjYgU1dJT1RMQlxuIDEzNjpcdFx0aGVscFxuIDEzNzpcdFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgcmVzdHJpY3RlZCBETUEgcG9vbHMgd2hpY2ggcHJvdmlkZSBhIGxldmVsIG9mXG4gMTM4Olx0XHQgIERNQSBtZW1vcnkgcHJvdGVjdGlvbiBvbiBzeXN0ZW1zIHdpdGggbGltaXRlZCBoYXJkd2FyZSBwcm90ZWN0aW9uXG4gMTM5Olx0XHQgIGNhcGFiaWxpdGllcywgc3VjaCBhcyB0aG9zZSBsYWNraW5nIGFuIElPTU1VLlxuIDE0MDpcdFxuIDE0MTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWVcbiAxNDI6XHRcdCAgXHUwMDNjRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Jlc2VydmVkLW1lbW9yeS9yZXNlcnZlZC1tZW1vcnkudHh0XHUwMDNlXG4gMTQzOlx0XHQgIGFuZCBcdTAwM2NrZXJuZWwvZG1hL3N3aW90bGIuY1x1MDAzZS5cbiAxNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7blwmIzM0Oy5cbiAxNDU6XHRcbiAxNDY6XHQjXG4gMTQ3Olx0IyBTaG91bGQgYmUgc2VsZWN0ZWQgaWYgd2UgY2FuIG1tYXAgbm9uLWNvaGVyZW50IG1hcHBpbmdzIHRvIHVzZXJzcGFjZS5cbiAxNDg6XHQjIFRoZSBvbmx5IHRoaW5nIHRoYXQgaXMgcmVhbGx5IHJlcXVpcmVkIGlzIGEgd2F5IHRvIHNldCBhbiB1bmNhY2hlZCBiaXRcbiAxNDk6XHQjIGluIHRoZSBwYWdldGFibGVzXG4gMTUwOlx0I1xuIDE1MTpcdGNvbmZpZyBETUFfTk9OQ09IRVJFTlRfTU1BUFxuIDE1MjpcdFx0ZGVmYXVsdCB5IGlmICFNTVVcbiAxNTM6XHRcdGJvb2xcbiAxNTQ6XHRcbiAxNTU6XHRjb25maWcgRE1BX0NPSEVSRU5UX1BPT0xcbiAxNTY6XHRcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuIDE1NzpcdFx0Ym9vbFxuIDE1ODpcdFxuIDE1OTpcdGNvbmZpZyBETUFfR0xPQkFMX1BPT0xcbiAxNjA6XHRcdHNlbGVjdCBETUFfREVDTEFSRV9DT0hFUkVOVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEwNwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yIChDTUEpIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG5haWwgZG93biBob3cgdGhlIENNQSBjb25maWd1cmF0aW9uIGlzIGhhbmRsZWQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBlaXRoZXIgYGtlcm5lbC9kbWEvS2NvbmZpZ2Agb3IsIGlmIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNpZGUgbW9yZSBnZW5lcmFsbHksIGBtbS9LY29uZmlnYC4gVGhlc2UgYXJlIHRoZSBjcnVjaWFsIGxvY2F0aW9ucyBmb3IgZGVmaW5pbmcgYW5kIGVuYWJsaW5nIGBDT05GSUdfRE1BX0NNQWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgcG9zc2libGUgaW50cmljYWNpZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBib29sYCBvciBgdHJpc3RhdGVgIGRlZmluaXRpb24sIGxpa2VseSB3aXRoIHNvbWUgc3VwcG9ydGluZyBoZWxwIHRleHQuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBJIG1pZ2h0IHNlZSBjb25kaXRpb25hbCBibG9ja3MgYmFzZWQgb24gc3BlY2lmaWMgQ1BVIGZlYXR1cmVzIG9yIG1lbW9yeSBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIFRoaXMgc2hvdWxkIHF1aWNrbHkgY2xhcmlmeSB0aGUgY3VycmVudCBzdGF0ZSBvZiBETUEgQ01BIGluIHRoaXMga2VybmVsIGJ1aWxkIGFuZCBob3cgaXQmIzM5O3MgY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERNQV9DTUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2RtYS9LY29uZmlnPTE3Mz1jb25maWcgQVJDSF9IQVNfRE1BX0FMTE9DXG4tLVxua2VybmVsL2RtYS9LY29uZmlnLTE3OC1cbmtlcm5lbC9kbWEvS2NvbmZpZzoxNzk6Y29uZmlnIERNQV9DTUFcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODAtXHRib29sIFwmIzM0O0RNQSBDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIERNQSBLY29uZmlnKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdGhlIGFuc3dlciBsaWVzIHdpdGhpbiB0aGUgRE1BIGNvbmZpZ3VyYXRpb24sIHNvIGxldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvZG1hL0tjb25maWdgLiBBbmQsIGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHNpbWlsYXIgaXNzdWVzLCBJJiMzOTtsbCBzdGFydCBteSBkZXRhaWxlZCByZXZpZXcgYXJvdW5kIGxpbmUgMTc5LiBIb3BlZnVsbHksIHRoZSBhbnN3ZXIgaXMgd2l0aGluIHRoYXQgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZG1hL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3NTpcdFx0ZGVwZW5kcyBvbiAhRE1BX0RJUkVDVF9SRU1BUFxuIDE3NjpcdFx0ZGVwZW5kcyBvbiAhRE1BX0dMT0JBTF9QT09MXG4gMTc3Olx0XHRib29sXG4gMTc4Olx0XG4gMTc5Olx0Y29uZmlnIERNQV9DTUFcbiAxODA6XHRcdGJvb2wgXCYjMzQ7RE1BIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclwmIzM0O1xuIDE4MTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0RNQV9DT05USUdVT1VTIFx1MDAyNlx1MDAyNiBDTUFcbiAxODI6XHRcdGhlbHBcbiAxODM6XHRcdCAgVGhpcyBlbmFibGVzIHRoZSBDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3Igd2hpY2ggYWxsb3dzIGRyaXZlcnNcbiAxODQ6XHRcdCAgdG8gYWxsb2NhdGUgYmlnIHBoeXNpY2FsbHktY29udGlndW91cyBibG9ja3Mgb2YgbWVtb3J5IGZvciB1c2Ugd2l0aFxuIDE4NTpcdFx0ICBoYXJkd2FyZSBjb21wb25lbnRzIHRoYXQgZG8gbm90IHN1cHBvcnQgSS9PIG1hcCBub3Igc2NhdHRlci1nYXRoZXIuXG4gMTg2Olx0XG4gMTg3Olx0XHQgIFlvdSBjYW4gZGlzYWJsZSBDTUEgYnkgc3BlY2lmeWluZyBcJiMzNDtjbWE9MFwmIzM0OyBvbiB0aGUga2VybmVsJiMzOTtzIGNvbW1hbmRcbiAxODg6XHRcdCAgbGluZS5cbiAxODk6XHRcbiAxOTA6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIFx1MDAzY2tlcm5lbC9kbWEvY29udGlndW91cy5jXHUwMDNlLlxuIDE5MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBcJiMzNDtuXCYjMzQ7LlxuIDE5MjpcdFxuIDE5MzpcdGlmICBETUFfQ01BXG4gMTk0Olx0XG4gMTk1Olx0Y29uZmlnIERNQV9OVU1BX0NNQVxuIDE5NjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc2VwYXJhdGUgRE1BIENvbnRpZ3VvdXMgTWVtb3J5IEFyZWEgZm9yIE5VTUEgTm9kZVwmIzM0O1xuIDE5NzpcdFx0ZGVwZW5kcyBvbiBOVU1BXG4gMTk4Olx0XHRoZWxwXG4gMTk5Olx0XHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBnZXQgbnVtYSBDTUEgYXJlYXMgc28gdGhhdCBOVU1BIGRldmljZXNcbiAyMDA6XHRcdCAgY2FuIGdldCBsb2NhbCBtZW1vcnkgYnkgRE1BIGNvaGVyZW50IEFQSXMuXG4gMjAxOlx0XG4gMjAyOlx0XHQgIFlvdSBjYW4gc2V0IHRoZSBzaXplIG9mIHBlcm51bWEgQ01BIGJ5IHNwZWNpZnlpbmcgXCYjMzQ7Y21hX3Blcm51bWE9c2l6ZVwmIzM0O1xuIDIwMzpcdFx0ICBvciBzZXQgdGhlIG5vZGUgaWQgYW5kIGl0cyBzaXplIG9mIENNQSBieSBzcGVjaWZ5aW5nIFwmIzM0O251bWFfY21hPVxuIDIwNDpcdFx0ICBcdTAwM2Nub2RlXHUwMDNlOnNpemVbLFx1MDAzY25vZGVcdTAwM2U6c2l6ZV1cJiMzNDsgb24gdGhlIGtlcm5lbCYjMzk7cyBjb21tYW5kIGxpbmUuIEFuZCBpblxuIDIwNTpcdFx0ICByYXJlIGNhc2UgdGhhdCB0aGUgYWJvdmUgMiBhcmUgYm90aCBzZXR1cCwgdGhlbiB0aGUgXCYjMzQ7bnVtYV9jbWE9XCYjMzQ7XG4gMjA2Olx0XHQgIHRha2VzIHByaW9yaXR5IGZvciB0aGUgc3BlY2lmaWVkIG51bWEgbm9kZXMuXG4gMjA3Olx0XG4gMjA4Olx0Y29uZmlnIENNQV9TSVpFX1BFUk5VTUFcbiAyMDk6XHRcdGJvb2wgXCYjMzQ7RGVmYXVsdCBDTUEgYXJlYSBwZXIgTlVNQSBub2RlXCYjMzQ7XG4gMjEwOlx0XHRkZXBlbmRzIG9uIERNQV9OVU1BX0NNQVxuIDIxMTpcdFx0ZGVmYXVsdCB5XG4gMjEyOlx0XHRoZWxwXG4gMjEzOlx0XHQgIE9uIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gb25lIE5VTUEgbm9kZSwgdGhlIHNlbGVjdGVkIENNQVxuIDIxNDpcdFx0ICBhcmVhIHNpemUgd2lsbCBiZSBhbHNvIGFsbG9jYXRlZCBvbiBlYWNoIGFkZGl0aW9uYWwgbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgSU9NTVUgRE1BIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgSU9NTVVfRE1BYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byB0aGUgYGRyaXZlcnMvaW9tbXUvS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2suIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyBpdCBoYXMuIEtub3dpbmcgdGhpcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgSU9NTVUgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9NTVVfRE1BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L0tjb25maWc9MTQ4PWNvbmZpZyBPRl9JT01NVVxuLS1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xNTItIyBJT01NVS1hZ25vc3RpYyBETUEtbWFwcGluZyBsYXllclxuZHJpdmVycy9pb21tdS9LY29uZmlnOjE1Mzpjb25maWcgSU9NTVVfRE1BXG5kcml2ZXJzL2lvbW11L0tjb25maWctMTU0LVx0ZGVmX2Jvb2wgQVJNNjQgfHwgWDg2IHx8IFMzOTBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NTQKCQkJCQkJCW91dHB1dDogMjY2CgkJCQkJCQl0aG91Z2h0czogMTczNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2VzIGZvciBGb2N1c2VkIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNoYW5nZXMgYW5kIGlzb2xhdGUgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIGZ1enppbmcuICBJJiMzOTttIGxvb2tpbmcgYXQgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgIGFuZCBvdGhlciBhZmZlY3RlZCBmdW5jdGlvbnMuICBTcGVjaWZpY2FsbHksIEkmIzM5O3ZlIGlkZW50aWZpZWQ6CgoqICAgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLgoqICAgYGRtYV9mcmVlX2NvbnRpZ3VvdXNgIGluIGBrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhgLgoqICAgYF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AgKHN0YXRpYykgaW4gYGtlcm5lbC9kbWEvZGlyZWN0LmNgLCBjYWxsZWQgYnkgYGRtYV9kaXJlY3RfYWxsb2NgLCBgZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AsIGFuZCBgZG1hX2RpcmVjdF9hbGxvY19ub19tYXBwaW5nYC4KKiAgIGBkbWFfY29tbW9uX2FsbG9jX3BhZ2VzYCBpbiBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYC4KKiAgIGBpb21tdV9kbWFfYWxsb2NfcGFnZXNgIChzdGF0aWMpIGluIGBkcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jYCwgY2FsbGVkIGJ5IGBpb21tdV9kbWFfYWxsb2NgLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBhcmUgc3VpdGFibGUgZm9jdXMgc3ltYm9scy4gIFJlbWVtYmVyaW5nIHRoZSBndWlkZWxpbmVzLCB3ZSBtdXN0IGF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyBsaWtlIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMuICBIb3dldmVyLCBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZmAgc2VlbXMgc3BlY2lmaWMsIGEgaGVscGVyIGZvciBhbGxvY2F0aW5nIHBhZ2VzIHdpdGggZXhhY3Qgbm9kZSBJRCwgZGlzdGluY3QgZnJvbSwgc2F5LCBga21hbGxvY2Agb3IgYF9fYWxsb2NfcGFnZXNgLgoKSSYjMzk7bSByZXZpc2l0aW5nIHRoZSBjaGFuZ2VkIGZ1bmN0aW9ucyBhZ2FpbiwgdGhpcyB0aW1lIGZvY3VzaW5nIG9uIHRoZWlyIGNvbnRleHQ6CgoxLiAgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgOiBgaW9tbXVfZG1hX2FsbG9jX3BhZ2VzYCAoc3RhdGljKSBhbmQgaXRzIGNhbGxlciBgaW9tbXVfZG1hX2FsbG9jYC4KMi4gIGBrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY2A6IGBkbWFfZnJlZV9jb250aWd1b3VzYC4KMy4gIGBrZXJuZWwvZG1hL2RpcmVjdC5jYDogYF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AgKHN0YXRpYykgYW5kIGNhbGxlcnMgYGRtYV9kaXJlY3RfYWxsb2NfcGFnZXNgLCBgZG1hX2RpcmVjdF9hbGxvY2AsIGFuZCBgZG1hX2RpcmVjdF9hbGxvY19ub19tYXBwaW5nYC4KNC4gIGBrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNgOiBgZG1hX2NvbW1vbl9hbGxvY19wYWdlc2AuCjUuICBgbW0vcGFnZV9hbGxvYy5jYDogYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgLgoKVGhlc2Ugc2VlbSB0byBiZSBETUEgYWxsb2NhdGlvbiBvciBleGFjdC1uaWQgcGFnZSBhbGxvY2F0aW9uIGZ1bmN0aW9ucywgbWFraW5nIHRoZW0gZ29vZCBjYW5kaWRhdGVzLiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCBoZXJlLiBJJiMzOTttIGdvaW5nIHRvIGNvbnN1bHQgdGhlIGBnaXQgbG9nYCBhbmQgdGhlIGBnaXQgZGlmZmAgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKQ2hlY2tpbmcgdGhlIGRpZmYgcmV2ZWFscyBhIGZldyBtb3JlIGRldGFpbHM6CiogICBgaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oYCBpbmNsdWRlcyBhbiBpbmxpbmUgYGRtYV9mcmVlX2NvbnRpZ3VvdXNgIHdoZW4gYCFDT05GSUdfRE1BX0NNQWAuCiogICBgaW5jbHVkZS9saW51eC9nZnAuaGA6IGRlY2xhcmVzIGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYC4KCkkmIzM5O2xsIGNoZWNrIHRoZSBjb25maWcgcmVxdWlyZW1lbnRzOgoqICAgYERNQV9DTUFgIGZvciBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgLgoqICAgYElPTU1VX0RNQWAgZm9yIGBkcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jYC4KKiAgIGBETUFfT1BTX0hFTFBFUlNgIGZvciBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYC4KCk9uIHRoZSB0YXJnZXQgYW1kNjQgYXJjaGl0ZWN0dXJlLCBgSEFTX0RNQWAgaXMgZGVmYXVsdCAmIzM5O3kmIzM5Oy4gYElPTU1VX0RNQWAgaXMgZGVmYXVsdCBmb3IgWDg2IHNvIGxpa2VseSBlbmFibGVkLiAgYERNQV9DTUFgIGRlcGVuZHMgb24gYEhBVkVfRE1BX0NPTlRJR1VPVVMgJmFtcDsmYW1wOyBDTUFgLiAgYERNQV9PUFNfSEVMUEVSU2AgaXMgYm9vbC4gSSBjb25jbHVkZSB0aGF0IGBDTUFgLCBgRE1BX0NNQWAsIGBJT01NVV9ETUFgLCBhbmQgYERNQV9PUFNfSEVMUEVSU2AgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4KCldpdGggYWxsIG9mIHRoaXMgSSBjYW4gbm93IGRlZmluZSB0aGUgRm9jdXNTeW1ib2xzOgoKKiAgIGBkbWFfZnJlZV9jb250aWd1b3VzYAoqICAgYF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AKKiAgIGBkbWFfY29tbW9uX2FsbG9jX3BhZ2VzYAoqICAgYGlvbW11X2RtYV9hbGxvY19wYWdlc2AKKiAgIGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYAoqICAgYGRtYV9kaXJlY3RfYWxsb2NfcGFnZXNgCiogICBgZG1hX2RpcmVjdF9hbGxvY2AKKiAgIGBpb21tdV9kbWFfYWxsb2NgCgpGaW5hbGx5LCBhIHF1aWNrIG5vdGUgYWJvdXQgc3RhdGljIGZ1bmN0aW9uczogYWx0aG91Z2ggdGhleSBhcmUgc3RhdGljIGluIHRoZWlyIC5jIGZpbGUsIHdpdGggZGVidWcgaW5mbyBlbmFibGVkLCB0aGVpciBzeW1ib2xzIGFyZSB2aXNpYmxlLiBJbmNsdWRpbmcgYm90aCB0aGUgc3RhdGljIGFuZCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIGVuc3VyZXMgY29tcGxldGUgY292ZXJhZ2UKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RE1BX0NNQSYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7SU9NTVVfRE1BJiMzNDssCiAgICAmIzM0O0RNQV9PUFNfSEVMUEVSUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YmIzM0OywKICAgICYjMzQ7ZG1hX2ZyZWVfY29udGlndW91cyYjMzQ7LAogICAgJiMzNDtfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7ZG1hX2NvbW1vbl9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDtpb21tdV9kbWFfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7ZG1hX2RpcmVjdF9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDtkbWFfZGlyZWN0X2FsbG9jJiMzNDssCiAgICAmIzM0O2lvbW11X2RtYV9hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljIGFjcm9zcyBtdWx0aXBsZSBjb3JlIHN1YnN5c3RlbXMgKGtlcm5lbC9kbWEvLCBtbS8sIGRyaXZlcnMvaW9tbXUvKS4gSXQgcmVwbGFjZXMgcG93ZXItb2YtdHdvIHBhZ2UgYWxsb2NhdGlvbnMgYW5kIF9fZnJlZV9wYWdlcygpIHdpdGggYWxsb2NfcGFnZXNfZXhhY3RfbmlkKCkgYW5kIGZyZWVfcGFnZXNfZXhhY3QoKSwgd2hpY2ggc3BsaXRzIGFuZCBmcmVlcyB0cmFpbGluZyB1bnVzZWQgcGFnZXMuIFRoaXMgY2hhbmdlcyBtZW1vcnkgYWxpZ25tZW50LCBwYWdlIGNvdW50IHRyYWNraW5nLCBhbmQgaW50cm9kdWNlcyBwb3RlbnRpYWwgcnVudGltZSBhc3NlcnRpb24gdmlvbGF0aW9ucyBpbiBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKCkgaWYgY2FsbGVycyBwYXNzIGNlcnRhaW4gR0ZQIGZsYWdzLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBETUEgYWxsb2NhdGlvbnMgaW4gdmlydHVhbGl6ZWQgYW5kIGVtdWxhdGVkIGRldmljZSBkcml2ZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtETUFfQ01BJiMzNDssCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtJT01NVV9ETUEmIzM0OywKICAgICYjMzQ7RE1BX09QU19IRUxQRVJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZiYjMzQ7LAogICAgJiMzNDtkbWFfZnJlZV9jb250aWd1b3VzJiMzNDssCiAgICAmIzM0O19fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDtkbWFfY29tbW9uX2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvbW11X2RtYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDtkbWFfZGlyZWN0X2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2RtYV9kaXJlY3RfYWxsb2MmIzM0OywKICAgICYjMzQ7aW9tbXVfZG1hX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBETUEgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgYWNyb3NzIG11bHRpcGxlIGNvcmUgc3Vic3lzdGVtcyAoa2VybmVsL2RtYS8sIG1tLywgZHJpdmVycy9pb21tdS8pLiBJdCByZXBsYWNlcyBwb3dlci1vZi10d28gcGFnZSBhbGxvY2F0aW9ucyBhbmQgX19mcmVlX3BhZ2VzKCkgd2l0aCBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpLCB3aGljaCBzcGxpdHMgYW5kIGZyZWVzIHRyYWlsaW5nIHVudXNlZCBwYWdlcy4gVGhpcyBjaGFuZ2VzIG1lbW9yeSBhbGlnbm1lbnQsIHBhZ2UgY291bnQgdHJhY2tpbmcsIGFuZCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBydW50aW1lIGFzc2VydGlvbiB2aW9sYXRpb25zIGluIGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoKSBpZiBjYWxsZXJzIHBhc3MgY2VydGFpbiBHRlAgZmxhZ3MuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIERNQSBhbGxvY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQgZGV2aWNlIGRyaXZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhbGxiYWNrIHBhdGhzIChpbiBkbWEtaW9tbXUsIGRtYS1kaXJlY3QsIGFuZCBvcHNfaGVscGVycykgdG8gdXNlIGFsbG9jX3BhZ2VzX2V4YWN0X25pZCgpIGFuZCBmcmVlX3BhZ2VzX2V4YWN0KCkgaW5zdGVhZCBvZiBhbGxvY19wYWdlc19ub2RlKCkgYW5kIF9fZnJlZV9wYWdlcygpIHdpdGggcGFnZSBvcmRlcnMuIEl0IGFsc28gcmVtb3ZlcyB0aGUgX19tZW1pbml0IGFubm90YXRpb24gZnJvbSBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKCkuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgYWZmZWN0IHBhZ2UtbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkgYW5kIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBETUEgc3Vic3lzdGVtLiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSB6ZXJvZWQgKHZpYSBtZW1zZXQpIG9yIG1hbmFnZWQgcGVyIHN0YW5kYXJkIERNQSBzdWJzeXN0ZW0gY29udmVudGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcGFnZSBsaWZldGltZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdG9yIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGU2NWI1YzhhZTA1NWFjYTE5MWMxMzE2ZTlhZjM3NGQwZGFkNjU1ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDE6NDc6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYwppbmRleCA1OGM2MjQ1MTNjZDQzLi44ZjI2MmM4MzgwMmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMKQEAgLTE2MjgsMTAgJiM0MzsxNjI4LDEyIEBAIHN0YXRpYyB2b2lkICppb21tdV9kbWFfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAl2b2lkICpjcHVfYWRkcjsKIAogCXBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIGFsbG9jX3NpemUsIGdmcCk7Ci0JaWYgKCFwYWdlKQotCQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIGdldF9vcmRlcihhbGxvY19zaXplKSk7Ci0JaWYgKCFwYWdlKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJaWYgKCFwYWdlKSB7CiYjNDM7CQljcHVfYWRkciA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBhbGxvY19zaXplLCBnZnApOwomIzQzOwkJaWYgKCFjcHVfYWRkcikKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoY3B1X2FkZHIpOwomIzQzOwl9CiAKIAlpZiAoIWNvaGVyZW50IHx8IFBhZ2VIaWdoTWVtKHBhZ2UpKSB7CiAJCXBncHJvdF90IHByb3QgPSBkbWFfcGdwcm90KGRldiwgUEFHRV9LRVJORUwsIGF0dHJzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaAppbmRleCA4ZmFlMmI3ZGViMjBkLi4zZWYzMDAzNzEzYTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oCkBAIC0xNDMsNyAmIzQzOzE0Myw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2ZyZWVfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAogCQlzaXplX3Qgc2l6ZSkKIHsKLQlfX2ZyZWVfcGFnZXMocGFnZSwgZ2V0X29yZGVyKHNpemUpKTsKJiM0MzsJZnJlZV9wYWdlc19leGFjdChwYWdlX2FkZHJlc3MocGFnZSksIHNpemUpOwogfQogI2VuZGlmIC8qIENPTkZJR19ETUFfQ01BKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKaW5kZXggODcyYmM1M2YzMmVjOC4uYWE0NjAxODA1ZjIxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC0zMjksNyAmIzQzOzMyOSw3IEBAIHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spIF9fYWxsb2Nfc2l6ZSgxKTsKIAogdm9pZCBmcmVlX3BhZ2VzX2V4YWN0KHZvaWQgKnZpcnQsIHNpemVfdCBzaXplKTsKIAotX19tZW1pbml0IHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMik7CiYjNDM7dm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spIF9fYWxsb2Nfc2l6ZSgyKTsKICNkZWZpbmUgYWxsb2NfcGFnZXNfZXhhY3RfbmlkKC4uLikJCQkJCVwKIAlhbGxvY19ob29rcyhhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKF9fVkFfQVJHU19fKSkKIApkaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYwppbmRleCA2NjA5MzQ2MDU4NGU4Li45MDkzN2RjN2M2MjdkIDEwMDY0NAotLS0gYS9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYwpAQCAtNDUxLDggJiM0Mzs0NTEsOCBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKQogICoKICAqIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgbWVtb3J5IGFsbG9jYXRlZCBieSBkbWFfYWxsb2NfY29udGlndW91cygpLiBBcyB0aGUKICAqIGNtYV9yZWxlYXNlIHJldHVybnMgZmFsc2Ugd2hlbiBwcm92aWRlZCBwYWdlcyBkbyBub3QgYmVsb25nIHRvIGNvbnRpZ3VvdXMKLSAqIGFyZWEgYW5kIHRydWUgb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHRoZW4gZG9lcyBhIGZhbGxiYWNrIF9fZnJlZV9wYWdlcygpCi0gKiB1cG9uIGEgZmFsc2UtcmV0dXJuLgomIzQzOyAqIGFyZWEgYW5kIHRydWUgb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHRoZW4gZG9lcyBhIGZhbGxiYWNrCiYjNDM7ICogZnJlZV9wYWdlc19leGFjdCgpIHVwb24gYSBmYWxzZS1yZXR1cm4uCiAgKi8KIHZvaWQgZG1hX2ZyZWVfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgc2l6ZSkKIHsKQEAgLTQ3Niw3ICYjNDM7NDc2LDcgQEAgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKQogCX0KIAogCS8qIG5vdCBpbiBhbnkgY21hLCBmcmVlIGZyb20gYnVkZHkgKi8KLQlfX2ZyZWVfcGFnZXMocGFnZSwgZ2V0X29yZGVyKHNpemUpKTsKJiM0MzsJZnJlZV9wYWdlc19leGFjdChwYWdlX2FkZHJlc3MocGFnZSksIHNpemUpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9kaXJlY3QuYyBiL2tlcm5lbC9kbWEvZGlyZWN0LmMKaW5kZXggZGE2NjVjYTIyZDVjMC4uZWE2NDQ1M2Q3MzcwYSAxMDA2NDQKLS0tIGEva2VybmVsL2RtYS9kaXJlY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZG1hL2RpcmVjdC5jCkBAIC0xMjAsNiAmIzQzOzEyMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJaW50IG5vZGUgPSBkZXZfdG9fbm9kZShkZXYpOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXU2NCBwaHlzX2xpbWl0OwomIzQzOwl2b2lkICp2YTsKIAogCVdBUk5fT05fT05DRSghUEFHRV9BTElHTkVEKHNpemUpKTsKIApAQCAtMTMzLDkgJiM0MzsxMzQsOSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQlkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgc2l6ZSk7CiAJfQogCi0Jd2hpbGUgKChwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIGdldF9vcmRlcihzaXplKSkpCi0JICAgICAgICZhbXA7JmFtcDsgIWRtYV9jb2hlcmVudF9vayhkZXYsIHBhZ2VfdG9fcGh5cyhwYWdlKSwgc2l6ZSkpIHsKLQkJX19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7CiYjNDM7CXdoaWxlICgodmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQobm9kZSwgc2l6ZSwgZ2ZwKSkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgIWRtYV9jb2hlcmVudF9vayhkZXYsIHZpcnRfdG9fcGh5cyh2YSksIHNpemUpKSB7CiYjNDM7CQlmcmVlX3BhZ2VzX2V4YWN0KHZhLCBzaXplKTsKIAogCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEzMikgJmFtcDsmYW1wOwogCQkgICAgcGh5c19saW1pdCAmbHQ7IERNQV9CSVRfTUFTSyg2NCkgJmFtcDsmYW1wOwpAQCAtMTQ2LDYgJiM0MzsxNDcsNyBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQllbHNlCiAJCQlyZXR1cm4gTlVMTDsKIAl9CiYjNDM7CXBhZ2UgPSB2YSA/IHZpcnRfdG9fcGFnZSh2YSkgOiBOVUxMOwogCiAJcmV0dXJuIHBhZ2U7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMgYi9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMKaW5kZXggNmI1ZjkyMDhkMzFjMC4uNWNkZjNmNjBjZjQ3OSAxMDA2NDQKLS0tIGEva2VybmVsL2RtYS9vcHNfaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYwpAQCAtNjcsMTAgJiM0Mzs2NywxMyBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2NvbW1vbl9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCXBoeXNfYWRkcl90IHBoeXM7CiAKIAlwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApOwotCWlmICghcGFnZSkKLQkJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUoZGV2X3RvX25vZGUoZGV2KSwgZ2ZwLCBnZXRfb3JkZXIoc2l6ZSkpOwotCWlmICghcGFnZSkKLQkJcmV0dXJuIE5VTEw7CiYjNDM7CWlmICghcGFnZSkgewomIzQzOwkJdm9pZCAqdmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQoZGV2X3RvX25vZGUoZGV2KSwgc2l6ZSwgZ2ZwKTsKJiM0MzsKJiM0MzsJCWlmICghdmEpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQlwYWdlID0gdmlydF90b19wYWdlKHZhKTsKJiM0MzsJfQogCiAJcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsKIAlpZiAodXNlX2RtYV9pb21tdShkZXYpKQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IGM0ZGM2MWVjNjYzZWUuLmQzYTEzNWRmY2RkM2QgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTU2MzcsNyAmIzQzOzU2MzcsNyBAQCBFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZik7CiAgKgogICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYXJlYSBvciAlTlVMTCBpbiBjYXNlIG9mIGVycm9yLgogICovCi12b2lkICogX19tZW1pbml0IGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKQomIzQzO3ZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKQogewogCXVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKIAlzdHJ1Y3QgcGFnZSAqcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBETUEgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOIHNjcnV0aW55LiBGcm9tIGEgY3Vyc29yeSBnbGFuY2UsIHRoaXMgbG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gZm9yIERNQSBtZW1vcnkgYWxsb2NhdGlvbi4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgpGaXJzdCwgdGhlIHBhdGNoIHByaW1hcmlseSBmb2N1c2VzIG9uIGhvdyBjb250aWd1b3VzIERNQSBtZW1vcnkgaXMgaGFuZGxlZCB3aGVuIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBpc24mIzM5O3QgYXZhaWxhYmxlIG9yIGZhaWxzLiBCZWZvcmUgdGhpcywgdGhlIHN5c3RlbSB3YXMgdXNpbmcgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYGdldF9vcmRlcihzaXplKWAuIFRoaXMgbWVhbnQgaXQgd291bGQgYWxsb2NhdGUgYSBwb3dlci1vZi10d28gbnVtYmVyIG9mIHBhZ2VzLCBldmVuIGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSB3YXNuJiMzOTt0IGEgcG93ZXIgb2YgdHdvLiBUaGUgcG90ZW50aWFsIHByb2JsZW0gd2FzIHRoZSBhbGxvY2F0aW9uIG9mIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkIHdoaWNoIG1lYW5zIHRoZSB1bnVzZWQgcGFnZXMgd2VyZSBlaXRoZXIgYmVpbmcgd2FzdGVkIG9yIGluY29ycmVjdGx5IGRlYWxsb2NhdGVkLiBXaGVuIGZyZWVpbmcgdGhvc2UgcGFnZXMsIHRoZSBjb2RlIHdhcyB1c2luZyBgX19mcmVlX3BhZ2VzYCB0byBkZWFsbG9jYXRlIHRoZSBwb3dlciBvZiB0d28gb2YgcGFnZXMuCgpOb3csIHRoZSBwYXRjaCByZXBsYWNlcyB0aGlzIHdpdGggYGFsbG9jX3BhZ2VzX2V4YWN0X25pZGAgYW5kIGBmcmVlX3BhZ2VzX2V4YWN0YC4gVGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgcGFydCBiZWdpbnMuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBgYWxsb2NfcGFnZXNfZXhhY3RgIHNlZW1zIHRvIGFsbG9jYXRlIGEgcG93ZXItb2YtdHdvIGJsb2NrIG9mIHBhZ2VzLCBidXQgaW1tZWRpYXRlbHkgcmVsZWFzZXMgdGhlIHVudXNlZCBwYWdlcyBiYWNrIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhbGxvY2F0aW5nIGEgYmxvY2sgYW5kIHRoZW4gdHJpbW1pbmcgaXQgZG93biB0byB0aGUgZXhhY3Qgc2l6ZS4gYGZyZWVfcGFnZXNfZXhhY3RgIHRoZW4gZnJlZXMgb25seSB0aGUgZXhhY3QgbnVtYmVyIG9mIHBhZ2VzIHRoYXQgd2VyZSBhbGxvY2F0ZWQgKGFsaWduZWQgdG8gYFBBR0VfU0laRWApLiBUaGlzIGlzIGEgY2xlYXIgaW1wcm92ZW1lbnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgZWZmaWNpZW5jeS4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYWxsb2NfcGFnZXNfZXhhY3RgIGFuZCBgZnJlZV9wYWdlc19leGFjdGAgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBjb250aWd1b3VzIERNQSBhbGxvY2F0aW9ucy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlJiMzOTtzIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdGhlIERNQSBlbmdpbmUgb3IgdXNlcnNwYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB3aGVyZSBhbmQgaG93IHRoZSBtZW1vcnkgaXMgY2xlYXJlZCAoaWYgYXQgYWxsKSB3aXRoaW4gdGhlc2UgbmV3IGZ1bmN0aW9ucy4gSSYjMzk7bGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IHBvdGVudGlhbCBvZmYtYnktb25lIGVycm9ycyBvciBib3VuZHMgdmlvbGF0aW9ucyBkdXJpbmcgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwcm9jZXNzLiBHaXZlbiB0aGUgZXhpc3RpbmcgY29kZSYjMzk7cyByZWxpYW5jZSBvbiBwb3dlci1vZi10d28gYWxsb2NhdGlvbnMsIGl0IHdvdWxkIGJlIGltcG9ydGFudCB0byBtYWtlIHN1cmUgdGhlIHRyaW1taW5nIG9wZXJhdGlvbnMgZG9uJiMzOTt0IGludHJvZHVjZSB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3BhZ2VzX2V4YWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tmZW5jZS9jb3JlLmM9OTk4PXN0YXRpYyBpbnQga2ZlbmNlX2luaXRfbGF0ZSh2b2lkKVxuLS1cbm1tL2tmZW5jZS9jb3JlLmMtMTAyNS1cbm1tL2tmZW5jZS9jb3JlLmM6MTAyNjpcdF9fa2ZlbmNlX3Bvb2wgPSBhbGxvY19wYWdlc19leGFjdChLRkVOQ0VfUE9PTF9TSVpFLFxubW0va2ZlbmNlL2NvcmUuYy0xMDI3LVx0XHRcdFx0XHQgIEdGUF9LRVJORUwgfCBfX0dGUF9TS0lQX0tBU0FOKTtcbi0tXG5tbS9rZmVuY2UvY29yZS5jLTEwMzAtXG5tbS9rZmVuY2UvY29yZS5jOjEwMzE6XHRrZmVuY2VfbWV0YWRhdGFfaW5pdCA9IGFsbG9jX3BhZ2VzX2V4YWN0KEtGRU5DRV9NRVRBREFUQV9TSVpFLFxubW0va2ZlbmNlL2NvcmUuYy0xMDMyLVx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMIHwgX19HRlBfU0tJUF9LQVNBTik7XG4tLVxubW0vbW1faW5pdC5jPTIzNjA9dm9pZCAqX19pbml0IGFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSxcbi0tXG5tbS9tbV9pbml0LmMtMjQzOS1cdFx0XHQgKiBzb21lIHBhZ2VzIGF0IHRoZSBlbmQgb2YgaGFzaCB0YWJsZSB3aGljaFxubW0vbW1faW5pdC5jOjI0NDA6XHRcdFx0ICogYWxsb2NfcGFnZXNfZXhhY3QoKSBhdXRvbWF0aWNhbGx5IGRvZXNcbm1tL21tX2luaXQuYy0yNDQxLVx0XHRcdCAqL1xubW0vbW1faW5pdC5jOjI0NDI6XHRcdFx0dGFibGUgPSBhbGxvY19wYWdlc19leGFjdChzaXplLCBnZnBfZmxhZ3MpO1xubW0vbW1faW5pdC5jLTI0NDMtXHRcdFx0a21lbWxlYWtfYWxsb2ModGFibGUsIHNpemUsIDEsIGdmcF9mbGFncyk7XG4tLVxubW0vbm9tbXUuYz05MTQ9c3RhdGljIGludCBkb19tbWFwX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbm9tbXUuYy05NTgtXG5tbS9ub21tdS5jOjk1OTpcdGJhc2UgPSBhbGxvY19wYWdlc19leGFjdCh0b3RhbCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7XG5tbS9ub21tdS5jLTk2MC1cdGlmICghYmFzZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTU4MT1zdGF0aWMgdm9pZCAqbWFrZV9hbGxvY19leGFjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTYwMC0vKipcbm1tL3BhZ2VfYWxsb2MuYzo1NjAxOiAqIGFsbG9jX3BhZ2VzX2V4YWN0IC0gYWxsb2NhdGUgYW4gZXhhY3QgbnVtYmVyIHBoeXNpY2FsbHktY29udGlndW91cyBwYWdlcy5cbm1tL3BhZ2VfYWxsb2MuYy01NjAyLSAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlXG4tLVxubW0vcGFnZV9hbGxvYy5jLTU2MTQtICovXG5tbS9wYWdlX2FsbG9jLmM6NTYxNTp2b2lkICphbGxvY19wYWdlc19leGFjdF9ub3Byb2Yoc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxubW0vcGFnZV9hbGxvYy5jLTU2MTYte1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy01NjI1LX1cbm1tL3BhZ2VfYWxsb2MuYzo1NjI2OkVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKTtcbm1tL3BhZ2VfYWxsb2MuYy01NjI3LVxubW0vcGFnZV9hbGxvYy5jLTU2MjgtLyoqXG5tbS9wYWdlX2FsbG9jLmM6NTYyOTogKiBhbGxvY19wYWdlc19leGFjdF9uaWQgLSBhbGxvY2F0ZSBhbiBleGFjdCBudW1iZXIgb2YgcGh5c2ljYWxseS1jb250aWd1b3VzXG5tbS9wYWdlX2FsbG9jLmMtNTYzMC0gKlx0XHRcdCAgIHBhZ2VzIG9uIGEgbm9kZS5cbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTYzNC0gKlxubW0vcGFnZV9hbGxvYy5jOjU2MzU6ICogTGlrZSBhbGxvY19wYWdlc19leGFjdCgpLCBidXQgdHJ5IHRvIGFsbG9jYXRlIG9uIG5vZGUgbmlkIGZpcnN0IGJlZm9yZSBmYWxsaW5nXG5tbS9wYWdlX2FsbG9jLmMtNTYzNi0gKiBiYWNrLlxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01NjM5LSAqL1xubW0vcGFnZV9hbGxvYy5jOjU2NDA6dm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXG5tbS9wYWdlX2FsbG9jLmMtNTY0MS17XG4tLVxubW0vcGFnZV9hbGxvYy5jLTU2NTQtLyoqXG5tbS9wYWdlX2FsbG9jLmM6NTY1NTogKiBmcmVlX3BhZ2VzX2V4YWN0IC0gcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIHZpYSBhbGxvY19wYWdlc19leGFjdCgpXG5tbS9wYWdlX2FsbG9jLmM6NTY1NjogKiBAdmlydDogdGhlIHZhbHVlIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzX2V4YWN0LlxubW0vcGFnZV9hbGxvYy5jOjU2NTc6ICogQHNpemU6IHNpemUgb2YgYWxsb2NhdGlvbiwgc2FtZSB2YWx1ZSBhcyBwYXNzZWQgdG8gYWxsb2NfcGFnZXNfZXhhY3QoKS5cbm1tL3BhZ2VfYWxsb2MuYy01NjU4LSAqXG5tbS9wYWdlX2FsbG9jLmM6NTY1OTogKiBSZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBhbGxvY19wYWdlc19leGFjdC5cbm1tL3BhZ2VfYWxsb2MuYy01NjYwLSAqL1xuLS1cbm1tL3BhZ2VfZXh0LmM9MjY1PXN0YXRpYyB2b2lkICpfX21lbWluaXQgYWxsb2NfcGFnZV9leHQoc2l6ZV90IHNpemUsIGludCBuaWQpXG4tLVxubW0vcGFnZV9leHQuYy0yNjktXG5tbS9wYWdlX2V4dC5jOjI3MDpcdGFkZHIgPSBhbGxvY19wYWdlc19leGFjdF9uaWQobmlkLCBzaXplLCBmbGFncyk7XG5tbS9wYWdlX2V4dC5jLTI3MS1cdGlmIChhZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIENvZGUqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgYG1tL3BhZ2VfYWxsb2MuY2AsIGZvY3VzaW5nIG9uIGxpbmVzIHJvdWdobHkgYmV0d2VlbiA1NTgwIGFuZCA1NjYwLiBUaGF0IHJhbmdlIGlzIGxpa2VseSB0byBjb250YWluIHNvbWUgY3J1Y2lhbCBhbGxvY2F0aW9uIGxvZ2ljLCBwcm9iYWJseSBhIGNvcmUgZnVuY3Rpb24gb3IgYSBzaWduaWZpY2FudCBwYXJ0IG9mIGEgbGFyZ2VyIGFsbG9jYXRpb24gc2NoZW1lLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaXNtcyBhdCBwbGF5IOKAkyBob3cgdGhlIGtlcm5lbCBjaG9vc2VzIGFuZCBhc3NpZ25zIHBoeXNpY2FsIHBhZ2VzIHRvIHNhdGlzZnkgbWVtb3J5IHJlcXVlc3RzLiBJJiMzOTttIGhvcGluZyB0byBpZGVudGlmeSB0aGUgc3BlY2lmaWMgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBpbnZvbHZlZCBpbiBlaXRoZXIgdGhlIGRpcmVjdCBhbGxvY2F0aW9uIG9mIHBhZ2VzIGZyb20gdGhlIHN5c3RlbSBvciB0aGUgbWFuYWdlbWVudCBvZiB0aGUgcGFnZSBjYWNoZS4gSSYjMzk7bGwgbmVlZCB0byBkaXNzZWN0IGFueSBsb29wcywgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIGludHJpY2F0ZSBjYWxjdWxhdGlvbnMgcmVsYXRlZCB0byBwYWdlIGF2YWlsYWJpbGl0eSwgbm9kZSBzZWxlY3Rpb24sIHpvbmUgY29uc2lkZXJhdGlvbiwgYW5kIHBvdGVudGlhbGx5LCBmcmFnbWVudGF0aW9uIGF2b2lkYW5jZSBzdHJhdGVnaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTU4MDpcdFxuNTU4MTpcdHN0YXRpYyB2b2lkICptYWtlX2FsbG9jX2V4YWN0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IG9yZGVyLFxuNTU4MjpcdFx0XHRzaXplX3Qgc2l6ZSlcbjU1ODM6XHR7XG41NTg0Olx0XHRpZiAoYWRkcikge1xuNTU4NTpcdFx0XHR1bnNpZ25lZCBsb25nIG5yID0gRElWX1JPVU5EX1VQKHNpemUsIFBBR0VfU0laRSk7XG41NTg2Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKCh2b2lkICopYWRkcik7XG41NTg3Olx0XHRcdHN0cnVjdCBwYWdlICpsYXN0ID0gcGFnZSAmIzQzOyBucjtcbjU1ODg6XHRcbjU1ODk6XHRcdFx0X19zcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTtcbjU1OTA6XHRcdFx0d2hpbGUgKHBhZ2UgXHUwMDNjIC0tbGFzdClcbjU1OTE6XHRcdFx0XHRzZXRfcGFnZV9yZWZjb3VudGVkKGxhc3QpO1xuNTU5MjpcdFxuNTU5MzpcdFx0XHRsYXN0ID0gcGFnZSAmIzQzOyAoMVVMIFx1MDAzY1x1MDAzYyBvcmRlcik7XG41NTk0Olx0XHRcdGZvciAocGFnZSAmIzQzOz0gbnI7IHBhZ2UgXHUwMDNjIGxhc3Q7IHBhZ2UmIzQzOyYjNDM7KVxuNTU5NTpcdFx0XHRcdF9fZnJlZV9wYWdlc19vayhwYWdlLCAwLCBGUElfVE9fVEFJTCk7XG41NTk2Olx0XHR9XG41NTk3Olx0XHRyZXR1cm4gKHZvaWQgKilhZGRyO1xuNTU5ODpcdH1cbjU1OTk6XHRcbjU2MDA6XHQvKipcbjU2MDE6XHQgKiBhbGxvY19wYWdlc19leGFjdCAtIGFsbG9jYXRlIGFuIGV4YWN0IG51bWJlciBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgcGFnZXMuXG41NjAyOlx0ICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGVcbjU2MDM6XHQgKiBAZ2ZwX21hc2s6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb24sIG11c3Qgbm90IGNvbnRhaW4gX19HRlBfQ09NUFxuNTYwNDpcdCAqXG41NjA1Olx0ICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGFsbG9jX3BhZ2VzKCksIGV4Y2VwdCB0aGF0IGl0IGFsbG9jYXRlcyB0aGVcbjU2MDY6XHQgKiBtaW5pbXVtIG51bWJlciBvZiBwYWdlcyB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0LiAgYWxsb2NfcGFnZXMoKSBjYW4gb25seVxuNTYwNzpcdCAqIGFsbG9jYXRlIG1lbW9yeSBpbiBwb3dlci1vZi10d28gcGFnZXMuXG41NjA4Olx0ICpcbjU2MDk6XHQgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gbGltaXRlZCBieSBNQVhfUEFHRV9PUkRFUi5cbjU2MTA6XHQgKlxuNTYxMTpcdCAqIE1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJlbGVhc2VkIGJ5IGZyZWVfcGFnZXNfZXhhY3QoKS5cbjU2MTI6XHQgKlxuNTYxMzpcdCAqIFJldHVybjogcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGFyZWEgb3IgJU5VTEwgaW4gY2FzZSBvZiBlcnJvci5cbjU2MTQ6XHQgKi9cbjU2MTU6XHR2b2lkICphbGxvY19wYWdlc19leGFjdF9ub3Byb2Yoc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxuNTYxNjpcdHtcbjU2MTc6XHRcdHVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTtcbjU2MTg6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbjU2MTk6XHRcbjU2MjA6XHRcdGlmIChXQVJOX09OX09OQ0UoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9DT01QIHwgX19HRlBfSElHSE1FTSkpKVxuNTYyMTpcdFx0XHRnZnBfbWFzayBcdTAwMjY9IH4oX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pO1xuNTYyMjpcdFxuNTYyMzpcdFx0YWRkciA9IGdldF9mcmVlX3BhZ2VzX25vcHJvZihnZnBfbWFzaywgb3JkZXIpO1xuNTYyNDpcdFx0cmV0dXJuIG1ha2VfYWxsb2NfZXhhY3QoYWRkciwgb3JkZXIsIHNpemUpO1xuNTYyNTpcdH1cbjU2MjY6XHRFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZik7XG41NjI3Olx0XG41NjI4Olx0LyoqXG41NjI5Olx0ICogYWxsb2NfcGFnZXNfZXhhY3RfbmlkIC0gYWxsb2NhdGUgYW4gZXhhY3QgbnVtYmVyIG9mIHBoeXNpY2FsbHktY29udGlndW91c1xuNTYzMDpcdCAqXHRcdFx0ICAgcGFnZXMgb24gYSBub2RlLlxuNTYzMTpcdCAqIEBuaWQ6IHRoZSBwcmVmZXJyZWQgbm9kZSBJRCB3aGVyZSBtZW1vcnkgc2hvdWxkIGJlIGFsbG9jYXRlZFxuNTYzMjpcdCAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlXG41NjMzOlx0ICogQGdmcF9tYXNrOiBHRlAgZmxhZ3MgZm9yIHRoZSBhbGxvY2F0aW9uLCBtdXN0IG5vdCBjb250YWluIF9fR0ZQX0NPTVBcbjU2MzQ6XHQgKlxuNTYzNTpcdCAqIExpa2UgYWxsb2NfcGFnZXNfZXhhY3QoKSwgYnV0IHRyeSB0byBhbGxvY2F0ZSBvbiBub2RlIG5pZCBmaXJzdCBiZWZvcmUgZmFsbGluZ1xuNTYzNjpcdCAqIGJhY2suXG41NjM3Olx0ICpcbjU2Mzg6XHQgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9yICVOVUxMIGluIGNhc2Ugb2YgZXJyb3IuXG41NjM5Olx0ICovXG41NjQwOlx0dm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXG41NjQxOlx0e1xuNTY0MjpcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpO1xuNTY0MzpcdFx0c3RydWN0IHBhZ2UgKnA7XG41NjQ0Olx0XG41NjQ1Olx0XHRpZiAoV0FSTl9PTl9PTkNFKGdmcF9tYXNrIFx1MDAyNiAoX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pKSlcbjU2NDY6XHRcdFx0Z2ZwX21hc2sgXHUwMDI2PSB+KF9fR0ZQX0NPTVAgfCBfX0dGUF9ISUdITUVNKTtcbjU2NDc6XHRcbjU2NDg6XHRcdHAgPSBhbGxvY19wYWdlc19ub2RlX25vcHJvZihuaWQsIGdmcF9tYXNrLCBvcmRlcik7XG41NjQ5Olx0XHRpZiAoIXApXG41NjUwOlx0XHRcdHJldHVybiBOVUxMO1xuNTY1MTpcdFx0cmV0dXJuIG1ha2VfYWxsb2NfZXhhY3QoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHApLCBvcmRlciwgc2l6ZSk7XG41NjUyOlx0fVxuNTY1MzpcdFxuNTY1NDpcdC8qKlxuNTY1NTpcdCAqIGZyZWVfcGFnZXNfZXhhY3QgLSByZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgdmlhIGFsbG9jX3BhZ2VzX2V4YWN0KClcbjU2NTY6XHQgKiBAdmlydDogdGhlIHZhbHVlIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzX2V4YWN0LlxuNTY1NzpcdCAqIEBzaXplOiBzaXplIG9mIGFsbG9jYXRpb24sIHNhbWUgdmFsdWUgYXMgcGFzc2VkIHRvIGFsbG9jX3BhZ2VzX2V4YWN0KCkuXG41NjU4Olx0ICpcbjU2NTk6XHQgKiBSZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBhbGxvY19wYWdlc19leGFjdC5cbjU2NjA6XHQgKi9cbjU2NjE6XHR2b2lkIGZyZWVfcGFnZXNfZXhhY3Qodm9pZCAqdmlydCwgc2l6ZV90IHNpemUpXG41NjYyOlx0e1xuNTY2MzpcdFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpdmlydDtcbjU2NjQ6XHRcdHVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciAmIzQzOyBQQUdFX0FMSUdOKHNpemUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDE3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgRE1BIEFsbG9jYXRpb24gQ29udGV4dCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWxsb2NhdGlvbiBjb250ZXh0IGJldHRlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBETUEgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZXhhbWluZSBgZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY2AgYmVjYXVzZSBpdCYjMzk7cyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBJT01NVSwgd2hpY2ggb2Z0ZW4gaW50ZXJhY3RzIHdpdGggRE1BLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgaW5zaWdodCBpbnRvIGhvdyBETUEgYWxsb2NhdGlvbnMgYXJlIGhhbmRsZWQgd2hlbiBhbiBJT01NVSBpcyBpbiB0aGUgcGljdHVyZSwgbG9va2luZyBmb3IgYWxsb2NhdGlvbiBjYWxscyBvciBzcGVjaWZpYyBJT01NVSBpbnRlcmFjdGlvbnMuCgpUaGVuLCBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB1cCBieSBzY3J1dGluaXppbmcgYGtlcm5lbC9kbWEvZGlyZWN0LmNgIGFuZCBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYC4gVGhlc2UgZmlsZXMgYXJlIG1vcmUgZ2VuZXJhbCBETUEgaW1wbGVtZW50YXRpb24gYXNwZWN0cywgYW5kIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkLCBub24tSU9NTVUgRE1BIG9wZXJhdGlvbnMsIGFsbG9jYXRpb24gaGVscGVycywgYW5kIHBvdGVudGlhbGx5IHNvbWUgb3ZlcmFyY2hpbmcgRE1BIGZyYW1ld29yayBkZXRhaWxzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHdpbGwgaGVscCBtZSBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUuIExvb2tpbmcgYXQgYWxsIHRocmVlIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgdGhlIGRpZmZlcmVuY2UsIGlmIGFueSwgYmV0d2VlbiBJT01NVSBhbmQgbm9uLUlPTU1VIGFsbG9jYXRpb25zLiBJdCBpcyB0aW1lIHRvIGdldCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MjA6XHRcbjE2MjE6XHRzdGF0aWMgdm9pZCAqaW9tbXVfZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4xNjIyOlx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZXAsIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBhdHRycylcbjE2MjM6XHR7XG4xNjI0Olx0XHRib29sIGNvaGVyZW50ID0gZGV2X2lzX2RtYV9jb2hlcmVudChkZXYpO1xuMTYyNTpcdFx0c2l6ZV90IGFsbG9jX3NpemUgPSBQQUdFX0FMSUdOKHNpemUpO1xuMTYyNjpcdFx0aW50IG5vZGUgPSBkZXZfdG9fbm9kZShkZXYpO1xuMTYyNzpcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuMTYyODpcdFx0dm9pZCAqY3B1X2FkZHI7XG4xNjI5Olx0XG4xNjMwOlx0XHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBhbGxvY19zaXplLCBnZnApO1xuMTYzMTpcdFx0aWYgKCFwYWdlKSB7XG4xNjMyOlx0XHRcdGNwdV9hZGRyID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5vZGUsIGFsbG9jX3NpemUsIGdmcCk7XG4xNjMzOlx0XHRcdGlmICghY3B1X2FkZHIpXG4xNjM0Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4xNjM1Olx0XHRcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2UoY3B1X2FkZHIpO1xuMTYzNjpcdFx0fVxuMTYzNzpcdFxuMTYzODpcdFx0aWYgKCFjb2hlcmVudCB8fCBQYWdlSGlnaE1lbShwYWdlKSkge1xuMTYzOTpcdFx0XHRwZ3Byb3RfdCBwcm90ID0gZG1hX3BncHJvdChkZXYsIFBBR0VfS0VSTkVMLCBhdHRycyk7XG4xNjQwOlx0XG4xNjQxOlx0XHRcdGNwdV9hZGRyID0gZG1hX2NvbW1vbl9jb250aWd1b3VzX3JlbWFwKHBhZ2UsIGFsbG9jX3NpemUsXG4xNjQyOlx0XHRcdFx0XHRwcm90LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuMTY0MzpcdFx0XHRpZiAoIWNwdV9hZGRyKVxuMTY0NDpcdFx0XHRcdGdvdG8gb3V0X2ZyZWVfcGFnZXM7XG4xNjQ1Olx0XG4xNjQ2Olx0XHRcdGlmICghY29oZXJlbnQpXG4xNjQ3Olx0XHRcdFx0YXJjaF9kbWFfcHJlcF9jb2hlcmVudChwYWdlLCBzaXplKTtcbjE2NDg6XHRcdH0gZWxzZSB7XG4xNjQ5Olx0XHRcdGNwdV9hZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpO1xuMTY1MDpcdFx0fVxuMTY1MTpcdFxuMTY1MjpcdFx0KnBhZ2VwID0gcGFnZTtcbjE2NTM6XHRcdG1lbXNldChjcHVfYWRkciwgMCwgYWxsb2Nfc2l6ZSk7XG4xNjU0Olx0XHRyZXR1cm4gY3B1X2FkZHI7XG4xNjU1Olx0b3V0X2ZyZWVfcGFnZXM6XG4xNjU2Olx0XHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgYWxsb2Nfc2l6ZSk7XG4xNjU3Olx0XHRyZXR1cm4gTlVMTDtcbjE2NTg6XHR9XG4xNjU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBETUEgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgZm9jdXMgaXMgb24gbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB0aGUgRE1BLXNwZWNpZmljIHBhcnRzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgbWVtc2V0KGNwdV9hZGRyLCAwLCBhbGxvY19zaXplKTtgIGNhbGwgd2l0aGluIGBpb21tdV9kbWFfYWxsb2NfcGFnZXNgLiBUaGlzIGlzIHdoZXJlIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGdldHRpbmcgaW5pdGlhbGl6ZWQsIGxpa2VseSB0byBhIGNsZWFuIHN0YXRlLiBUaGF0JiMzOTtzIGdvb2QgcHJhY3RpY2UgZm9yIHNlY3VyaXR5IGFuZCBjb25zaXN0ZW5jeSwgbWFraW5nIHN1cmUgdGhlcmUmIzM5O3Mgbm8gbGVmdG92ZXIgZGF0YSBmcm9tIHByZXZpb3VzIHVzYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGlmIHRoaXMgemVyb2luZyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLCBvciBpZiB0aGVyZSBhcmUgc2NlbmFyaW9zIHdoZXJlIGl0IGNvdWxkIGJlIG9wdGltaXplZC4KCk5vdywgSSYjMzk7bSBoZWFkaW5nIG92ZXIgdG8gYGtlcm5lbC9kbWEvZGlyZWN0LmNgIGFuZCBmb2N1c2luZyBvbiB0aGUgMTIwLTE4MCBsaW5lIHJhbmdlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBsb3dlci1sZXZlbCBETUEtcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhlcmUsIHByb2JhYmx5IHRoZSBvbmVzIHRoYXQgYWN0dWFsbHkgaGFuZGxlIHRoZSBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZyBhbmQgYWxsb2NhdGlvbiBpZiB0aGlzIGlzIGEgZGlyZWN0IG1hcHBlZCBzeXN0ZW0uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgRE1BIHJlZ2lvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBtYXliZSBob3cgdGhleSBhcmUgcmVsYXRlZC4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSByZWxhdGlvbnNoaXAgdG8gdGhlIGtlcm5lbCYjMzk7cyBwYWdlIGFsbG9jYXRvciwgaG93IHRoZSBhZGRyZXNzZXMgYXJlIHRyYW5zbGF0ZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgSU9NTVUuIFRoaXMgcGFydCBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LiBJIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl04oCZcyBhbGwgYWJvdXQgdGhlIGFsbG9jYXRpb24sIG1hcHBpbmcsIGFuZCB0cmFuc2ZlciBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9kbWEvZGlyZWN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdH1cbiAxMTY6XHRcbiAxMTc6XHRzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIDExODpcdFx0XHRnZnBfdCBnZnAsIGJvb2wgYWxsb3dfaGlnaG1lbSlcbiAxMTk6XHR7XG4gMTIwOlx0XHRpbnQgbm9kZSA9IGRldl90b19ub2RlKGRldik7XG4gMTIxOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiAxMjI6XHRcdHU2NCBwaHlzX2xpbWl0O1xuIDEyMzpcdFx0dm9pZCAqdmE7XG4gMTI0Olx0XG4gMTI1Olx0XHRXQVJOX09OX09OQ0UoIVBBR0VfQUxJR05FRChzaXplKSk7XG4gMTI2Olx0XG4gMTI3Olx0XHRnZnAgfD0gZG1hX2RpcmVjdF9vcHRpbWFsX2dmcF9tYXNrKGRldiwgXHUwMDI2cGh5c19saW1pdCk7XG4gMTI4Olx0XHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApO1xuIDEyOTpcdFx0aWYgKHBhZ2UpIHtcbiAxMzA6XHRcdFx0aWYgKGRtYV9jb2hlcmVudF9vayhkZXYsIHBhZ2VfdG9fcGh5cyhwYWdlKSwgc2l6ZSkgXHUwMDI2XHUwMDI2XG4gMTMxOlx0XHRcdCAgICAoYWxsb3dfaGlnaG1lbSB8fCAhUGFnZUhpZ2hNZW0ocGFnZSkpKVxuIDEzMjpcdFx0XHRcdHJldHVybiBwYWdlO1xuIDEzMzpcdFxuIDEzNDpcdFx0XHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgc2l6ZSk7XG4gMTM1Olx0XHR9XG4gMTM2Olx0XG4gMTM3Olx0XHR3aGlsZSAoKHZhID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5vZGUsIHNpemUsIGdmcCkpIFx1MDAyNlx1MDAyNlxuIDEzODpcdFx0ICAgICAgICFkbWFfY29oZXJlbnRfb2soZGV2LCB2aXJ0X3RvX3BoeXModmEpLCBzaXplKSkge1xuIDEzOTpcdFx0XHRmcmVlX3BhZ2VzX2V4YWN0KHZhLCBzaXplKTtcbiAxNDA6XHRcbiAxNDE6XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BMzIpIFx1MDAyNlx1MDAyNlxuIDE0MjpcdFx0XHQgICAgcGh5c19saW1pdCBcdTAwM2MgRE1BX0JJVF9NQVNLKDY0KSBcdTAwMjZcdTAwMjZcbiAxNDM6XHRcdFx0ICAgICEoZ2ZwIFx1MDAyNiAoR0ZQX0RNQTMyIHwgR0ZQX0RNQSkpKVxuIDE0NDpcdFx0XHRcdGdmcCB8PSBHRlBfRE1BMzI7XG4gMTQ1Olx0XHRcdGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BKSBcdTAwMjZcdTAwMjYgIShnZnAgXHUwMDI2IEdGUF9ETUEpKVxuIDE0NjpcdFx0XHRcdGdmcCA9IChnZnAgXHUwMDI2IH5HRlBfRE1BMzIpIHwgR0ZQX0RNQTtcbiAxNDc6XHRcdFx0ZWxzZVxuIDE0ODpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDE0OTpcdFx0fVxuIDE1MDpcdFx0cGFnZSA9IHZhID8gdmlydF90b19wYWdlKHZhKSA6IE5VTEw7XG4gMTUxOlx0XG4gMTUyOlx0XHRyZXR1cm4gcGFnZTtcbiAxNTM6XHR9XG4gMTU0Olx0XG4gMTU1Olx0LypcbiAxNTY6XHQgKiBDaGVjayBpZiBhIHBvdGVudGlhbGx5IGJsb2NraW5nIG9wZXJhdGlvbnMgbmVlZHMgdG8gZGlwIGludG8gdGhlIGF0b21pY1xuIDE1NzpcdCAqIHBvb2xzIGZvciB0aGUgZ2l2ZW4gZGV2aWNlL2dmcC5cbiAxNTg6XHQgKi9cbiAxNTk6XHRzdGF0aWMgYm9vbCBkbWFfZGlyZWN0X3VzZV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgZ2ZwX3QgZ2ZwKVxuIDE2MDpcdHtcbiAxNjE6XHRcdHJldHVybiAhZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSBcdTAwMjZcdTAwMjYgIWlzX3N3aW90bGJfZm9yX2FsbG9jKGRldik7XG4gMTYyOlx0fVxuIDE2MzpcdFxuIDE2NDpcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19mcm9tX3Bvb2woc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiAxNjU6XHRcdFx0ZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgdm9pZCAqKmNwdV9hZGRyLCBnZnBfdCBnZnAsXG4gMTY2Olx0XHRcdHVuc2lnbmVkIGxvbmcgYXR0cnMpXG4gMTY3Olx0e1xuIDE2ODpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gMTY5Olx0XHR1NjQgcGh5c19saW1pdDtcbiAxNzA6XHRcbiAxNzE6XHRcdGlmIChXQVJOX09OX09OQ0UoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9DT0hFUkVOVF9QT09MKSkpXG4gMTcyOlx0XHRcdHJldHVybiBOVUxMO1xuIDE3MzpcdFxuIDE3NDpcdFx0Z2ZwIHw9IGRtYV9kaXJlY3Rfb3B0aW1hbF9nZnBfbWFzayhkZXYsIFx1MDAyNnBoeXNfbGltaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQ2FsbGVycyBvZiBgX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzYCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGRpcmVjdCBtZW1vcnkgYWNjZXNzIChETUEpIGFsbG9jYXRpb24gd2l0aCBgX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hlcmUgYXJlIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgdXNlIGZvciB0aGlzPyBXaGF0IHN5c3RlbXMgb3IgZGV2aWNlcyBhcmUgKnJlbHlpbmcqIG9uIHRoaXMgc3BlY2lmaWMgcGF0aD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgaGVyZS4gVGhlIG5hbWUgaW1wbGllcyBhIGRpcmVjdCwgaGFyZHdhcmUtZmFjaW5nIGFsbG9jYXRpb247IHRoaXMgdXN1YWxseSBoYXMgc2VyaW91cyBjb25zdHJhaW50cyBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KClNvLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBiYWNrLiBDaGVja2luZyBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gaXMgYWJzb2x1dGVseSB0aGUgcmlnaHQgbW92ZS4gSSBuZWVkIHRvIGtub3c6IEFyZSB3ZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZHJpdmVycyB0aGF0IGFyZSB2ZXJ5IGxvdyBsZXZlbD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaGlnaC1wZXJmb3JtYW5jZSBuZXR3b3JraW5nIHN0YWNrcyB0aGF0IGFyZSBkaXJlY3RseSBtYXBwaW5nIG1lbW9yeT8gQXJlIHdlIGxvb2tpbmcgYXQgYW55dGhpbmcgaW52b2x2aW5nIHJlYWwtdGltZSBjb25zdHJhaW50cz8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbnMgaXMgZ29pbmcgdG8gYmUga2V5LiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyB0aGVzZSBjYWxsZXJzIGFyZSBtYW5pcHVsYXRpbmcgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGFsbG9jYXRlZCBtZW1vcnkuCgpUaGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIGFsbG9jYXRpb24gdGhpcyB3YXkgY2FuIGJlIGh1Z2UsIGJ1dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBraW5kIG9mIGhhcmR3YXJlIGludm9sdmVkIGluIHJlcXVlc3RpbmcgRE1BIGFjY2VzcyBpcyBhbHNvIHZpdGFsLiBJbiBteSBtaW5kLCBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zOiBJcyB0aGVyZSBhbnkgcG9zc2liaWxpdHkgb2YgY29udGVudGlvbj8gQ291bGQgd2UgYmUgZGVhbGluZyB3aXRoIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoZSBtZW1vcnkgY29udHJvbGxlciBvciBjYWNoZSBjb2hlcmVuY3k/IFdoYXQgYWJvdXQgTlVNQSBjb25zaWRlcmF0aW9ucyBpZiB0aGlzIGlzIGEgc3lzdGVtIHdpdGggbm9uLXVuaWZvcm0gbWVtb3J5IGFjY2Vzcz8gVGhlIGNhbGxlcnMgd2lsbCBwcm92aWRlIHRob3NlIGFuc3dlcnMuIEZyb20gdGhhdCBpbmZvcm1hdGlvbiwgSSBjYW4gYmV0dGVyIGFzc2VzcyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneS4gSSBuZWVkIHRvIGxvb2sgZm9yIHBhdHRlcm5zLCBhbmQgYW5vbWFsaWVzLCB0byBmbGFnIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBXaGF0IGFyZSB0aGUgc2l6ZSByZXF1ZXN0cz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGZyYWdtZW50YXRpb24gaXNzdWVzPyBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHBvc3NpYmxlIGRlYWRsb2NrcyBhcyB3ZWxsLiBVbHRpbWF0ZWx5LCBhbnkgaXNzdWVzIGhlcmUgY291bGQgYWZmZWN0IG11bHRpcGxlIGxheWVycyBpbiB0aGUgc3lzdGVtLCBwb3RlbnRpYWxseSBjYXNjYWRpbmcgYWxsIHRoZSB3YXkgdXAgdG8gdXNlciBzcGFjZSBhbmQgYXBwbGljYXRpb24gcGVyZm9ybWFuY2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aG9zZSBjYWxsZXJzIGFyZSB0ZWxsaW5nIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZG1hLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZG1hL2RpcmVjdC5jPTEwND1zdGF0aWMgc3RydWN0IHBhZ2UgKmRtYV9kaXJlY3RfYWxsb2Nfc3dpb3RsYihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTE2LVxua2VybmVsL2RtYS9kaXJlY3QuYzoxMTc6c3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTE4LVx0XHRnZnBfdCBnZnAsIGJvb2wgYWxsb3dfaGlnaG1lbSlcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTE4ND1zdGF0aWMgdm9pZCAqZG1hX2RpcmVjdF9hbGxvY19ub19tYXBwaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4tLVxua2VybmVsL2RtYS9kaXJlY3QuYy0xODgtXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjE4OTpcdHBhZ2UgPSBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBnZnAgXHUwMDI2IH5fX0dGUF9aRVJPLCB0cnVlKTtcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTkwLVx0aWYgKCFwYWdlKVxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmM9MjA0PXZvaWQgKmRtYV9kaXJlY3RfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5MC1cdC8qIHdlIGFsd2F5cyBtYW51YWxseSB6ZXJvIHRoZSBtZW1vcnkgb25jZSB3ZSBhcmUgZG9uZSAqL1xua2VybmVsL2RtYS9kaXJlY3QuYzoyOTE6XHRwYWdlID0gX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKGRldiwgc2l6ZSwgZ2ZwIFx1MDAyNiB+X19HRlBfWkVSTywgYWxsb3dfaGlnaG1lbSk7XG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5Mi1cdGlmICghcGFnZSlcbi0tXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTQzND1zdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuLS1cbmtlcm5lbC9kbWEvZGlyZWN0LmMtNDU2LVxua2VybmVsL2RtYS9kaXJlY3QuYzo0NTc6XHRwYWdlID0gX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKGRldiwgc2l6ZSwgZ2ZwLCBmYWxzZSk7XG5rZXJuZWwvZG1hL2RpcmVjdC5jLTQ1OC1cdGlmICghcGFnZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyOTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBvcHNfaGVscGVycy5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHByb2JsZW0mIzM5O3MgbGlrZWx5IHNvbWV3aGVyZSB3aXRoaW4gdGhlIERNQSBvcGVyYXRpb24gaGVscGVycywgc28gbXkgZmlyc3Qgc3RvcCBpcyBkZWZpbml0ZWx5IGBrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIERNQSBzdWJzeXN0ZW0uIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gb2J2aW91cyBjdWxwcml0IGluIGhvdyByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgaG93IHRyYW5zZmVycyBhcmUgaW5pdGlhdGVkLCBvciBwZXJoYXBzIGluIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IG1hcHBpbmcuIEkmIzM5O20gaG9waW5nIEkgY2FuIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgcXVpY2tseS4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSB3ZWxsLWNvbW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZG1hL29wc19oZWxwZXJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0fVxuICA2MTpcdFxuICA2MjpcdHN0cnVjdCBwYWdlICpkbWFfY29tbW9uX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gIDYzOlx0XHRcdGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgZ2ZwX3QgZ2ZwKVxuICA2NDpcdHtcbiAgNjU6XHRcdGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTtcbiAgNjY6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuICA2NzpcdFx0cGh5c19hZGRyX3QgcGh5cztcbiAgNjg6XHRcbiAgNjk6XHRcdHBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIHNpemUsIGdmcCk7XG4gIDcwOlx0XHRpZiAoIXBhZ2UpIHtcbiAgNzE6XHRcdFx0dm9pZCAqdmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQoZGV2X3RvX25vZGUoZGV2KSwgc2l6ZSwgZ2ZwKTtcbiAgNzI6XHRcbiAgNzM6XHRcdFx0aWYgKCF2YSlcbiAgNzQ6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiAgNzU6XHRcdFx0cGFnZSA9IHZpcnRfdG9fcGFnZSh2YSk7XG4gIDc2Olx0XHR9XG4gIDc3Olx0XG4gIDc4Olx0XHRwaHlzID0gcGFnZV90b19waHlzKHBhZ2UpO1xuICA3OTpcdFx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcbiAgODA6XHRcdFx0KmRtYV9oYW5kbGUgPSBpb21tdV9kbWFfbWFwX3BoeXMoZGV2LCBwaHlzLCBzaXplLCBkaXIsXG4gIDgxOlx0XHRcdFx0XHRcdFx0IERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xuICA4MjpcdFx0ZWxzZVxuICA4MzpcdFx0XHQqZG1hX2hhbmRsZSA9IG9wcy1cdTAwM2VtYXBfcGh5cyhkZXYsIHBoeXMsIHNpemUsIGRpcixcbiAgODQ6XHRcdFx0XHRcdFx0ICAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xuICA4NTpcdFx0aWYgKCpkbWFfaGFuZGxlID09IERNQV9NQVBQSU5HX0VSUk9SKSB7XG4gIDg2Olx0XHRcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcbiAgODc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDg4Olx0XHR9XG4gIDg5Olx0XG4gIDkwOlx0XHRtZW1zZXQocGFnZV9hZGRyZXNzKHBhZ2UpLCAwLCBzaXplKTtcbiAgOTE6XHRcdHJldHVybiBwYWdlO1xuICA5MjpcdH1cbiAgOTM6XHRcbiAgOTQ6XHR2b2lkIGRtYV9jb21tb25fZnJlZV9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiAgOTU6XHRcdFx0ZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXG4gIDk2Olx0e1xuICA5NzpcdFx0Y29uc3Qgc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpO1xuICA5ODpcdFxuICA5OTpcdFx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMTEKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogOTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFuYWx5c2lzIG9mIERNQSBNZW1vcnkgQWxsb2NhdGlvbiBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IGltcHJvdmluZyB0aGUgZWZmaWNpZW5jeSBvZiBETUEgbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSBieSBtb3ZpbmcgZnJvbSB0aGUgb2xkIGBhbGxvY19wYWdlc19ub2RlYC9gX19mcmVlX3BhZ2VzYCBhcHByb2FjaCAod2hpY2ggY291bGQgbGVhZCB0byB3YXN0ZWQgcGFnZXMgd2l0aCBub24tcG93ZXItb2YtMiBhbGxvY2F0aW9ucykgdG8gdGhlIG1vcmUgcHJlY2lzZSBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkYC9gZnJlZV9wYWdlc19leGFjdGAgY2FsbHMuIFRoZSBnb2FsIGlzIHRvIGF2b2lkIHRob3NlIGFsbG9jYXRpb24vZnJlZWluZyBtaXNtYXRjaGVzIGJldHdlZW4gQ01BIGFuZCB0aGUgYnVkZHkgYWxsb2NhdG9yLCBlbnN1cmluZyB3ZSBnZXQgKmV4YWN0bHkqIHRoZSBwYWdlcyByZXF1ZXN0ZWQuIFRoYXQmIzM5O3MgYSBzb2xpZCBvcHRpbWl6YXRpb24uCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBLTVNBTiB2dWxuZXJhYmlsaXRpZXM/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3Q6CgoxLiAgKipLZXJuZWwtdG8tVXNlciBTcGFjZSBEYXRhIExlYWtzOioqIE5vLiBUaGUgcGF0Y2ggaXNuJiMzOTt0IG1vZGlmeWluZyBvciBpbnRyb2R1Y2luZyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyBzdHJpY3RseSBhYm91dCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudC4KCjIuICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgRGVwZW5kZW5jaWVzOioqIE5vcGUuIFRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgaGluZ2VzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gVGhlIGFsbG9jYXRpb25zIGFuZCBmcmVlcyBhcmUgY2xlYW4uCgozLiAgKipVbmluaXRpYWxpemVkIEZpZWxkcyBpbiBDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBBZ2Fpbiwgbm8uIFRoZSBtZW1vcnkgYnVmZmVycyBhcmUgZWl0aGVyIGV4cGxpY2l0bHkgYG1lbXNldGAgKHdoaWNoIGlzIGdvb2QgcHJhY3RpY2UpIG9yIGluaXRpYWxpemVkIGJ5IERNQSBjYWxsZXJzLiBUaGUgcGF0Y2ggaXNuJiMzOTt0IHRvdWNoaW5nIGFueSBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZXhpc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBJdCYjMzk7cyBqdXN0IHR3ZWFraW5nICpob3cqIHdlIGFsbG9jYXRlIGFuZCBmcmVlIHRoZSBwaHlzaWNhbCBwYWdlcy4KCjQuICAqKkJvdW5kcyBDaGVjayBJc3N1ZXMgTGVhZGluZyB0byBVbmluaXRpYWxpemVkIE1lbW9yeSBBY2Nlc3M6KiogVGhpcyBpcyB3aGVyZSB3ZSBuZWVkIHRvIGJlIGV4dHJhIGNhcmVmdWwsIGJ1dCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCBuby4gVGhlIGJ1ZmZlciBzaXplIGlzIGhhbmRsZWQgY29ycmVjdGx5LiBBY2Nlc3NpbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgc2l6ZSAoYHNpemVgIG9yIGBhbGxvY19zaXplYCkgaW4gdGhpcyBuZXcgc2V0dXAgd291bGQgdHJpZ2dlciBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHBhZ2UgZmF1bHRzLCAqbm90KiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHdpdGhpbiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gSW4gZmFjdCwgaWYgYW55dGhpbmcsIGl0JiMzOTtzIHNhZmVyLCBhcyBpdCBzaG91bGQgYmUgaGl0dGluZyBmcmVlZCBwYWdlcywgd2hpY2ggd291bGQgYWxlcnQgdXMgZmFzdGVyLgoKU28sIGJhc2VkIG9uIHRoaXMgdGhvcm91Z2ggYW5hbHlzaXMsIEkgY2FuJiMzOTt0IHNlZSBhbnkgS01TQU4tc3BlY2lmaWMgYnVncyBpbnRyb2R1Y2VkLiBUaGVzZSBjaGFuZ2VzIGFyZSBleGNsdXNpdmVseSByZWxhdGVkIHRvIERNQSBtZW1vcnkgbWFuYWdlbWVudCBhdCB0aGUgcGFnZSBsZXZlbC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGluZGl2aWR1YWwgZmlsZSBjaGFuZ2VzIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbjoKCiogICBgaW9tbXVfZG1hX2FsbG9jX3BhZ2VzYDogUmVwbGFjaW5nIGBhbGxvY19wYWdlc19ub2RlYCB3aXRoIGBhbGxvY19wYWdlc19leGFjdF9uaWRgIGZvbGxvd2VkIGJ5IGEgYG1lbXNldGAgdG8gemVyby4gU2FmZS4KCiogICBgZG1hLW1hcC1vcHMuaGAsIGBjb250aWd1b3VzLmNgLCBgZGlyZWN0LmNgLCBgb3BzX2hlbHBlcnMuY2A6IFVzaW5nIGBmcmVlX3BhZ2VzX2V4YWN0YCBpbnN0ZWFkIG9mIGBfX2ZyZWVfcGFnZXNgLiBGaW5lLCB0aGlzIGlzIHByZWNpc2VseSB3aGF0IHdlIGFyZSBkb2luZyB0byBhdm9pZCB0aG9zZSBwYWdlIHdhc3RlIHByb2JsZW1zLgoKKiAgIGBpbmNsdWRlL2xpbnV4L2dmcC5oYCwgYG1tL3BhZ2VfYWxsb2MuY2A6IFJlbW92aW5nIGBfX21lbWluaXRgLiBUaGlzIG1ha2VzIHRoZSBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkYCBmdW5jdGlvbiB1c2FibGUgb3V0c2lkZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSwgd2hpY2ggaXMgbmVlZGVkLiBNYWtlcyBzZW5zZSBmb3IgRE1BIGNvZGUuCgpBbGwgb2YgdGhlc2UgY2hhbmdlcyBhcmUgYWJvdXQgZmluZXIgZ3JhbnVsYXJpdHkgb2YgcGFnZSBhbGxvY2F0aW9uL2ZyZWVpbmcgZm9yIERNQSBvcGVyYXRpb25zLiBJZiB0aGVyZSBhcmUgYW55IGJ1Z3MsIHRoZXkmIzM5O2xsIGJlIHJlZ3VsYXIgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzOiBpbnZhbGlkIGZyZWVzLCBwYWdlIHJlZmVyZW5jZSBjb3VudCBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgZXhpc3RpbmcgS0FTQU4sIHBhZ2Vfb3duZXIvcGFnZV9wb2lzb25pbmcsIGFuZCBnZW5lcmFsIGtlcm5lbCBkZWJ1Z2dlcnMgaGFuZGxlIHRob3NlIGNhc2VzLiBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4KCkFsbCBjbGVhci4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBETUEgbWVtb3J5IGFsbG9jYXRpb24gZmFsbGJhY2sgcGF0aHMgKGluIGRtYS1pb21tdSwgZG1hLWRpcmVjdCwgYW5kIG9wc19oZWxwZXJzKSB0byB1c2UgYWxsb2NfcGFnZXNfZXhhY3RfbmlkKCkgYW5kIGZyZWVfcGFnZXNfZXhhY3QoKSBpbnN0ZWFkIG9mIGFsbG9jX3BhZ2VzX25vZGUoKSBhbmQgX19mcmVlX3BhZ2VzKCkgd2l0aCBwYWdlIG9yZGVycy4gSXQgYWxzbyByZW1vdmVzIHRoZSBfX21lbWluaXQgYW5ub3RhdGlvbiBmcm9tIGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoKS5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBhZmZlY3QgcGFnZS1sZXZlbCBtZW1vcnkgYWxsb2NhdGlvbiBncmFudWxhcml0eSBhbmQgZnJlZWluZyBsb2dpYyB3aXRoaW4gdGhlIERNQSBzdWJzeXN0ZW0uIFRoZSBhbGxvY2F0ZWQgbWVtb3J5IGJ1ZmZlcnMgYXJlIGVpdGhlciBleHBsaWNpdGx5IHplcm9lZCAodmlhIG1lbXNldCkgb3IgbWFuYWdlZCBwZXIgc3RhbmRhcmQgRE1BIHN1YnN5c3RlbSBjb252ZW50aW9ucywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBwYWdlIGxpZmV0aW1lLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYXJlIGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgcGFnZSBhbGxvY2F0b3IgZGVidWdnaW5nIHRvb2xzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhbGxiYWNrIHBhdGhzIChpbiBkbWEtaW9tbXUsIGRtYS1kaXJlY3QsIGFuZCBvcHNfaGVscGVycykgdG8gdXNlIGFsbG9jX3BhZ2VzX2V4YWN0X25pZCgpIGFuZCBmcmVlX3BhZ2VzX2V4YWN0KCkgaW5zdGVhZCBvZiBhbGxvY19wYWdlc19ub2RlKCkgYW5kIF9fZnJlZV9wYWdlcygpIHdpdGggcGFnZSBvcmRlcnMuIEl0IGFsc28gcmVtb3ZlcyB0aGUgX19tZW1pbml0IGFubm90YXRpb24gZnJvbSBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKCkuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgYWZmZWN0IHBhZ2UtbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkgYW5kIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBETUEgc3Vic3lzdGVtLiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSB6ZXJvZWQgKHZpYSBtZW1zZXQpIG9yIG1hbmFnZWQgcGVyIHN0YW5kYXJkIERNQSBzdWJzeXN0ZW0gY29udmVudGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcGFnZSBsaWZldGltZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdG9yIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzoxMC45NzQ2OTM1MDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDk2ODM4MDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJETUFfQ01BXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIklPTU1VX0RNQVwiLFxuICAgIFwiRE1BX09QU19IRUxQRVJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZlwiLFxuICAgIFwiZG1hX2ZyZWVfY29udGlndW91c1wiLFxuICAgIFwiX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJkbWFfY29tbW9uX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJpb21tdV9kbWFfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9kaXJlY3RfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9kaXJlY3RfYWxsb2NcIixcbiAgICBcImlvbW11X2RtYV9hbGxvY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERNQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWxsYmFjayBwYXRocyAoaW4gZG1hLWlvbW11LCBkbWEtZGlyZWN0LCBhbmQgb3BzX2hlbHBlcnMpIHRvIHVzZSBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpIGluc3RlYWQgb2YgYWxsb2NfcGFnZXNfbm9kZSgpIGFuZCBfX2ZyZWVfcGFnZXMoKSB3aXRoIHBhZ2Ugb3JkZXJzLiBJdCBhbHNvIHJlbW92ZXMgdGhlIF9fbWVtaW5pdCBhbm5vdGF0aW9uIGZyb20gYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZigpLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgYWZmZWN0IHBhZ2UtbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkgYW5kIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBETUEgc3Vic3lzdGVtLiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSB6ZXJvZWQgKHZpYSBtZW1zZXQpIG9yIG1hbmFnZWQgcGVyIHN0YW5kYXJkIERNQSBzdWJzeXN0ZW0gY29udmVudGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcGFnZSBsaWZldGltZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdG9yIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBETUEgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgYWNyb3NzIG11bHRpcGxlIGNvcmUgc3Vic3lzdGVtcyAoa2VybmVsL2RtYS8sIG1tLywgZHJpdmVycy9pb21tdS8pLiBJdCByZXBsYWNlcyBwb3dlci1vZi10d28gcGFnZSBhbGxvY2F0aW9ucyBhbmQgX19mcmVlX3BhZ2VzKCkgd2l0aCBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpLCB3aGljaCBzcGxpdHMgYW5kIGZyZWVzIHRyYWlsaW5nIHVudXNlZCBwYWdlcy4gVGhpcyBjaGFuZ2VzIG1lbW9yeSBhbGlnbm1lbnQsIHBhZ2UgY291bnQgdHJhY2tpbmcsIGFuZCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBydW50aW1lIGFzc2VydGlvbiB2aW9sYXRpb25zIGluIGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoKSBpZiBjYWxsZXJzIHBhc3MgY2VydGFpbiBHRlAgZmxhZ3MuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIERNQSBhbGxvY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQgZGV2aWNlIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ3OjEwLjk3NDY5OTM4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NjAxMTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRlNjViNWM4YWUwNTVhY2ExOTFjMTMxNmU5YWYzNzRkMGRhZDY1NWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAwMTo0NzowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY1xcbmluZGV4IDU4YzYyNDUxM2NkNDMuLjhmMjYyYzgzODAyYzQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY1xcbisrKyBiL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNcXG5AQCAtMTYyOCwxMCArMTYyOCwxMiBAQCBzdGF0aWMgdm9pZCAqaW9tbXVfZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIFxcdHZvaWQgKmNwdV9hZGRyO1xcbiBcXG4gXFx0cGFnZSA9IGRtYV9hbGxvY19jb250aWd1b3VzKGRldiwgYWxsb2Nfc2l6ZSwgZ2ZwKTtcXG4tXFx0aWYgKCFwYWdlKVxcbi1cXHRcXHRwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIGdldF9vcmRlcihhbGxvY19zaXplKSk7XFxuLVxcdGlmICghcGFnZSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdGlmICghcGFnZSkge1xcbitcXHRcXHRjcHVfYWRkciA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBhbGxvY19zaXplLCBnZnApO1xcbitcXHRcXHRpZiAoIWNwdV9hZGRyKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0cGFnZSA9IHZpcnRfdG9fcGFnZShjcHVfYWRkcik7XFxuK1xcdH1cXG4gXFxuIFxcdGlmICghY29oZXJlbnQgfHwgUGFnZUhpZ2hNZW0ocGFnZSkpIHtcXG4gXFx0XFx0cGdwcm90X3QgcHJvdCA9IGRtYV9wZ3Byb3QoZGV2LCBQQUdFX0tFUk5FTCwgYXR0cnMpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcXG5pbmRleCA4ZmFlMmI3ZGViMjBkLi4zZWYzMDAzNzEzYTY5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxcbkBAIC0xNDMsNyArMTQzLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4gc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0c2l6ZV90IHNpemUpXFxuIHtcXG4tXFx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XFxuK1xcdGZyZWVfcGFnZXNfZXhhY3QocGFnZV9hZGRyZXNzKHBhZ2UpLCBzaXplKTtcXG4gfVxcbiAjZW5kaWYgLyogQ09ORklHX0RNQV9DTUEqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcXG5pbmRleCA4NzJiYzUzZjMyZWM4Li5hYTQ2MDE4MDVmMjFhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oXFxuQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkICphbGxvY19wYWdlc19leGFjdF9ub3Byb2Yoc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMSk7XFxuIFxcbiB2b2lkIGZyZWVfcGFnZXNfZXhhY3Qodm9pZCAqdmlydCwgc2l6ZV90IHNpemUpO1xcbiBcXG4tX19tZW1pbml0IHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMik7XFxuK3ZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMik7XFxuICNkZWZpbmUgYWxsb2NfcGFnZXNfZXhhY3RfbmlkKC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoX19WQV9BUkdTX18pKVxcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xcbmluZGV4IDY2MDkzNDYwNTg0ZTguLjkwOTM3ZGM3YzYyN2QgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2RtYS9jb250aWd1b3VzLmNcXG4rKysgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xcbkBAIC00NTEsOCArNDUxLDggQEAgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGdmcF90IGdmcClcXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb250aWd1b3VzKCkuIEFzIHRoZVxcbiAgKiBjbWFfcmVsZWFzZSByZXR1cm5zIGZhbHNlIHdoZW4gcHJvdmlkZWQgcGFnZXMgZG8gbm90IGJlbG9uZyB0byBjb250aWd1b3VzXFxuLSAqIGFyZWEgYW5kIHRydWUgb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHRoZW4gZG9lcyBhIGZhbGxiYWNrIF9fZnJlZV9wYWdlcygpXFxuLSAqIHVwb24gYSBmYWxzZS1yZXR1cm4uXFxuKyAqIGFyZWEgYW5kIHRydWUgb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHRoZW4gZG9lcyBhIGZhbGxiYWNrXFxuKyAqIGZyZWVfcGFnZXNfZXhhY3QoKSB1cG9uIGEgZmFsc2UtcmV0dXJuLlxcbiAgKi9cXG4gdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKVxcbiB7XFxuQEAgLTQ3Niw3ICs0NzYsNyBAQCB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIG5vdCBpbiBhbnkgY21hLCBmcmVlIGZyb20gYnVkZHkgKi9cXG4tXFx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XFxuK1xcdGZyZWVfcGFnZXNfZXhhY3QocGFnZV9hZGRyZXNzKHBhZ2UpLCBzaXplKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9kaXJlY3QuYyBiL2tlcm5lbC9kbWEvZGlyZWN0LmNcXG5pbmRleCBkYTY2NWNhMjJkNWMwLi5lYTY0NDUzZDczNzBhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9kbWEvZGlyZWN0LmNcXG4rKysgYi9rZXJuZWwvZG1hL2RpcmVjdC5jXFxuQEAgLTEyMCw2ICsxMjAsNyBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbiBcXHRpbnQgbm9kZSA9IGRldl90b19ub2RlKGRldik7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHR1NjQgcGh5c19saW1pdDtcXG4rXFx0dm9pZCAqdmE7XFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoIVBBR0VfQUxJR05FRChzaXplKSk7XFxuIFxcbkBAIC0xMzMsOSArMTM0LDkgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4gXFx0XFx0ZG1hX2ZyZWVfY29udGlndW91cyhkZXYsIHBhZ2UsIHNpemUpO1xcbiBcXHR9XFxuIFxcbi1cXHR3aGlsZSAoKHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgZ2V0X29yZGVyKHNpemUpKSlcXG4tXFx0ICAgICAgIFxcdTAwMjZcXHUwMDI2ICFkbWFfY29oZXJlbnRfb2soZGV2LCBwYWdlX3RvX3BoeXMocGFnZSksIHNpemUpKSB7XFxuLVxcdFxcdF9fZnJlZV9wYWdlcyhwYWdlLCBnZXRfb3JkZXIoc2l6ZSkpO1xcbitcXHR3aGlsZSAoKHZhID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5vZGUsIHNpemUsIGdmcCkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAhZG1hX2NvaGVyZW50X29rKGRldiwgdmlydF90b19waHlzKHZhKSwgc2l6ZSkpIHtcXG4rXFx0XFx0ZnJlZV9wYWdlc19leGFjdCh2YSwgc2l6ZSk7XFxuIFxcbiBcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEzMikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHBoeXNfbGltaXQgXFx1MDAzYyBETUFfQklUX01BU0soNjQpIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTE0Niw2ICsxNDcsNyBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuK1xcdHBhZ2UgPSB2YSA/IHZpcnRfdG9fcGFnZSh2YSkgOiBOVUxMO1xcbiBcXG4gXFx0cmV0dXJuIHBhZ2U7XFxuIH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9vcHNfaGVscGVycy5jIGIva2VybmVsL2RtYS9vcHNfaGVscGVycy5jXFxuaW5kZXggNmI1ZjkyMDhkMzFjMC4uNWNkZjNmNjBjZjQ3OSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcXG4rKysgYi9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcXG5AQCAtNjcsMTAgKzY3LDEzIEBAIHN0cnVjdCBwYWdlICpkbWFfY29tbW9uX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIFxcdHBoeXNfYWRkcl90IHBoeXM7XFxuIFxcbiBcXHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApO1xcbi1cXHRpZiAoIXBhZ2UpXFxuLVxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKGRldl90b19ub2RlKGRldiksIGdmcCwgZ2V0X29yZGVyKHNpemUpKTtcXG4tXFx0aWYgKCFwYWdlKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0aWYgKCFwYWdlKSB7XFxuK1xcdFxcdHZvaWQgKnZhID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKGRldl90b19ub2RlKGRldiksIHNpemUsIGdmcCk7XFxuK1xcbitcXHRcXHRpZiAoIXZhKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0cGFnZSA9IHZpcnRfdG9fcGFnZSh2YSk7XFxuK1xcdH1cXG4gXFxuIFxcdHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSk7XFxuIFxcdGlmICh1c2VfZG1hX2lvbW11KGRldikpXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IGM0ZGM2MWVjNjYzZWUuLmQzYTEzNWRmY2RkM2QgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXFxuKysrIGIvbW0vcGFnZV9hbGxvYy5jXFxuQEAgLTU2MzcsNyArNTYzNyw3IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKTtcXG4gICpcXG4gICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYXJlYSBvciAlTlVMTCBpbiBjYXNlIG9mIGVycm9yLlxcbiAgKi9cXG4tdm9pZCAqIF9fbWVtaW5pdCBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaylcXG4rdm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6MTIuMjUxMzU1NjAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NjIwNjAyNjY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJETUFfQ01BXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIklPTU1VX0RNQVwiLFxuICAgIFwiRE1BX09QU19IRUxQRVJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZlwiLFxuICAgIFwiZG1hX2ZyZWVfY29udGlndW91c1wiLFxuICAgIFwiX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJkbWFfY29tbW9uX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJpb21tdV9kbWFfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9kaXJlY3RfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9kaXJlY3RfYWxsb2NcIixcbiAgICBcImlvbW11X2RtYV9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBETUEgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgYWNyb3NzIG11bHRpcGxlIGNvcmUgc3Vic3lzdGVtcyAoa2VybmVsL2RtYS8sIG1tLywgZHJpdmVycy9pb21tdS8pLiBJdCByZXBsYWNlcyBwb3dlci1vZi10d28gcGFnZSBhbGxvY2F0aW9ucyBhbmQgX19mcmVlX3BhZ2VzKCkgd2l0aCBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpLCB3aGljaCBzcGxpdHMgYW5kIGZyZWVzIHRyYWlsaW5nIHVudXNlZCBwYWdlcy4gVGhpcyBjaGFuZ2VzIG1lbW9yeSBhbGlnbm1lbnQsIHBhZ2UgY291bnQgdHJhY2tpbmcsIGFuZCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBydW50aW1lIGFzc2VydGlvbiB2aW9sYXRpb25zIGluIGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoKSBpZiBjYWxsZXJzIHBhc3MgY2VydGFpbiBHRlAgZmxhZ3MuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIERNQSBhbGxvY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQgZGV2aWNlIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGU2NWI1YzhhZTA1NWFjYTE5MWMxMzE2ZTlhZjM3NGQwZGFkNjU1ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDE6NDc6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY1xuaW5kZXggNThjNjI0NTEzY2Q0My4uOGYyNjJjODM4MDJjNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNcbisrKyBiL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNcbkBAIC0xNjI4LDEwICsxNjI4LDEyIEBAIHN0YXRpYyB2b2lkICppb21tdV9kbWFfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdHZvaWQgKmNwdV9hZGRyO1xuIFxuIFx0cGFnZSA9IGRtYV9hbGxvY19jb250aWd1b3VzKGRldiwgYWxsb2Nfc2l6ZSwgZ2ZwKTtcbi1cdGlmICghcGFnZSlcbi1cdFx0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwLCBnZXRfb3JkZXIoYWxsb2Nfc2l6ZSkpO1xuLVx0aWYgKCFwYWdlKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdGlmICghcGFnZSkge1xuK1x0XHRjcHVfYWRkciA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBhbGxvY19zaXplLCBnZnApO1xuK1x0XHRpZiAoIWNwdV9hZGRyKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRwYWdlID0gdmlydF90b19wYWdlKGNwdV9hZGRyKTtcbitcdH1cbiBcbiBcdGlmICghY29oZXJlbnQgfHwgUGFnZUhpZ2hNZW0ocGFnZSkpIHtcbiBcdFx0cGdwcm90X3QgcHJvdCA9IGRtYV9wZ3Byb3QoZGV2LCBQQUdFX0tFUk5FTCwgYXR0cnMpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxuaW5kZXggOGZhZTJiN2RlYjIwZC4uM2VmMzAwMzcxM2E2OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oXG5AQCAtMTQzLDcgKzE0Myw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0c2l6ZV90IHNpemUpXG4ge1xuLVx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4rXHRmcmVlX3BhZ2VzX2V4YWN0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgc2l6ZSk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfRE1BX0NNQSovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmhcbmluZGV4IDg3MmJjNTNmMzJlYzguLmFhNDYwMTgwNWYyMWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oXG5AQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spIF9fYWxsb2Nfc2l6ZSgxKTtcbiBcbiB2b2lkIGZyZWVfcGFnZXNfZXhhY3Qodm9pZCAqdmlydCwgc2l6ZV90IHNpemUpO1xuIFxuLV9fbWVtaW5pdCB2b2lkICphbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaykgX19hbGxvY19zaXplKDIpO1xuK3ZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMik7XG4gI2RlZmluZSBhbGxvY19wYWdlc19leGFjdF9uaWQoLi4uKVx0XHRcdFx0XHRcXFxuIFx0YWxsb2NfaG9va3MoYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9jb250aWd1b3VzLmMgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuaW5kZXggNjYwOTM0NjA1ODRlOC4uOTA5MzdkYzdjNjI3ZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvY29udGlndW91cy5jXG4rKysgYi9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuQEAgLTQ1MSw4ICs0NTEsOCBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2FsbG9jX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKVxuICAqXG4gICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb250aWd1b3VzKCkuIEFzIHRoZVxuICAqIGNtYV9yZWxlYXNlIHJldHVybnMgZmFsc2Ugd2hlbiBwcm92aWRlZCBwYWdlcyBkbyBub3QgYmVsb25nIHRvIGNvbnRpZ3VvdXNcbi0gKiBhcmVhIGFuZCB0cnVlIG90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiB0aGVuIGRvZXMgYSBmYWxsYmFjayBfX2ZyZWVfcGFnZXMoKVxuLSAqIHVwb24gYSBmYWxzZS1yZXR1cm4uXG4rICogYXJlYSBhbmQgdHJ1ZSBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdGhlbiBkb2VzIGEgZmFsbGJhY2tcbisgKiBmcmVlX3BhZ2VzX2V4YWN0KCkgdXBvbiBhIGZhbHNlLXJldHVybi5cbiAgKi9cbiB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXG4ge1xuQEAgLTQ3Niw3ICs0NzYsNyBAQCB2b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXG4gXHR9XG4gXG4gXHQvKiBub3QgaW4gYW55IGNtYSwgZnJlZSBmcm9tIGJ1ZGR5ICovXG4tXHRfX2ZyZWVfcGFnZXMocGFnZSwgZ2V0X29yZGVyKHNpemUpKTtcbitcdGZyZWVfcGFnZXNfZXhhY3QocGFnZV9hZGRyZXNzKHBhZ2UpLCBzaXplKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL2RpcmVjdC5jIGIva2VybmVsL2RtYS9kaXJlY3QuY1xuaW5kZXggZGE2NjVjYTIyZDVjMC4uZWE2NDQ1M2Q3MzcwYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvZGlyZWN0LmNcbisrKyBiL2tlcm5lbC9kbWEvZGlyZWN0LmNcbkBAIC0xMjAsNiArMTIwLDcgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdGludCBub2RlID0gZGV2X3RvX25vZGUoZGV2KTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0dTY0IHBoeXNfbGltaXQ7XG4rXHR2b2lkICp2YTtcbiBcbiBcdFdBUk5fT05fT05DRSghUEFHRV9BTElHTkVEKHNpemUpKTtcbiBcbkBAIC0xMzMsOSArMTM0LDkgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcbiBcdFx0ZG1hX2ZyZWVfY29udGlndW91cyhkZXYsIHBhZ2UsIHNpemUpO1xuIFx0fVxuIFxuLVx0d2hpbGUgKChwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIGdldF9vcmRlcihzaXplKSkpXG4tXHQgICAgICAgXHUwMDI2XHUwMDI2ICFkbWFfY29oZXJlbnRfb2soZGV2LCBwYWdlX3RvX3BoeXMocGFnZSksIHNpemUpKSB7XG4tXHRcdF9fZnJlZV9wYWdlcyhwYWdlLCBnZXRfb3JkZXIoc2l6ZSkpO1xuK1x0d2hpbGUgKCh2YSA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBzaXplLCBnZnApKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAhZG1hX2NvaGVyZW50X29rKGRldiwgdmlydF90b19waHlzKHZhKSwgc2l6ZSkpIHtcbitcdFx0ZnJlZV9wYWdlc19leGFjdCh2YSwgc2l6ZSk7XG4gXG4gXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19aT05FX0RNQTMyKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBoeXNfbGltaXQgXHUwMDNjIERNQV9CSVRfTUFTSyg2NCkgXHUwMDI2XHUwMDI2XG5AQCAtMTQ2LDYgKzE0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRcdGVsc2VcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbitcdHBhZ2UgPSB2YSA/IHZpcnRfdG9fcGFnZSh2YSkgOiBOVUxMO1xuIFxuIFx0cmV0dXJuIHBhZ2U7XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYyBiL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuY1xuaW5kZXggNmI1ZjkyMDhkMzFjMC4uNWNkZjNmNjBjZjQ3OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuY1xuKysrIGIva2VybmVsL2RtYS9vcHNfaGVscGVycy5jXG5AQCAtNjcsMTAgKzY3LDEzIEBAIHN0cnVjdCBwYWdlICpkbWFfY29tbW9uX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRwaHlzX2FkZHJfdCBwaHlzO1xuIFxuIFx0cGFnZSA9IGRtYV9hbGxvY19jb250aWd1b3VzKGRldiwgc2l6ZSwgZ2ZwKTtcbi1cdGlmICghcGFnZSlcbi1cdFx0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUoZGV2X3RvX25vZGUoZGV2KSwgZ2ZwLCBnZXRfb3JkZXIoc2l6ZSkpO1xuLVx0aWYgKCFwYWdlKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdGlmICghcGFnZSkge1xuK1x0XHR2b2lkICp2YSA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChkZXZfdG9fbm9kZShkZXYpLCBzaXplLCBnZnApO1xuK1xuK1x0XHRpZiAoIXZhKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRwYWdlID0gdmlydF90b19wYWdlKHZhKTtcbitcdH1cbiBcbiBcdHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSk7XG4gXHRpZiAodXNlX2RtYV9pb21tdShkZXYpKVxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggYzRkYzYxZWM2NjNlZS4uZDNhMTM1ZGZjZGQzZCAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNTYzNyw3ICs1NjM3LDcgQEAgRVhQT1JUX1NZTUJPTChhbGxvY19wYWdlc19leGFjdF9ub3Byb2YpO1xuICAqXG4gICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYXJlYSBvciAlTlVMTCBpbiBjYXNlIG9mIGVycm9yLlxuICAqL1xuLXZvaWQgKiBfX21lbWluaXQgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXG4rdm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXG4ge1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpO1xuIFx0c3RydWN0IHBhZ2UgKnA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzoxMi4yNTEzNTcyNDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTM2MTEyNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRNQS9NZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBSZXZpZXc6IFBvdGVudGlhbCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVmaW5pdGVseSBoaXR0aW5nIHNvbWUga2V5IGFyZWFzOiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIERNQSBzdWJzeXN0ZW0uIEknbSBzZWVpbmcgY2hhbmdlcyBpbjpcblxuKiAgIGBkcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jYDogU3BlY2lmaWNhbGx5LCBgaW9tbXVfZG1hX2FsbG9jX3BhZ2VzYFxuKiAgIGBpbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhgOiBMb29rcyBsaWtlIGBkbWFfZnJlZV9jb250aWd1b3VzYCBpcyBpbnZvbHZlZC5cbiogICBgaW5jbHVkZS9saW51eC9nZnAuaGAgYW5kIGBtbS9wYWdlX2FsbG9jLmNgOiBCb3RoIGhhdmUgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgIG1vZGlmaWNhdGlvbnMsIHJlbW92aW5nIGBfX21lbWluaXRgLiBUaGlzIHNjcmVhbXMgbWVtb3J5IGFsbG9jYXRpb24gY2hhbmdlcy5cbiogICBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgLCBga2VybmVsL2RtYS9kaXJlY3QuY2AsIGFuZCBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYDogSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgZG1hX2ZyZWVfY29udGlndW91c2AsIGBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXNgLCBhbmQgYGRtYV9jb21tb25fYWxsb2NfcGFnZXNgIHJlc3BlY3RpdmVseS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyByZXBsYWNpbmcgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYGFsbG9jX3BhZ2VzX2V4YWN0X25pZGAgYW5kIGFzc29jaWF0ZWQgZnJlZWluZyBmdW5jdGlvbnMgbGlrZSBgZnJlZV9wYWdlc19leGFjdGAgd2l0aGluIERNQSBhbGxvY2F0aW9uIHBhdGhzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgcmVhY2hhYmxlIHZpYSBmdXp6aW5nIHdpdGggc3l6a2FsbGVyPyBETUEgYWxsb2NhdGlvbiBpcyB1c2VkIGFsbCBvdmVyIHRoZSBwbGFjZS4gSSdtIHRhbGtpbmcgZHJpdmVycyAobmV0ZGV2LCB2aXJ0aW8sIHNvdW5kLCBEUk0sIFVTQiwgYW5kIHByb2JhYmx5IG1vcmUpLCB2aXJ0dWFsIGRldmljZXMgKHZpcnRpbyBhZ2FpbiksIGFuZCBldmVuIHN5c2NhbGxzIChkbWEtYnVmLCBtZWRpYSwgc291bmQsIC9kZXYvLi4uIHlvdSBuYW1lIGl0KSB3aGljaCBtZWFucyB0aGlzIGlzICoqdmVyeSBsaWtlbHkqKiByZWFjaGFibGUuIFRoaXMgaXMgY29yZSBzdHVmZiwgbW9kaWZ5aW5nIGV4ZWN1dGFibGUgY29kZSBpbiBtbSBhbmQgRE1BIG1hcHBpbmcsIHdoaWNoIG1ha2VzIGl0IGhpZ2gtcHJpb3JpdHkuXG5cbkxldCdzIGNoZWNrIHRoZSBjcml0ZXJpYTpcblwiQ29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cIiBXZWxsLCBpdCdzIGRlZmluaXRlbHkgaW4gYG1tL2AgYW5kIHRvdWNoaW5nIERNQSwgd2hpY2ggaXMgZnVuZGFtZW50YWwuXG5cIlJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlwiIEl0ICpjb3VsZCogZmFsbCB1bmRlciB0aGlzLCBkZXBlbmRpbmcgb24gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuXG5cbk15IGludHVpdGlvbiBzYXlzOiAqKldvcnRoRnV6emluZyA9IFRydWUqKi5cblxuTm93IEknbGwgZGlnIGludG8gYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBhbmQgdXNlIHRoZSB0b29saW5nIHRvIGdldCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4YWN0IGNoYW5nZXMgYW5kIGRldGVybWluZSB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgzNywiT3V0cHV0VG9rZW5zIjo3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ3OjE4Ljc4NzQ3MTg0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTcyMTcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21tdV9kbWFfYWxsb2NfcGFnZXN8ZG1hX2FsbG9jX2NvbnRpZ3VvdXN8ZG1hX2ZyZWVfY29udGlndW91c3xfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXN8ZG1hX2NvbW1vbl9hbGxvY19wYWdlc3xhbGxvY19wYWdlc19leGFjdF9uaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2RtYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYz0zOTM9c3RhdGljIHN0cnVjdCBwYWdlICpjbWFfYWxsb2NfYWxpZ25lZChzdHJ1Y3QgY21hICpjbWEsIHNpemVfdCBzaXplLCBnZnBfdCBnZnApXFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00MDAtLyoqXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDAxOiAqIGRtYV9hbGxvY19jb250aWd1b3VzKCkgLSBhbGxvY2F0ZSBjb250aWd1b3VzIHBhZ2VzXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDAyLSAqIEBkZXY6ICAgUG9pbnRlciB0byBkZXZpY2UgZm9yIHdoaWNoIHRoZSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZC5cXG4tLVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQxNC0gKi9cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzo0MTU6c3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGdmcF90IGdmcClcXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00MTYte1xcbi0tXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDQ2LS8qKlxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ0NzogKiBkbWFfZnJlZV9jb250aWd1b3VzKCkgLSByZWxlYXNlIGFsbG9jYXRlZCBwYWdlc1xcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ0OC0gKiBAZGV2OiAgIFBvaW50ZXIgdG8gZGV2aWNlIGZvciB3aGljaCB0aGUgcGFnZXMgd2VyZSBhbGxvY2F0ZWQuXFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTEtICpcXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzo0NTI6ICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb250aWd1b3VzKCkuIEFzIHRoZVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ1My0gKiBjbWFfcmVsZWFzZSByZXR1cm5zIGZhbHNlIHdoZW4gcHJvdmlkZWQgcGFnZXMgZG8gbm90IGJlbG9uZyB0byBjb250aWd1b3VzXFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTYtICovXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDU3OnZvaWQgZG1hX2ZyZWVfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLCBzaXplX3Qgc2l6ZSlcXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTgte1xcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYz0xMDQ9c3RhdGljIHN0cnVjdCBwYWdlICpkbWFfZGlyZWN0X2FsbG9jX3N3aW90bGIoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTE2LVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MTE3OnN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxua2VybmVsL2RtYS9kaXJlY3QuYy0xMTgtXFx0XFx0Z2ZwX3QgZ2ZwLCBib29sIGFsbG93X2hpZ2htZW0pXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTEyNy1cXHRnZnAgfD0gZG1hX2RpcmVjdF9vcHRpbWFsX2dmcF9tYXNrKGRldiwgXFx1MDAyNnBoeXNfbGltaXQpO1xcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MTI4OlxcdHBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIHNpemUsIGdmcCk7XFxua2VybmVsL2RtYS9kaXJlY3QuYy0xMjktXFx0aWYgKHBhZ2UpIHtcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTMzLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MTM0OlxcdFxcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTEzNS1cXHR9XFxua2VybmVsL2RtYS9kaXJlY3QuYy0xMzYtXFxua2VybmVsL2RtYS9kaXJlY3QuYzoxMzc6XFx0d2hpbGUgKCh2YSA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBzaXplLCBnZnApKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTM4LVxcdCAgICAgICAhZG1hX2NvaGVyZW50X29rKGRldiwgdmlydF90b19waHlzKHZhKSwgc2l6ZSkpIHtcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM9MTg0PXN0YXRpYyB2b2lkICpkbWFfZGlyZWN0X2FsbG9jX25vX21hcHBpbmcoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTg4LVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MTg5OlxcdHBhZ2UgPSBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBnZnAgXFx1MDAyNiB+X19HRlBfWkVSTywgdHJ1ZSk7XFxua2VybmVsL2RtYS9kaXJlY3QuYy0xOTAtXFx0aWYgKCFwYWdlKVxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYz0yMDQ9dm9pZCAqZG1hX2RpcmVjdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYy0yOTAtXFx0Lyogd2UgYWx3YXlzIG1hbnVhbGx5IHplcm8gdGhlIG1lbW9yeSBvbmNlIHdlIGFyZSBkb25lICovXFxua2VybmVsL2RtYS9kaXJlY3QuYzoyOTE6XFx0cGFnZSA9IF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhkZXYsIHNpemUsIGdmcCBcXHUwMDI2IH5fX0dGUF9aRVJPLCBhbGxvd19oaWdobWVtKTtcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5Mi1cXHRpZiAoIXBhZ2UpXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5Ni1cXHQvKlxcbmtlcm5lbC9kbWEvZGlyZWN0LmM6Mjk3OlxcdCAqIGRtYV9hbGxvY19jb250aWd1b3VzIGNhbiByZXR1cm4gaGlnaG1lbSBwYWdlcyBkZXBlbmRpbmcgb24gYVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMjk4LVxcdCAqIGNvbWJpbmF0aW9uIHRoZSBjbWE9IGFyZ3VtZW50cyBhbmQgcGVyLWFyY2ggc2V0dXAuICBUaGVzZSBuZWVkIHRvIGJlXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM1NC1cXHRpZiAoIXN3aW90bGJfZnJlZShkZXYsIHBhZ2UsIHNpemUpKVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MzU1OlxcdFxcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM1Ni1cXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM9MzYxPXZvaWQgZG1hX2RpcmVjdF9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTM4MS1cXHRcXHQvKiBjcHVfYWRkciBpcyBhIHN0cnVjdCBwYWdlIGNvb2tpZSwgbm90IGEga2VybmVsIGFkZHJlc3MgKi9cXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjM4MjpcXHRcXHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgY3B1X2FkZHIsIHNpemUpO1xcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMzgzLVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtNDMwLVxcdGVsc2VcXG5rZXJuZWwvZG1hL2RpcmVjdC5jOjQzMTpcXHRcXHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgZG1hX2RpcmVjdF90b19wYWdlKGRldiwgZG1hX2FkZHIpLCBzaXplKTtcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTQzMi19XFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTQzND1zdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYy00NTYtXFxua2VybmVsL2RtYS9kaXJlY3QuYzo0NTc6XFx0cGFnZSA9IF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhkZXYsIHNpemUsIGdmcCwgZmFsc2UpO1xcbmtlcm5lbC9kbWEvZGlyZWN0LmMtNDU4LVxcdGlmICghcGFnZSlcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM9NDc0PXZvaWQgZG1hX2RpcmVjdF9mcmVlX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTUwMi1cXHRlbHNlXFxua2VybmVsL2RtYS9kaXJlY3QuYzo1MDM6XFx0XFx0ZG1hX2ZyZWVfY29udGlndW91cyhkZXYsIHBhZ2UsIHNpemUpO1xcbmtlcm5lbC9kbWEvZGlyZWN0LmMtNTA0LX1cXG4tLVxcbmtlcm5lbC9kbWEvbWFwcGluZy5jPTcxNz1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuLS1cXG5rZXJuZWwvZG1hL21hcHBpbmcuYy03MzItXFx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcXG5rZXJuZWwvZG1hL21hcHBpbmcuYzo3MzM6XFx0XFx0cmV0dXJuIGRtYV9jb21tb25fYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBkaXIsIGdmcCk7XFxua2VybmVsL2RtYS9tYXBwaW5nLmMtNzM0LVxcdGlmICghb3BzLVxcdTAwM2VhbGxvY19wYWdlc19vcClcXG4tLVxcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYz0zNT1pbnQgZG1hX2NvbW1vbl9tbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtNjEtXFxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jOjYyOnN0cnVjdCBwYWdlICpkbWFfY29tbW9uX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jLTYzLVxcdFxcdGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgZ2ZwX3QgZ2ZwKVxcbi0tXFxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jLTY4LVxcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYzo2OTpcXHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBzaXplLCBnZnApO1xcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYy03MC1cXHRpZiAoIXBhZ2UpIHtcXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmM6NzE6XFx0XFx0dm9pZCAqdmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQoZGV2X3RvX25vZGUoZGV2KSwgc2l6ZSwgZ2ZwKTtcXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtNzItXFxuLS1cXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtODUtXFx0aWYgKCpkbWFfaGFuZGxlID09IERNQV9NQVBQSU5HX0VSUk9SKSB7XFxua2VybmVsL2RtYS9vcHNfaGVscGVycy5jOjg2OlxcdFxcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtODctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmM9OTQ9dm9pZCBkbWFfY29tbW9uX2ZyZWVfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMtMTA0LVxcdFxcdFxcdFxcdERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYzoxMDU6XFx0ZG1hX2ZyZWVfY29udGlndW91cyhkZXYsIHBhZ2UsIHNpemUpO1xcbmtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuYy0xMDYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzoxOC44MzkyMDUzNjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUwOTM4Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBJT01NVSBJc3N1ZXMqKlxuXG5SaWdodCwgc28gd2UncmUgc2VlaW5nIHNvbWV0aGluZyB0aGF0IHNtZWxscyBsaWtlIGEgRE1BIG9yIElPTU1VIHByb2JsZW0uIEdpdmVuIHRoZSBnZW5lcmFsIG5hdHVyZSBvZiB0aGUgc3ltcHRvbXMsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGJyb2FkZW4gb3VyIHNjb3BlIGEgYml0IGJleW9uZCB0aGUgb2J2aW91cyBzdXNwZWN0LiBXaGlsZSBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBsaWtlbHkgY3VscHJpdCwgSSBzaG91bGQgYWxzbyBjaGVjayBvdXQgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgLiBJdCdzIHBvc3NpYmxlIHRoZSBpc3N1ZSBpc24ndCBhcyBsb2NhbGl6ZWQgYXMgaW5pdGlhbGx5IGJlbGlldmVkLCBhbmQgaXQgbWlnaHQgYmUgc3RlbW1pbmcgZnJvbSBzb21lIG1vcmUgZ2VuZXJpYyBETUEgY29uZmlndXJhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGF0IG1vZHVsZS4gSXQncyBhIGtleSBwaWVjZSBpbiB0aGUgcHV6emxlIGFuZCBuZWVkcyB0byBiZSBydWxlZCBvdXQgKG9yIGluISkgcXVpY2tseS4gVGhhdCBmaWxlIG9mdGVuIGNvbnRhaW5zIGdsb2JhbCBJT01NVSBzZXR1cCB0aGF0IGNvdWxkIGV4cGxhaW4gdGhlc2Ugc3ltcHRvbXMsIG9yIGEgbWlzY29uZmlndXJhdGlvbiBjb3VsZCBiZSBvY2N1cnJpbmcgaW4gdGhhdCBzcGFjZS4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzoyMC45OTAxNDYyODdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3ODIyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tbXVfZG1hX2FsbG9jX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYz04Nzc9c3RhdGljIHZvaWQgX19pb21tdV9kbWFfZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgY291bnQpXFxuLS1cXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTg4My1cXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jOjg4NDpzdGF0aWMgc3RydWN0IHBhZ2UgKipfX2lvbW11X2RtYV9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy04ODUtXFx0XFx0dW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBsb25nIG9yZGVyX21hc2ssIGdmcF90IGdmcClcXG4tLVxcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM9OTQwPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKl9faW9tbXVfZG1hX2FsbG9jX25vbmNvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy05NjctXFx0Y291bnQgPSBQQUdFX0FMSUdOKHNpemUpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYzo5Njg6XFx0cGFnZXMgPSBfX2lvbW11X2RtYV9hbGxvY19wYWdlcyhkZXYsIGNvdW50LCBhbGxvY19zaXplcyBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMtOTY5LVxcdFxcdFxcdFxcdFxcdGdmcCk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTk3OS1cXHQgKiBSZW1vdmUgdGhlIHpvbmUvcG9saWN5IGZsYWdzIGZyb20gdGhlIEdGUCAtIHRoZXNlIGFyZSBhcHBsaWVkIHRvIHRoZVxcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM6OTgwOlxcdCAqIF9faW9tbXVfZG1hX2FsbG9jX3BhZ2VzKCkgYnV0IGFyZSBub3QgdXNlZCBmb3IgdGhlIHN1cHBvcnRpbmdcXG5kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jLTk4MS1cXHQgKiBpbnRlcm5hbCBhbGxvY2F0aW9ucyB0aGF0IGZvbGxvdy5cXG4tLVxcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM9MTYxND12b2lkIGlvbW11X2RtYV9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLFxcbi0tXFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy0xNjIwLVxcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM6MTYyMTpzdGF0aWMgdm9pZCAqaW9tbXVfZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy0xNjIyLVxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZXAsIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBhdHRycylcXG4tLVxcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmM9MTY2MD12b2lkICppb21tdV9kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxcbi0tXFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYy0xNjg2LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYzoxNjg3OlxcdFxcdGNwdV9hZGRyID0gaW9tbXVfZG1hX2FsbG9jX3BhZ2VzKGRldiwgc2l6ZSwgXFx1MDAyNnBhZ2UsIGdmcCwgYXR0cnMpO1xcbmRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmMtMTY4OC1cXHRcXHRpZiAoIWNwdV9hZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzoyMS4wMzg5MzQ1MzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDM0MzE4NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEV4YWN0LVNpemUgUGFnZSBBbGxvY2F0aW9uIGFuZCBEZWFsbG9jYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZXhhY3Qtc2l6ZSBwYWdlIGFsbG9jYXRpb25zIHdvcmssIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBOVU1BIG5vZGVzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZmAgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGJlIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMg4oCTIGZpZ3VyaW5nIG91dCBob3cgd2UgZ2V0IHRob3NlIHByZWNpc2VseSBzaXplZCBwYWdlcyB0aGF0IGFyZW7igJl0IGEgcG93ZXIgb2YgdHdvLCBhbmQgaG93IHRoZSBOVU1BIG5vZGUgKG5pZCkgZ2V0cyBpbnZvbHZlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAsIHRoZSBjaG9pY2Ugb2Ygem9uZSwgYW5kIGFueSBwb3RlbnRpYWwgZmFsbGJhY2sgbWVjaGFuaXNtcyBpZiBhIHN1aXRhYmxlIHBhZ2UgaXNuJ3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYG5vcHJvZmAgYXNwZWN0IHRvbzsgaXMgdGhpcyBhYm91dCBwcm9maWxpbmcgb3Igc3RhdGlzdGljcyBnYXRoZXJpbmcgYmVpbmcgc2tpcHBlZD9cblxuVGhlbiwgdGhlIG5hdHVyYWwgZm9sbG93LXVwIGlzIGBmcmVlX3BhZ2VzX2V4YWN0YC4gSSBuZWVkIHRvIHRyYWNrIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgZXhhY3Qtc2l6ZSBwYWdlcy4gV2hhdCBkb2VzIHRoZSBkZWFsbG9jYXRpb24gcHJvY2VzcyBlbnRhaWw/IERvZXMgaXQgc2ltcGx5IHJldHVybiB0aGVtIHRvIHRoZSBhcHByb3ByaWF0ZSBmcmVlIGxpc3QsIG9yIGFyZSB0aGVyZSBtb3JlIGNvbXBsZXggb3BlcmF0aW9ucyBpbnZvbHZlZCwgc3VjaCBhcyBtZXJnaW5nIHdpdGggYWRqYWNlbnQgcGFnZXMgdG8gZm9ybSBsYXJnZXIgYmxvY2tzPyBXaGF0IGhhcHBlbnMgdG8gdGhlIG1ldGFkYXRhPyBUaGlzIGlzIGNyaXRpY2FsIGZvciBwcmV2ZW50aW5nIGZyYWdtZW50YXRpb24gYW5kIGVuc3VyaW5nIGVmZmljaWVudCBtZW1vcnkgdXRpbGl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYm9va2tlZXBpbmcgaXMgbWFpbnRhaW5lZCwgZnJvbSBhbGxvY2F0aW9uIHRvIGRlYWxsb2NhdGlvbiwgdG8gZnVsbHkgZ3Jhc3AgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgcG90ZW50aWFsIHBpdGZhbGxzIG9mIHRoaXMgZXhhY3Qtc2l6ZSBzdHJhdGVneS4gYG1tL3BhZ2VfYWxsb2MuY2AgaXQgaXMuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzoyNC4wNzMyNTUwOTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjEyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU2MzA6XFx0ICpcXHRcXHRcXHQgICBwYWdlcyBvbiBhIG5vZGUuXFxuNTYzMTpcXHQgKiBAbmlkOiB0aGUgcHJlZmVycmVkIG5vZGUgSUQgd2hlcmUgbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWRcXG41NjMyOlxcdCAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlXFxuNTYzMzpcXHQgKiBAZ2ZwX21hc2s6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb24sIG11c3Qgbm90IGNvbnRhaW4gX19HRlBfQ09NUFxcbjU2MzQ6XFx0ICpcXG41NjM1OlxcdCAqIExpa2UgYWxsb2NfcGFnZXNfZXhhY3QoKSwgYnV0IHRyeSB0byBhbGxvY2F0ZSBvbiBub2RlIG5pZCBmaXJzdCBiZWZvcmUgZmFsbGluZ1xcbjU2MzY6XFx0ICogYmFjay5cXG41NjM3OlxcdCAqXFxuNTYzODpcXHQgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9yICVOVUxMIGluIGNhc2Ugb2YgZXJyb3IuXFxuNTYzOTpcXHQgKi9cXG41NjQwOlxcdHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxcbjU2NDE6XFx0e1xcbjU2NDI6XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpO1xcbjU2NDM6XFx0XFx0c3RydWN0IHBhZ2UgKnA7XFxuNTY0NDpcXHRcXG41NjQ1OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pKSlcXG41NjQ2OlxcdFxcdFxcdGdmcF9tYXNrIFxcdTAwMjY9IH4oX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pO1xcbjU2NDc6XFx0XFxuNTY0ODpcXHRcXHRwID0gYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YobmlkLCBnZnBfbWFzaywgb3JkZXIpO1xcbjU2NDk6XFx0XFx0aWYgKCFwKVxcbjU2NTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuNTY1MTpcXHRcXHRyZXR1cm4gbWFrZV9hbGxvY19leGFjdCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocCksIG9yZGVyLCBzaXplKTtcXG41NjUyOlxcdH1cXG41NjUzOlxcdFxcbjU2NTQ6XFx0LyoqXFxuNTY1NTpcXHQgKiBmcmVlX3BhZ2VzX2V4YWN0IC0gcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIHZpYSBhbGxvY19wYWdlc19leGFjdCgpXFxuNTY1NjpcXHQgKiBAdmlydDogdGhlIHZhbHVlIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzX2V4YWN0LlxcbjU2NTc6XFx0ICogQHNpemU6IHNpemUgb2YgYWxsb2NhdGlvbiwgc2FtZSB2YWx1ZSBhcyBwYXNzZWQgdG8gYWxsb2NfcGFnZXNfZXhhY3QoKS5cXG41NjU4OlxcdCAqXFxuNTY1OTpcXHQgKiBSZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBhbGxvY19wYWdlc19leGFjdC5cXG41NjYwOlxcdCAqL1xcbjU2NjE6XFx0dm9pZCBmcmVlX3BhZ2VzX2V4YWN0KHZvaWQgKnZpcnQsIHNpemVfdCBzaXplKVxcbjU2NjI6XFx0e1xcbjU2NjM6XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpdmlydDtcXG41NjY0OlxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIFBBR0VfQUxJR04oc2l6ZSk7XFxuNTY2NTpcXHRcXG41NjY2OlxcdFxcdHdoaWxlIChhZGRyIFxcdTAwM2MgZW5kKSB7XFxuNTY2NzpcXHRcXHRcXHRmcmVlX3BhZ2UoYWRkcik7XFxuNTY2ODpcXHRcXHRcXHRhZGRyICs9IFBBR0VfU0laRTtcXG41NjY5OlxcdFxcdH1cXG41NjcwOlxcdH1cXG41NjcxOlxcdEVYUE9SVF9TWU1CT0woZnJlZV9wYWdlc19leGFjdCk7XFxuNTY3MjpcXHRcXG41NjczOlxcdC8qKlxcbjU2NzQ6XFx0ICogbnJfZnJlZV96b25lX3BhZ2VzIC0gY291bnQgbnVtYmVyIG9mIHBhZ2VzIGJleW9uZCBoaWdoIHdhdGVybWFya1xcbjU2NzU6XFx0ICogQG9mZnNldDogVGhlIHpvbmUgaW5kZXggb2YgdGhlIGhpZ2hlc3Qgem9uZVxcbjU2NzY6XFx0ICpcXG41Njc3OlxcdCAqIG5yX2ZyZWVfem9uZV9wYWdlcygpIGNvdW50cyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHdoaWNoIGFyZSBiZXlvbmQgdGhlXFxuNTY3ODpcXHQgKiBoaWdoIHdhdGVybWFyayB3aXRoaW4gYWxsIHpvbmVzIGF0IG9yIGJlbG93IGEgZ2l2ZW4gem9uZSBpbmRleC4gIEZvciBlYWNoXFxuNTY3OTpcXHQgKiB6b25lLCB0aGUgbnVtYmVyIG9mIHBhZ2VzIGlzIGNhbGN1bGF0ZWQgYXM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ3OjI0LjA3MzUxNzU4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMzc5NzQ4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIERNQSBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgY2xvc2VseSBhdCB0aGVzZSBjaGFuZ2VzLCBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBnYXRoZXJlZC4gVGhlIGtleSBhcmVhIG9mIG1vZGlmaWNhdGlvbiBhcHBlYXJzIHRvIGJlIGFyb3VuZCBob3cgd2UncmUgaGFuZGxpbmcgRE1BIGFsbG9jYXRpb25zLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIG1vcmUgcHJlY2lzZSBzaXppbmcgYW5kIGZyZWVpbmcuXG5cbkluaXRpYWxseSwgSSBzZWUgdGhhdCBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZmAgaGFkIHRoZSBgX19tZW1pbml0YCB0YWcsIGxpbWl0aW5nIGl0cyB1c2UgdG8gZWFybHkgaW5pdGlhbGl6YXRpb24gb3IgbWVtb3J5IGhvdHBsdWcgc2NlbmFyaW9zLiBSZW1vdmluZyB0aGlzIHRhZyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IG9wZW5zIHRoZSBkb29yIGZvciBydW50aW1lIGNhbGxzLCBwYXJ0aWN1bGFybHkgZnJvbSBETUEgYWxsb2NhdG9ycyBsaWtlIGBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXNgLCBgaW9tbXVfZG1hX2FsbG9jX3BhZ2VzYCwgYW5kIGZyaWVuZHMuICBQcmV2aW91c2x5LCB0aGVzZSBmdW5jdGlvbnMgdXNlZCBgYWxsb2NfcGFnZXNfbm9kZWAgd2l0aCBhIHBvd2VyLW9mLXR3byBwYWdlIGJsb2NrIGFsbG9jYXRpb24sIHdoaWNoIGlzIGEgY29tcG91bmQgb3IgYnVkZHkgb3JkZXIgYWxsb2NhdGlvbi4gQnV0IGl0IGRpZG4ndCBoYW5kbGUgdGhlIHVudXNlZCBcInRhaWxcIiBwYWdlcyBlZmZpY2llbnRseS5cblxuTm93LCB0aGUgaW50cm9kdWN0aW9uIG9mIGBtYWtlX2FsbG9jX2V4YWN0YCBpcyBjcml0aWNhbC4gSXQncyBpbnZva2VkIGJ5IGBhbGxvY19wYWdlc19leGFjdF9uaWRgLCBhbGxvd2luZyB0aGUgYWxsb2NhdGVkIGJsb2NrIHRvIGJlIHNwbGl0IGFuZCBhbnkgdW51c2VkIHRhaWwgcGFnZXMgKGJleW9uZCB0aGUgcmVxdWVzdGVkIGBzaXplYCkgdG8gYmUgZnJlZWQuIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgaW4gbWVtb3J5IHV0aWxpemF0aW9uLCBhcyBpdCBhdm9pZHMgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbi5cblxuRnVydGhlcm1vcmUsIG9uIHRoZSBkZWFsbG9jYXRpb24gc2lkZSwgdGhlIGBkbWFfZnJlZV9jb250aWd1b3VzYCBjYWxscyBhcmUgbm93IHVzaW5nIGBmcmVlX3BhZ2VzX2V4YWN0YCBmb3IgZnJlZWluZywgc3BlY2lmaWNhbGx5IGBmcmVlX3BhZ2VzX2V4YWN0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgc2l6ZSlgIGluc3RlYWQgb2YgdGhlIG9sZCBgX19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSlgLiBUaGlzIGlzIGFub3RoZXIgcGllY2UgdGhhdCBhbGlnbnMgd2l0aCB0aGUgZXhhY3Qtc2l6ZSBhbGxvY2F0aW9uIGxvZ2ljLlxuXG5UaGUgbWFpbiB0YWtlYXdheSBpcyB0aGF0IHRoaXMgY2hhbmdlIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gYmVoYXZpb3IgYWNyb3NzIERNQSBkaXJlY3QsIERNQSBvcHMgaGVscGVycywgRE1BIENNQSwgYW5kIElPTU1VIERNQSBhbGxvY2F0aW9ucy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiB0aG9zZSBhcmVhcy5cblxuT25lIG90aGVyIGNvbmNlcm4gaXMgdGhhdCBpZiBhbnkgY2FsbGVyIHBhc3NlcyBgX19HRlBfQ09NUGAgb3IgYF9fR0ZQX0hJR0hNRU1gIGZsYWdzIHRvIGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYCwgaXQgd2lsbCB0cmlnZ2VyIGEgYFdBUk5fT05fT05DRWAgd2hpY2ggbWlnaHQgaW50cm9kdWNlIGtlcm5lbCB3YXJuaW5ncywgd2hpY2ggSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBpbiBtb3JlIGRlcHRoLlxuXG5GaW5hbGx5LCBJ4oCZdmUgYWxzbyBjaGVja2VkIHRoZSBhZmZlY3RlZCBmaWxlczogYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgICh1bmRlciBgQ09ORklHX0lPTU1VX0RNQWApLCBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgIChgQ09ORklHX0RNQV9DTUFgKSwgYGtlcm5lbC9kbWEvZGlyZWN0LmNgIChjb3JlIERNQSBtYXBwaW5nKSwgYGtlcm5lbC9kbWEvb3BzX2hlbHBlcnMuY2AgKGBDT05GSUdfRE1BX09QU19IRUxQRVJTYCBvciBgQ09ORklHX0RNQV9PUFNgL2BDT05GSUdfSEFTX0RNQWApLCBhbmQgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZSBgbW0vcGFnZV9hbGxvYy5jYC4gSSB3aWxsIG5vdyBsb29rIGNsb3NlbHkgYXQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBgZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY2AgYW5kIGBrZXJuZWwvZG1hL0tjb25maWdgIHRvIHVuZGVyc3RhbmQgYW55IGNvbmZpZ3VyYXRpb24gaW1wYWN0cy4gVGhpcyBpcyBhIGNvbXBsZXggY2hhbmdlIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBzY3J1dGlueSBhY3Jvc3MgdmFyaW91cyBETUEgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzE1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6MjkuMjExNDk2NDExWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjk5OTE0NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRtYS1pb21tdVxcXFwub3xjb250aWd1b3VzXFxcXC5vfG9wc19oZWxwZXJzXFxcXC5vfGRpcmVjdFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZT0xMzM9b2JqLSQoQ09ORklHX1BQQzMyKVxcdFxcdCs9IGVudHJ5XzMyLm8gc2V0dXBfMzIubyBlYXJseV8zMi5vIHN0YXRpY19jYWxsLm9cXG5hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlOjEzNDpvYmotJChDT05GSUdfUFBDNjQpXFx0XFx0Kz0gZG1hLWlvbW11Lm8gaW9tbXUub1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUtMTM1LW9iai0kKENPTkZJR19LR0RCKVxcdFxcdCs9IGtnZGIub1xcbi0tXFxuYXJjaC94ODYvcGNpL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX1BDSV9CSU9TKVxcdFxcdCs9IHBjYmlvcy5vXFxuYXJjaC94ODYvcGNpL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1BDSV9NTUNPTkZJRylcXHQrPSBtbWNvbmZpZ18kKEJJVFMpLm8gZGlyZWN0Lm8gbW1jb25maWctc2hhcmVkLm9cXG5hcmNoL3g4Ni9wY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUENJX0RJUkVDVClcXHQrPSBkaXJlY3Qub1xcbmFyY2gveDg2L3BjaS9NYWtlZmlsZS03LW9iai0kKENPTkZJR19QQ0lfT0xQQylcXHRcXHQrPSBvbHBjLm9cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L01ha2VmaWxlPTQ9bWx4NV9pYi15IDo9IGFoLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvTWFrZWZpbGUtOC1cXHQgICAgIGNxLm8gXFxcXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L01ha2VmaWxlOjk6XFx0ICAgICBkYXRhX2RpcmVjdC5vIFxcXFxcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9NYWtlZmlsZS0xMC1cXHQgICAgIGRtLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9pb21tdS9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfSU9NTVVfREVCVUdGUykgKz0gaW9tbXUtZGVidWdmcy5vXFxuZHJpdmVycy9pb21tdS9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfSU9NTVVfRE1BKSArPSBkbWEtaW9tbXUub1xcbmRyaXZlcnMvaW9tbXUvTWFrZWZpbGUtMTQtb2JqLSQoQ09ORklHX0lPTU1VX0lPX1BHVEFCTEUpICs9IGlvLXBndGFibGUub1xcbi0tXFxuZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfUklTQ1ZfSU5UQylcXHRcXHQrPSBpcnEtcmlzY3YtaW50Yy5vXFxuZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfUklTQ1ZfQVBMSUMpXFx0XFx0Kz0gaXJxLXJpc2N2LWFwbGljLW1haW4ubyBpcnEtcmlzY3YtYXBsaWMtZGlyZWN0Lm9cXG5kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGUtMTA2LW9iai0kKENPTkZJR19SSVNDVl9BUExJQ19NU0kpXFx0XFx0Kz0gaXJxLXJpc2N2LWFwbGljLW1zaS5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9MjY9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfQ09SRV9FTikgKz0gZW4vcnF0Lm8gZW4vdGlyLm8gZW4vcnNzLm8gZW4vcnhfcmVzLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTMxLVxcdFxcdGVuL3hzay9zZXR1cC5vIGVuL3hzay9yeC5vIGVuL3hzay90eC5vIGVuL2RldmxpbmsubyBlbi9wdHAubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjMyOlxcdFxcdGVuL3Fvcy5vIGVuL2h0Yi5vIGVuL3RyYXAubyBlbi9mc190dF9yZWRpcmVjdC5vIGVuL3NlbHEubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTMzLVxcdFxcdGxpYi9jcnlwdG8ubyBsaWIvc2QubyBlbi9wY2llX2NvbmdfZXZlbnQub1xcbi0tXFxuZHJpdmVycy94ZW4vTWFrZWZpbGU9NDI9b2JqLSQoQ09ORklHX1hFTl9HUkFOVF9ETUFfT1BTKVxcdFxcdCs9IGdyYW50LWRtYS1vcHMub1xcbmRyaXZlcnMveGVuL01ha2VmaWxlOjQzOm9iai0kKENPTkZJR19YRU5fR1JBTlRfRE1BX0lPTU1VKVxcdCs9IGdyYW50LWRtYS1pb21tdS5vXFxuLS1cXG5mcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtOS1cXHRcXHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEwOlxcdFxcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG4tLVxcbmZzL25mcy9NYWtlZmlsZT05PW5mcy15IFxcdFxcdFxcdDo9IGNsaWVudC5vIGRpci5vIGZpbGUubyBnZXRyb290Lm8gaW5vZGUubyBzdXBlci5vIFxcXFxcXG5mcy9uZnMvTWFrZWZpbGU6MTA6XFx0XFx0XFx0ICAgaW8ubyBkaXJlY3QubyBwYWdlbGlzdC5vIHJlYWQubyBzeW1saW5rLm8gdW5saW5rLm8gXFxcXFxcbmZzL25mcy9NYWtlZmlsZS0xMS1cXHRcXHRcXHQgICB3cml0ZS5vIG5hbWVzcGFjZS5vIG1vdW50X2NsbnQubyBuZnN0cmFjZS5vIFxcXFxcXG4tLVxcbmZzL25pbGZzMi9NYWtlZmlsZT0zPW5pbGZzMi15IDo9IGlub2RlLm8gZmlsZS5vIGRpci5vIHN1cGVyLm8gbmFtZWkubyBwYWdlLm8gbWR0Lm8gXFxcXFxcbmZzL25pbGZzMi9NYWtlZmlsZTo0OlxcdGJ0bm9kZS5vIGJtYXAubyBidHJlZS5vIGRpcmVjdC5vIGRhdC5vIHJlY292ZXJ5Lm8gXFxcXFxcbmZzL25pbGZzMi9NYWtlZmlsZS01LVxcdHRoZV9uaWxmcy5vIHNlZ2J1Zi5vIHNlZ21lbnQubyBjcGZpbGUubyBzdWZpbGUubyBcXFxcXFxuLS1cXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlPTI5PWNpZnMtJChDT05GSUdfQ0lGU19GU0NBQ0hFKSArPSBmc2NhY2hlLm9cXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTMwLVxcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGU6MzE6Y2lmcy0kKENPTkZJR19DSUZTX1NNQl9ESVJFQ1QpICs9IHNtYmRpcmVjdC5vXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0zMi1cXG4tLVxcbmZzL3NtYi9zbWJkaXJlY3QvTWFrZWZpbGUtNS1cXG5mcy9zbWIvc21iZGlyZWN0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1NNQkRJUkVDVCkgKz0gc21iZGlyZWN0Lm9cXG5mcy9zbWIvc21iZGlyZWN0L01ha2VmaWxlLTctXFxuLS1cXG5mcy9zcXVhc2hmcy9NYWtlZmlsZT05PXNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0ZJTEVfQ0FDSEUpICs9IGZpbGVfY2FjaGUub1xcbmZzL3NxdWFzaGZzL01ha2VmaWxlOjEwOnNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0ZJTEVfRElSRUNUKSArPSBmaWxlX2RpcmVjdC5vXFxuZnMvc3F1YXNoZnMvTWFrZWZpbGUtMTEtc3F1YXNoZnMtJChDT05GSUdfU1FVQVNIRlNfREVDT01QX1NJTkdMRSkgKz0gZGVjb21wcmVzc29yX3NpbmdsZS5vXFxuLS1cXG5rZXJuZWwvZG1hL01ha2VmaWxlLTItXFxua2VybmVsL2RtYS9NYWtlZmlsZTozOm9iai0kKENPTkZJR19IQVNfRE1BKVxcdFxcdFxcdCs9IG1hcHBpbmcubyBkaXJlY3Qub1xcbmtlcm5lbC9kbWEvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfRE1BX09QU19IRUxQRVJTKVxcdFxcdCs9IG9wc19oZWxwZXJzLm9cXG5rZXJuZWwvZG1hL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX0FSQ0hfSEFTX0RNQV9PUFMpXFx0XFx0Kz0gZHVtbXkub1xcbmtlcm5lbC9kbWEvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfRE1BX0NNQSlcXHRcXHRcXHQrPSBjb250aWd1b3VzLm9cXG5rZXJuZWwvZG1hL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX0RNQV9ERUNMQVJFX0NPSEVSRU5UKVxcdCs9IGNvaGVyZW50Lm9cXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlPTM0PW9iai0kKENPTkZJR19CUklER0VfRUJUX0ROQVQpICs9IGVidF9kbmF0Lm9cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfQlJJREdFX0VCVF9SRURJUkVDVCkgKz0gZWJ0X3JlZGlyZWN0Lm9cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZS0zNi1vYmotJChDT05GSUdfQlJJREdFX0VCVF9TTkFUKSArPSBlYnRfc25hdC5vXFxuLS1cXG5uZXQvY2VwaC9vc2RfY2xpZW50LmM9MzY3MD1zdGF0aWMgaW50IGRlY29kZV9NT1NET3BSZXBseShjb25zdCBzdHJ1Y3QgY2VwaF9tc2cgKm1zZywgc3RydWN0IE1PU0RPcFJlcGx5ICptKVxcbi0tXFxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM3MzYtXFx0fSBlbHNlIHtcXG5uZXQvY2VwaC9vc2RfY2xpZW50LmM6MzczNzpcXHRcXHRjZXBoX29sb2NfaW5pdChcXHUwMDI2bS1cXHUwMDNlcmVkaXJlY3Qub2xvYyk7XFxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM3MzgtXFx0fVxcbi0tXFxubmV0L2NlcGgvb3NkX2NsaWVudC5jPTM3NTA9c3RhdGljIHZvaWQgaGFuZGxlX3JlcGx5KHN0cnVjdCBjZXBoX29zZCAqb3NkLCBzdHJ1Y3QgY2VwaF9tc2cgKm1zZylcXG4tLVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zNzc1LVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYzozNzc2OlxcdG0ucmVkaXJlY3Qub2xvYy5wb29sX25zID0gcmVxLVxcdTAwM2VyX3QudGFyZ2V0X29sb2MucG9vbF9ucztcXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMzc3Ny1cXHRyZXQgPSBkZWNvZGVfTU9TRE9wUmVwbHkobXNnLCBcXHUwMDI2bSk7XFxubmV0L2NlcGgvb3NkX2NsaWVudC5jOjM3Nzg6XFx0bS5yZWRpcmVjdC5vbG9jLnBvb2xfbnMgPSBOVUxMO1xcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zNzc5LVxcdGlmIChyZXQpIHtcXG4tLVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zODAwLVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYzozODAxOlxcdGlmICghY2VwaF9vbG9jX2VtcHR5KFxcdTAwMjZtLnJlZGlyZWN0Lm9sb2MpKSB7XFxubmV0L2NlcGgvb3NkX2NsaWVudC5jLTM4MDItXFx0XFx0ZG91dChcXFwicmVxICVwIHRpZCAlbGx1IHJlZGlyZWN0IHBvb2wgJWxsZFxcXFxuXFxcIiwgcmVxLCByZXEtXFx1MDAzZXJfdGlkLFxcbm5ldC9jZXBoL29zZF9jbGllbnQuYzozODAzOlxcdFxcdCAgICAgbS5yZWRpcmVjdC5vbG9jLnBvb2wpO1xcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zODA0LVxcdFxcdHVubGlua19yZXF1ZXN0KG9zZCwgcmVxKTtcXG4tLVxcbm5ldC9jZXBoL29zZF9jbGllbnQuYy0zODEwLVxcdFxcdCAqL1xcbm5ldC9jZXBoL29zZF9jbGllbnQuYzozODExOlxcdFxcdHJlcS1cXHUwMDNlcl90LnRhcmdldF9vbG9jLnBvb2wgPSBtLnJlZGlyZWN0Lm9sb2MucG9vbDtcXG5uZXQvY2VwaC9vc2RfY2xpZW50LmMtMzgxMi1cXHRcXHRyZXEtXFx1MDAzZXJfZmxhZ3MgfD0gQ0VQSF9PU0RfRkxBR19SRURJUkVDVEVEIHxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NjA9b2JqLSQoQ09ORklHX05GX05BVCkgKz0gbmZfbmF0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjYxOm5mX25hdC0kKENPTkZJR19ORl9OQVRfUkVESVJFQ1QpICs9IG5mX25hdF9yZWRpcmVjdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS02Mi1uZl9uYXQtJChDT05GSUdfTkZfTkFUX01BU1FVRVJBREUpICs9IG5mX25hdF9tYXNxdWVyYWRlLm9cXG4tLVxcbnNhbXBsZXMvZnRyYWNlL01ha2VmaWxlLTItXFxuc2FtcGxlcy9mdHJhY2UvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfU0FNUExFX0ZUUkFDRV9ESVJFQ1QpICs9IGZ0cmFjZS1kaXJlY3Qub1xcbnNhbXBsZXMvZnRyYWNlL01ha2VmaWxlLTQtb2JqLSQoQ09ORklHX1NBTVBMRV9GVFJBQ0VfRElSRUNUKSArPSBmdHJhY2UtZGlyZWN0LXRvby5vXFxuLS1cXG5zY3JpcHRzL3Nib20vdGVzdHMvY21kX2dyYXBoL3Rlc3Rfc2F2ZWRjbWRfcGFyc2VyLnB5PTEzPWNsYXNzIFRlc3RTYXZlZENtZFBhcnNlcih1bml0dGVzdC5UZXN0Q2FzZSk6XFxuLS1cXG5zY3JpcHRzL3Nib20vdGVzdHMvY21kX2dyYXBoL3Rlc3Rfc2F2ZWRjbWRfcGFyc2VyLnB5LTE5NC0gICAgZGVmIHRlc3RfYXJfcHJpbnRmX25lc3RlZChzZWxmKTpcXG5zY3JpcHRzL3Nib20vdGVzdHMvY21kX2dyYXBoL3Rlc3Rfc2F2ZWRjbWRfcGFyc2VyLnB5OjE5NTogICAgICAgIGNtZCA9ICdybSAtZiBhcmNoL3g4Ni9wY2kvYnVpbHQtaW4uYTsgIHByaW50ZiBcXFwiYXJjaC94ODYvcGNpLyVzIFxcXCIgaTM4Ni5vIGluaXQubyBtbWNvbmZpZ182NC5vIGRpcmVjdC5vIG1tY29uZmlnLXNoYXJlZC5vIGZpeHVwLm8gYWNwaS5vIC4uLlxcbnNjcmlwdHMvc2JvbS90ZXN0cy9jbWRfZ3JhcGgvdGVzdF9zYXZlZGNtZF9wYXJzZXIucHk6MTk2OiAgICAgICAgZXhwZWN0ZWQgPSBcXFwiYXJjaC94ODYvcGNpL2kzODYubyBhcmNoL3g4Ni9wY2kvaW5pdC5vIGFyY2gveDg2L3BjaS9tbWNvbmZpZ182NC5vIGFyY2gveDg2L3BjaS9kaXJlY3QubyBhcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLm8gYXJjLi4uXFxuc2NyaXB0cy9zYm9tL3Rlc3RzL2NtZF9ncmFwaC90ZXN0X3NhdmVkY21kX3BhcnNlci5weS0xOTctICAgICAgICBzZWxmLl9hc3NlcnRfcGFyc2luZyhjbWQsIGV4cGVjdGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzozMS45MTE0MTkwOTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzcwNDY1Mzk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgRE1BIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyB0byBsb29rIGlzIGBrZXJuZWwvZG1hL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIHN1YnN5c3RlbSBsaXZlIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgZm9yIGRpZmZlcmVudCBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzIGFuZCB1c2UgY2FzZXMuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBsaW5jaHBpbiBmb3IgY29udHJvbGxpbmcgdGhlIERNQSBmdW5jdGlvbmFsaXR5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgVGhlIHByaW1hcnkgRE1BIGNvbnRyb2xsZXIgc2VsZWN0aW9uIGFuZCBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnMuXG4qICAgVGhlIG9wdGlvbnMgcmVsYXRlZCB0byBkaWZmZXJlbnQgRE1BIGVuZ2luZXMuXG4qICAgQW55IGZsYWdzIHJlbGF0ZWQgdG8gZGVidWdnaW5nIGFuZCBlcnJvciBoYW5kbGluZy5cbiogICBIb3cgdGhlIERNQSBmcmFtZXdvcmsgaW50ZXJhY3RzIHdpdGggb3RoZXIgY29yZSBrZXJuZWwgY29tcG9uZW50cy5cbiogICBBbnkgZGVmYXVsdCB2YWx1ZXMgYW5kIHBvdGVudGlhbCBvdmVycmlkZXMuXG4qICAgSWYgdGhlcmUgYXJlIGFueSBuZXcgZmVhdHVyZXMgaW4gRE1BIHRoYXQgaGF2ZSBiZWVuIGludHJvZHVjZWQuXG5cbkJ5IG1ldGhvZGljYWxseSByZXZpZXdpbmcgdGhlIGBLY29uZmlnYCBmaWxlLCBJIHNob3VsZCBnYWluIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIERNQSBzdWJzeXN0ZW0gaXMgY29uZmlndXJlZCwgYW5kIHdoZXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgbXkgd29yayBjYW4gYmUgZm91bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzU1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6MzUuNjE2MDc1NDIxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvZG1hL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0Y29uZmlnIE5PX0RNQVxcbiAgIDQ6XFx0XFx0Ym9vbFxcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgSEFTX0RNQVxcbiAgIDc6XFx0XFx0Ym9vbFxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiAhTk9fRE1BXFxuICAgOTpcXHRcXHRkZWZhdWx0IHlcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIERNQV9PUFNfSEVMUEVSU1xcbiAgMTI6XFx0XFx0Ym9vbFxcbiAgMTM6XFx0XFxuICAxNDpcXHQjXFxuICAxNTpcXHQjIElPTU1VIGRyaXZlcnMgdGhhdCBjYW4gYnlwYXNzIHRoZSBJT01NVSBjb2RlIGFuZCBvcHRpb25hbGx5IHVzZSB0aGUgZGlyZWN0XFxuICAxNjpcXHQjIG1hcHBpbmcgZmFzdCBwYXRoIHNob3VsZCBzZWxlY3QgdGhpcyBvcHRpb24gYW5kIHNldCB0aGUgZG1hX29wc19ieXBhc3NcXG4gIDE3OlxcdCMgZmxhZyBpbiBzdHJ1Y3QgZGV2aWNlIHdoZXJlIGFwcGxpY2FibGVcXG4gIDE4OlxcdCNcXG4gIDE5OlxcdGNvbmZpZyBETUFfT1BTX0JZUEFTU1xcbiAgMjA6XFx0XFx0Ym9vbFxcbiAgMjE6XFx0XFxuICAyMjpcXHQjIExldHMgcGxhdGZvcm0gSU9NTVUgZHJpdmVyIGNob29zZSBiZXR3ZWVuIGJ5cGFzcyBhbmQgSU9NTVVcXG4gIDIzOlxcdGNvbmZpZyBBUkNIX0hBU19ETUFfTUFQX0RJUkVDVFxcbiAgMjQ6XFx0XFx0Ym9vbFxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgTkVFRF9TR19ETUFfRkxBR1NcXG4gIDI3OlxcdFxcdGJvb2xcXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIE5FRURfU0dfRE1BX0xFTkdUSFxcbiAgMzA6XFx0XFx0Ym9vbFxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgTkVFRF9ETUFfTUFQX1NUQVRFXFxuICAzMzpcXHRcXHRib29sXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBBUkNIX0RNQV9BRERSX1RfNjRCSVRcXG4gIDM2OlxcdFxcdGRlZl9ib29sIDY0QklUIHx8IFBIWVNfQUREUl9UXzY0QklUXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBBUkNIX0hBU19ETUFfU0VUX01BU0tcXG4gIDM5OlxcdFxcdGJvb2xcXG4gIDQwOlxcdFxcbiAgNDE6XFx0I1xcbiAgNDI6XFx0IyBTZWxlY3QgdGhpcyBvcHRpb24gaWYgdGhlIGFyY2hpdGVjdHVyZSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIGZvclxcbiAgNDM6XFx0IyBETUFfQVRUUl9XUklURV9DT01CSU5FLiAgTm9ybWFsbHkgdGhlIFxcXCJ1bmNhY2hlZFxcXCIgbWFwcGluZyBzaG91bGQgYmUgd2hhdFxcbiAgNDQ6XFx0IyBwZW9wbGUgdGhpbmsgb2Ygd2hlbiBzYXlpbmcgd3JpdGUgY29tYmluZSwgc28gdmVyeSBmZXcgcGxhdGZvcm1zIHNob3VsZFxcbiAgNDU6XFx0IyBuZWVkIHRvIGVuYWJsZSB0aGlzLlxcbiAgNDY6XFx0I1xcbiAgNDc6XFx0Y29uZmlnIEFSQ0hfSEFTX0RNQV9XUklURV9DT01CSU5FXFxuICA0ODpcXHRcXHRib29sXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBETUFfREVDTEFSRV9DT0hFUkVOVFxcbiAgNTE6XFx0XFx0Ym9vbFxcbiAgNTI6XFx0XFxuICA1MzpcXHRjb25maWcgQVJDSF9IQVNfU0VUVVBfRE1BX09QU1xcbiAgNTQ6XFx0XFx0Ym9vbFxcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgQVJDSF9IQVNfVEVBUkRPV05fRE1BX09QU1xcbiAgNTc6XFx0XFx0Ym9vbFxcbiAgNTg6XFx0XFxuICA1OTpcXHRjb25maWcgQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0RFVklDRVxcbiAgNjA6XFx0XFx0Ym9vbFxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVVxcbiAgNjM6XFx0XFx0Ym9vbFxcbiAgNjQ6XFx0XFx0c2VsZWN0IE5FRURfRE1BX01BUF9TVEFURVxcbiAgNjU6XFx0XFxuICA2NjpcXHRjb25maWcgQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0NQVV9BTExcXG4gIDY3OlxcdFxcdGJvb2xcXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UXFxuICA3MDpcXHRcXHRib29sXFxuICA3MTpcXHRcXG4gIDcyOlxcdGNvbmZpZyBBUkNIX0hBU19GT1JDRV9ETUFfVU5FTkNSWVBURURcXG4gIDczOlxcdFxcdGJvb2xcXG4gIDc0OlxcdFxcbiAgNzU6XFx0Y29uZmlnIEFSQ0hfSEFTX0JBVENIRURfRE1BX1NZTkNcXG4gIDc2OlxcdFxcdGJvb2xcXG4gIDc3OlxcdFxcbiAgNzg6XFx0I1xcbiAgNzk6XFx0IyBTZWxlY3QgdGhpcyBvcHRpb24gaWYgdGhlIGFyY2hpdGVjdHVyZSBhc3N1bWVzIERNQSBkZXZpY2VzIGFyZSBjb2hlcmVudFxcbiAgODA6XFx0IyBieSBkZWZhdWx0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0NzozNS42MTYxOTQwNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIxMzY2Mjg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipDaGVja2luZyBga2VybmVsL2RtYS9LY29uZmlnYCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIERNQSBzdWJzeXN0ZW0ncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRpbWUgdG8gc2VlIHdoYXQncyBkZWZpbmVkIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkIHdpdGhpbiBga2VybmVsL2RtYS9LY29uZmlnYC4gVGhpcyBmaWxlIGlzIGNydWNpYWw7IGl0IGRpY3RhdGVzIHdoYXQgZnVuY3Rpb25hbGl0eSBjYW4gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHJlbGF0ZWQgdG8gRGlyZWN0IE1lbW9yeSBBY2Nlc3MuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgRE1BIGNvbnRyb2xsZXJzLCB0aGUgdmFyaW91cyBkZXZpY2UgZHJpdmVycywgYW5kIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cbkknbGwgYmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yOlxuXG4qICAgKipUb3AtbGV2ZWwgb3B0aW9uczoqKiBXaGF0IGFyZSB0aGUgbWFpbiBmZWF0dXJlcyBlbmFibGVkIG9yIGRpc2FibGVkIGhlcmU/IEFyZSB0aGVyZSBvdmVyYWxsIHN3aXRjaGVzIGZvciB0aGUgRE1BIHN1YnN5c3RlbSBvciBzcGVjaWZpYyBjb250cm9sbGVyIGZhbWlsaWVzP1xuKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgYXJlIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gb3B0aW9ucz8gRG9lcyBlbmFibGluZyBvbmUgb3B0aW9uIGF1dG9tYXRpY2FsbHkgZW5hYmxlIG90aGVycz8gQXJlIHRoZXJlIGNvbmZsaWN0cyB0aGF0IG5lZWQgdG8gYmUgdW5kZXJzdG9vZD9cbiogICAqKkRlZmF1bHRzOioqIFdoYXQgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGRpZmZlcmVudCBvcHRpb25zPyBUaGF0J2xsIGhlbHAgdW5kZXJzdGFuZCB0aGUgY29tbW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBETUEgc3Vic3lzdGVtLlxuKiAgICoqSGVscCB0ZXh0OioqIEFyZSB0aGUgZGVzY3JpcHRpb25zIGZvciB0aGUgb3B0aW9ucyBjbGVhciBhbmQgZGV0YWlsZWQgZW5vdWdoPyBUaGlzIHdpbGwgaGVscCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCB1c2UgYW5kIGVmZmVjdHMgb2YgZWFjaCBvcHRpb24gZm9yIGRpZmZlcmVudCBoYXJkd2FyZSBhbmQgdXNlIGNhc2VzLlxuKiAgICoqQXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGlvbnM6KiogSXMgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyB0YXJnZXRlZCB0byBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzLCBhbmQgaG93IHRoYXQgaXMgaGFuZGxlZD9cbiogICAqKk5ldyBvciBjaGFuZ2VkIG9wdGlvbnM6KiogQW55IHJlY2VudCBjb21taXRzIHRoYXQgaGF2ZSBhZGRlZCBvciBtb2RpZmllZCBvcHRpb25zLCBhbmQgd2hhdCByZWFzb25pbmcgd2FzIGJlaGluZCB0aG9zZSBjaGFuZ2VzLlxuXG5Fc3NlbnRpYWxseSwgSSdtIGFpbWluZyBmb3IgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IHRoZSBETUEgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkIGFuZCBob3cgaXQgYWxsb3dzIGRldmVsb3BlcnMgdG8gY3VzdG9taXplIHRoZSBETUEgZnVuY3Rpb25hbGl0eSBpbiB0aGVpciBrZXJuZWxzLiBUaGlzIHdpbGwgaW5mb3JtIG15IGRlY2lzaW9ucyBvbiBob3cgdG8gaW50ZWdyYXRlIHRoZSBETUEgc3lzdGVtIHdpdGggb3RoZXIgY29tcG9uZW50cyBvciB0cm91Ymxlc2hvb3QgYW55IERNQS1yZWxhdGVkIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ3OjM4LjgyOTg2MDAxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2RtYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgxOlxcdCNcXG4gIDgyOlxcdGNvbmZpZyBBUkNIX0RNQV9ERUZBVUxUX0NPSEVSRU5UXFxuICA4MzpcXHRcXHRib29sXFxuICA4NDpcXHRcXG4gIDg1OlxcdGNvbmZpZyBTV0lPVExCXFxuICA4NjpcXHRcXHRib29sXFxuICA4NzpcXHRcXHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXFxuICA4ODpcXHRcXG4gIDg5OlxcdGNvbmZpZyBTV0lPVExCX0RFRkFVTFRfU0laRV9NQlxcbiAgOTA6XFx0XFx0aW50IFxcXCJEZWZhdWx0IFNXSU9UTEIgYm91bmNlIGJ1ZmZlciBzaXplIGluIE1CXFxcIlxcbiAgOTE6XFx0XFx0ZGVwZW5kcyBvbiBTV0lPVExCXFxuICA5MjpcXHRcXHRyYW5nZSAxIDY0XFxuICA5MzpcXHRcXHRkZWZhdWx0IDY0XFxuICA5NDpcXHRcXHRoZWxwXFxuICA5NTpcXHRcXHQgIFNldHMgdGhlIGRlZmF1bHQgc2l6ZSBvZiB0aGUgc29mdHdhcmUgSU8gVExCIChTV0lPVExCKSBib3VuY2UgYnVmZmVyXFxuICA5NjpcXHRcXHQgIHBvb2wgYWxsb2NhdGVkIGF0IGJvb3QgdGltZS4gVGhlIGRlZmF1bHQgaXMgNjQgTUIuXFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdCAgT24gbWVtb3J5LWNvbnN0cmFpbmVkIGVtYmVkZGVkIG9yIG1vYmlsZSBwbGF0Zm9ybXMgKGUuZy4sIHRob3NlIHdpdGhcXG4gIDk5OlxcdFxcdCAgYSBoYXJkd2FyZSBJT01NVSBzdWNoIGFzIEFSTSBTTU1VIGNvdmVyaW5nIG1vc3QgRE1BLWNhcGFibGUgZGV2aWNlcyksXFxuIDEwMDpcXHRcXHQgIGEgc21hbGxlciB2YWx1ZSBzdWNoIGFzIDQgb3IgOCBNQiBtYXkgYmUgc3VmZmljaWVudC4gVGhlIFNXSU9UTEIgaXNcXG4gMTAxOlxcdFxcdCAgdGhlbiBvbmx5IG5lZWRlZCBmb3IgZGV2aWNlcyB0aGF0IGJ5cGFzcyB0aGUgSU9NTVUgb3IgaGF2ZSByZXN0cmljdGVkXFxuIDEwMjpcXHRcXHQgIERNQSBhZGRyZXNzIHJhbmdlcy5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0ICBUaGUgbWluaW11bSBhbGxvd2VkIHZhbHVlIGlzIDEgTUIuIFRoaXMgY29tcGlsZS10aW1lIGRlZmF1bHQgY2FuIGJlXFxuIDEwNTpcXHRcXHQgIG92ZXJyaWRkZW4gYXQgcnVudGltZSB1c2luZyB0aGUgXFxcInN3aW90bGI9XFx1MDAzY25zbGFic1xcdTAwM2VcXFwiIGtlcm5lbCBjb21tYW5kIGxpbmVcXG4gMTA2OlxcdFxcdCAgcGFyYW1ldGVyLiBSZWZlciB0byBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbiAxMDc6XFx0XFx0ICBmb3IgZGV0YWlscy5cXG4gMTA4OlxcdFxcbiAxMDk6XFx0XFx0ICBJZiB1bnN1cmUsIGxlYXZlIGF0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIDY0LlxcbiAxMTA6XFx0XFxuIDExMTpcXHRjb25maWcgU1dJT1RMQl9EWU5BTUlDXFxuIDExMjpcXHRcXHRib29sIFxcXCJEeW5hbWljIGFsbG9jYXRpb24gb2YgRE1BIGJvdW5jZSBidWZmZXJzXFxcIlxcbiAxMTM6XFx0XFx0ZGVmYXVsdCBuXFxuIDExNDpcXHRcXHRkZXBlbmRzIG9uIFNXSU9UTEJcXG4gMTE1OlxcdFxcdGhlbHBcXG4gMTE2OlxcdFxcdCAgVGhpcyBlbmFibGVzIGR5bmFtaWMgcmVzaXppbmcgb2YgdGhlIHNvZnR3YXJlIElPIFRMQi4gVGhlIGtlcm5lbFxcbiAxMTc6XFx0XFx0ICBzdGFydHMgd2l0aCBvbmUgbWVtb3J5IHBvb2wgYXQgYm9vdCBhbmQgaXQgd2lsbCBhbGxvY2F0ZSBhZGRpdGlvbmFsXFxuIDExODpcXHRcXHQgIHBvb2xzIGFzIG5lZWRlZC4gVG8gcmVkdWNlIHJ1bi10aW1lIGtlcm5lbCBtZW1vcnkgcmVxdWlyZW1lbnRzLCB5b3VcXG4gMTE5OlxcdFxcdCAgbWF5IGhhdmUgdG8gc3BlY2lmeSBhIHNtYWxsZXIgc2l6ZSBvZiB0aGUgaW5pdGlhbCBwb29sIHVzaW5nXFxuIDEyMDpcXHRcXHQgIFxcXCJzd2lvdGxiPVxcXCIgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuXFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0Y29uZmlnIERNQV9CT1VOQ0VfVU5BTElHTkVEX0tNQUxMT0NcXG4gMTI1OlxcdFxcdGJvb2xcXG4gMTI2OlxcdFxcdGRlcGVuZHMgb24gU1dJT1RMQlxcbiAxMjc6XFx0XFxuIDEyODpcXHRjb25maWcgRE1BX05FRURfU1lOQ1xcbiAxMjk6XFx0XFx0ZGVmX2Jvb2wgQVJDSF9IQVNfU1lOQ19ETUFfRk9SX0RFVklDRSB8fCBBUkNIX0hBU19TWU5DX0RNQV9GT1JfQ1BVIHx8IFxcXFxcXG4gMTMwOlxcdFxcdFxcdCBBUkNIX0hBU19TWU5DX0RNQV9GT1JfQ1BVX0FMTCB8fCBETUFfQVBJX0RFQlVHIHx8IFxcXFxcXG4gMTMxOlxcdFxcdFxcdCBBUkNIX0hBU19ETUFfT1BTIHx8IFNXSU9UTEJcXG4gMTMyOlxcdFxcbiAxMzM6XFx0Y29uZmlnIERNQV9SRVNUUklDVEVEX1BPT0xcXG4gMTM0OlxcdFxcdGJvb2wgXFxcIkRNQSBSZXN0cmljdGVkIFBvb2xcXFwiXFxuIDEzNTpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IE9GX1JFU0VSVkVEX01FTSBcXHUwMDI2XFx1MDAyNiBTV0lPVExCXFxuIDEzNjpcXHRcXHRoZWxwXFxuIDEzNzpcXHRcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciByZXN0cmljdGVkIERNQSBwb29scyB3aGljaCBwcm92aWRlIGEgbGV2ZWwgb2ZcXG4gMTM4OlxcdFxcdCAgRE1BIG1lbW9yeSBwcm90ZWN0aW9uIG9uIHN5c3RlbXMgd2l0aCBsaW1pdGVkIGhhcmR3YXJlIHByb3RlY3Rpb25cXG4gMTM5OlxcdFxcdCAgY2FwYWJpbGl0aWVzLCBzdWNoIGFzIHRob3NlIGxhY2tpbmcgYW4gSU9NTVUuXFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlXFxuIDE0MjpcXHRcXHQgIFxcdTAwM2NEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXJ2ZWQtbWVtb3J5L3Jlc2VydmVkLW1lbW9yeS50eHRcXHUwMDNlXFxuIDE0MzpcXHRcXHQgIGFuZCBcXHUwMDNja2VybmVsL2RtYS9zd2lvdGxiLmNcXHUwMDNlLlxcbiAxNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiblxcXCIuXFxuIDE0NTpcXHRcXG4gMTQ2OlxcdCNcXG4gMTQ3OlxcdCMgU2hvdWxkIGJlIHNlbGVjdGVkIGlmIHdlIGNhbiBtbWFwIG5vbi1jb2hlcmVudCBtYXBwaW5ncyB0byB1c2Vyc3BhY2UuXFxuIDE0ODpcXHQjIFRoZSBvbmx5IHRoaW5nIHRoYXQgaXMgcmVhbGx5IHJlcXVpcmVkIGlzIGEgd2F5IHRvIHNldCBhbiB1bmNhY2hlZCBiaXRcXG4gMTQ5OlxcdCMgaW4gdGhlIHBhZ2V0YWJsZXNcXG4gMTUwOlxcdCNcXG4gMTUxOlxcdGNvbmZpZyBETUFfTk9OQ09IRVJFTlRfTU1BUFxcbiAxNTI6XFx0XFx0ZGVmYXVsdCB5IGlmICFNTVVcXG4gMTUzOlxcdFxcdGJvb2xcXG4gMTU0OlxcdFxcbiAxNTU6XFx0Y29uZmlnIERNQV9DT0hFUkVOVF9QT09MXFxuIDE1NjpcXHRcXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG4gMTU3OlxcdFxcdGJvb2xcXG4gMTU4OlxcdFxcbiAxNTk6XFx0Y29uZmlnIERNQV9HTE9CQUxfUE9PTFxcbiAxNjA6XFx0XFx0c2VsZWN0IERNQV9ERUNMQVJFX0NPSEVSRU5UXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ3OjM4LjgzMDAwNjAwNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDE1MzgxOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvciAoQ01BKSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbmFpbCBkb3duIGhvdyB0aGUgQ01BIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBlaXRoZXIgYGtlcm5lbC9kbWEvS2NvbmZpZ2Agb3IsIGlmIGl0J3MgcmVsYXRlZCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc2lkZSBtb3JlIGdlbmVyYWxseSwgYG1tL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgbG9jYXRpb25zIGZvciBkZWZpbmluZyBhbmQgZW5hYmxpbmcgYENPTkZJR19ETUFfQ01BYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGFueSBwb3NzaWJsZSBpbnRyaWNhY2llcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgYm9vbGAgb3IgYHRyaXN0YXRlYCBkZWZpbml0aW9uLCBsaWtlbHkgd2l0aCBzb21lIHN1cHBvcnRpbmcgaGVscCB0ZXh0LiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSwgSSBtaWdodCBzZWUgY29uZGl0aW9uYWwgYmxvY2tzIGJhc2VkIG9uIHNwZWNpZmljIENQVSBmZWF0dXJlcyBvciBtZW1vcnkgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuIFRoaXMgc2hvdWxkIHF1aWNrbHkgY2xhcmlmeSB0aGUgY3VycmVudCBzdGF0ZSBvZiBETUEgQ01BIGluIHRoaXMga2VybmVsIGJ1aWxkIGFuZCBob3cgaXQncyBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzEwNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6NDEuMjQ1MzkwODc3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMTk4MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfQ01BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZG1hL0tjb25maWc9MTczPWNvbmZpZyBBUkNIX0hBU19ETUFfQUxMT0NcXG4tLVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xNzgtXFxua2VybmVsL2RtYS9LY29uZmlnOjE3OTpjb25maWcgRE1BX0NNQVxcbmtlcm5lbC9kbWEvS2NvbmZpZy0xODAtXFx0Ym9vbCBcXFwiRE1BIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6NDIuODk4NTk1NDE4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NjU3NTY0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRE1BIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoZSBhbnN3ZXIgbGllcyB3aXRoaW4gdGhlIERNQSBjb25maWd1cmF0aW9uLCBzbyBsZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYGtlcm5lbC9kbWEvS2NvbmZpZ2AuIEFuZCwgYmFzZWQgb24gbXkgcGFzdCBleHBlcmllbmNlIHdpdGggc2ltaWxhciBpc3N1ZXMsIEknbGwgc3RhcnQgbXkgZGV0YWlsZWQgcmV2aWV3IGFyb3VuZCBsaW5lIDE3OS4gSG9wZWZ1bGx5LCB0aGUgYW5zd2VyIGlzIHdpdGhpbiB0aGF0IHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDc4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6NDUuNTY0MzU0NDE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9kbWEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzU6XFx0XFx0ZGVwZW5kcyBvbiAhRE1BX0RJUkVDVF9SRU1BUFxcbiAxNzY6XFx0XFx0ZGVwZW5kcyBvbiAhRE1BX0dMT0JBTF9QT09MXFxuIDE3NzpcXHRcXHRib29sXFxuIDE3ODpcXHRcXG4gMTc5OlxcdGNvbmZpZyBETUFfQ01BXFxuIDE4MDpcXHRcXHRib29sIFxcXCJETUEgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXFxcIlxcbiAxODE6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0RNQV9DT05USUdVT1VTIFxcdTAwMjZcXHUwMDI2IENNQVxcbiAxODI6XFx0XFx0aGVscFxcbiAxODM6XFx0XFx0ICBUaGlzIGVuYWJsZXMgdGhlIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvciB3aGljaCBhbGxvd3MgZHJpdmVyc1xcbiAxODQ6XFx0XFx0ICB0byBhbGxvY2F0ZSBiaWcgcGh5c2ljYWxseS1jb250aWd1b3VzIGJsb2NrcyBvZiBtZW1vcnkgZm9yIHVzZSB3aXRoXFxuIDE4NTpcXHRcXHQgIGhhcmR3YXJlIGNvbXBvbmVudHMgdGhhdCBkbyBub3Qgc3VwcG9ydCBJL08gbWFwIG5vciBzY2F0dGVyLWdhdGhlci5cXG4gMTg2OlxcdFxcbiAxODc6XFx0XFx0ICBZb3UgY2FuIGRpc2FibGUgQ01BIGJ5IHNwZWNpZnlpbmcgXFxcImNtYT0wXFxcIiBvbiB0aGUga2VybmVsJ3MgY29tbWFuZFxcbiAxODg6XFx0XFx0ICBsaW5lLlxcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBcXHUwMDNja2VybmVsL2RtYS9jb250aWd1b3VzLmNcXHUwMDNlLlxcbiAxOTE6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiblxcXCIuXFxuIDE5MjpcXHRcXG4gMTkzOlxcdGlmICBETUFfQ01BXFxuIDE5NDpcXHRcXG4gMTk1OlxcdGNvbmZpZyBETUFfTlVNQV9DTUFcXG4gMTk2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBzZXBhcmF0ZSBETUEgQ29udGlndW91cyBNZW1vcnkgQXJlYSBmb3IgTlVNQSBOb2RlXFxcIlxcbiAxOTc6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BXFxuIDE5ODpcXHRcXHRoZWxwXFxuIDE5OTpcXHRcXHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBnZXQgbnVtYSBDTUEgYXJlYXMgc28gdGhhdCBOVU1BIGRldmljZXNcXG4gMjAwOlxcdFxcdCAgY2FuIGdldCBsb2NhbCBtZW1vcnkgYnkgRE1BIGNvaGVyZW50IEFQSXMuXFxuIDIwMTpcXHRcXG4gMjAyOlxcdFxcdCAgWW91IGNhbiBzZXQgdGhlIHNpemUgb2YgcGVybnVtYSBDTUEgYnkgc3BlY2lmeWluZyBcXFwiY21hX3Blcm51bWE9c2l6ZVxcXCJcXG4gMjAzOlxcdFxcdCAgb3Igc2V0IHRoZSBub2RlIGlkIGFuZCBpdHMgc2l6ZSBvZiBDTUEgYnkgc3BlY2lmeWluZyBcXFwibnVtYV9jbWE9XFxuIDIwNDpcXHRcXHQgIFxcdTAwM2Nub2RlXFx1MDAzZTpzaXplWyxcXHUwMDNjbm9kZVxcdTAwM2U6c2l6ZV1cXFwiIG9uIHRoZSBrZXJuZWwncyBjb21tYW5kIGxpbmUuIEFuZCBpblxcbiAyMDU6XFx0XFx0ICByYXJlIGNhc2UgdGhhdCB0aGUgYWJvdmUgMiBhcmUgYm90aCBzZXR1cCwgdGhlbiB0aGUgXFxcIm51bWFfY21hPVxcXCJcXG4gMjA2OlxcdFxcdCAgdGFrZXMgcHJpb3JpdHkgZm9yIHRoZSBzcGVjaWZpZWQgbnVtYSBub2Rlcy5cXG4gMjA3OlxcdFxcbiAyMDg6XFx0Y29uZmlnIENNQV9TSVpFX1BFUk5VTUFcXG4gMjA5OlxcdFxcdGJvb2wgXFxcIkRlZmF1bHQgQ01BIGFyZWEgcGVyIE5VTUEgbm9kZVxcXCJcXG4gMjEwOlxcdFxcdGRlcGVuZHMgb24gRE1BX05VTUFfQ01BXFxuIDIxMTpcXHRcXHRkZWZhdWx0IHlcXG4gMjEyOlxcdFxcdGhlbHBcXG4gMjEzOlxcdFxcdCAgT24gc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgTlVNQSBub2RlLCB0aGUgc2VsZWN0ZWQgQ01BXFxuIDIxNDpcXHRcXHQgIGFyZWEgc2l6ZSB3aWxsIGJlIGFsc28gYWxsb2NhdGVkIG9uIGVhY2ggYWRkaXRpb25hbCBub2RlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0Nzo0NS41NjQ0MjYwNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzOTk4NDcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIElPTU1VIERNQSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgSU9NTVVfRE1BYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0J3MgaGVhZCBvdmVyIHRvIHRoZSBgZHJpdmVycy9pb21tdS9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vay4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIGhvdyBpdCdzIGRlZmluZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyBpdCBoYXMuIEtub3dpbmcgdGhpcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgSU9NTVUgcGljdHVyZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mjc1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0Nzo0Ny40MDQ0MTUxMzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3OTEyMTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9NTVVfRE1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pb21tdS9LY29uZmlnPTE0OD1jb25maWcgT0ZfSU9NTVVcXG4tLVxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xNTItIyBJT01NVS1hZ25vc3RpYyBETUEtbWFwcGluZyBsYXllclxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZzoxNTM6Y29uZmlnIElPTU1VX0RNQVxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xNTQtXFx0ZGVmX2Jvb2wgQVJNNjQgfHwgWDg2IHx8IFMzOTBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6NDguMTgzNTQwOTM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMTk2ODAxMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZXMgZm9yIEZvY3VzZWQgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNoYW5nZXMgYW5kIGlzb2xhdGUgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIGZ1enppbmcuICBJJ20gbG9va2luZyBhdCBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZmAgYW5kIG90aGVyIGFmZmVjdGVkIGZ1bmN0aW9ucy4gIFNwZWNpZmljYWxseSwgSSd2ZSBpZGVudGlmaWVkOlxuXG4qICAgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgIGluIGBtbS9wYWdlX2FsbG9jLmNgLlxuKiAgIGBkbWFfZnJlZV9jb250aWd1b3VzYCBpbiBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgIGFuZCBgaW5jbHVkZS9saW51eC9kbWEtbWFwLW9wcy5oYC5cbiogICBgX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzYCAoc3RhdGljKSBpbiBga2VybmVsL2RtYS9kaXJlY3QuY2AsIGNhbGxlZCBieSBgZG1hX2RpcmVjdF9hbGxvY2AsIGBkbWFfZGlyZWN0X2FsbG9jX3BhZ2VzYCwgYW5kIGBkbWFfZGlyZWN0X2FsbG9jX25vX21hcHBpbmdgLlxuKiAgIGBkbWFfY29tbW9uX2FsbG9jX3BhZ2VzYCBpbiBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYC5cbiogICBgaW9tbXVfZG1hX2FsbG9jX3BhZ2VzYCAoc3RhdGljKSBpbiBgZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY2AsIGNhbGxlZCBieSBgaW9tbXVfZG1hX2FsbG9jYC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBhcmUgc3VpdGFibGUgZm9jdXMgc3ltYm9scy4gIFJlbWVtYmVyaW5nIHRoZSBndWlkZWxpbmVzLCB3ZSBtdXN0IGF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyBsaWtlIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMuICBIb3dldmVyLCBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZmAgc2VlbXMgc3BlY2lmaWMsIGEgaGVscGVyIGZvciBhbGxvY2F0aW5nIHBhZ2VzIHdpdGggZXhhY3Qgbm9kZSBJRCwgZGlzdGluY3QgZnJvbSwgc2F5LCBga21hbGxvY2Agb3IgYF9fYWxsb2NfcGFnZXNgLlxuXG5JJ20gcmV2aXNpdGluZyB0aGUgY2hhbmdlZCBmdW5jdGlvbnMgYWdhaW4sIHRoaXMgdGltZSBmb2N1c2luZyBvbiB0aGVpciBjb250ZXh0OlxuXG4xLiAgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgOiBgaW9tbXVfZG1hX2FsbG9jX3BhZ2VzYCAoc3RhdGljKSBhbmQgaXRzIGNhbGxlciBgaW9tbXVfZG1hX2FsbG9jYC5cbjIuICBga2VybmVsL2RtYS9jb250aWd1b3VzLmNgOiBgZG1hX2ZyZWVfY29udGlndW91c2AuXG4zLiAgYGtlcm5lbC9kbWEvZGlyZWN0LmNgOiBgX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzYCAoc3RhdGljKSBhbmQgY2FsbGVycyBgZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AsIGBkbWFfZGlyZWN0X2FsbG9jYCwgYW5kIGBkbWFfZGlyZWN0X2FsbG9jX25vX21hcHBpbmdgLlxuNC4gIGBrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNgOiBgZG1hX2NvbW1vbl9hbGxvY19wYWdlc2AuXG41LiAgYG1tL3BhZ2VfYWxsb2MuY2A6IGBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mYC5cblxuVGhlc2Ugc2VlbSB0byBiZSBETUEgYWxsb2NhdGlvbiBvciBleGFjdC1uaWQgcGFnZSBhbGxvY2F0aW9uIGZ1bmN0aW9ucywgbWFraW5nIHRoZW0gZ29vZCBjYW5kaWRhdGVzLiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCBoZXJlLiBJJ20gZ29pbmcgdG8gY29uc3VsdCB0aGUgYGdpdCBsb2dgIGFuZCB0aGUgYGdpdCBkaWZmYCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuQ2hlY2tpbmcgdGhlIGRpZmYgcmV2ZWFscyBhIGZldyBtb3JlIGRldGFpbHM6XG4qICAgYGluY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaGAgaW5jbHVkZXMgYW4gaW5saW5lIGBkbWFfZnJlZV9jb250aWd1b3VzYCB3aGVuIGAhQ09ORklHX0RNQV9DTUFgLlxuKiAgIGBpbmNsdWRlL2xpbnV4L2dmcC5oYDogZGVjbGFyZXMgYGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2ZgLlxuXG5JJ2xsIGNoZWNrIHRoZSBjb25maWcgcmVxdWlyZW1lbnRzOlxuKiAgIGBETUFfQ01BYCBmb3IgYGtlcm5lbC9kbWEvY29udGlndW91cy5jYC5cbiogICBgSU9NTVVfRE1BYCBmb3IgYGRyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNgLlxuKiAgIGBETUFfT1BTX0hFTFBFUlNgIGZvciBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYC5cblxuT24gdGhlIHRhcmdldCBhbWQ2NCBhcmNoaXRlY3R1cmUsIGBIQVNfRE1BYCBpcyBkZWZhdWx0ICd5Jy4gYElPTU1VX0RNQWAgaXMgZGVmYXVsdCBmb3IgWDg2IHNvIGxpa2VseSBlbmFibGVkLiAgYERNQV9DTUFgIGRlcGVuZHMgb24gYEhBVkVfRE1BX0NPTlRJR1VPVVMgXHUwMDI2XHUwMDI2IENNQWAuICBgRE1BX09QU19IRUxQRVJTYCBpcyBib29sLiBJIGNvbmNsdWRlIHRoYXQgYENNQWAsIGBETUFfQ01BYCwgYElPTU1VX0RNQWAsIGFuZCBgRE1BX09QU19IRUxQRVJTYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5XaXRoIGFsbCBvZiB0aGlzIEkgY2FuIG5vdyBkZWZpbmUgdGhlIEZvY3VzU3ltYm9sczpcblxuKiAgIGBkbWFfZnJlZV9jb250aWd1b3VzYFxuKiAgIGBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXNgXG4qICAgYGRtYV9jb21tb25fYWxsb2NfcGFnZXNgXG4qICAgYGlvbW11X2RtYV9hbGxvY19wYWdlc2BcbiogICBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZmBcbiogICBgZG1hX2RpcmVjdF9hbGxvY19wYWdlc2BcbiogICBgZG1hX2RpcmVjdF9hbGxvY2BcbiogICBgaW9tbXVfZG1hX2FsbG9jYFxuXG5GaW5hbGx5LCBhIHF1aWNrIG5vdGUgYWJvdXQgc3RhdGljIGZ1bmN0aW9uczogYWx0aG91Z2ggdGhleSBhcmUgc3RhdGljIGluIHRoZWlyIC5jIGZpbGUsIHdpdGggZGVidWcgaW5mbyBlbmFibGVkLCB0aGVpciBzeW1ib2xzIGFyZSB2aXNpYmxlLiBJbmNsdWRpbmcgYm90aCB0aGUgc3RhdGljIGFuZCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIGVuc3VyZXMgY29tcGxldGUgY292ZXJhZ2VcblxuIiwiSW5wdXRUb2tlbnMiOjE4NTU0LCJPdXRwdXRUb2tlbnMiOjI2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6NTguMzgwMzQ0NTIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwMzQ5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRNQV9DTUFcIixcbiAgICBcIkNNQVwiLFxuICAgIFwiSU9NTVVfRE1BXCIsXG4gICAgXCJETUFfT1BTX0hFTFBFUlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mXCIsXG4gICAgXCJkbWFfZnJlZV9jb250aWd1b3VzXCIsXG4gICAgXCJfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9jb21tb25fYWxsb2NfcGFnZXNcIixcbiAgICBcImlvbW11X2RtYV9hbGxvY19wYWdlc1wiLFxuICAgIFwiZG1hX2RpcmVjdF9hbGxvY19wYWdlc1wiLFxuICAgIFwiZG1hX2RpcmVjdF9hbGxvY1wiLFxuICAgIFwiaW9tbXVfZG1hX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIERNQSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYyBhY3Jvc3MgbXVsdGlwbGUgY29yZSBzdWJzeXN0ZW1zIChrZXJuZWwvZG1hLywgbW0vLCBkcml2ZXJzL2lvbW11LykuIEl0IHJlcGxhY2VzIHBvd2VyLW9mLXR3byBwYWdlIGFsbG9jYXRpb25zIGFuZCBfX2ZyZWVfcGFnZXMoKSB3aXRoIGFsbG9jX3BhZ2VzX2V4YWN0X25pZCgpIGFuZCBmcmVlX3BhZ2VzX2V4YWN0KCksIHdoaWNoIHNwbGl0cyBhbmQgZnJlZXMgdHJhaWxpbmcgdW51c2VkIHBhZ2VzLiBUaGlzIGNoYW5nZXMgbWVtb3J5IGFsaWdubWVudCwgcGFnZSBjb3VudCB0cmFja2luZywgYW5kIGludHJvZHVjZXMgcG90ZW50aWFsIHJ1bnRpbWUgYXNzZXJ0aW9uIHZpb2xhdGlvbnMgaW4gYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZigpIGlmIGNhbGxlcnMgcGFzcyBjZXJ0YWluIEdGUCBmbGFncy4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgRE1BIGFsbG9jYXRpb25zIGluIHZpcnR1YWxpemVkIGFuZCBlbXVsYXRlZCBkZXZpY2UgZHJpdmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJETUFfQ01BXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIklPTU1VX0RNQVwiLFxuICAgIFwiRE1BX09QU19IRUxQRVJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZlwiLFxuICAgIFwiZG1hX2ZyZWVfY29udGlndW91c1wiLFxuICAgIFwiX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJkbWFfY29tbW9uX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJpb21tdV9kbWFfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9kaXJlY3RfYWxsb2NfcGFnZXNcIixcbiAgICBcImRtYV9kaXJlY3RfYWxsb2NcIixcbiAgICBcImlvbW11X2RtYV9hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBETUEgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMgYWNyb3NzIG11bHRpcGxlIGNvcmUgc3Vic3lzdGVtcyAoa2VybmVsL2RtYS8sIG1tLywgZHJpdmVycy9pb21tdS8pLiBJdCByZXBsYWNlcyBwb3dlci1vZi10d28gcGFnZSBhbGxvY2F0aW9ucyBhbmQgX19mcmVlX3BhZ2VzKCkgd2l0aCBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpLCB3aGljaCBzcGxpdHMgYW5kIGZyZWVzIHRyYWlsaW5nIHVudXNlZCBwYWdlcy4gVGhpcyBjaGFuZ2VzIG1lbW9yeSBhbGlnbm1lbnQsIHBhZ2UgY291bnQgdHJhY2tpbmcsIGFuZCBpbnRyb2R1Y2VzIHBvdGVudGlhbCBydW50aW1lIGFzc2VydGlvbiB2aW9sYXRpb25zIGluIGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoKSBpZiBjYWxsZXJzIHBhc3MgY2VydGFpbiBHRlAgZmxhZ3MuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIERNQSBhbGxvY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQgZGV2aWNlIGRyaXZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ3OjU4LjQ1NzM4NTIzOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0ODU2NzM0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0Nzo1OC40NTc4MjUyMDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNzQ4NTIyODc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERNQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWxsYmFjayBwYXRocyAoaW4gZG1hLWlvbW11LCBkbWEtZGlyZWN0LCBhbmQgb3BzX2hlbHBlcnMpIHRvIHVzZSBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpIGluc3RlYWQgb2YgYWxsb2NfcGFnZXNfbm9kZSgpIGFuZCBfX2ZyZWVfcGFnZXMoKSB3aXRoIHBhZ2Ugb3JkZXJzLiBJdCBhbHNvIHJlbW92ZXMgdGhlIF9fbWVtaW5pdCBhbm5vdGF0aW9uIGZyb20gYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZigpLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgYWZmZWN0IHBhZ2UtbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkgYW5kIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBETUEgc3Vic3lzdGVtLiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSB6ZXJvZWQgKHZpYSBtZW1zZXQpIG9yIG1hbmFnZWQgcGVyIHN0YW5kYXJkIERNQSBzdWJzeXN0ZW0gY29udmVudGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcGFnZSBsaWZldGltZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdG9yIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRlNjViNWM4YWUwNTVhY2ExOTFjMTMxNmU5YWYzNzRkMGRhZDY1NWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDAxOjQ3OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvZG1hLWlvbW11LmNcbmluZGV4IDU4YzYyNDUxM2NkNDMuLjhmMjYyYzgzODAyYzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jXG4rKysgYi9kcml2ZXJzL2lvbW11L2RtYS1pb21tdS5jXG5AQCAtMTYyOCwxMCArMTYyOCwxMiBAQCBzdGF0aWMgdm9pZCAqaW9tbXVfZG1hX2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHR2b2lkICpjcHVfYWRkcjtcbiBcbiBcdHBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIGFsbG9jX3NpemUsIGdmcCk7XG4tXHRpZiAoIXBhZ2UpXG4tXHRcdHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgZ2V0X29yZGVyKGFsbG9jX3NpemUpKTtcbi1cdGlmICghcGFnZSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4rXHRpZiAoIXBhZ2UpIHtcbitcdFx0Y3B1X2FkZHIgPSBhbGxvY19wYWdlc19leGFjdF9uaWQobm9kZSwgYWxsb2Nfc2l6ZSwgZ2ZwKTtcbitcdFx0aWYgKCFjcHVfYWRkcilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0cGFnZSA9IHZpcnRfdG9fcGFnZShjcHVfYWRkcik7XG4rXHR9XG4gXG4gXHRpZiAoIWNvaGVyZW50IHx8IFBhZ2VIaWdoTWVtKHBhZ2UpKSB7XG4gXHRcdHBncHJvdF90IHByb3QgPSBkbWFfcGdwcm90KGRldiwgUEFHRV9LRVJORUwsIGF0dHJzKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcbmluZGV4IDhmYWUyYjdkZWIyMGQuLjNlZjMwMDM3MTNhNjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXAtb3BzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcC1vcHMuaFxuQEAgLTE0Myw3ICsxNDMsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpkbWFfYWxsb2NfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdHNpemVfdCBzaXplKVxuIHtcbi1cdF9fZnJlZV9wYWdlcyhwYWdlLCBnZXRfb3JkZXIoc2l6ZSkpO1xuK1x0ZnJlZV9wYWdlc19leGFjdChwYWdlX2FkZHJlc3MocGFnZSksIHNpemUpO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0RNQV9DTUEqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oXG5pbmRleCA4NzJiYzUzZjMyZWM4Li5hYTQ2MDE4MDVmMjFhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaFxuQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkICphbGxvY19wYWdlc19leGFjdF9ub3Byb2Yoc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKSBfX2FsbG9jX3NpemUoMSk7XG4gXG4gdm9pZCBmcmVlX3BhZ2VzX2V4YWN0KHZvaWQgKnZpcnQsIHNpemVfdCBzaXplKTtcbiBcbi1fX21lbWluaXQgdm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZihpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spIF9fYWxsb2Nfc2l6ZSgyKTtcbit2b2lkICphbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaykgX19hbGxvY19zaXplKDIpO1xuICNkZWZpbmUgYWxsb2NfcGFnZXNfZXhhY3RfbmlkKC4uLilcdFx0XHRcdFx0XFxcbiBcdGFsbG9jX2hvb2tzKGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEvY29udGlndW91cy5jIGIva2VybmVsL2RtYS9jb250aWd1b3VzLmNcbmluZGV4IDY2MDkzNDYwNTg0ZTguLjkwOTM3ZGM3YzYyN2QgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuY1xuKysrIGIva2VybmVsL2RtYS9jb250aWd1b3VzLmNcbkBAIC00NTEsOCArNDUxLDggQEAgc3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGdmcF90IGdmcClcbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgbWVtb3J5IGFsbG9jYXRlZCBieSBkbWFfYWxsb2NfY29udGlndW91cygpLiBBcyB0aGVcbiAgKiBjbWFfcmVsZWFzZSByZXR1cm5zIGZhbHNlIHdoZW4gcHJvdmlkZWQgcGFnZXMgZG8gbm90IGJlbG9uZyB0byBjb250aWd1b3VzXG4tICogYXJlYSBhbmQgdHJ1ZSBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdGhlbiBkb2VzIGEgZmFsbGJhY2sgX19mcmVlX3BhZ2VzKClcbi0gKiB1cG9uIGEgZmFsc2UtcmV0dXJuLlxuKyAqIGFyZWEgYW5kIHRydWUgb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHRoZW4gZG9lcyBhIGZhbGxiYWNrXG4rICogZnJlZV9wYWdlc19leGFjdCgpIHVwb24gYSBmYWxzZS1yZXR1cm4uXG4gICovXG4gdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKVxuIHtcbkBAIC00NzYsNyArNDc2LDcgQEAgdm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKVxuIFx0fVxuIFxuIFx0Lyogbm90IGluIGFueSBjbWEsIGZyZWUgZnJvbSBidWRkeSAqL1xuLVx0X19mcmVlX3BhZ2VzKHBhZ2UsIGdldF9vcmRlcihzaXplKSk7XG4rXHRmcmVlX3BhZ2VzX2V4YWN0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgc2l6ZSk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEva2VybmVsL2RtYS9kaXJlY3QuYyBiL2tlcm5lbC9kbWEvZGlyZWN0LmNcbmluZGV4IGRhNjY1Y2EyMmQ1YzAuLmVhNjQ0NTNkNzM3MGEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL2RpcmVjdC5jXG4rKysgYi9rZXJuZWwvZG1hL2RpcmVjdC5jXG5AQCAtMTIwLDYgKzEyMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRpbnQgbm9kZSA9IGRldl90b19ub2RlKGRldik7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHU2NCBwaHlzX2xpbWl0O1xuK1x0dm9pZCAqdmE7XG4gXG4gXHRXQVJOX09OX09OQ0UoIVBBR0VfQUxJR05FRChzaXplKSk7XG4gXG5AQCAtMTMzLDkgKzEzNCw5IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG4gXHRcdGRtYV9mcmVlX2NvbnRpZ3VvdXMoZGV2LCBwYWdlLCBzaXplKTtcbiBcdH1cbiBcbi1cdHdoaWxlICgocGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwLCBnZXRfb3JkZXIoc2l6ZSkpKVxuLVx0ICAgICAgIFx1MDAyNlx1MDAyNiAhZG1hX2NvaGVyZW50X29rKGRldiwgcGFnZV90b19waHlzKHBhZ2UpLCBzaXplKSkge1xuLVx0XHRfX2ZyZWVfcGFnZXMocGFnZSwgZ2V0X29yZGVyKHNpemUpKTtcbitcdHdoaWxlICgodmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQobm9kZSwgc2l6ZSwgZ2ZwKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgIWRtYV9jb2hlcmVudF9vayhkZXYsIHZpcnRfdG9fcGh5cyh2YSksIHNpemUpKSB7XG4rXHRcdGZyZWVfcGFnZXNfZXhhY3QodmEsIHNpemUpO1xuIFxuIFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEzMikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwaHlzX2xpbWl0IFx1MDAzYyBETUFfQklUX01BU0soNjQpIFx1MDAyNlx1MDAyNlxuQEAgLTE0Niw2ICsxNDcsNyBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0XHRlbHNlXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4rXHRwYWdlID0gdmEgPyB2aXJ0X3RvX3BhZ2UodmEpIDogTlVMTDtcbiBcbiBcdHJldHVybiBwYWdlO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmMgYi9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcbmluZGV4IDZiNWY5MjA4ZDMxYzAuLjVjZGYzZjYwY2Y0NzkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcbisrKyBiL2tlcm5lbC9kbWEvb3BzX2hlbHBlcnMuY1xuQEAgLTY3LDEwICs2NywxMyBAQCBzdHJ1Y3QgcGFnZSAqZG1hX2NvbW1vbl9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuIFx0cGh5c19hZGRyX3QgcGh5cztcbiBcbiBcdHBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIHNpemUsIGdmcCk7XG4tXHRpZiAoIXBhZ2UpXG4tXHRcdHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKGRldl90b19ub2RlKGRldiksIGdmcCwgZ2V0X29yZGVyKHNpemUpKTtcbi1cdGlmICghcGFnZSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4rXHRpZiAoIXBhZ2UpIHtcbitcdFx0dm9pZCAqdmEgPSBhbGxvY19wYWdlc19leGFjdF9uaWQoZGV2X3RvX25vZGUoZGV2KSwgc2l6ZSwgZ2ZwKTtcbitcbitcdFx0aWYgKCF2YSlcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0cGFnZSA9IHZpcnRfdG9fcGFnZSh2YSk7XG4rXHR9XG4gXG4gXHRwaHlzID0gcGFnZV90b19waHlzKHBhZ2UpO1xuIFx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGM0ZGM2MWVjNjYzZWUuLmQzYTEzNWRmY2RkM2QgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTU2MzcsNyArNTYzNyw3IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKTtcbiAgKlxuICAqIFJldHVybjogcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGFyZWEgb3IgJU5VTEwgaW4gY2FzZSBvZiBlcnJvci5cbiAgKi9cbi12b2lkICogX19tZW1pbml0IGFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxuK3ZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxuIHtcbiBcdHVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTtcbiBcdHN0cnVjdCBwYWdlICpwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDc6NTguNDU3ODI2MjE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MDI3NjI2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBETUEgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTiBzY3J1dGlueS4gRnJvbSBhIGN1cnNvcnkgZ2xhbmNlLCB0aGlzIGxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uIGZvciBETUEgbWVtb3J5IGFsbG9jYXRpb24uIExldCdzIGJyZWFrIGl0IGRvd246XG5cbkZpcnN0LCB0aGUgcGF0Y2ggcHJpbWFyaWx5IGZvY3VzZXMgb24gaG93IGNvbnRpZ3VvdXMgRE1BIG1lbW9yeSBpcyBoYW5kbGVkIHdoZW4gQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIGlzbid0IGF2YWlsYWJsZSBvciBmYWlscy4gQmVmb3JlIHRoaXMsIHRoZSBzeXN0ZW0gd2FzIHVzaW5nIGBhbGxvY19wYWdlc19ub2RlYCB3aXRoIGBnZXRfb3JkZXIoc2l6ZSlgLiBUaGlzIG1lYW50IGl0IHdvdWxkIGFsbG9jYXRlIGEgcG93ZXItb2YtdHdvIG51bWJlciBvZiBwYWdlcywgZXZlbiBpZiB0aGUgcmVxdWVzdGVkIHNpemUgd2Fzbid0IGEgcG93ZXIgb2YgdHdvLiBUaGUgcG90ZW50aWFsIHByb2JsZW0gd2FzIHRoZSBhbGxvY2F0aW9uIG9mIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkIHdoaWNoIG1lYW5zIHRoZSB1bnVzZWQgcGFnZXMgd2VyZSBlaXRoZXIgYmVpbmcgd2FzdGVkIG9yIGluY29ycmVjdGx5IGRlYWxsb2NhdGVkLiBXaGVuIGZyZWVpbmcgdGhvc2UgcGFnZXMsIHRoZSBjb2RlIHdhcyB1c2luZyBgX19mcmVlX3BhZ2VzYCB0byBkZWFsbG9jYXRlIHRoZSBwb3dlciBvZiB0d28gb2YgcGFnZXMuXG5cbk5vdywgdGhlIHBhdGNoIHJlcGxhY2VzIHRoaXMgd2l0aCBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkYCBhbmQgYGZyZWVfcGFnZXNfZXhhY3RgLiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGJlZ2lucy4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGBhbGxvY19wYWdlc19leGFjdGAgc2VlbXMgdG8gYWxsb2NhdGUgYSBwb3dlci1vZi10d28gYmxvY2sgb2YgcGFnZXMsIGJ1dCBpbW1lZGlhdGVseSByZWxlYXNlcyB0aGUgdW51c2VkIHBhZ2VzIGJhY2sgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvci4gRXNzZW50aWFsbHksIGl0J3MgYWxsb2NhdGluZyBhIGJsb2NrIGFuZCB0aGVuIHRyaW1taW5nIGl0IGRvd24gdG8gdGhlIGV4YWN0IHNpemUuIGBmcmVlX3BhZ2VzX2V4YWN0YCB0aGVuIGZyZWVzIG9ubHkgdGhlIGV4YWN0IG51bWJlciBvZiBwYWdlcyB0aGF0IHdlcmUgYWxsb2NhdGVkIChhbGlnbmVkIHRvIGBQQUdFX1NJWkVgKS4gVGhpcyBpcyBhIGNsZWFyIGltcHJvdmVtZW50IGluIG1lbW9yeSBtYW5hZ2VtZW50IGVmZmljaWVuY3kuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYWxsb2NfcGFnZXNfZXhhY3RgIGFuZCBgZnJlZV9wYWdlc19leGFjdGAgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24sIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBjb250aWd1b3VzIERNQSBhbGxvY2F0aW9ucy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlJ3MgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB0aGUgRE1BIGVuZ2luZSBvciB1c2Vyc3BhY2UuIEknbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgd2hlcmUgYW5kIGhvdyB0aGUgbWVtb3J5IGlzIGNsZWFyZWQgKGlmIGF0IGFsbCkgd2l0aGluIHRoZXNlIG5ldyBmdW5jdGlvbnMuIEknbGwgYWxzbyBiZSB3YXRjaGluZyBmb3IgYW55IHBvdGVudGlhbCBvZmYtYnktb25lIGVycm9ycyBvciBib3VuZHMgdmlvbGF0aW9ucyBkdXJpbmcgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwcm9jZXNzLiBHaXZlbiB0aGUgZXhpc3RpbmcgY29kZSdzIHJlbGlhbmNlIG9uIHBvd2VyLW9mLXR3byBhbGxvY2F0aW9ucywgaXQgd291bGQgYmUgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB0aGUgdHJpbW1pbmcgb3BlcmF0aW9ucyBkb24ndCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDQ5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MDMuMDYwNTkxNTk2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ1NjkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19wYWdlc19leGFjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2ZlbmNlL2NvcmUuYz05OTg9c3RhdGljIGludCBrZmVuY2VfaW5pdF9sYXRlKHZvaWQpXFxuLS1cXG5tbS9rZmVuY2UvY29yZS5jLTEwMjUtXFxubW0va2ZlbmNlL2NvcmUuYzoxMDI2OlxcdF9fa2ZlbmNlX3Bvb2wgPSBhbGxvY19wYWdlc19leGFjdChLRkVOQ0VfUE9PTF9TSVpFLFxcbm1tL2tmZW5jZS9jb3JlLmMtMTAyNy1cXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUwgfCBfX0dGUF9TS0lQX0tBU0FOKTtcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTAzMC1cXG5tbS9rZmVuY2UvY29yZS5jOjEwMzE6XFx0a2ZlbmNlX21ldGFkYXRhX2luaXQgPSBhbGxvY19wYWdlc19leGFjdChLRkVOQ0VfTUVUQURBVEFfU0laRSxcXG5tbS9rZmVuY2UvY29yZS5jLTEwMzItXFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUwgfCBfX0dGUF9TS0lQX0tBU0FOKTtcXG4tLVxcbm1tL21tX2luaXQuYz0yMzYwPXZvaWQgKl9faW5pdCBhbGxvY19sYXJnZV9zeXN0ZW1faGFzaChjb25zdCBjaGFyICp0YWJsZW5hbWUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMjQzOS1cXHRcXHRcXHQgKiBzb21lIHBhZ2VzIGF0IHRoZSBlbmQgb2YgaGFzaCB0YWJsZSB3aGljaFxcbm1tL21tX2luaXQuYzoyNDQwOlxcdFxcdFxcdCAqIGFsbG9jX3BhZ2VzX2V4YWN0KCkgYXV0b21hdGljYWxseSBkb2VzXFxubW0vbW1faW5pdC5jLTI0NDEtXFx0XFx0XFx0ICovXFxubW0vbW1faW5pdC5jOjI0NDI6XFx0XFx0XFx0dGFibGUgPSBhbGxvY19wYWdlc19leGFjdChzaXplLCBnZnBfZmxhZ3MpO1xcbm1tL21tX2luaXQuYy0yNDQzLVxcdFxcdFxcdGttZW1sZWFrX2FsbG9jKHRhYmxlLCBzaXplLCAxLCBnZnBfZmxhZ3MpO1xcbi0tXFxubW0vbm9tbXUuYz05MTQ9c3RhdGljIGludCBkb19tbWFwX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ub21tdS5jLTk1OC1cXG5tbS9ub21tdS5jOjk1OTpcXHRiYXNlID0gYWxsb2NfcGFnZXNfZXhhY3QodG90YWwgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7XFxubW0vbm9tbXUuYy05NjAtXFx0aWYgKCFiYXNlKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTU1ODE9c3RhdGljIHZvaWQgKm1ha2VfYWxsb2NfZXhhY3QodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTYwMC0vKipcXG5tbS9wYWdlX2FsbG9jLmM6NTYwMTogKiBhbGxvY19wYWdlc19leGFjdCAtIGFsbG9jYXRlIGFuIGV4YWN0IG51bWJlciBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgcGFnZXMuXFxubW0vcGFnZV9hbGxvYy5jLTU2MDItICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGVcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy01NjE0LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo1NjE1OnZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXFxubW0vcGFnZV9hbGxvYy5jLTU2MTYte1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTU2MjUtfVxcbm1tL3BhZ2VfYWxsb2MuYzo1NjI2OkVYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3Rfbm9wcm9mKTtcXG5tbS9wYWdlX2FsbG9jLmMtNTYyNy1cXG5tbS9wYWdlX2FsbG9jLmMtNTYyOC0vKipcXG5tbS9wYWdlX2FsbG9jLmM6NTYyOTogKiBhbGxvY19wYWdlc19leGFjdF9uaWQgLSBhbGxvY2F0ZSBhbiBleGFjdCBudW1iZXIgb2YgcGh5c2ljYWxseS1jb250aWd1b3VzXFxubW0vcGFnZV9hbGxvYy5jLTU2MzAtICpcXHRcXHRcXHQgICBwYWdlcyBvbiBhIG5vZGUuXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTYzNC0gKlxcbm1tL3BhZ2VfYWxsb2MuYzo1NjM1OiAqIExpa2UgYWxsb2NfcGFnZXNfZXhhY3QoKSwgYnV0IHRyeSB0byBhbGxvY2F0ZSBvbiBub2RlIG5pZCBmaXJzdCBiZWZvcmUgZmFsbGluZ1xcbm1tL3BhZ2VfYWxsb2MuYy01NjM2LSAqIGJhY2suXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTYzOS0gKi9cXG5tbS9wYWdlX2FsbG9jLmM6NTY0MDp2b2lkICphbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaylcXG5tbS9wYWdlX2FsbG9jLmMtNTY0MS17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTY1NC0vKipcXG5tbS9wYWdlX2FsbG9jLmM6NTY1NTogKiBmcmVlX3BhZ2VzX2V4YWN0IC0gcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIHZpYSBhbGxvY19wYWdlc19leGFjdCgpXFxubW0vcGFnZV9hbGxvYy5jOjU2NTY6ICogQHZpcnQ6IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBhbGxvY19wYWdlc19leGFjdC5cXG5tbS9wYWdlX2FsbG9jLmM6NTY1NzogKiBAc2l6ZTogc2l6ZSBvZiBhbGxvY2F0aW9uLCBzYW1lIHZhbHVlIGFzIHBhc3NlZCB0byBhbGxvY19wYWdlc19leGFjdCgpLlxcbm1tL3BhZ2VfYWxsb2MuYy01NjU4LSAqXFxubW0vcGFnZV9hbGxvYy5jOjU2NTk6ICogUmVsZWFzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gYWxsb2NfcGFnZXNfZXhhY3QuXFxubW0vcGFnZV9hbGxvYy5jLTU2NjAtICovXFxuLS1cXG5tbS9wYWdlX2V4dC5jPTI2NT1zdGF0aWMgdm9pZCAqX19tZW1pbml0IGFsbG9jX3BhZ2VfZXh0KHNpemVfdCBzaXplLCBpbnQgbmlkKVxcbi0tXFxubW0vcGFnZV9leHQuYy0yNjktXFxubW0vcGFnZV9leHQuYzoyNzA6XFx0YWRkciA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChuaWQsIHNpemUsIGZsYWdzKTtcXG5tbS9wYWdlX2V4dC5jLTI3MS1cXHRpZiAoYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MDMuMTMyMDUxMjE0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTk5NjE5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGBtbS9wYWdlX2FsbG9jLmNgLCBmb2N1c2luZyBvbiBsaW5lcyByb3VnaGx5IGJldHdlZW4gNTU4MCBhbmQgNTY2MC4gVGhhdCByYW5nZSBpcyBsaWtlbHkgdG8gY29udGFpbiBzb21lIGNydWNpYWwgYWxsb2NhdGlvbiBsb2dpYywgcHJvYmFibHkgYSBjb3JlIGZ1bmN0aW9uIG9yIGEgc2lnbmlmaWNhbnQgcGFydCBvZiBhIGxhcmdlciBhbGxvY2F0aW9uIHNjaGVtZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaXNtcyBhdCBwbGF5IOKAkyBob3cgdGhlIGtlcm5lbCBjaG9vc2VzIGFuZCBhc3NpZ25zIHBoeXNpY2FsIHBhZ2VzIHRvIHNhdGlzZnkgbWVtb3J5IHJlcXVlc3RzLiBJJ20gaG9waW5nIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGludm9sdmVkIGluIGVpdGhlciB0aGUgZGlyZWN0IGFsbG9jYXRpb24gb2YgcGFnZXMgZnJvbSB0aGUgc3lzdGVtIG9yIHRoZSBtYW5hZ2VtZW50IG9mIHRoZSBwYWdlIGNhY2hlLiBJJ2xsIG5lZWQgdG8gZGlzc2VjdCBhbnkgbG9vcHMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciBpbnRyaWNhdGUgY2FsY3VsYXRpb25zIHJlbGF0ZWQgdG8gcGFnZSBhdmFpbGFiaWxpdHksIG5vZGUgc2VsZWN0aW9uLCB6b25lIGNvbnNpZGVyYXRpb24sIGFuZCBwb3RlbnRpYWxseSwgZnJhZ21lbnRhdGlvbiBhdm9pZGFuY2Ugc3RyYXRlZ2llcy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzY3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MDYuMDUyMDE1Njc1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Njg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTU4MCxcbiAgXCJMaW5lQ291bnRcIjogODVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTU4MDpcXHRcXG41NTgxOlxcdHN0YXRpYyB2b2lkICptYWtlX2FsbG9jX2V4YWN0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IG9yZGVyLFxcbjU1ODI6XFx0XFx0XFx0c2l6ZV90IHNpemUpXFxuNTU4MzpcXHR7XFxuNTU4NDpcXHRcXHRpZiAoYWRkcikge1xcbjU1ODU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBuciA9IERJVl9ST1VORF9VUChzaXplLCBQQUdFX1NJWkUpO1xcbjU1ODY6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoKHZvaWQgKilhZGRyKTtcXG41NTg3OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpsYXN0ID0gcGFnZSArIG5yO1xcbjU1ODg6XFx0XFxuNTU4OTpcXHRcXHRcXHRfX3NwbGl0X3BhZ2UocGFnZSwgb3JkZXIpO1xcbjU1OTA6XFx0XFx0XFx0d2hpbGUgKHBhZ2UgXFx1MDAzYyAtLWxhc3QpXFxuNTU5MTpcXHRcXHRcXHRcXHRzZXRfcGFnZV9yZWZjb3VudGVkKGxhc3QpO1xcbjU1OTI6XFx0XFxuNTU5MzpcXHRcXHRcXHRsYXN0ID0gcGFnZSArICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbjU1OTQ6XFx0XFx0XFx0Zm9yIChwYWdlICs9IG5yOyBwYWdlIFxcdTAwM2MgbGFzdDsgcGFnZSsrKVxcbjU1OTU6XFx0XFx0XFx0XFx0X19mcmVlX3BhZ2VzX29rKHBhZ2UsIDAsIEZQSV9UT19UQUlMKTtcXG41NTk2OlxcdFxcdH1cXG41NTk3OlxcdFxcdHJldHVybiAodm9pZCAqKWFkZHI7XFxuNTU5ODpcXHR9XFxuNTU5OTpcXHRcXG41NjAwOlxcdC8qKlxcbjU2MDE6XFx0ICogYWxsb2NfcGFnZXNfZXhhY3QgLSBhbGxvY2F0ZSBhbiBleGFjdCBudW1iZXIgcGh5c2ljYWxseS1jb250aWd1b3VzIHBhZ2VzLlxcbjU2MDI6XFx0ICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGVcXG41NjAzOlxcdCAqIEBnZnBfbWFzazogR0ZQIGZsYWdzIGZvciB0aGUgYWxsb2NhdGlvbiwgbXVzdCBub3QgY29udGFpbiBfX0dGUF9DT01QXFxuNTYwNDpcXHQgKlxcbjU2MDU6XFx0ICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGFsbG9jX3BhZ2VzKCksIGV4Y2VwdCB0aGF0IGl0IGFsbG9jYXRlcyB0aGVcXG41NjA2OlxcdCAqIG1pbmltdW0gbnVtYmVyIG9mIHBhZ2VzIHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QuICBhbGxvY19wYWdlcygpIGNhbiBvbmx5XFxuNTYwNzpcXHQgKiBhbGxvY2F0ZSBtZW1vcnkgaW4gcG93ZXItb2YtdHdvIHBhZ2VzLlxcbjU2MDg6XFx0ICpcXG41NjA5OlxcdCAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBsaW1pdGVkIGJ5IE1BWF9QQUdFX09SREVSLlxcbjU2MTA6XFx0ICpcXG41NjExOlxcdCAqIE1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJlbGVhc2VkIGJ5IGZyZWVfcGFnZXNfZXhhY3QoKS5cXG41NjEyOlxcdCAqXFxuNTYxMzpcXHQgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9yICVOVUxMIGluIGNhc2Ugb2YgZXJyb3IuXFxuNTYxNDpcXHQgKi9cXG41NjE1OlxcdHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spXFxuNTYxNjpcXHR7XFxuNTYxNzpcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7XFxuNTYxODpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuNTYxOTpcXHRcXG41NjIwOlxcdFxcdGlmIChXQVJOX09OX09OQ0UoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pKSlcXG41NjIxOlxcdFxcdFxcdGdmcF9tYXNrIFxcdTAwMjY9IH4oX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pO1xcbjU2MjI6XFx0XFxuNTYyMzpcXHRcXHRhZGRyID0gZ2V0X2ZyZWVfcGFnZXNfbm9wcm9mKGdmcF9tYXNrLCBvcmRlcik7XFxuNTYyNDpcXHRcXHRyZXR1cm4gbWFrZV9hbGxvY19leGFjdChhZGRyLCBvcmRlciwgc2l6ZSk7XFxuNTYyNTpcXHR9XFxuNTYyNjpcXHRFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX2V4YWN0X25vcHJvZik7XFxuNTYyNzpcXHRcXG41NjI4OlxcdC8qKlxcbjU2Mjk6XFx0ICogYWxsb2NfcGFnZXNfZXhhY3RfbmlkIC0gYWxsb2NhdGUgYW4gZXhhY3QgbnVtYmVyIG9mIHBoeXNpY2FsbHktY29udGlndW91c1xcbjU2MzA6XFx0ICpcXHRcXHRcXHQgICBwYWdlcyBvbiBhIG5vZGUuXFxuNTYzMTpcXHQgKiBAbmlkOiB0aGUgcHJlZmVycmVkIG5vZGUgSUQgd2hlcmUgbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWRcXG41NjMyOlxcdCAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlXFxuNTYzMzpcXHQgKiBAZ2ZwX21hc2s6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb24sIG11c3Qgbm90IGNvbnRhaW4gX19HRlBfQ09NUFxcbjU2MzQ6XFx0ICpcXG41NjM1OlxcdCAqIExpa2UgYWxsb2NfcGFnZXNfZXhhY3QoKSwgYnV0IHRyeSB0byBhbGxvY2F0ZSBvbiBub2RlIG5pZCBmaXJzdCBiZWZvcmUgZmFsbGluZ1xcbjU2MzY6XFx0ICogYmFjay5cXG41NjM3OlxcdCAqXFxuNTYzODpcXHQgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9yICVOVUxMIGluIGNhc2Ugb2YgZXJyb3IuXFxuNTYzOTpcXHQgKi9cXG41NjQwOlxcdHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZF9ub3Byb2YoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKVxcbjU2NDE6XFx0e1xcbjU2NDI6XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpO1xcbjU2NDM6XFx0XFx0c3RydWN0IHBhZ2UgKnA7XFxuNTY0NDpcXHRcXG41NjQ1OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pKSlcXG41NjQ2OlxcdFxcdFxcdGdmcF9tYXNrIFxcdTAwMjY9IH4oX19HRlBfQ09NUCB8IF9fR0ZQX0hJR0hNRU0pO1xcbjU2NDc6XFx0XFxuNTY0ODpcXHRcXHRwID0gYWxsb2NfcGFnZXNfbm9kZV9ub3Byb2YobmlkLCBnZnBfbWFzaywgb3JkZXIpO1xcbjU2NDk6XFx0XFx0aWYgKCFwKVxcbjU2NTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuNTY1MTpcXHRcXHRyZXR1cm4gbWFrZV9hbGxvY19leGFjdCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocCksIG9yZGVyLCBzaXplKTtcXG41NjUyOlxcdH1cXG41NjUzOlxcdFxcbjU2NTQ6XFx0LyoqXFxuNTY1NTpcXHQgKiBmcmVlX3BhZ2VzX2V4YWN0IC0gcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIHZpYSBhbGxvY19wYWdlc19leGFjdCgpXFxuNTY1NjpcXHQgKiBAdmlydDogdGhlIHZhbHVlIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzX2V4YWN0LlxcbjU2NTc6XFx0ICogQHNpemU6IHNpemUgb2YgYWxsb2NhdGlvbiwgc2FtZSB2YWx1ZSBhcyBwYXNzZWQgdG8gYWxsb2NfcGFnZXNfZXhhY3QoKS5cXG41NjU4OlxcdCAqXFxuNTY1OTpcXHQgKiBSZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBhbGxvY19wYWdlc19leGFjdC5cXG41NjYwOlxcdCAqL1xcbjU2NjE6XFx0dm9pZCBmcmVlX3BhZ2VzX2V4YWN0KHZvaWQgKnZpcnQsIHNpemVfdCBzaXplKVxcbjU2NjI6XFx0e1xcbjU2NjM6XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpdmlydDtcXG41NjY0OlxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIFBBR0VfQUxJR04oc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ4OjA2LjA1MjM2NDE0NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQ4MDQyMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBETUEgQWxsb2NhdGlvbiBDb250ZXh0KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gY29udGV4dCBiZXR0ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgRE1BIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZXhhbWluZSBgZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY2AgYmVjYXVzZSBpdCdzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIElPTU1VLCB3aGljaCBvZnRlbiBpbnRlcmFjdHMgd2l0aCBETUEuIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gaG93IERNQSBhbGxvY2F0aW9ucyBhcmUgaGFuZGxlZCB3aGVuIGFuIElPTU1VIGlzIGluIHRoZSBwaWN0dXJlLCBsb29raW5nIGZvciBhbGxvY2F0aW9uIGNhbGxzIG9yIHNwZWNpZmljIElPTU1VIGludGVyYWN0aW9ucy5cblxuVGhlbiwgSSdtIGdvaW5nIHRvIGZvbGxvdyB1cCBieSBzY3J1dGluaXppbmcgYGtlcm5lbC9kbWEvZGlyZWN0LmNgIGFuZCBga2VybmVsL2RtYS9vcHNfaGVscGVycy5jYC4gVGhlc2UgZmlsZXMgYXJlIG1vcmUgZ2VuZXJhbCBETUEgaW1wbGVtZW50YXRpb24gYXNwZWN0cywgYW5kIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQsIG5vbi1JT01NVSBETUEgb3BlcmF0aW9ucywgYWxsb2NhdGlvbiBoZWxwZXJzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBvdmVyYXJjaGluZyBETUEgZnJhbWV3b3JrIGRldGFpbHMuIFVuZGVyc3RhbmRpbmcgdGhlc2Ugd2lsbCBoZWxwIG1lIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZS4gTG9va2luZyBhdCBhbGwgdGhyZWUgd2lsbCBoZWxwIG1lIGRldGVybWluZSB0aGUgZGlmZmVyZW5jZSwgaWYgYW55LCBiZXR3ZWVuIElPTU1VIGFuZCBub24tSU9NTVUgYWxsb2NhdGlvbnMuIEl0IGlzIHRpbWUgdG8gZ2V0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ4OjA4LjkwMDQwOTU3OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pb21tdS9kbWEtaW9tbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjIwOlxcdFxcbjE2MjE6XFx0c3RhdGljIHZvaWQgKmlvbW11X2RtYV9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbjE2MjI6XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIGF0dHJzKVxcbjE2MjM6XFx0e1xcbjE2MjQ6XFx0XFx0Ym9vbCBjb2hlcmVudCA9IGRldl9pc19kbWFfY29oZXJlbnQoZGV2KTtcXG4xNjI1OlxcdFxcdHNpemVfdCBhbGxvY19zaXplID0gUEFHRV9BTElHTihzaXplKTtcXG4xNjI2OlxcdFxcdGludCBub2RlID0gZGV2X3RvX25vZGUoZGV2KTtcXG4xNjI3OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4xNjI4OlxcdFxcdHZvaWQgKmNwdV9hZGRyO1xcbjE2Mjk6XFx0XFxuMTYzMDpcXHRcXHRwYWdlID0gZG1hX2FsbG9jX2NvbnRpZ3VvdXMoZGV2LCBhbGxvY19zaXplLCBnZnApO1xcbjE2MzE6XFx0XFx0aWYgKCFwYWdlKSB7XFxuMTYzMjpcXHRcXHRcXHRjcHVfYWRkciA9IGFsbG9jX3BhZ2VzX2V4YWN0X25pZChub2RlLCBhbGxvY19zaXplLCBnZnApO1xcbjE2MzM6XFx0XFx0XFx0aWYgKCFjcHVfYWRkcilcXG4xNjM0OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE2MzU6XFx0XFx0XFx0cGFnZSA9IHZpcnRfdG9fcGFnZShjcHVfYWRkcik7XFxuMTYzNjpcXHRcXHR9XFxuMTYzNzpcXHRcXG4xNjM4OlxcdFxcdGlmICghY29oZXJlbnQgfHwgUGFnZUhpZ2hNZW0ocGFnZSkpIHtcXG4xNjM5OlxcdFxcdFxcdHBncHJvdF90IHByb3QgPSBkbWFfcGdwcm90KGRldiwgUEFHRV9LRVJORUwsIGF0dHJzKTtcXG4xNjQwOlxcdFxcbjE2NDE6XFx0XFx0XFx0Y3B1X2FkZHIgPSBkbWFfY29tbW9uX2NvbnRpZ3VvdXNfcmVtYXAocGFnZSwgYWxsb2Nfc2l6ZSxcXG4xNjQyOlxcdFxcdFxcdFxcdFxcdHByb3QsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuMTY0MzpcXHRcXHRcXHRpZiAoIWNwdV9hZGRyKVxcbjE2NDQ6XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZV9wYWdlcztcXG4xNjQ1OlxcdFxcbjE2NDY6XFx0XFx0XFx0aWYgKCFjb2hlcmVudClcXG4xNjQ3OlxcdFxcdFxcdFxcdGFyY2hfZG1hX3ByZXBfY29oZXJlbnQocGFnZSwgc2l6ZSk7XFxuMTY0ODpcXHRcXHR9IGVsc2Uge1xcbjE2NDk6XFx0XFx0XFx0Y3B1X2FkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7XFxuMTY1MDpcXHRcXHR9XFxuMTY1MTpcXHRcXG4xNjUyOlxcdFxcdCpwYWdlcCA9IHBhZ2U7XFxuMTY1MzpcXHRcXHRtZW1zZXQoY3B1X2FkZHIsIDAsIGFsbG9jX3NpemUpO1xcbjE2NTQ6XFx0XFx0cmV0dXJuIGNwdV9hZGRyO1xcbjE2NTU6XFx0b3V0X2ZyZWVfcGFnZXM6XFxuMTY1NjpcXHRcXHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgYWxsb2Nfc2l6ZSk7XFxuMTY1NzpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNjU4OlxcdH1cXG4xNjU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0ODowOC45MDA1MjcxMTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5MzI0MDA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgRE1BIEFsbG9jYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBmb2N1cyBpcyBvbiBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBETUEtc3BlY2lmaWMgcGFydHMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBtZW1zZXQoY3B1X2FkZHIsIDAsIGFsbG9jX3NpemUpO2AgY2FsbCB3aXRoaW4gYGlvbW11X2RtYV9hbGxvY19wYWdlc2AuIFRoaXMgaXMgd2hlcmUgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgZ2V0dGluZyBpbml0aWFsaXplZCwgbGlrZWx5IHRvIGEgY2xlYW4gc3RhdGUuIFRoYXQncyBnb29kIHByYWN0aWNlIGZvciBzZWN1cml0eSBhbmQgY29uc2lzdGVuY3ksIG1ha2luZyBzdXJlIHRoZXJlJ3Mgbm8gbGVmdG92ZXIgZGF0YSBmcm9tIHByZXZpb3VzIHVzYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGlmIHRoaXMgemVyb2luZyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLCBvciBpZiB0aGVyZSBhcmUgc2NlbmFyaW9zIHdoZXJlIGl0IGNvdWxkIGJlIG9wdGltaXplZC5cblxuTm93LCBJJ20gaGVhZGluZyBvdmVyIHRvIGBrZXJuZWwvZG1hL2RpcmVjdC5jYCBhbmQgZm9jdXNpbmcgb24gdGhlIDEyMC0xODAgbGluZSByYW5nZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBsb3dlci1sZXZlbCBETUEtcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhlcmUsIHByb2JhYmx5IHRoZSBvbmVzIHRoYXQgYWN0dWFsbHkgaGFuZGxlIHRoZSBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZyBhbmQgYWxsb2NhdGlvbiBpZiB0aGlzIGlzIGEgZGlyZWN0IG1hcHBlZCBzeXN0ZW0uIEkgd2FudCB0byBzZWUgaG93IHRoaXMgRE1BIHJlZ2lvbiBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLCBtYXliZSBob3cgdGhleSBhcmUgcmVsYXRlZC4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIHJlbGF0aW9uc2hpcCB0byB0aGUga2VybmVsJ3MgcGFnZSBhbGxvY2F0b3IsIGhvdyB0aGUgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIElPTU1VLiBUaGlzIHBhcnQgaXMgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJdOKAmXMgYWxsIGFib3V0IHRoZSBhbGxvY2F0aW9uLCBtYXBwaW5nLCBhbmQgdHJhbnNmZXIgbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MTEuMzkzNzY5Njk3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvZG1hL2RpcmVjdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHR9XFxuIDExNjpcXHRcXG4gMTE3OlxcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19kbWFfZGlyZWN0X2FsbG9jX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIDExODpcXHRcXHRcXHRnZnBfdCBnZnAsIGJvb2wgYWxsb3dfaGlnaG1lbSlcXG4gMTE5OlxcdHtcXG4gMTIwOlxcdFxcdGludCBub2RlID0gZGV2X3RvX25vZGUoZGV2KTtcXG4gMTIxOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiAxMjI6XFx0XFx0dTY0IHBoeXNfbGltaXQ7XFxuIDEyMzpcXHRcXHR2b2lkICp2YTtcXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0V0FSTl9PTl9PTkNFKCFQQUdFX0FMSUdORUQoc2l6ZSkpO1xcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHRnZnAgfD0gZG1hX2RpcmVjdF9vcHRpbWFsX2dmcF9tYXNrKGRldiwgXFx1MDAyNnBoeXNfbGltaXQpO1xcbiAxMjg6XFx0XFx0cGFnZSA9IGRtYV9hbGxvY19jb250aWd1b3VzKGRldiwgc2l6ZSwgZ2ZwKTtcXG4gMTI5OlxcdFxcdGlmIChwYWdlKSB7XFxuIDEzMDpcXHRcXHRcXHRpZiAoZG1hX2NvaGVyZW50X29rKGRldiwgcGFnZV90b19waHlzKHBhZ2UpLCBzaXplKSBcXHUwMDI2XFx1MDAyNlxcbiAxMzE6XFx0XFx0XFx0ICAgIChhbGxvd19oaWdobWVtIHx8ICFQYWdlSGlnaE1lbShwYWdlKSkpXFxuIDEzMjpcXHRcXHRcXHRcXHRyZXR1cm4gcGFnZTtcXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0XFx0ZG1hX2ZyZWVfY29udGlndW91cyhkZXYsIHBhZ2UsIHNpemUpO1xcbiAxMzU6XFx0XFx0fVxcbiAxMzY6XFx0XFxuIDEzNzpcXHRcXHR3aGlsZSAoKHZhID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5vZGUsIHNpemUsIGdmcCkpIFxcdTAwMjZcXHUwMDI2XFxuIDEzODpcXHRcXHQgICAgICAgIWRtYV9jb2hlcmVudF9vayhkZXYsIHZpcnRfdG9fcGh5cyh2YSksIHNpemUpKSB7XFxuIDEzOTpcXHRcXHRcXHRmcmVlX3BhZ2VzX2V4YWN0KHZhLCBzaXplKTtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1pPTkVfRE1BMzIpIFxcdTAwMjZcXHUwMDI2XFxuIDE0MjpcXHRcXHRcXHQgICAgcGh5c19saW1pdCBcXHUwMDNjIERNQV9CSVRfTUFTSyg2NCkgXFx1MDAyNlxcdTAwMjZcXG4gMTQzOlxcdFxcdFxcdCAgICAhKGdmcCBcXHUwMDI2IChHRlBfRE1BMzIgfCBHRlBfRE1BKSkpXFxuIDE0NDpcXHRcXHRcXHRcXHRnZnAgfD0gR0ZQX0RNQTMyO1xcbiAxNDU6XFx0XFx0XFx0ZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEpIFxcdTAwMjZcXHUwMDI2ICEoZ2ZwIFxcdTAwMjYgR0ZQX0RNQSkpXFxuIDE0NjpcXHRcXHRcXHRcXHRnZnAgPSAoZ2ZwIFxcdTAwMjYgfkdGUF9ETUEzMikgfCBHRlBfRE1BO1xcbiAxNDc6XFx0XFx0XFx0ZWxzZVxcbiAxNDg6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE0OTpcXHRcXHR9XFxuIDE1MDpcXHRcXHRwYWdlID0gdmEgPyB2aXJ0X3RvX3BhZ2UodmEpIDogTlVMTDtcXG4gMTUxOlxcdFxcbiAxNTI6XFx0XFx0cmV0dXJuIHBhZ2U7XFxuIDE1MzpcXHR9XFxuIDE1NDpcXHRcXG4gMTU1OlxcdC8qXFxuIDE1NjpcXHQgKiBDaGVjayBpZiBhIHBvdGVudGlhbGx5IGJsb2NraW5nIG9wZXJhdGlvbnMgbmVlZHMgdG8gZGlwIGludG8gdGhlIGF0b21pY1xcbiAxNTc6XFx0ICogcG9vbHMgZm9yIHRoZSBnaXZlbiBkZXZpY2UvZ2ZwLlxcbiAxNTg6XFx0ICovXFxuIDE1OTpcXHRzdGF0aWMgYm9vbCBkbWFfZGlyZWN0X3VzZV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgZ2ZwX3QgZ2ZwKVxcbiAxNjA6XFx0e1xcbiAxNjE6XFx0XFx0cmV0dXJuICFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApIFxcdTAwMjZcXHUwMDI2ICFpc19zd2lvdGxiX2Zvcl9hbGxvYyhkZXYpO1xcbiAxNjI6XFx0fVxcbiAxNjM6XFx0XFxuIDE2NDpcXHRzdGF0aWMgc3RydWN0IHBhZ2UgKmRtYV9kaXJlY3RfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuIDE2NTpcXHRcXHRcXHRkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCB2b2lkICoqY3B1X2FkZHIsIGdmcF90IGdmcCxcXG4gMTY2OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXR0cnMpXFxuIDE2NzpcXHR7XFxuIDE2ODpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gMTY5OlxcdFxcdHU2NCBwaHlzX2xpbWl0O1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFJU19FTkFCTEVEKENPTkZJR19ETUFfQ09IRVJFTlRfUE9PTCkpKVxcbiAxNzI6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE3MzpcXHRcXG4gMTc0OlxcdFxcdGdmcCB8PSBkbWFfZGlyZWN0X29wdGltYWxfZ2ZwX21hc2soZGV2LCBcXHUwMDI2cGh5c19saW1pdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ4OjExLjM5Mzg3NjgzN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzc2NDQzNzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIENhbGxlcnMgb2YgYF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc2AqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgZGlyZWN0IG1lbW9yeSBhY2Nlc3MgKERNQSkgYWxsb2NhdGlvbiB3aXRoIGBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGVyZSBhcmUgdGhlIGNyaXRpY2FsIHBvaW50cyBvZiB1c2UgZm9yIHRoaXM/IFdoYXQgc3lzdGVtcyBvciBkZXZpY2VzIGFyZSAqcmVseWluZyogb24gdGhpcyBzcGVjaWZpYyBwYXRoP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucyBoZXJlLiBUaGUgbmFtZSBpbXBsaWVzIGEgZGlyZWN0LCBoYXJkd2FyZS1mYWNpbmcgYWxsb2NhdGlvbjsgdGhpcyB1c3VhbGx5IGhhcyBzZXJpb3VzIGNvbnN0cmFpbnRzIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuXG5TbywgbGV0J3MgdHJhY2UgdGhpcyBiYWNrLiBDaGVja2luZyBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gaXMgYWJzb2x1dGVseSB0aGUgcmlnaHQgbW92ZS4gSSBuZWVkIHRvIGtub3c6IEFyZSB3ZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZHJpdmVycyB0aGF0IGFyZSB2ZXJ5IGxvdyBsZXZlbD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaGlnaC1wZXJmb3JtYW5jZSBuZXR3b3JraW5nIHN0YWNrcyB0aGF0IGFyZSBkaXJlY3RseSBtYXBwaW5nIG1lbW9yeT8gQXJlIHdlIGxvb2tpbmcgYXQgYW55dGhpbmcgaW52b2x2aW5nIHJlYWwtdGltZSBjb25zdHJhaW50cz8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbnMgaXMgZ29pbmcgdG8gYmUga2V5LiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZXNlIGNhbGxlcnMgYXJlIG1hbmlwdWxhdGluZyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgYWxsb2NhdGVkIG1lbW9yeS5cblxuVGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvZiBhbGxvY2F0aW9uIHRoaXMgd2F5IGNhbiBiZSBodWdlLCBidXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUga2luZCBvZiBoYXJkd2FyZSBpbnZvbHZlZCBpbiByZXF1ZXN0aW5nIERNQSBhY2Nlc3MgaXMgYWxzbyB2aXRhbC4gSW4gbXkgbWluZCwgSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgcXVlc3Rpb25zOiBJcyB0aGVyZSBhbnkgcG9zc2liaWxpdHkgb2YgY29udGVudGlvbj8gQ291bGQgd2UgYmUgZGVhbGluZyB3aXRoIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoZSBtZW1vcnkgY29udHJvbGxlciBvciBjYWNoZSBjb2hlcmVuY3k/IFdoYXQgYWJvdXQgTlVNQSBjb25zaWRlcmF0aW9ucyBpZiB0aGlzIGlzIGEgc3lzdGVtIHdpdGggbm9uLXVuaWZvcm0gbWVtb3J5IGFjY2Vzcz8gVGhlIGNhbGxlcnMgd2lsbCBwcm92aWRlIHRob3NlIGFuc3dlcnMuIEZyb20gdGhhdCBpbmZvcm1hdGlvbiwgSSBjYW4gYmV0dGVyIGFzc2VzcyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneS4gSSBuZWVkIHRvIGxvb2sgZm9yIHBhdHRlcm5zLCBhbmQgYW5vbWFsaWVzLCB0byBmbGFnIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBXaGF0IGFyZSB0aGUgc2l6ZSByZXF1ZXN0cz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGZyYWdtZW50YXRpb24gaXNzdWVzPyBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgcG9zc2libGUgZGVhZGxvY2tzIGFzIHdlbGwuIFVsdGltYXRlbHksIGFueSBpc3N1ZXMgaGVyZSBjb3VsZCBhZmZlY3QgbXVsdGlwbGUgbGF5ZXJzIGluIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGNhc2NhZGluZyBhbGwgdGhlIHdheSB1cCB0byB1c2VyIHNwYWNlIGFuZCBhcHBsaWNhdGlvbiBwZXJmb3JtYW5jZS4gTGV0J3Mgc2VlIHdoYXQgdGhvc2UgY2FsbGVycyBhcmUgdGVsbGluZyB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjQ4OjE1LjE3MDMyMzMxM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1MDY3MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZG1hX2RpcmVjdF9hbGxvY19wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZG1hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZG1hL2RpcmVjdC5jPTEwND1zdGF0aWMgc3RydWN0IHBhZ2UgKmRtYV9kaXJlY3RfYWxsb2Nfc3dpb3RsYihzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYy0xMTYtXFxua2VybmVsL2RtYS9kaXJlY3QuYzoxMTc6c3RhdGljIHN0cnVjdCBwYWdlICpfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTExOC1cXHRcXHRnZnBfdCBnZnAsIGJvb2wgYWxsb3dfaGlnaG1lbSlcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM9MTg0PXN0YXRpYyB2b2lkICpkbWFfZGlyZWN0X2FsbG9jX25vX21hcHBpbmcoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG4tLVxcbmtlcm5lbC9kbWEvZGlyZWN0LmMtMTg4LVxcbmtlcm5lbC9kbWEvZGlyZWN0LmM6MTg5OlxcdHBhZ2UgPSBfX2RtYV9kaXJlY3RfYWxsb2NfcGFnZXMoZGV2LCBzaXplLCBnZnAgXFx1MDAyNiB+X19HRlBfWkVSTywgdHJ1ZSk7XFxua2VybmVsL2RtYS9kaXJlY3QuYy0xOTAtXFx0aWYgKCFwYWdlKVxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYz0yMDQ9dm9pZCAqZG1hX2RpcmVjdF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYy0yOTAtXFx0Lyogd2UgYWx3YXlzIG1hbnVhbGx5IHplcm8gdGhlIG1lbW9yeSBvbmNlIHdlIGFyZSBkb25lICovXFxua2VybmVsL2RtYS9kaXJlY3QuYzoyOTE6XFx0cGFnZSA9IF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhkZXYsIHNpemUsIGdmcCBcXHUwMDI2IH5fX0dGUF9aRVJPLCBhbGxvd19oaWdobWVtKTtcXG5rZXJuZWwvZG1hL2RpcmVjdC5jLTI5Mi1cXHRpZiAoIXBhZ2UpXFxuLS1cXG5rZXJuZWwvZG1hL2RpcmVjdC5jPTQzND1zdHJ1Y3QgcGFnZSAqZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbi0tXFxua2VybmVsL2RtYS9kaXJlY3QuYy00NTYtXFxua2VybmVsL2RtYS9kaXJlY3QuYzo0NTc6XFx0cGFnZSA9IF9fZG1hX2RpcmVjdF9hbGxvY19wYWdlcyhkZXYsIHNpemUsIGdmcCwgZmFsc2UpO1xcbmtlcm5lbC9kbWEvZGlyZWN0LmMtNDU4LVxcdGlmICghcGFnZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MTUuNzY1Mzk0NTgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDEzNzU2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG9wc19oZWxwZXJzLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtJ3MgbGlrZWx5IHNvbWV3aGVyZSB3aXRoaW4gdGhlIERNQSBvcGVyYXRpb24gaGVscGVycywgc28gbXkgZmlyc3Qgc3RvcCBpcyBkZWZpbml0ZWx5IGBrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIERNQSBzdWJzeXN0ZW0uIExldCdzIHNlZSBpZiB0aGVyZSdzIGFuIG9idmlvdXMgY3VscHJpdCBpbiBob3cgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQsIGhvdyB0cmFuc2ZlcnMgYXJlIGluaXRpYXRlZCwgb3IgcGVyaGFwcyBpbiBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nLiBJJ20gaG9waW5nIEkgY2FuIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgcXVpY2tseS4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSB3ZWxsLWNvbW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyOTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTo0ODoxNy43MDY3NzI2MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvZG1hL29wc19oZWxwZXJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0fVxcbiAgNjE6XFx0XFxuICA2MjpcXHRzdHJ1Y3QgcGFnZSAqZG1hX2NvbW1vbl9hbGxvY19wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxcbiAgNjM6XFx0XFx0XFx0ZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBnZnBfdCBnZnApXFxuICA2NDpcXHR7XFxuICA2NTpcXHRcXHRjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7XFxuICA2NjpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gIDY3OlxcdFxcdHBoeXNfYWRkcl90IHBoeXM7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdHBhZ2UgPSBkbWFfYWxsb2NfY29udGlndW91cyhkZXYsIHNpemUsIGdmcCk7XFxuICA3MDpcXHRcXHRpZiAoIXBhZ2UpIHtcXG4gIDcxOlxcdFxcdFxcdHZvaWQgKnZhID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKGRldl90b19ub2RlKGRldiksIHNpemUsIGdmcCk7XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdFxcdGlmICghdmEpXFxuICA3NDpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDc1OlxcdFxcdFxcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2UodmEpO1xcbiAgNzY6XFx0XFx0fVxcbiAgNzc6XFx0XFxuICA3ODpcXHRcXHRwaHlzID0gcGFnZV90b19waHlzKHBhZ2UpO1xcbiAgNzk6XFx0XFx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcXG4gIDgwOlxcdFxcdFxcdCpkbWFfaGFuZGxlID0gaW9tbXVfZG1hX21hcF9waHlzKGRldiwgcGh5cywgc2l6ZSwgZGlyLFxcbiAgODE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xcbiAgODI6XFx0XFx0ZWxzZVxcbiAgODM6XFx0XFx0XFx0KmRtYV9oYW5kbGUgPSBvcHMtXFx1MDAzZW1hcF9waHlzKGRldiwgcGh5cywgc2l6ZSwgZGlyLFxcbiAgODQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpO1xcbiAgODU6XFx0XFx0aWYgKCpkbWFfaGFuZGxlID09IERNQV9NQVBQSU5HX0VSUk9SKSB7XFxuICA4NjpcXHRcXHRcXHRkbWFfZnJlZV9jb250aWd1b3VzKGRldiwgcGFnZSwgc2l6ZSk7XFxuICA4NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDg4OlxcdFxcdH1cXG4gIDg5OlxcdFxcbiAgOTA6XFx0XFx0bWVtc2V0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgMCwgc2l6ZSk7XFxuICA5MTpcXHRcXHRyZXR1cm4gcGFnZTtcXG4gIDkyOlxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0dm9pZCBkbWFfY29tbW9uX2ZyZWVfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuICA5NTpcXHRcXHRcXHRkbWFfYWRkcl90IGRtYV9oYW5kbGUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcXG4gIDk2OlxcdHtcXG4gIDk3OlxcdFxcdGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTtcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0aWYgKHVzZV9kbWFfaW9tbXUoZGV2KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MTcuNzA2ODU3NjlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODIzNjE3Mzg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBbmFseXNpcyBvZiBETUEgTWVtb3J5IEFsbG9jYXRpb24gT3B0aW1pemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgaW1wcm92aW5nIHRoZSBlZmZpY2llbmN5IG9mIERNQSBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGJ5IG1vdmluZyBmcm9tIHRoZSBvbGQgYGFsbG9jX3BhZ2VzX25vZGVgL2BfX2ZyZWVfcGFnZXNgIGFwcHJvYWNoICh3aGljaCBjb3VsZCBsZWFkIHRvIHdhc3RlZCBwYWdlcyB3aXRoIG5vbi1wb3dlci1vZi0yIGFsbG9jYXRpb25zKSB0byB0aGUgbW9yZSBwcmVjaXNlIGBhbGxvY19wYWdlc19leGFjdF9uaWRgL2BmcmVlX3BhZ2VzX2V4YWN0YCBjYWxscy4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgdGhvc2UgYWxsb2NhdGlvbi9mcmVlaW5nIG1pc21hdGNoZXMgYmV0d2VlbiBDTUEgYW5kIHRoZSBidWRkeSBhbGxvY2F0b3IsIGVuc3VyaW5nIHdlIGdldCAqZXhhY3RseSogdGhlIHBhZ2VzIHJlcXVlc3RlZC4gVGhhdCdzIGEgc29saWQgb3B0aW1pemF0aW9uLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBLTVNBTiB2dWxuZXJhYmlsaXRpZXM/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsLXRvLVVzZXIgU3BhY2UgRGF0YSBMZWFrczoqKiBOby4gVGhlIHBhdGNoIGlzbid0IG1vZGlmeWluZyBvciBpbnRyb2R1Y2luZyBhbnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBJdCdzIHN0cmljdGx5IGFib3V0IGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG4yLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlIERlcGVuZGVuY2llczoqKiBOb3BlLiBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgaGluZ2VzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gVGhlIGFsbG9jYXRpb25zIGFuZCBmcmVlcyBhcmUgY2xlYW4uXG5cbjMuICAqKlVuaW5pdGlhbGl6ZWQgRmllbGRzIGluIENvbXBsZXggRGF0YSBTdHJ1Y3R1cmVzOioqIEFnYWluLCBuby4gVGhlIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSBgbWVtc2V0YCAod2hpY2ggaXMgZ29vZCBwcmFjdGljZSkgb3IgaW5pdGlhbGl6ZWQgYnkgRE1BIGNhbGxlcnMuIFRoZSBwYXRjaCBpc24ndCB0b3VjaGluZyBhbnkgaW5pdGlhbGl6YXRpb24gbG9naWMgZm9yIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlcy4gSXQncyBqdXN0IHR3ZWFraW5nICpob3cqIHdlIGFsbG9jYXRlIGFuZCBmcmVlIHRoZSBwaHlzaWNhbCBwYWdlcy5cblxuNC4gICoqQm91bmRzIENoZWNrIElzc3VlcyBMZWFkaW5nIHRvIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFjY2VzczoqKiBUaGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gYmUgZXh0cmEgY2FyZWZ1bCwgYnV0IGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIG5vLiBUaGUgYnVmZmVyIHNpemUgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIEFjY2Vzc2luZyBiZXlvbmQgdGhlIGFsbG9jYXRlZCBzaXplIChgc2l6ZWAgb3IgYGFsbG9jX3NpemVgKSBpbiB0aGlzIG5ldyBzZXR1cCB3b3VsZCB0cmlnZ2VyIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHVzZS1hZnRlci1mcmVlLCB3aGljaCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgcGFnZSBmYXVsdHMsICpub3QqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgd2l0aGluIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBJbiBmYWN0LCBpZiBhbnl0aGluZywgaXQncyBzYWZlciwgYXMgaXQgc2hvdWxkIGJlIGhpdHRpbmcgZnJlZWQgcGFnZXMsIHdoaWNoIHdvdWxkIGFsZXJ0IHVzIGZhc3Rlci5cblxuU28sIGJhc2VkIG9uIHRoaXMgdGhvcm91Z2ggYW5hbHlzaXMsIEkgY2FuJ3Qgc2VlIGFueSBLTVNBTi1zcGVjaWZpYyBidWdzIGludHJvZHVjZWQuIFRoZXNlIGNoYW5nZXMgYXJlIGV4Y2x1c2l2ZWx5IHJlbGF0ZWQgdG8gRE1BIG1lbW9yeSBtYW5hZ2VtZW50IGF0IHRoZSBwYWdlIGxldmVsLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGluZGl2aWR1YWwgZmlsZSBjaGFuZ2VzIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbjpcblxuKiAgIGBpb21tdV9kbWFfYWxsb2NfcGFnZXNgOiBSZXBsYWNpbmcgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYGFsbG9jX3BhZ2VzX2V4YWN0X25pZGAgZm9sbG93ZWQgYnkgYSBgbWVtc2V0YCB0byB6ZXJvLiBTYWZlLlxuXG4qICAgYGRtYS1tYXAtb3BzLmhgLCBgY29udGlndW91cy5jYCwgYGRpcmVjdC5jYCwgYG9wc19oZWxwZXJzLmNgOiBVc2luZyBgZnJlZV9wYWdlc19leGFjdGAgaW5zdGVhZCBvZiBgX19mcmVlX3BhZ2VzYC4gRmluZSwgdGhpcyBpcyBwcmVjaXNlbHkgd2hhdCB3ZSBhcmUgZG9pbmcgdG8gYXZvaWQgdGhvc2UgcGFnZSB3YXN0ZSBwcm9ibGVtcy5cblxuKiAgIGBpbmNsdWRlL2xpbnV4L2dmcC5oYCwgYG1tL3BhZ2VfYWxsb2MuY2A6IFJlbW92aW5nIGBfX21lbWluaXRgLiBUaGlzIG1ha2VzIHRoZSBgYWxsb2NfcGFnZXNfZXhhY3RfbmlkYCBmdW5jdGlvbiB1c2FibGUgb3V0c2lkZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSwgd2hpY2ggaXMgbmVlZGVkLiBNYWtlcyBzZW5zZSBmb3IgRE1BIGNvZGUuXG5cbkFsbCBvZiB0aGVzZSBjaGFuZ2VzIGFyZSBhYm91dCBmaW5lciBncmFudWxhcml0eSBvZiBwYWdlIGFsbG9jYXRpb24vZnJlZWluZyBmb3IgRE1BIG9wZXJhdGlvbnMuIElmIHRoZXJlIGFyZSBhbnkgYnVncywgdGhleSdsbCBiZSByZWd1bGFyIG1lbW9yeSBtYW5hZ2VtZW50IGVycm9yczogaW52YWxpZCBmcmVlcywgcGFnZSByZWZlcmVuY2UgY291bnQgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIGV4aXN0aW5nIEtBU0FOLCBwYWdlX293bmVyL3BhZ2VfcG9pc29uaW5nLCBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnZXJzIGhhbmRsZSB0aG9zZSBjYXNlcy4gS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZS5cblxuQWxsIGNsZWFyLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMTEsIk91dHB1dFRva2VucyI6MjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6NDg6MjUuOTQzMDM1NTU0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhbGxiYWNrIHBhdGhzIChpbiBkbWEtaW9tbXUsIGRtYS1kaXJlY3QsIGFuZCBvcHNfaGVscGVycykgdG8gdXNlIGFsbG9jX3BhZ2VzX2V4YWN0X25pZCgpIGFuZCBmcmVlX3BhZ2VzX2V4YWN0KCkgaW5zdGVhZCBvZiBhbGxvY19wYWdlc19ub2RlKCkgYW5kIF9fZnJlZV9wYWdlcygpIHdpdGggcGFnZSBvcmRlcnMuIEl0IGFsc28gcmVtb3ZlcyB0aGUgX19tZW1pbml0IGFubm90YXRpb24gZnJvbSBhbGxvY19wYWdlc19leGFjdF9uaWRfbm9wcm9mKCkuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBhZmZlY3QgcGFnZS1sZXZlbCBtZW1vcnkgYWxsb2NhdGlvbiBncmFudWxhcml0eSBhbmQgZnJlZWluZyBsb2dpYyB3aXRoaW4gdGhlIERNQSBzdWJzeXN0ZW0uIFRoZSBhbGxvY2F0ZWQgbWVtb3J5IGJ1ZmZlcnMgYXJlIGVpdGhlciBleHBsaWNpdGx5IHplcm9lZCAodmlhIG1lbXNldCkgb3IgbWFuYWdlZCBwZXIgc3RhbmRhcmQgRE1BIHN1YnN5c3RlbSBjb252ZW50aW9ucywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayB2ZWN0b3JzIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBwYWdlIGxpZmV0aW1lLCBkb3VibGUgZnJlZSwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYXJlIGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgcGFnZSBhbGxvY2F0b3IgZGVidWdnaW5nIHRvb2xzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERNQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWxsYmFjayBwYXRocyAoaW4gZG1hLWlvbW11LCBkbWEtZGlyZWN0LCBhbmQgb3BzX2hlbHBlcnMpIHRvIHVzZSBhbGxvY19wYWdlc19leGFjdF9uaWQoKSBhbmQgZnJlZV9wYWdlc19leGFjdCgpIGluc3RlYWQgb2YgYWxsb2NfcGFnZXNfbm9kZSgpIGFuZCBfX2ZyZWVfcGFnZXMoKSB3aXRoIHBhZ2Ugb3JkZXJzLiBJdCBhbHNvIHJlbW92ZXMgdGhlIF9fbWVtaW5pdCBhbm5vdGF0aW9uIGZyb20gYWxsb2NfcGFnZXNfZXhhY3RfbmlkX25vcHJvZigpLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgYWZmZWN0IHBhZ2UtbGV2ZWwgbWVtb3J5IGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkgYW5kIGZyZWVpbmcgbG9naWMgd2l0aGluIHRoZSBETUEgc3Vic3lzdGVtLiBUaGUgYWxsb2NhdGVkIG1lbW9yeSBidWZmZXJzIGFyZSBlaXRoZXIgZXhwbGljaXRseSB6ZXJvZWQgKHZpYSBtZW1zZXQpIG9yIG1hbmFnZWQgcGVyIHN0YW5kYXJkIERNQSBzdWJzeXN0ZW0gY29udmVudGlvbnMsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgdmVjdG9ycyBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcGFnZSBsaWZldGltZSwgZG91YmxlIGZyZWUsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgYWxsb2NhdG9yIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowvdmf8[1] Phase: Succeeded StartedAt: 2026-09-04 01:48:37 +0000 UTC FinishedAt: 2026-09-04 01:48:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdmf8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 01:48:37 +0000 UTC FinishedAt: 2026-09-04 01:48:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdmf8[2] Phase: Succeeded StartedAt: 2026-09-04 01:48:37 +0000 UTC FinishedAt: 2026-09-04 02:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdmf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_exact_nid_noprof","dma_free_contiguous","__dma_direct_alloc_pages","dma_common_alloc_pages","iommu_dma_alloc_pages","dma_direct_alloc_pages","dma_direct_alloc","iommu_dma_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"f71a97f5-b314-4b82-8d38-e9a7854c1673","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-04 01:48:37 +0000 UTC FinishedAt: 2026-09-04 02:00:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_exact_nid_noprof","dma_free_contiguous","__dma_direct_alloc_pages","dma_common_alloc_pages","iommu_dma_alloc_pages","dma_direct_alloc_pages","dma_direct_alloc","iommu_dma_alloc"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"f71a97f5-b314-4b82-8d38-e9a7854c1673","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvdmf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_exact_nid_noprof","dma_free_contiguous","__dma_direct_alloc_pages","dma_common_alloc_pages","iommu_dma_alloc_pages","dma_direct_alloc_pages","dma_direct_alloc","iommu_dma_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"f71a97f5-b314-4b82-8d38-e9a7854c1673","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 01:48:37 +0000 UTC FinishedAt: 2026-09-04 01:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdmf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_exact_nid_noprof","dma_free_contiguous","__dma_direct_alloc_pages","dma_common_alloc_pages","iommu_dma_alloc_pages","dma_direct_alloc_pages","dma_direct_alloc","iommu_dma_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"f71a97f5-b314-4b82-8d38-e9a7854c1673","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 01:48:37 +0000 UTC FinishedAt: 2026-09-04 01:48:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowvdmf8/series-workflowvdmf8-convert-artifact-2788664161/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdmf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_exact_nid_noprof","dma_free_contiguous","__dma_direct_alloc_pages","dma_common_alloc_pages","iommu_dma_alloc_pages","dma_direct_alloc_pages","dma_direct_alloc","iommu_dma_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"f71a97f5-b314-4b82-8d38-e9a7854c1673","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 01:48:47 +0000 UTC FinishedAt: 2026-09-04 02:00:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdmf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_exact_nid_noprof","dma_free_contiguous","__dma_direct_alloc_pages","dma_common_alloc_pages","iommu_dma_alloc_pages","dma_direct_alloc_pages","dma_direct_alloc","iommu_dma_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"f71a97f5-b314-4b82-8d38-e9a7854c1673","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 01:48:47 +0000 UTC FinishedAt: 2026-09-04 02:00:36 +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:*3d0b54cc-b1a3-4b26-8194-071ea484a5c5,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-workflowvdmf8/series-workflowvdmf8-convert-artifact-2788664161/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": "12be54bb-b7dc-4c8c-98f8-5e5a994a3039", "success": false },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-workflowvdmf8/series-workflowvdmf8-build-action-3874975887/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdmf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_exact_nid_noprof","dma_free_contiguous","__dma_direct_alloc_pages","dma_common_alloc_pages","iommu_dma_alloc_pages","dma_direct_alloc_pages","dma_direct_alloc","iommu_dma_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"f71a97f5-b314-4b82-8d38-e9a7854c1673","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 01:48:47 +0000 UTC FinishedAt: 2026-09-04 02:00:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3d0b54cc-b1a3-4b26-8194-071ea484a5c5,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-workflowvdmf8/series-workflowvdmf8-convert-artifact-2788664161/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": "12be54bb-b7dc-4c8c-98f8-5e5a994a3039", "success": false },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-workflowvdmf8/series-workflowvdmf8-build-action-3874975887/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdmf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_exact_nid_noprof","dma_free_contiguous","__dma_direct_alloc_pages","dma_common_alloc_pages","iommu_dma_alloc_pages","dma_direct_alloc_pages","dma_direct_alloc","iommu_dma_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"f71a97f5-b314-4b82-8d38-e9a7854c1673","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Failed StartedAt: 2026-09-04 02:00:36 +0000 UTC FinishedAt: 2026-09-04 02:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdmf8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_pages_exact_nid_noprof","dma_free_contiguous","__dma_direct_alloc_pages","dma_common_alloc_pages","iommu_dma_alloc_pages","dma_direct_alloc_pages","dma_direct_alloc","iommu_dma_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2aeb49124a2b3d0c9aa8c0a2124c8cae21ab4e0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DMA_CMA","CMA","IOMMU_DMA","DMA_OPS_HELPERS"],"series_id":"f71a97f5-b314-4b82-8d38-e9a7854c1673","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Failed StartedAt: 2026-09-04 02:00:36 +0000 UTC FinishedAt: 2026-09-04 02:00:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}