-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path144721958-f280507e-c49b-42e5-a69e-225191767052.png
3 lines (3 loc) · 66.2 KB
/
144721958-f280507e-c49b-42e5-a69e-225191767052.png
File metadata and controls
3 lines (3 loc) · 66.2 KB
1
2
3
<!DOCTYPE html><html lang="en"><head><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta charset="UTF-8"><meta name="viewport" content="user-scalable=yes, width=device-width, initial-scale=1, maximum-scale=5"><meta name="theme-color" content="#1976d2"><meta name="msapplication-TileColor" content="#1976d2"><meta name="msapplication-TileImage" content="/_assets/favicons/mstile-150x150.png"><title>Edit Mapping | FAForever Wiki</title><meta name="description" content="Map creation for Forged Alliance (Forever)"><meta property="og:title" content="Edit Mapping"><meta property="og:type" content="website"><meta property="og:description" content="Map creation for Forged Alliance (Forever)"><meta property="og:image"><meta property="og:url" content="https://wiki.faforever.com/e/en/Development/Mapping"><meta property="og:site_name" content="FAForever Wiki"><link rel="apple-touch-icon" sizes="180x180" href="/_assets/favicons/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="192x192" href="/_assets/favicons/android-chrome-192x192.png"><link rel="icon" type="image/png" sizes="32x32" href="/_assets/favicons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/_assets/favicons/favicon-16x16.png"><link rel="mask-icon" href="/_assets/favicons/safari-pinned-tab.svg" color="#1976d2"><link rel="manifest" href="/_assets/manifest.json"><script>var siteConfig = {"title":"FAForever Wiki","theme":"default","darkMode":true,"tocPosition":"right","lang":"en","rtl":false,"company":"Forged Alliance Forever","contentLicense":"ccby","footerOverride":"","logoUrl":"/faf-logo.png"}
var siteLangs = []
</script><link type="text/css" rel="stylesheet" href="/_assets/css/app.812159e8900d2514eb6d.css"><script type="text/javascript" src="/_assets/js/runtime.js?1728723472"></script><script type="text/javascript" src="/_assets/js/app.js?1728723472"></script></head><body><div id="root"><editor :page-id="1136" locale="en" path="Development/Mapping" title="Mapping" description="Map creation for Forged Alliance (Forever)" :tags="["mapping","basic"]" :is-published="true" publish-start-date="2023-07-08" publish-end-date="" script-css="" script-js="" init-mode="update" init-editor="markdown" init-content="IyBJbnRyb2R1Y3Rpb24KWyFbbHVtaW5hcnlzbWFsbGVyLnBuZ10oL2ltYWdlcy9tYXBwaW5nL2dhZWEvYmFzaWNzL2x1bWluYXJ5c21hbGxlci5wbmcpey5hbGlnbi1yaWdodH1dKC9lbi9pbWFnZXMvbWFwcGluZy9nYWVhL2Jhc2ljcy9sdW1pbmFyeWJyZWFrZG93bi5qcGcpCgpXZWxjb21lIHRvIHRoZSBGQUYgTWFwcGluZyBXaWtpLCBhIGNvbXByZWhlbnNpdmUgcmVzb3VyY2UgZGVkaWNhdGVkIHRvIGVxdWlwIGFzcGlyaW5nIG1hcC1tYWtlcnMgd2l0aCB0aGUgZXNzZW50aWFsIGtub3dsZWRnZSBhbmQgdGVjaG5pcXVlcyB0byBjcmVhdGUgbmV3IGFuZCBpbnRlcmVzdGluZyBtYXBzIGZvciBzdXByZW1lIGNvbW1hbmRlcjogRm9yZ2VkIEFsbGlhbmNlIEZvcmV2ZXIuCgpDdXN0b20gbWFwcyBwbGF5IGEgdml0YWwgcm9sZSBpbiBlbnJpY2hpbmcgdGhlIEZBRiBnYW1pbmcgZXhwZXJpZW5jZS4gVGhleSBwcm92aWRlIGEgc3RlYWR5IHN0cmVhbSBvZiBuZXcgY29udGVudCwga2VlcGluZyB0aGUgZ2FtZXBsYXkgZnJlc2ggYW5kIGV4Y2l0aW5nIGZvciBsb25nLXRpbWUgcGxheWVycy4gQWRkaXRpb25hbGx5LCBjdXN0b20gbWFwcyBvZmZlciBkaXZlcnNlIGNoYWxsZW5nZXMsIGNhdGVyaW5nIHRvIGRpZmZlcmVudCBwbGF5c3R5bGVzIGFuZCBza2lsbCBsZXZlbHMsIGVuaGFuY2luZyB0aGUgZ2FtZSdzIHJlcGxheWFiaWxpdHkuCgpXaXRoaW4gdGhlc2UgcGFnZXMsIHdlIGRlbHZlIGludG8gdGhlIGludHJpY2FjaWVzIG9mIEZBRiBtYXAtbWFraW5nLCBmcm9tIHRoZSBmdW5kYW1lbnRhbHMgb2YgdGVycmFpbiBnZW5lcmF0aW9uIHRvIHRoZSBzdHJhdGVnaWMgcGxhY2VtZW50IG9mIGtleSBhc3NldHMuIFdlIGhvcGUgdGhhdCB0aGVzZSB0dXRvcmlhbHMgbWFrZSB0aGUgbWFwLW1ha2luZyBwcm9jZXNzIG1vcmUgYWNjZXNzaWJsZSBhbmQgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgbmVjZXNzYXJ5IHRvb2xzLCBiZXN0IHByYWN0aWNlcywgYW5kIGtub3ctaG93IHRvIGJlY29tZSBhIHNraWxsZWQgRkFGIG1hcHBlci4KCldlIGJlbGlldmUgdGhlIGNvbGxhYm9yYXRpdmUgZW52aXJvbm1lbnQgZm9zdGVycyBncm93dGgsIGluc3BpcmVzIGlubm92YXRpb24sIGFuZCBkcml2ZXMgdGhlIGNvbnRpbnVhbCBpbXByb3ZlbWVudCBvZiBtYXAtbWFraW5nIHdpdGhpbiB0aGUgRkFGIGNvbW11bml0eS4gQXMgc3VjaCwgdGhpcyB0dXRvcmlhbCBkcmF3cyB1cG9uIHRoZSBhY2N1bXVsYXRlZCBleHBlcnRpc2Ugb2YgZXhwZXJpZW5jZWQgbWFwLW1ha2VycyB3aG8gaGF2ZSBnZW5lcm91c2x5IHNoYXJlZCB0aGVpciB3aXNkb20uIFdlIGVuZGVhdm9yIHRvIGNyZWF0ZSBhbiBhY2Nlc3NpYmxlIGFuZCBlbmpveWFibGUgbGVhcm5pbmcgZXhwZXJpZW5jZSwgc3VpdGFibGUgZm9yIG5ld2NvbWVycyBhbmQgc2Vhc29uZWQgbWFwcGVycyBhbGlrZS4gCgpJZiBhbnkgb2YgdGhlc2UgdHV0b3JpYWxzIGxlYXZlIHlvdSB3aXRoIHF1ZXN0aW9ucyBvciByZW1hcmtzLCBkbyBub3QgaGVzaXRhdGUgdG8gam9pbiB1cyBvbiB0aGUgRkFGIGZvcnVtcyBvciBvbiB0aGUgRkFGIGRpc2NvcmQsIHdoZXJlIHdlIGRpc2N1c3MgYW5kIGV4Y2hhbmdlIGZlZWRiYWNrLCB0aXBzLCBhbmQgdGVjaG5pcXVlcy4gCgojIyBUZXJtaW5vbG9neQpJbiB0dXRvcmlhbHMgYW5kIGNvbnZlcnN0YXRpb25zIHdpdGggb3RoZXIgbWFwcGVycyB3ZSB1c2Ugc3BlY2lmaWMgd29yZHMgdG8gcmVmZXIgdG8gc3BlY2lmaWMgZWxlbWVudHMgb2YgbWFwIG1ha2luZy4gSG93ZXZlciwgc29tZSB0ZXJtcyBpbiB0aGVzZSBjb250ZXh0cyBtYXkgbGFjayBwcmVjaXNlIG9yIGNvbnNpc3RlbnQgZGVmaW5pdGlvbnMsIGxlYWRpbmcgdG8gcG90ZW50aWFsIG1pc3VuZGVyc3RhbmRpbmdzIGFuZCBhbWJpZ3VpdHkuIEZvciBvdGhlcnMsIHRoZSBtZWFuaW5nIG1heSBiZSB1bmNsZWFyIGF0IGZpcnN0IGdsYW5jZSwgbWFraW5nIGl0IGRpZmZpY3VsdCBmb3IgYmVnaW5uaW5nIG1hcHBlcnMgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIG1lYW50LiBJbiBvcmRlciB0byBwcm92aWRlIGEgY2xlYXIgYW5kIGNvbmNpc2UgcmVmZXJlbmNlIGZvciBlc3NlbnRpYWwgY29uY2VwdHMgaW4gRkFGIG1hcHBpbmcsIHRoZSBbVGVybWlub2xvZ3ldKC9lbi9EZXZlbG9wbWVudC9NYXBwaW5nL1Rlcm1zKSBwYWdlIHByZXNlbnQgYSBsaXN0IG9mIGtleSB0ZXJtcyBhbmQgdGhlaXIgZGVmaW5pdGlvbnMuCgotIFtUZXJtaW5vbG9neSAqQ29tbW9ubHkgdXNlZCB0ZXJtcyBhbmQgdGhlaXIgZGVmaW5pdGlvbnMqXSgvZW4vRGV2ZWxvcG1lbnQvTWFwcGluZy9UZXJtcykKey5saW5rcy1saXN0fQoKIyMgVGhlIGJhc2ljcyBvZiBtYXBwaW5nCkF0IHRoZSBtb3N0IGJhc2ljIGxldmVsLCBtYXBzIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZyBlbGVtZW50czoKfC18LXwKfFRlcnJhaW58VGhlIGdlb21ldHJ5IG9mIHlvdXIgbWFwLiBDb25zaXN0aW5nIG9mIGEgZ3JleXNjYWxlIGltYWdlLCBlaXRoZXIgY3JlYXRlZCBpbnNpZGUgdGhlIGVkaXRvciBvciBpbXBvcnRlZCBmcm9tIGFuIGV4dGVybmFsIHNvdXJjZXwKfFRleHR1cmVzfFRoZSB0aWxlZCBjb2xvdXIgaW1hZ2VzIHRoYXQgdHVybiB5b3VyIGJsYW5rIHRlcnJhaW4gaW50byBzYW5keSBiZWFjaGVzLCBncmFzc3kgZmllbGRzLCBhbmQgc3RvbmUgY2xpZmZzfAp8VGV4dHVyZSBNYXNrc3xUaGUgZ3JleXNjYWxlIGltYWdlcyB0aGF0IGRpY3RhdGUgd2hlcmUgd2hpY2ggdGV4dHVyZSBpcyBtYWRlIHZpc2libGUuIENyZWF0ZWQgaW4gdGhlIGVkaXRvciBvciBpbXBvcnRlZCBmcm9tIGFuIGV4dGVybmFsIHNvdXJjZS58CnxTcGF3biBhbmQgcmVzb3VyY2UgbWFya2Vyc3xNYXJrZXJzIHRoYXQgZGljdGF0ZSB3aGVyZSBwbGF5ZXJzIHNwYXduLCBhbmQgaG93IG1leGVzIGFuZCBoeWRyb3MgYXJlIHBsYWNlZHwgIAp8UHJvcHN8VGhlIDNEIG1vZGVscyB0aGF0IHBvcHVsYXRlIHlvdXIgbWFwLCBzdWNoIGFzIHJlY2xhaW1hYmxlIHJvY2tzIGFuZCB0cmVlc3wgCgpPbiB0b3Agb2YgdGhhdCwgbW9yZSBkZXRhaWwgYW5kIGNoYXJhY3RlciBjYW4gYmUgaW50cm9kdWNlZCBieSBhZGRpbmcgZGVjYWxz4oCUc21hbGxlciBpbWFnZXMgdGhhdCBtYXkgYmUgZnJlZWx5IHBvc2l0aW9uZWQsIHNjYWxlZCwgYW5kIHJvdGF0ZWQgb24gdGhlIG1hcOKAlGNpdmlsaWFuIEFJIHVuaXRzLCBhbmQgd3JlY2tzLiAKClRoZSBleGFjdCB1c2Ugb2YgYWxsIHRoZXNlIGVsZW1lbnRzIGdpdmVzIHlvdSBhIGxvdCBvZiByb29tIGZvciBjcmVhdGl2aXR5LCBhbHRob3VnaCB0aGUgbGFyZ2UgYW1vdW50IG9mIGZyZWVkb20gbWlnaHQgYXQgZmlyc3QgZmVlbCBzb21ld2hhdCBvdmVyd2hlbG1pbmcuIEhvd2V2ZXIsIGRvIHRyeSBub3QgdG8gYmUgcHV0IG9mZiBieSB0aGlzOiB0aGUgd2hvbGUgcHJvY2VzcyBvZiBjcmVhdGluZyBtYXBzIGxvb2tzIGF0IGZpcnN0IHRvIGJlIG1vcmUgZGlmZmljdWx0IHRoYXQgaXQgcmVhbGx5IGlzLiBOb25ldGhlbGVzcywgaXQgaXMgYWR2aWNlZCB0aGF0IGZvciB5b3VyIGZpcnN0IG1hcCwgeW91IGxpbWl0IHlvdXJzZWxmIHRvIGEgNUtNIG1hcCwgYXMgdGhlIGFtb3VudCBvZiB0aW1lIHJlcXVpcmVkIHRvIGNvbXBsZXRlIGEgbWFwIGluY3JlYXNlcyBzaWduaWZpY2FudGx5IGFzIHRoZSBzaXplIGluY3JlYXNlcy4KCkEgY29tcHJlaGVuc2l2ZSB0dXRvcmlhbCBzZXJpZXMgb24gdGhlIGJhc2ljcyBvZiBtYXAgbWFraW5nIGlzIGF2YWlsYWJsZSBvbiB5b3V0dWJlLCBhbmQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIG1hdGVyaWFsIGZvciBhbnkgbWFwcGVyLiAKCi0gW0ZBRiBNYXAgRGV2ZWxvcG1lbnQqT2ZmaWNpYWwgdmlkZW8gdHV0b3JpYWwgc2VyaWVzKl0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vcGxheWxpc3Q/bGlzdD1QTDBueHVJVUlqcEZ2TS1sVTNoNlJPdFdzb0NfaWtrYUFzKQp7LmxpbmtzLWxpc3R9CgojIFRvb2xzIGFuZCBzb2Z0d2FyZQpBc2lkZSBmcm9tIHRoZSBlZGl0b3IsIHlvdSBtYXkgd2FudCB0byB1c2Ugc2V2ZXJhbCBvdGhlciBleHRlcm5hbCB0b29scywgc3VjaCBhcyBpbWFnZSBlZGl0aW5nIHNvZnR3YXJlIGFuZCB0ZXJyYWluIGdlbmVyYXRpb24gdG9vbHMuIEJlbG93IGZvbGxvd3Mgc2hvcnQgZGVzY3JpcHRpb25zIGFuZCBsaW5rcyB0byB0dXRvcmlhbHMgZm9yIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgdG9vbHMuIAojIyBFZGl0b3JzCiMjIyBPem9uZXggRWRpdG9yClRoZSBbRkEtRm9yZXZlci1NYXAtRWRpdG9yXSgvZW4vRGV2ZWxvcG1lbnQvTWFwcGluZy9GQS1Gb3JldmVyLU1hcC1FZGl0b3IpIGlzIGEgbmV3IG1hcCBlZGl0b3IgZGV2ZWxvcGVkIGZvciBGQUYgYnkgb3pvbmV4LiBBbHRob3VnaCBwZXJwZXR1YWxseSBzdHVjayBpbiBhbiB1bmZpbmlzaGVkIGFscGhhIHN0YWdlLCB3aGljaCBtZWFucyB0aGUgZWRpdG9yIGlzIGluIGl0cyB0ZXN0aW5nIHBoYXNlIGFuZCBsYWNrcyBzb21lIG9mIHRoZSBmZWF0dXJlcyBvZiB0aGUgR1BHIGVkaXRvciwgaXQgaXMgY29uc2lkZXJlZCBpbiBtYW55IHdheXMgYSBzaWduaWZpY2FudCBpbXByb3ZlbWVudCBvdmVyIHRoZSBHUEcgZWRpdG9yLiBHZW5lcmFsbHksIHRoaXMgZWRpdG9yIGlzIHRoZSByZWNvbW1lbmRlZCBlZGl0b3IgdG8gdXNlLgoKSXQgaXMgYSBwb3dlcmZ1bCB0b29sIGZvciBjcmVhdGluZyBjdXN0b20gbWFwcyBpbiBTdXByZW1lIENvbW1hbmRlcjogRm9yZ2VkIEFsbGlhbmNlLCBidXQgbGlrZSB3aXRoIGFueSBzb2Z0d2FyZSwgeW91IG1pZ2h0IGVuY291bnRlciB2YXJpb3VzIHRlY2huaWNhbCBpc3N1ZXMgdGhhdCBjYW4gcHJldmVudCB5b3UgZnJvbSBjcmVhdGluZyBtYXBzIHRoYXQgbWVldCB5b3VyIHZpc2lvbi4gVGhlc2UgaXNzdWVzIGNhbiByYW5nZSBmcm9tIG1pbm9yIGFubm95YW5jZXMgdG8gc2VyaW91cyBwcm9ibGVtcyB0aGF0IG1ha2UgaXQgaW1wb3NzaWJsZSB0byBjb21wbGV0ZSB5b3VyIG1hcC4gW0luIHRoZSB0cm91Ymxlc2hvb3RpbmcgcGFnZV0oL2VuL0RldmVsb3BtZW50L01hcHBpbmcvZmFmLW1hcC1lZGl0b3ItdHJvdWJsZXNob290aW5nKSwgd2UnbGwgY292ZXIgc29tZSBjb21tb24gdGVjaG5pY2FsIGlzc3VlcyB5b3UgbWlnaHQgZW5jb3VudGVyIHdoaWxlIHdvcmtpbmcgd2l0aCB0aGUgbWFwIGVkaXRvciBhbmQgcmVsYXRlZCBmaWxlcy4KCi0gW0ZBLUZvcmV2ZXItTWFwLUVkaXRvciAqVGhlIG1vZGVybiBlZGl0b3IgcHJvdmlkZWQgYnkgT3pvbmV4IGV0IGFsLipdKC9lbi9EZXZlbG9wbWVudC9NYXBwaW5nL0ZBLUZvcmV2ZXItTWFwLUVkaXRvcikKey5saW5rcy1saXN0fQoKIyMjIEdQRyBlZGl0b3IKVGhlIFtHUEctTWFwLUVkaXRvcl0oL2VuL0RldmVsb3BtZW50L01hcHBpbmcvR1BHLU1hcC1FZGl0b3IpIGlzIHRoZSBlZGl0b3IgcmVsZWFzZWQgYnkgR1BHIHN0dWRpb3MgYW5kIHdhcyB0aGVpciBpbnRlcm5hbCB0b29sIGZvciBtYXAgZGV2ZWxvcG1lbnQuIE5vdGUgdGhhdCB5b3UgcmVxdWlyZSBhIGNvcHkgb2YgU3VwcmVtZSBDb21tYW5kZXIgKHdoaWNoIGlzICpub3QqIFN1cHJlbWUgQ29tbWFuZGVyICpmb3JnZWQgYWxsaWFuY2UqKSB0byBydW4gdGhpcyBlZGl0b3IsIGFzIGl0IGlzIGRlcGVuZGVudCBvbiBzb21lIG9mIHRoZSBjb3JlIGdhbWUgZmlsZXMuCi0gW0dQRy1NYXAtRWRpdG9yICpUaGUgbGVnYWN5IGVkaXRvciBwcm92aWRlZCBieSBHUEcgc3R1ZGlvcypdKC9lbi9EZXZlbG9wbWVudC9NYXBwaW5nL0dQRy1NYXAtRWRpdG9yKQp7LmxpbmtzLWxpc3R9CgojIyBUZXJyYWluIGdlbmVyYXRpb24gdG9vbHMKSW4gbWFwLW1ha2luZywgdGVycmFpbiBoZWlnaHRtYXBzIGFyZSB0eXBpY2FsbHkgY3JhZnRlZCB1c2luZyBtYW51YWwgYnJ1c2ggdG9vbHMgKHByb3ZpZGVkIGJ5IHRoZSBlZGl0b3IpIHRvIHNjdWxwdCB0ZXJyYWluIGZlYXR1cmVzIGJ5IGhhbmQsIG9mZmVyaW5nIG1hcC1tYWtlcnMgcHJlY2lzZSBjb250cm9sIG92ZXIgdGhlIGxhbmRzY2FwZS4gSG93ZXZlciwgZm9yIHRob3NlIHNlZWtpbmcgYWx0ZXJuYXRpdmUgYXBwcm9hY2hlcyBvciBhaW1pbmcgZm9yIG1vcmUgZXhwYW5zaXZlIGFuZCBpbnRyaWNhdGUgdGVycmFpbnMsIHNwZWNpYWxpemVkIHRlcnJhaW4gZ2VuZXJhdGlvbiB0b29scyBwcmVzZW50IHZhbHVhYmxlIG9wdGlvbnMgdG8gc3RyZWFtbGluZSBhbmQgZW5oYW5jZSB0aGlzIHByb2Nlc3MgYmV5b25kIHRoZSBsaW1pdGF0aW9ucyBvZiB0cmFkaXRpb25hbCBoYW5kLXNjdWxwdGluZyBtZXRob2RzLi4gCgpUd28gcHJvbWluZW50IHRvb2xzIGluIHRoaXMgZG9tYWluIGFyZSBXb3JsZE1hY2hpbmUgYW5kIEdhZWEuIEJvdGggV29ybGRNYWNoaW5lIGFuZCBHYWVhIGFyZSBzcGVjaWFsaXplZCBzb2Z0d2FyZSB0aGF0IGVtcG93ZXJzIG1hcC1tYWtlcnMgdG8gZ2VuZXJhdGUgcmVhbGlzdGljIGFuZCBkZXRhaWxlZCB0ZXJyYWlucyBwcm9jZWR1cmFsbHksIGVtcGxveWluZyBhbGdvcml0aG1zIHRvIHNpbXVsYXRlIG5hdHVyYWwgZ2VvbG9naWNhbCBwcm9jZXNzZXMgbGlrZSBlcm9zaW9uLCB3ZWF0aGVyaW5nLCBhbmQgdGVjdG9uaWMgbW92ZW1lbnRzLiBUaGVzZSB0b29scyBhbGxvdyB5b3UgdG8gcXVpY2tseSBnZW5lcmF0ZSBhbmQgbWFuaXB1bGF0ZSB2YXN0IGxhbmRzY2FwZXMgd2l0aCBhIHdpZGUgcmFuZ2Ugb2YgZmVhdHVyZXMgbGlrZSBtb3VudGFpbnMsIHZhbGxleXMsIGFuZCByaXZlcnMuCgojIyMgV29ybGRNYWNoaW5lCi0gW1VzaW5nIFdvcmxkbWFjaGluZSBhbmQgdGhlIEdQRyBlZGl0b3IgdG8gbWFrZSBhIG1hcCpBIHZpZGVvIHR1dG9yaWFsIHNlcmllcyBieSBMaW9uaGFyZHQqXShodHRwczovL3d3dy55b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMTEtIdENNVHdBVEJUeDZ2ck4xdHk2eEZBQnlRZ2g1Qi0pCi0gW1dvcmxkIG1hY2hpbmUgdHV0b3JpYWw6IEJhc2ljIHNoYXBlcypBIHZpZGVvIHR1dG9yaWFsIG9uIHRoZSBiYXNpY3Mgb2YgV29ybGRNYWNoaW5lKl0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1ubFdzc3BoSk1rWSkKey5saW5rcy1saXN0fQoKIyMjIEdhZWEgeyNHYWVhfQpbPGltZyBhbGlnbj0icmlnaHQiIHNyYz0iL2ltYWdlcy9tYXBwaW5nL2dhZWEvZ2FlYV9nZW5lcmFsLnBuZyIgd2lkdGg9IjIwJSI+XSgvZW4vRGV2ZWxvcG1lbnQvTWFwcGluZy9HYWVhKQoKR2FlYSBpcyBhIHRlcnJhaW4gZ2VuZXJhdGlvbiB0b29sIG5vdCB1bmxpa2UgV29ybGRNYWNoaW5lLCB0aG91Z2ggc2lnbmlmaWNhbnRseSBtb3JlIG1vZGVybi4gVGhlIGZyZWUgdmVyc2lvbiBvZiBHYWVhIGFsbG93cyB5b3UgdG8gY3JlYXRlIGhlaWdodG1hcHMgdXAgdG8gYSAxSyByZXNvbHV0aW9uLCB3aGljaCBjb3JyZXNwb25kcyB0byBhIG1heGltdW0gbWFwIHNpemUgb2YgMjB4MjBLTS4gCgpBIHR1dG9yaWFsIHNlcmllcyBvbiB1c2luZyBHYWVhIGZvciBGQUYgbWFwcGluZyB3YXMgd3JpdHRlbiBieSBJbmRleExpYnJvcnVtIChBS0EgUHJvaGliaXRvcnVtKSBhbmQgaW50cm9kdWNlcyB0aGUgYmFzaWNzIG9mIEdhZWEsIGhvdyB0byBjcmVhdGUgdGVycmFpbiwgaG93IHRvIGNyZWF0ZSBzdHJhdHVtIG1hc2tzLCBob3cgdG8gdGV4dHVyZSB3aXRoIEdhZWEsIGFuZCBob3cgdG8gY3JlYXRlIG1hcC13aWRlIGFzc2V0cy4KLSBbQSB0dXRvcmlhbCBzZXJpZXMgb24gdXNpbmcgR2FlYSBmb3IgRkFGIG1hcHBpbmcqQW4gZXh0ZW5zaXZlIHR1dG9yaWFsIHNlcmllcyBvbiBHYWVhIGJ5IEluZGV4TGlicm9ydW0qXSgvZW4vRGV2ZWxvcG1lbnQvTWFwcGluZy9HYWVhKQp7LmxpbmtzLWxpc3R9CgojIyBPdGhlciB0b29scwojIyMgSW1hZ2UtZWRpdGluZyB0b29scwpUbyBjcmVhdGUgY3VzdG9tIGFzc2V0cyBvciBjdXN0b21pemUgZXhpc3Rpbmcgb25lcywgeW91IHdpbGwgcmVxdWlyZSBzb21lIGtpbmQgb2YgaW1hZ2UtZWRpdGluZyB0b29sLiBQaG90b3Nob3Agd2lsbCBiZSBhYmxlIHRvIGRvIG5lYXJseSBhbnl0aGluZyB5b3UgbmVlZCwgYW5kIGNvbWVzIGhpZ2hseSByZWNvbW1lbmRlZC4gSWYgeW91IGRvIG5vdCBoYXZlIGFjY2VzcyB0byBwaG90b3Nob3AgeW91IG1heSB0YWtlIGEgbG9vayBhdCBmcmVlIGFsdGVybmF0aXZlcywgc3VjaCBhcyBHSU1QIChhIExpbnV4IGJhc2VkIGltYWdlIG1hbmlwdWxhdGlvbiBwcm9ncmFtKSBvciBQaG90b3BlYSAoYW4gb25saW5lIHBob3Rvc2hvcC1jbG9uZSkuCgotIFtHSU1QICpGcmVlLXRvLXVzZSBpbWFnZSBlZGl0b3Igc29mdHdhcmUqXShodHRwczovL3d3dy5naW1wLm9yZy8pCi0gW1Bob3RvcGVhICpGcmVlLXRvLXVzZSBPbmxpbmUgcGhvdG9zaG9wIGNsb25lKl0oL2VuL2h0dHBzOi8vd3d3LnBob3RvcGVhLmNvbS8pCnsubGlua3MtbGlzdH0KCiMjIyBFbmNvZGluZyB0b29scwpBc3NldHMgbGlrZSBjdXN0b20gdGV4dHVyZXMgYW5kIGRlY2FscyBuZWVkIHRvIGJlIGV4cG9ydGVkIG9yIGVuY29kZWQgYXMgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgLkREUyBmaWxlLiBQbHVnaW5zIGV4aXN0IHRvIGFsbG93IHBob3Rvc2hvcCBhbmQgR0lNUCB0byBvcGVuIGFuZCBleHBvcnQgLkRTUywgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgSW1hZ2VNYWdpY2sgY29udmVydGVyIHRvb2wgYXMgdGhpcyB0b29sIGhhcyBwcm92ZW4gdG8gYmUgbW9yZSBlZmZlY3RpdmUgYXQgY29tcHJlc3NpbmcgZmlsZXMgd2hlbiBlbmNvZGluZyBhcyAuRERTLgoKLSBbSW1hZ2VNYWdpY2sgKlJlY29tbWVuZGVkIHRvb2wgdG8gZW5jb2RlIGltYWdlcyB0byBERFMqXShodHRwczovL2ltYWdlbWFnaWNrLm9yZy9pbmRleC5waHApCnsubGlua3MtbGlzdH0KCiMgVGhlIG1hcCBjcmVhdGlvbiBwcm9jZXNzCiMjIFRlcnJhaW4KPGltZyBhbGlnbj0icmlnaHQiIHNyYz0iL2ltYWdlcy9tYXBwaW5nL2hlaWdodG1hc2tkZW1vLnBuZyIgd2lkdGg9IjM1JSI+ClRoZSBtb3N0IGltcG9ydGFudCBlbGVtZW50IG9mIGEgbWFwIGlzIHRoZSBoZWlnaHRtYXAsIHdoaWNoIGRlZmluZXMgdGhlIGVsZXZhdGlvbiBhbmQgdG9wb2dyYXBoaWNhbCBmZWF0dXJlcywgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlIGFuZCBjb250b3VycyBvZiB0aGUgbGFuZHNjYXBlLiBPbmNlIHRoZSBoZWlnaHRtYXAgaXMgcmVhZHksIGl0IGZvcm1zIHRoZSBmb3VuZGF0aW9uIHVwb24gd2hpY2ggb3RoZXIgbWFwIGVsZW1lbnRzIGFyZSBpbnRlZ3JhdGVkLgoKSW4gZXNzZW5jZSwgYSBoZWlnaHRtYXAgaXMgYSBncmF5c2NhbGUgaW1hZ2Ugd2hlcmUgZGlmZmVyZW50IHNoYWRlcyBvZiBncmF5IHJlcHJlc2VudCB2YXJ5aW5nIGVsZXZhdGlvbnMuIERhcmtlciBhcmVhcyBjb3JyZXNwb25kIHRvIGxvd2VyIHBvaW50cywgc3VjaCBhcyB2YWxsZXlzIGFuZCBkZXByZXNzaW9ucywgd2hpbGUgbGlnaHRlciBhcmVhcyByZXByZXNlbnQgaGlnaGVyIGVsZXZhdGlvbnMsIHN1Y2ggYXMgaGlsbHMgYW5kIG1vdW50YWlucy4gCgpUbyBjcmVhdGUgYSBoZWlnaHRtYXAsIHZhcmlvdXMgbWV0aG9kcyBjYW4gYmUgdXNlZC4gVGhlIG1vc3QgYmFzaWMgYXBwcm9hY2ggaW52b2x2ZXMgdXNpbmcgdGhlIFticnVzaGVzIHByb3ZpZGVkIGJ5IGVpdGhlciBvZiB0aGUgdHdvIGVkaXRvcnNdKGh0dHBzOi8vd2lraS5mYWZvcmV2ZXIuY29tL2VuL0RldmVsb3BtZW50L01hcHBpbmcvRkEtRm9yZXZlci1NYXAtRWRpdG9yI2hlaWdodG1hcC1icnVzaCksIHdoaWNoIGFsbG93IHlvdSB0byBtYW51YWxseSBzY3VscHQgdGhlIHRlcnJhaW4uIEFsdGVybmF0aXZlbHksIG1hcC1tYWtlcnMgY2FuIGNyYWZ0IGhlaWdodG1hcHMgbWFudWFsbHkgdXNpbmcgZ3JhcGhpYyBlZGl0aW5nIHNvZnR3YXJlIGxpa2UgQWRvYmUgUGhvdG9zaG9wIG9yIEdJTVAuIEFuIGFkdmFuY2VkIGFwcHJvYWNoIGludm9sdmVzICBzcGVjaWFsaXplZCB0ZXJyYWluIGdlbmVyYXRpb24gc29mdHdhcmUgbGlrZSBXb3JsZE1hY2hpbmUgb3IgW0dhZWFdKCNHYWVhKSwgd2hpY2ggdXNlIGFsZ29yaXRobXMgdG8gc2ltdWxhdGUgbmF0dXJhbCBnZW9sb2dpY2FsIHByb2Nlc3NlcywgZ2VuZXJhdGluZyByZWFsaXN0aWMgYW5kIG9yZ2FuaWMgdGVycmFpbnMuIAoKWW91IGNhbiBpbXBvcnQgaGVpZ2h0bWFwcyB0aGF0IHlvdSBtYWRlIHVzaW5nIGV4dGVybmFsIHByb2dyYW1zIGludG8gdGhlIGVkaXRvciwgYXMgbG9uZyBhcyB5b3UgcHJvdmlkZSB0aGUgZWRpdG9yIHdpdGggYW4gaW1hZ2Ugb2YgdGhlIHJpZ2h0IGZpbGV0eXBlIGFuZCBzaXplLiBIZWlnaHRtYXBzIG11c3QgYmUgZW5jb2RlZCBhcyBhIDEtY2hhbm5lbCwgMTYgYml0IC5yYXcgZmlsZSB3aXRob3V0IGludGVybGFjaW5nIGFuZCB3aXRoIElCTSBQQyBieXRlb3JkZXIuIFRoZXkgYWxzbyBzaG91bGQgYmUgcHJvdmlkZWQgaW4gdGhlIHJlc29sdXRpb27igJR0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxz4oCUdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc2l6ZSBvZiB5b3VyIG1hcC4gSXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB3aGlsZSBhc3NldHMgc3VjaCBhcyBtYXNrcywgdGV4dHVyZXMsIGFuZCBkZWNhbHMgYXJlIHVzdWFsbHkgcHJvdmlkZWQgdG8gdGhlIGVkaXRvciBpbiByZXNvbHV0aW9ucyBvZiBwb3dlcnMgb2YgMiAoMjU2LCA1MTIsIDEwMjQsIDIwNDgsIGV0Yy4pLCBoZWlnaHRtYXBzIHJlcXVpcmUgeW91IHRvIHRha2UgdGhlIHNpemUgb2YgeW91ciBtYXAgaW4gcGl4ZWxzLCBwbHVzIG9uZS4gVGhpcyBtZWFucyB0aGF0IGEgNUtNIG1hcCwgd2hpY2ggaXMgMjU2IGJ5IDI1NiBwaXhlbHMsIHJlcXVpcmVzIGEgaGVpZ2h0bWFwIG9mIDI1NyBieSAyNTcgcGl4ZWxzLiBTaW1pbGFybHksIGEgMTBLTSBtYXAgaXMgNTEyIHBpeGVscywgYnV0IHJlcXVpcmVzIGEgaGVpZ2h0bWFwIG9mIDUxMyBieSA1MTMgcGl4ZWxzLiAKCgotIFtDcmVhdGluZyBhIG1hcDogSGVpZ2h0bWFwcypQYXJ0IG9mIHRoZSBvZmZpY2lhbCB2aWRlbyB0dXRvcmlhbCBzZXJpZXMgb24gbWFwbWFraW5nKl0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1VTmFqQjBFT0tuTSZsaXN0PVBMMG54dUlVSWpwRnZNLWxVM2g2Uk90V3NvQ19pa2thQXMpCi0gW096b25leCBlZGl0b3IgaGVpZ2h0bWFwIHRvb2xzICpEZXRhaWxlZCBleHBsYW5hdGlvbiBvZiB0aGUgdG9vbHMgYXZhaWxhYmxlIGluIHRoZSBlZGl0b3IsIGluY2x1ZGluZyB3YXRlciBhbmQgdGVycmFpbi10eXBlIHNldHRpbmdzKl0oL2VuL0RldmVsb3BtZW50L01hcHBpbmcvRkEtRm9yZXZlci1NYXAtRWRpdG9yKQotIFsgTW91bnRhaW5zIHwgR1BHIGVkaXRvcipBIHZpZGVvIHR1dG9yaWFsIG9uIG1ha2luZyBtb3VudGFpbnMgaW4gdGhlIEdQRyBlZGl0b3IqXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PW5tNU5WRDE3a3Z3KQotIFtNb3VudGFpbnMgfCBPem9uZXggZWRpdG9yKkEgdmlkZW8gdHV0b3JpYWwgb24gbWFraW5nIG1vdW50YWlucyBpbiB0aGUgT3pvbmV4IGVkaXRvcipdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9aDI2MzY5Z25URW8pCnsubGlua3MtbGlzdH0KCiMjIFdhdGVyClRoZSBwbGFjZW1lbnQgb2Ygd2F0ZXIgaW4gYSBtYXAgaXMgZGlyZWN0bHkgaW5mbHVlbmNlZCBieSB0aGUgdGVycmFpbidzIGVsZXZhdGlvbi4gV2F0ZXIgaXMgc2V0IGFzIGEgZmxhdCBwbGFuZSBhdCBhIHNwZWNpZmljIGhlaWdodCwgYW5kIGFueSBwYXJ0IG9mIHRoZSB0ZXJyYWluIHdpdGggYW4gZWxldmF0aW9uIGJlbG93IHRoYXQgc2V0IGhlaWdodCB3aWxsIGJlIHN1Ym1lcmdlZCBieSB0aGUgd2F0ZXIuIEFzIHlvdSBzY3VscHQgdGhlIHRlcnJhaW4sIHRoZSB2YXJ5aW5nIGVsZXZhdGlvbnMgZGVmaW5lZCBkaXJlY3RseSBpbXBhY3Qgd2hlcmUgdGhlIHdhdGVyIHdpbGwgYmUgcGxhY2VkLiBXaGVuIHRoZSB0ZXJyYWluJ3MgZWxldmF0aW9uIGlzIGxvd2VyIHRoYW4gdGhlIHNldCB3YXRlciBoZWlnaHQsIHRoYXQgcG9ydGlvbiBvZiB0aGUgbWFwIHdpbGwgYmVjb21lIHN1Ym1lcmdlZCwgY3JlYXRpbmcgbGFrZXMsIHJpdmVycywgb3Igb3RoZXIgYm9kaWVzIG9mIHdhdGVyLiAKCltXYXRlciBzZXR0aW5nc10oL2VuL0RldmVsb3BtZW50L01hcHBpbmcvRkEtRm9yZXZlci1NYXAtRWRpdG9yI3dhdGVyKSBjYW4gYmUgYWRqdXN0ZWQgdG8gZW5oYW5jZSB0aGUgdmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIHdhdGVyLCBzdWNoIGFzIGl0cyB0cmFuc3BhcmVuY3ksIGNvbG9yLCBvciByZWZsZWN0aW9ucy4gVGhlc2Ugc2V0dGluZ3MsIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHRlcnJhaW4sIGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgYWVzdGhldGljcyBvZiB0aGUgd2F0ZXIgd2l0aGluIHRoZSBtYXAuCgpGQUYgYWRkZWQgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSB3YXRlciBzaGFkZXIgdG8gYSBtb3JlIHJlYWxpc3RpYyBjYWxjdWxhdGlvbiBvZiB0aGUgYWJzb3JwdGlvbiBvZiBsaWdodCBhcyBpdCB0cmF2ZWxzIHRocm91Z2ggdGhlIHdhdGVyLiBPcmlnaW5hbGx5IHRoZSBnYW1lIHVzZXMgbGluZWFyIGFic29ycHRpb24gd2hpY2ggd29ya3Mgc29tZXdoYXQgYnV0IGlzIG5vdCBncmVhdCBiZWNhdXNlIGV4cG9uZW50aWFsIGZhbGxvZmYgaXMgdGhlIHBoeXNpY2FsbHkgY29ycmVjdCBvbmUuCkZvciB0ZWNobmljYWwgcmVhc29ucyB0aGlzIGlzIGNvbnRyb2xsZWQgdmlhIHRoZSBsaWdodGluZyBtdWx0aXBsaWVyLiBUbyBlbmFibGUgYWR2YW5jZWQgd2F0ZXIgYWJzb3JwdGlvbiwgc2V0IHRoZSBsaWdodGluZyBtdWx0aXBsaWVyIHRvIDIuMiBvciBncmVhdGVyLiBZb3UgY2FuIHR1bmUgZG93biB0aGUgc3VuIGFuZCBhbWJpZW50IGNvbG9yIGFjY29yZGluZ2x5IHRvIG5vdCBtZXNzIHVwIHlvdXIgbGlnaHRpbmcuCkFmdGVyIHRoaXMgY2hhbmdlIHlvdSBtaWdodCB3YW50IHRvIGVkaXQgdGhlIHdhdGVyIGxldmVscyB5b3UgYXJlIHVzaW5nLCBiZWNhdXNlIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSB3YXRlciBhYnNvcnB0aW9uIHdpbGwgaW5jcmVhc2UgZmFzdGVyLiBUbyBnZXQgcm91Z2hseSB0aGUgb2xkIGxvb2sgeW91IHNob3VsZCBkb3VibGUgdGhlIGhlaWdodCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBzdXJmYWNlIGFuZCB0aGUgYWJ5c3MgbGV2ZWwuCgpUbyBnZXQgdGhlIG1vc3Qgb3V0IG9mIHRoZSB3YXRlciBzZXR0aW5ncywgZG8gdGhlIGZvbGxvd2luZzoKRmlyc3RseSwgdXNlIHRoZSBzYW1lIG1pbiBhbmQgbWF4IGZvciB0aGUgd2F0ZXIgbGVycCwgb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgd2VpcmQgZWZmZWN0cyBjbG9zZSB0byB0aGUgc2hvcmUsIGJlY2F1c2UgdGhhdCBzZXR0aW5nIGFjdHVhbGx5IHBhaW50cyB0aGUgc3VyZmFjZSBvZiB0aGUgd2F0ZXIuIEluc3RlYWQsIHRoZSB3YXRlciByYW1wcyBzaG91bGQgYmUgdXNlZCB0byBjb2xvciB0aGUgZ3JvdW5kIG9mIHRoZSB0ZXJyYWluIHRvIHlvdXIgbGlraW5nLiBUaGlzIGFsc28gZW5zdXJlcyB0aGF0IHVuaXRzIHVuZGVyd2F0ZXIgd2lsbCBnZXQgc2hhZGVkIGFzIGV4cGVjdGVkLgpBIHNtYWxsIGJ1dCA+MCB2YWx1ZSBmb3IgdGhlIHdhdGVyIGxlcnAgaW4gY29tYmluYXRpb24gd2l0aCBhIGRhcmsgZ3JheSBzdXJmYWNlIGNvbG9yIGlzIHJlY29tbWVuZGVkIHRvIHNpbXVsYXRlIHRoZSBsaWdodCB0aGF0IGdldHMgbG9zdCB3aGVuIGl0IGdldHMgcmVmbGVjdGVkIG9uIHRoZSBzdXJmYWNlLCBpLmUuIHVuaXRzIGFuZCB0ZXJyYWluIHVuZGVyIHRoZSB3YXRlciBsaW5lIHNob3VsZCBpbW1lZGlhdGVseSBsb29rIGEgdGFkIGRhcmtlci4KWW91IHNob3VsZCBtYWlubHkgY29udHJvbCB0aGUgbG9vayBvZiB0aGUgd2F0ZXIgYnkgYWRqdXN0aW5nIHRoZSB3YXRlciByYW1wLiBVbmZvcnR1bmF0ZWx5IHRoZXNlIHNldHRpbmdzIGFyZSBvbmx5IGF2YWlsYWJsZSBpbiB0aGUgZ3BnIGVkaXRvci4gVGhlcmUgeW91IGNhbiBzZWxlY3Qgb25lIG9mIHRoZSB3YXRlciByYW1wIHRleHR1cmVzIHRoYXQgdGhlIGdhbWUgcHJvdmlkZXMuCklmIHlvdSBkb24ndCBsaWtlIHRoZSBwcmVzZXRzLCB5b3UgY2FuIGFsc28gZWRpdCB0aGUgd2F0ZXIgcmFtcCBtYW51YWxseSBpbiBhbiBpbWFnZSBlZGl0b3IuIFRoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgd2F0ZXIgcmFtcCB0ZXh0dXJlIHJlcHJlc2VudHMgdGhlIGRlcHRoLiBUaGUgY29sb3IgaXMgdGhlIGNvbG9yIG9mIHRoZSB3YXRlciBhdCB0aGF0IGRlcHRoLiBGb3Igc2FmZXN0IHJlc3VsdHMgdGhlIGNvbG9yIHNob3VsZCBiZSB0aGUgc2FtZSBldmVyeXdoZXJlIGFuZCB0aGUgYWxwaGEgdmFsdWUgc2hvdWxkIGxpbmVhcmx5IGluY3JlYXNlIGZyb20gMCB0byAxLiBUaGUgZmlyc3QgcGl4ZWwgaGFzIHRvIGhhdmUgYW4gYWxwaGEgdmFsdWUgb2YgMCBvciB5b3VyIHdob2xlIG1hcCB3aWxsIGJlIHRpbnRlZC4gRm9yIG1vcmUgYXJ0aXN0aWMgZnJlZWRvbSB5b3UgY2FuIHBsYXkgYXJvdW5kIHdpdGggYSBjb2xvciBncmFkaWVudC4gV2hlbiB5b3Ugc3RhcnQgdGhlIGdhbWUgd2l0aCBkaXNrd2F0Y2ggZW5hYmxlZCwgeW91IGNhbiBlZGl0IHlvdXIgd2F0ZXIgcmFtcCBhbmQgd2hlbmV2ZXIgeW91IHNhdmUgaXQsIHRoZSBnYW1lIHdpbGwgaW1tZWRpYXRlbHkgbG9hZCBpdC4gVXNlIHRoZSBncmFkaWVudCB0b29sIGluIGUuZy4gR0lNUCB0b2dldGhlciB3aXRoIHRoaXMgdHJpY2sgdG8gd29yayB3aXRoIHN1cGVyIGZhc3QgaXRlcmF0aW9ucyB3aGVuIGV4cGVyaW1lbnRpbmcgd2l0aCB0aGUgd2F0ZXIuCklmIHlvdSBtYWRlIGEgd2F0ZXIgcmFtcCB0aGF0IHdvcmtzIHdlbGwsIHBsZWFzZSBzaGFyZSBpdCBpbiBhIGdhbWUgZGV2IGNoYW5uZWwgb24gZGlzY29yZCwgc28gd2UgY2FuIGludGVncmF0ZSBpdCBpbiB0aGUgcmVwb3NpdG9yeS4gVGhpcyB3YXkgd2Ugd2lsbCBvdmVyIHRpbWUgaGF2ZSBhIGJpZ2dlciBhbmQgYmV0dGVyIGNvbGxlY3Rpb24gb2Ygd2F0ZXIgcmFtcHMgdGhhdCBtYXBwZXJzIGNhbiBjaG9vc2UgZnJvbSBhbmQgYmUgZG9uZSB3aXRoIGl0IHdpdGhvdXQgbWFudWFsIGVkaXRzLgoKWW91IGNhbiB1c2UgaGlnaGVyIHF1YWxpdHkgd2F2ZSB0ZXh0dXJlcyBieSB1c2luZyB0aGUgb25lcyBwcm92aWRlZCBieSBGQUYgaW4gdGhlIHRleHR1cmVzL2VuZ2luZSBkaXJlY3RvcnkuIEVpdGhlciB1bnBhY2sgdGhlIHRleHR1cmVzLm54MiBhcmNoaXZlIG9yIGdldCB0aGVtIGZyb20gW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9GQUZvcmV2ZXIvZmEvdHJlZS9kZXBsb3kvZmFmZGV2ZWxvcC90ZXh0dXJlcy9lbmdpbmUpCgpJZiB5b3Ugd2FudCB0aGUgc3VuIHRvIGJlIHByb3Blcmx5IHJlZmxlY3RlZCBpbiB0aGUgd2F0ZXIgeW91IG5lZWQgdG8gc2V0IHRoZSBzdW4gZGlyZWN0aW9uIGZvciB0aGUgd2F0ZXIgdG8gdGhlIHN1biBkaXJlY3Rpb24gdGhlIHJlc3Qgb2YgdGhlIG1hcCB1c2VzLiBTZXQgdGhlIHN1biBjb2xvciB0byBQaSAoMy4xNC4uLikgdGltZXMgdGhlIHN1biBjb2xvciB5b3UgZGVmaW5lZCBmb3IgdGhlIHRlcnJhaW4uIChGb3IgcG9pbnQgbGlnaHRzIHRoZSBsaWdodCBpbnRlbnNpdHkgaGFzIHRvIGJlIG11bHRpcGxpZWQgd2l0aCBQaSB0byBnZXQgY29ycmVjdCByZWZsZWN0aW9uIHJlc3VsdHMgaW4gb3VyIHNoYWRpbmcgbW9kZWwuIFdpdGhvdXQgZ29pbmcgaW50byBkZXRhaWxzLCB0aGVyZSBpcyBhIG1hdGhlbWF0aWNhbCByZWFzb24gZm9yIHRoaXMuIEluIHRoZSB0ZXJyYWluIHNoYWRlciB3ZSBjYW4gZG8gaXQgaW4gdGhlIHNoYWRlciBjb2RlLCBidXQgYmVjYXVzZSB0aGUgd2F0ZXIgc2hhZGVyIGlzIHRoZSBzYW1lIGZvciBhbGwgbWFwcywgeW91IGhhdmUgdG8gZG8gaXQgbWFudWFsbHkgaGVyZS4pCkxhc3RseSwgeW91IHNob3VsZCBhZGp1c3QgdGhlIFN1blNoaW5pbmVzcyB0byBhIGdyZWF0ZXIgdmFsdWUgdG8gbWFrZSB0aGUgcmVmbGVjdGlvbiBzaGFycGVyLgpBcyB0aGUgbWFwIGVkaXRvciBkb2Vzbid0IGFsbG93IHlvdSB0byBlZGl0IHRoZXNlIHZhbHVlcywgeW91IGhhdmUgdG8gZXhwb3J0IHRoZSB3YXRlciBzZXR0aW5ncywgY2hhbmdlIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMgYW5kIGltcG9ydCB0aGUgZmlsZSBhZ2Fpbi4KCi0gW0Fib3V0IHdhdGVyOiBJbnRyb2R1Y3Rpb24qUHQuMSBvZiB0aGUgZm9ydW0gcG9zdCBzZXJpZXMgb24gd2F0ZXIgYnkgSmlwKl0oaHR0cHM6Ly9mb3J1bS5mYWZvcmV2ZXIuY29tL3RvcGljLzU5L2Fib3V0LXdhdGVyLWludHJvZHVjdGlvbikKLSBbQWJvdXQgd2F0ZXI6IFdhdGVyIHNldHRpbmdzKlB0LjIgb2YgdGhlIGZvcnVtIHBvc3Qgc2VyaWVzIG9uIHdhdGVyIGJ5IEppcCpdKGh0dHBzOi8vZm9ydW0uZmFmb3JldmVyLmNvbS90b3BpYy82NC9hYm91dC13YXRlci1zZXR0aW5ncykKLSBbQWJvdXQgd2F0ZXI6IFdhdmUgZ2VuZXJhdGlvbipQdC4zIG9mIHRoZSBmb3J1bSBwb3N0IHNlcmllcyBvbiB3YXRlciBieSBKaXAqXShodHRwczovL2ZvcnVtLmZhZm9yZXZlci5jb20vdG9waWMvNzEvYWJvdXQtd2F0ZXItd2F2ZS1nZW5lcmF0aW9uKQotIFtBYm91dCB3YXRlcjogQnJ1c2hlcypQdC40IG9mIHRoZSBmb3J1bSBwb3N0IHNlcmllcyBvbiB3YXRlciBieSBKaXAqXShodHRwczovL2ZvcnVtLmZhZm9yZXZlci5jb20vdG9waWMvNzMvYWJvdXQtd2F0ZXItYnJ1c2hlcykKLSBbQWJvdXQgd2F0ZXI6IFJhbXBzKlB0LjUgb2YgdGhlIGZvcnVtIHBvc3Qgc2VyaWVzIG9uIHdhdGVyIGJ5IEppcCpdKGh0dHBzOi8vZm9ydW0uZmFmb3JldmVyLmNvbS90b3BpYy82NS9hYm91dC13YXRlci13YXRlci1yYW1wcykKLSBbQWJvdXQgd2F0ZXI6IEVudmlyb25tZW50IG1hcHMqUHQuNiBvZiB0aGUgZm9ydW0gcG9zdCBzZXJpZXMgb24gd2F0ZXIgYnkgSmlwKl0oaHR0cHM6Ly9mb3J1bS5mYWZvcmV2ZXIuY29tL3RvcGljLzcyL2Fib3V0LXdhdGVyLWVudmlyb25tZW50LW1hcHMpCi0gW0Fib3V0IHdhdGVyOiBXYXZlcyBhbmQgbm9ybWFsIG1hcHMqUHQuNyBvZiB0aGUgZm9ydW0gcG9zdCBzZXJpZXMgb24gd2F0ZXIgYnkgSmlwKl0oaHR0cHM6Ly9mb3J1bS5mYWZvcmV2ZXIuY29tL3RvcGljLzc0L2Fib3V0LXdhdGVyLXdhdmVzLWFuZC1ub3JtYWwtbWFwcykKLSBbQWJvdXQgd2F0ZXI6IFBpeGVsYXRlZCB3YXRlcipQdC44IG9mIHRoZSBmb3J1bSBwb3N0IHNlcmllcyBvbiB3YXRlciBieSBKaXAqXShodHRwczovL2ZvcnVtLmZhZm9yZXZlci5jb20vdG9waWMvNDgvYWJvdXQtd2F0ZXItcGl4ZWxhdGVkLXdhdGVyKQp7LmxpbmtzLWxpc3R9CiAKIyMgVGV4dHVyZSBzdHJhdHVtcwpUZXh0dXJlcyBwbGF5IGEgcGl2b3RhbCByb2xlIGluIHRyYW5zZm9ybWluZyB0aGUgdGVycmFpbiBpbnRvIGRpc3RpbmN0IHR5cGVzLCBzdWNoIGFzIGRlc2VydHMsIGdyYXNzIGZpZWxkcywgYW5kIHJvY2t5IGNsaWZmcy4gQWNoaWV2aW5nIHRoaXMgZWZmZWN0IGludm9sdmVzIHRoZSBjYXJlZnVsbCBhcHBsaWNhdGlvbiBvZiB0ZXh0dXJlcyB0byBzcGVjaWZpYyBhcmVhcyBvZiB0aGUgdGVycmFpbiB1c2luZyBtYXNrcy4gTWFza3MgYXJlIGdyZXlzY2FsZSBpbWFnZXMgd2hlcmVpbiB2YXJ5aW5nIHNoYWRlcyBvZiBncmF5IGRlbm90ZSBkaWZmZXJlbnQgbGV2ZWxzIG9mIHRleHR1cmUgb3BhY2l0eS4gRGFya2VyIHJlZ2lvbnMgcmV2ZWFsIGxlc3Mgb2YgdGhlIHRleHR1cmUsIHdoaWxlIGxpZ2h0ZXIgcmVnaW9ucyBleHBvc2UgbW9yZSBvZiBpdC4gU2ltaWxhciB0byBoZWlnaHRtYXBzLCBtYXNrcyBtYXkgYmUgZWl0aGVyIGNyZWF0ZWQgYnkgaGFuZCB1c2luZyB0aGUgW2JydXNoIHRvb2xzXShlbi9EZXZlbG9wbWVudC9NYXBwaW5nL0ZBLUZvcmV2ZXItTWFwLUVkaXRvciNwYWludGluZykgaW4gdGhlIGVkaXRvciwgb3IgbWF5IGJlIGdlbmVyYXRlZCBieSBleHRlcm5hbCBzb2Z0d2FyZSBzdWNoIGFzIFdvcmxkTWFjaGluZSBvciBbR2FlYV0oI0dhZWEpLgoKVGhlc2UgdGV4dHVyZXMsIHRvZ2V0aGVyIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBtYXNrcywgYXJlIG9yZ2FuaXplZCBhcyBsYXllcnMsIGtub3duIGFzIFtzdHJhdHVtc10oL2VuL0RldmVsb3BtZW50L01hcHBpbmcvRkEtRm9yZXZlci1NYXAtRWRpdG9yI3RleHR1cmUtbGF5ZXJzKS4gQSBzdHJhdHVtIGVuY29tcGFzc2VzIGVzc2VudGlhbCBzZXR0aW5ncywgaW5jbHVkaW5nIHRoZSBzZWxlY3RlZCB0ZXh0dXJlLCBpdHMgYWNjb21wYW55aW5nIG5vcm1hbCBtYXAsIHpvb20gbGV2ZWxzIGZvciBib3RoIHRoZSB0ZXh0dXJlIGFuZCBpdHMgbm9ybWFsIG1hcCwgYW5kIHRoZSBhc3NvY2lhdGVkIG1hc2suIFVwIHRvIG5pbmUgc3RyYXR1bXMgY2FuIGJlIHVzZWQsIHdpdGggb25lIGRlc2lnbmF0ZWQgYXMgdGhlICdiYXNlJyBzdHJhdHVtLiBUaGlzIGJhc2Ugc3RyYXR1bSBkb2VzIG5vdCBhY2NlcHQgYSBtYXNrIGFuZCBhY3RzIGFzIHRoZSBmb3VuZGF0aW9uIG9uIHdoaWNoIHN1YnNlcXVlbnQgc3RyYXR1bXMgYXJlIGxheWVyZWQuCgpXaGVuIGNyZWF0aW5nIGEgbWFwLCBjaG9vc2luZyB0aGUgcmlnaHQgdGV4dHVyZXMgYW5kIHBsYWNpbmcgdGhlbSBjYXJlZnVsbHkgaXMgdmVyeSBpbXBvcnRhbnQuIFRleHR1cmVzIG5vdCBvbmx5IGRldGVybWluZSBob3cgeW91ciBtYXAgbG9va3MsIGJ1dCBhbHNvIGhlbHAgcGxheWVycyB1bmRlcnN0YW5kIHRoZSB0ZXJyYWluLiBJdCdzIGNydWNpYWwgdGhhdCByb3VnaCwgdW5ldmVuLCBvciBhcmVhcyB0aGF0IHVuaXRzIGNhbm5vdCBjcm9zcyBhcmUgZWFzaWx5IHJlY29nbml6YWJsZS4gVG8gYWNoaWV2ZSB0aGlzLCBpdCdzIGEgZ29vZCBpZGVhIHRvIHVzZSBhIHNwZWNpZmljIHRleHR1cmUgZm9yIGNsaWZmcywgd2hpY2ggYXJlIHN0ZWVwIGFyZWFzIHVuaXRzIGNhbm5vdCBjcm9zcywgYW5kIGFub3RoZXIgdGV4dHVyZSBmb3Igc2xvcGVzLCB3aGljaCBhcmUgaW5jbGluZWQgYXJlYXMgdGhhdCB1bml0cyBtaWdodCBoYXZlIHRyb3VibGUgY3Jvc3Npbmcgb3Igd2hlcmUgYnVpbGRpbmdzIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZC4gQnkgdXNpbmcgZGlmZmVyZW50IHRleHR1cmVzIGZvciB0aGVzZSB0ZXJyYWluIGZlYXR1cmVzLCBwbGF5ZXJzIGNhbiBxdWlja2x5IHVuZGVyc3RhbmQgd2hpY2ggYXJlYXMgYXJlIHBhc3NhYmxlIGFuZCB3aGljaCBhcmUgbm90LgoKTGFzdGx5LCB5b3UgYXJlIGFibGUgdG8gZGVmaW5lIHNwZWNpZnkgdGhlIFt0ZXJyYWluIHR5cGVdKC9lbi9EZXZlbG9wbWVudC9NYXBwaW5nL0ZBLUZvcmV2ZXItTWFwLUVkaXRvciN0ZXJyYWluLXR5cGUpIG9mIHNwZWNpZmljIGFyZWFzIG9mIHlvdXIgdGVycmFpbi4gVGVycmFpbiB0eXBlIHByaW1hcmlseSBhZmZlY3RzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHVuaXRzIGFuZCB0aGUgdGVycmFpbiB2aXN1YWxseSwgZ2VuZXJhdGluZyBzcGVjaWZpYyBkdXN0IHBhdHRlcm5zIHdoZW4gdW5pdHMgbW92ZSBvdmVyIHRoZSB0ZXJyYWluLiBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSAqYmxvY2tpbmctdHlwZSogdGVycmFpbiB0eXBlcyBhdmFpbGFibGUgdGhhdCB3aWxsIHByb2hpYml0IHVuaXRzIGZyb20gbW92aW5nIG92ZXIgYXJlYXMgbWFya2VkIGFzIHN1Y2guCgotIFtDcmVhdGluZyBhIG1hcDogU3RyYXR1bSBsYXllcnMgcHQuIDEqUGFydCBvZiB0aGUgb2ZmaWNpYWwgdmlkZW8gdHV0b3JpYWwgc2VyaWVzIG9uIG1hcG1ha2luZypdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9Y1ZiX3cwLVJFWmMmbGlzdD1QTDBueHVJVUlqcEZ2TS1sVTNoNlJPdFdzb0NfaWtrYUFzJmluZGV4PTQpCi0gW0NyZWF0aW5nIGEgbWFwOiBTdHJhdHVtIGxheWVycyBwdC4gMipQYXJ0IG9mIHRoZSBvZmZpY2lhbCB2aWRlbyB0dXRvcmlhbCBzZXJpZXMgb24gbWFwbWFraW5nKl0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1sV1dkTFMyYTVWVSZsaXN0PVBMMG54dUlVSWpwRnZNLWxVM2g2Uk90V3NvQ19pa2thQXMmaW5kZXg9NSkKLSBbVGV4dHVyZSBwYWludGluZypWaWRlbyB0dXRvcmlhbCBvbiBob3cgdG8gYmxlbmQgdGV4dHVyZXMgaW4gdGhlIE96b25leCBlZGl0b3IqXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PW56VG5EYzJ2S1U0KQp7LmxpbmtzLWxpc3R9CgojIyBMaWdodGluZwpJbiB0aGUgbGlnaHRpbmcgdGFiIG9mIHRoZSBGQUYgZWRpdG9yLCB5b3UgY2FuIGFkanVzdCB2YXJpb3VzIGxpZ2h0aW5nIGFuZCBhdG1vc3BoZXJpYyBzZXR0aW5ncy4gVGhlc2Ugc2V0dGluZ3MgYWZmZWN0IHRoZSBzdHJlbmd0aCBvZiB0aGUgc3VuIGFuZCBpdHMgcGxhY2VtZW50IGluIHRoZSBza3k6IGJvdGggaXRzIGhlaWdodCBhbmQgaXRzIGRpcmVjdGlvbiBjYW4gYmUgY2hhbmdlZC4gT3RoZXIgc2V0dGluZ3MgY2FuIGJlIGNoYW5nZWQgdG8gYWRqdXN0IHRoZSBjb2xvdXIgb2YgdGhlIHN1bmxpZ2h0LCB0aGUgY29sb3VyIG9mIHRoZSBzaGFkb3dzLCBhbmQgdGhlIGNvbG91ciBvZiB0aGUgYW1iaWVudCBsaWdodC4gVGhlc2Ugc2V0dGluZ3MgY2FuIGhhdmUgYSBzaWduaWZpY2FudCBlZmZlY3Qgb24gdGhlIGFlc3RoZXRpY3Mgb2YgeW91ciBtYXAuCgpUaGUgbGlnaHQgc2V0dGluZ3MgYXJlIGEgYml0IGNvbmZ1c2luZyBiZWNhdXNlIHRoZSBzaGFkb3cgY29sb3IgZXhpc3RzIGFuZCBiZWNhdXNlIHRoZSBjb2RlIGZvciBmYWN0b3JpbmcgaW4gdGhlIHNoYWRvdyBjb2xvciBpbiB0aGUgZ2FtZSBpcyBhIGJpdCBjb252b2x1dGVkIGl0IGFjdHVhbGx5IGFmZmVjdHMgbm90IG9ubHkgdGhlIHNoYWRvd3MsIGJ1dCB0aGUgZW50aXJlIG1hcC4gU28gdGhlIHJlY29tbWVuZGVkIHdvcmtmbG93IGlzIHRvIGp1c3Qgc2V0IHRoZSBzaGFkb3cgY29sb3IgdG8gMC4KVXNlIHRoZSBhbWJpZW50IGNvbG9yIHRvIGFkanVzdCB0aGUgbG9vayBvZiB0aGUgc2hhZG93cyBhbmQgdGhlbiB0dW5lIHRoZSBzdW4gY29sb3IgYWZ0ZXIgdGhhdC4gSWYgeW91IGxhdGVyIHdhbnQgdG8gbWFrZSB0aGUgd2hvbGUgbWFwIGJyaWdodGVyIG9yIGRhcmtlciB5b3UgY2FuIHVzZSB0aGUgbGlnaHQgbXVsdGlwbGllci4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gcmVhc29uIGFib3V0IHlvdXIgbGlnaGluZyBzZXR0aW5ncyBhbmQgd2hpY2ggdmFsdWUgeW91IHNob3VsZCB0dW5lIHRvIHJlYWNoIGEgY2VydGFpbiBlZmZlY3QuCgpQYXJ0IG9mIHRoZSBsaWdodGluZyBzZXR0aW5ncyBhcmUgZW52aXJvbm1lbnQgbWFwcy4gVGhleSBkZXRlcm1pbmUgdGhlIHJlZmxlY3Rpb24gb24gc2hpbnkgcGFydHMgb2YgdGhlIHVuaXRzLiBPbmx5IHRoZSBncGcgZWRpdG9yIGV4cG9zZXMgdGhlc2Ugc2V0dGluZ3MuIFRoZSBlbnZpcm9ubWVudCBtYXAgc2hvdWxkIGJlIGNob3NlbiBieSBzZWxlY3RpbmcgYSB0ZXh0dXJlIHRoYXQgaXMgY2xvc2UgdG8gdGhlIGNvbG9ycyB0aGF0IHlvdXIgbWFwIHVzZXMgdG8gY3JlYXRlIHRoZSBpbGx1c2lvbiB0aGF0IHRoZSB1bml0cyBhY3R1YWxseSByZWZsZWN0IHRoZSBncm91bmQgYW5kIHRoZSBza3kuCkZvciBvcHRpbWFsIHJlc3VsdHMgeW91IG5lZWQgdG8gcHJvdmlkZSB0d28gZW52aXJvbm1lbnQgbWFwcy4gT25lIGZvciB0aGUgbGFuZCB1bml0cyBhbmQgb25lIGZvciB0aGUgbmF2eSB1bml0cy4gVGhlIG9uZSBmb3IgbmF2eSB1bml0cyBuZWVkcyB0byBiZSBzcGVjaWZpZWQgYXMgYDx3YXRlcj5gLiBJZGVhbGx5IHRoZSBkZWZhdWx0IG9uZSBpcyBub24tbWlycm9yZWQgaS5lLiBpdCBoYXMgYSBza3kgYW5kIGxhbmQgYW5kIHRoZSB3YXRlciBvbmUgaXMgbWlycm9yZWQsIHRvIHNpbXVsYXRlIHRoZSBza3kgcmVmbGVjdGlvbiBvbiB0aGUgd2F0ZXIgc3VyZmFjZS4KCkFzaWRlIGZyb20gbGlnaHQgc2V0dGluZ3MsIG90aGVyIHNldHRpbmdzIGluY2x1ZGUgdGhvc2UgZm9yIEZvZyBhbmQgdGhlIHNreWJveCwgYWxsb3dpbmcgeW91IHRvIGZ1cnRoZXIgYWRqdXN0IHRoZSBlbnZpcm9ubWVudCBvZiB5b3VyIG1hcC4KCi0gW0NyZWF0aW5nIGEgbWFwOiBMaWdodGluZypQYXJ0IG9mIHRoZSBvZmZpY2lhbCB2aWRlbyB0dXRvcmlhbCBzZXJpZXMgb24gbWFwbWFraW5nKl0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj03VFhIWTFfc213VSZsaXN0PVBMMG54dUlVSWpwRnZNLWxVM2g2Uk90V3NvQ19pa2thQXMmaW5kZXg9MTEpCnsubGlua3MtbGlzdH0KCiMjIENsb3VkcwotIFtBYm91dCB3ZWF0aGVyOiBHZW5lcmF0aW5nIGNsb3VkcypBIGZvcnVtIHR1dG9yaWFsIG9uIGNsb3VkIGdlbmVyYXRpb24gYnkgSmlwKl0oaHR0cHM6Ly9mb3J1bS5mYWZvcmV2ZXIuY29tL3RvcGljLzI3Ny9hYm91dC13ZWF0aGVyLWdlbmVyYXRpbmctY2xvdWRzKQp7LmxpbmtzLWxpc3R9CgojIyBTa3lib3hlcwoKVG9kbwoKIyMgTWFya2VycwpFdmVyeSBtYXAgY29udGFpbnMgcGxhY2VzIGZvciBwbGF5ZXJzIHRvIHNwYXduLCBzcG90cyB3aGVyZSBtYXNzIGV4dHJhY3RvcnMgY2FuIGJlIGJ1aWx0LCBhbmQgb2Z0ZW4gc3BvdHMgZm9yIGh5ZHJvIGdlbmVyYXRvcnMgYXMgd2VsbC4gVG8gcGxhY2UgdGhlc2Ugb24geW91ciBtYXAsIHRoZSBlZGl0b3IgdXNlcyBtYXJrZXJzLiBUaGVyZSBhcmUgc3BlY2lmaWMgbWFya2VycyBmb3Igc3Bhd24gbG9jYXRpb25zIGFuZCByZXNvdXJjZXMsIGFuZCBtb3JlIGFkdmFuY2VkIG1hcmtlcnMgdGhhdCBoZWxwICBBSSBvcHBvbmVudHMgdW5kZXJzdGFuZCBob3cgeW91ciBtYXAgc2hvdWxkIGJlIHBsYXllZC4KCiMjIyBTcGF3bnMgYW5kIHJlc291cmNlcwpQbGFjaW5nIHlvdXIgc3Bhd25zLCBtZXhlcywgYW5kIGh5ZHJvcyBzaG91bGQgYmUgZG9uZSB3aXRoIGNhcmVmdWxsIGNvbnNpZGVyYXRpb24sIGFzIGFzaWRlIGZyb20gdGhlIHRoZSB0ZXJyYWluLCB0aGlzIGxheW91dCBpcyB0aGUgbW9zdCBjcml0aWNhbCB0byBob3cgeW91ciBtYXAgd2lsbCBiZSBwbGF5ZWQuIEEgY29tbW9uIG1pc3Rha2UgZm9yIGJlZ2lubmVyIG1hcHBlcnMgaXMgdG8gcHJvdmlkZSBlaXRoZXIgdG9vIG1hbnkgb3IgdG9vIGZldyBtZXhlcy4gR2VuZXJhbGx5IG1hcHMgY2FuIGJlIG9yZ2FuaXplZCBpbiB0aHJlZSB6b25lcywgYW5kIG1leGVzIHNob3VsZCBiZSBwbGFjZWQgYWNjb3JkaW5nbHkuIFRoZSBmaWd1cmUgYmVsb3cgc2hvd3MgdGhlc2Ugem9uZXMgbWFya2VkIG9uIHRoZSBtYXAgKlByb2plY3QgRHVzdCouCgoqIFs8aW1nIGFsaWduPSJyaWdodCIgc3JjPSIvaW1hZ2VzL21hcHBpbmcvcHJvamVjdGR1c3RtZXh6b25lcy5wbmciIHdpZHRoPSIyNSUiPl0oL2ltYWdlcy9tYXBwaW5nL3Byb2plY3RkdXN0bWV4em9uZXMucG5nKVRoZSBmaXJzdCB6b25lIChncmVlbikgY29uc2lzdHMgb2YgKmNvcmUqIG9yICpzYWZlKiBtZXhlcy4gVGhlc2UgaW5jbHVkZSB0aGUgbWV4ZXMgZGlyZWN0bHkgaW4gcmFuZ2Ugb2YgdGhlIHBsYXllciB1cG9uIHNwYXduaW5nLCBhbmQgdGhvc2Ugc2xpZ2h0bHkgZnVydGhlciByZW1vdmVkLiBUaGVzZSBtZXhlcyBtYXkgYmUgZXhwZWN0ZWQgdG8gcmVtYWluIHNhZmUgdGhyb3VnaG91dCB0aGUgZ2FtZSwgYW5kIGxvc2luZyB0aGVzZSB1c3VhbGx5IHNpZ25pZmllcyB0aGF0IHBsYXllciBoYXMgbG9zdCBjb250cm9sIG9mIHRoZWlyIHBvcnRpb24gb2YgdGhlIG1hcC4KKiBUaGUgc2Vjb25kIHpvbmUgKHllbGxvdykgY29uc2lzdCBvZiAqZXhwYW5zaW9uKiBtZXhlcywgYW5kIGFyZSB0aG9zZSBtZXhlcyB0aGF0IHBsYXllcnMgZXhwYW5kIHRvd2FyZHMgYWZ0ZXIgZXN0YWJsaXNoaW5nIHRoZWlyIGZpcnN0IGZhY3Rvcmllcy4gVGhlc2UgbWV4ZXMgYXJlIHNpbWlsYXJseSB1bmRlciB0aGUgY29udHJvbCBvZiB0aGVpciByZXNwZWN0aXZlIHBsYXllciBmb3IgbW9zdCBvZiB0aGUgZ2FtZSwgYW5kIGFyZSBvZnRlbiB1c2VkIHRvIGVzdGFibGlzaCBmcm9udGxpbmUgZmFjdG9yaWVzIG9yIGZpcmViYXNlcyBhcm91bmQuCiogVGhlIHRoaXJkIHpvbmUgKHJlZCkgY29uc2lzdHMgb2YgKmNvbnRlc3RhYmxlKiBtZXhlcywgYW5kIGluY2x1ZGUgYm90aCB0aGUgbWV4ZXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbWFwLCBvZnRlbiB3aGVyZSBwbGF5ZXJzIG1lZXQgYW5kIG1vc3QgYmF0dGxlcyBhcmUgZm91Z2h0LCBhcyB3ZWxsIGFzIHRoZSBtZXhlcyBzY2F0dGVyZWQgYWxvbmcgdGhlIGVkZ2VzIG9mIHRoZSBtYXAsIGlmIHByZXNlbnQuIE93bmVyc2hpcCBvZiB0aGVzZSBtZXhlcyBjaGFuZ2VzIG9mdGVuLCBhcyB0aGVzZSBtZXhlcyBhcmUgaGFyZGVyIHRvIGRlZmVuZCBhbmQgaGlnaGx5IHJhaWRhYmxlLiAKCkFsdGhvdWdoIGNlcnRhaW5seSBhZmZlY3RlZCBieSBwZXJzb25hbCBwcmVmZXJlbmNlLCBpdCBpcyBjb25zaWRlcmVkIGdvb2QgbWFwIGRlc2lnbiB0byBjYXJlZnVsbHkgYmFsYW5jZSB0aGUgbnVtYmVyIG9mIGNvbnRlc3RhYmxlIG1leGVzLiBPbiB0aGUgb25lIGhhbmQsIHRvbyBmZXcgY29udGVzdGFibGUgbWV4ZXMgbGVhZHMgdG8gc3RhbGUgZ2FtZXBsYXksIGZhdm91cmluZyB0aGUgZGVmZW5jZSBvZiBleHBhbnNpb24gbWV4ZXMgYW5kIGRpc2Zhdm91cmluZyBhY3RpdmUgcmFpZGluZy4gT24gdGhlIG90aGVyIGhhbmQsIHRvbyBtYW55IGNvbnRlc3RhYmxlIG1leGVzIG1heSBsZWFkIHRvIGEgc2l0dWF0aW9uIHdoZXJlIG9uZSB0ZWFtIGFjaGlldmVzIGNvbnRyb2wgb2Ygc2xpZ2h0bHkgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIG1hcCwgYnV0IGEgc2lnbmlmaWNhbnQgbGFyZ2VyIGFtb3VudCBvZiBtZXhlcy4gCgpUaGUgbGF5b3V0IG9mIHRoZXNlIHpvbmVzIGhpZ2hseSBkZXBlbmRzIG9uIHRoZSB0ZXJyYWluIG9mIHlvdXIgbWFwLCBhbmQgbXVzdCBiZSByZWNvbnNpZGVyZWQgd2l0aCBlYWNoIG1hcC4gQnkgY2hhbmdpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBleHBhbnNpb24gbWV4ZXMgYW5kIGNvbnRlc3RhYmxlIG1leGVzLCB5b3UgaW5mbHVlbmNlIGluIHdoYXQgZGlyZWN0aW9uIHBsYXllcnMgZGV2ZWxvcC4gQ29tbWFuZGVycyBjb21tb25seSBtb3ZlIHRvd2FyZHMgZXhwYW5zaW9uIG1leGVzIGZpcnN0LCBhbmQgbWF5IHRoZW4gZmlnaHQgb3ZlciBjb250ZXN0YWJsZSBtZXhlcy4gUGxheXRlc3RpbmcgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIGV2YWx1YXRlIGlmIHlvdXIgbWV4IHBsYWNlbWVudHMgYXJlIGZ1bmN0aW9uYWwsIGFuZCBpdCBpcyBub3QgdW5jb21tb24gdG8gZ28gdGhyb3VnaCBzZXZlcmFsIHJldmlzaW9ucyBiYXNlZCBvbiBwbGF5dGVzdGluZyBhbmQgcGxheWVyIGZlZWRiYWNrLgoKLSBbQ3JlYXRpbmcgYSBtYXA6IFJlc291cmNlcypQYXJ0IG9mIHRoZSBvZmZpY2lhbCB2aWRlbyB0dXRvcmlhbCBzZXJpZXMgb24gbWFwbWFraW5nKl0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1zNC1ER3VjbTllUSZsaXN0PVBMMG54dUlVSWpwRnZNLWxVM2g2Uk90V3NvQ19pa2thQXMmaW5kZXg9MikKey5saW5rcy1saXN0fQoKIyMjIEFJIG1hcmtlcnMKQXJ0aWZpY2lhbCBJbnRlbGxpZ2VuY2UgKEFJKSBwcm92aWRlIHBsYXllcnMgd2l0aCBjb21wdXRlci1jb250cm9sbGVkIG9wcG9uZW50cyBvZiBkaWZmZXJlbnQgc2tpbGwgbGV2ZWxzLiBUaGlzIGZlYXR1cmUgaGFzIGdhcm5lcmVkIHNpZ25pZmljYW50IHBvcHVsYXJpdHkgd2l0aGluIHRoZSBGQUYgY29tbXVuaXR5LCB3aXRoIG92ZXIgaGFsZiBvZiB0aGUgcGxheWVyIGJhc2UgYWN0aXZlbHkgcGFydGljaXBhdGluZyBpbiBBSSBnYW1lcy4gQnkgcHJvdmlkaW5nIHBsYXllcnMgd2l0aCB0aGUgb3Bwb3J0dW5pdHkgdG8gY2hhbGxlbmdlIGludGVsbGlnZW50IGNvbXB1dGVyIG9wcG9uZW50cywgQUkgZW5oYW5jZXMgdGhlIHJpY2huZXNzIGFuZCBkaXZlcnNpdHkgb2YgZ2FtZXBsYXkgb3B0aW9ucywgY2F0ZXJpbmcgdG8gYSB3aWRlIHJhbmdlIG9mIHByZWZlcmVuY2VzIGFuZCBza2lsbCBsZXZlbHMuIENvbnNlcXVlbnRseSwgbWFwcyBzaG91bGQgYWltIHRvIGJlIEFJIGNvbXBhdGlibGUsIGFuZCBiZSBkZXNpZ25lZCB3aXRoIEFJIGluIG1pbmQuCgpGb3IgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaG93IEFJIGZ1bmN0aW9ucyBpbiBGQUYsIHlvdSBtYXkgcmVmZXIgdG8gdGhlIG1haW4gcGFnZSBvbiBBSS4gUmVsZXZhbnQgaW5mb3JtYXRpb24gaW4gdGhlIGNvbnRleHQgb2YgbWFwcGluZyBpcyBwcm92aWRlZCBieSB0aGlzIHR1dG9yaWFsIG9uIFtiZXN0IHByYWN0aXNlcyB0byBjcmVhdGUgQUkgZnJpZW5kbHkgbWFwc10oL2VuL0RldmVsb3BtZW50L01hcHBpbmcvYWktZnJpZW5kbHktbWFwcykuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGZvbGxvdyB0aGVzZSBndWlkZWxpbmVzIHRvIGVuc3VyZSB5b3VyIG1hcHMgYXJlIGNvbXBhdGlibGUgd2l0aCBmb3IgQUkuCgotIFtBYm91dCBtYXJrZXJzOiBBSSBtYXJrZXJzKlB0LjEgb2YgdGhlIGZvcnVtIHBvc3Qgc2VyaWVzIG9uIEFJIG1hcmtlcnMgYnkgSmlwKl0oaHR0cHM6Ly9mb3J1bS5mYWZvcmV2ZXIuY29tL3RvcGljLzE0NS9hYm91dC1tYXJrZXJzLWFpLW1hcmtlcnMpCi0gW0Fib3V0IG1hcmtlcnM6IE1vdmVtZW50IGFuZCBwYXRoaW5nIG1hcmtlcnMqUHQuMiBvZiB0aGUgZm9ydW0gcG9zdCBzZXJpZXMgb24gQUkgbWFya2VycyBieSBKaXAqXShodHRwczovL2ZvcnVtLmZhZm9yZXZlci5jb20vdG9waWMvMzQzL2Fib3V0LW1hcmtlcnMtbW92ZW1lbnQtcGF0aGluZy1tYXJrZXJzKQotIFtBZGRpbmcgQUkgbWFya2VycyB1c2luZyB0aGUgR1BHIGVkaXRvcipBIHZpZGVvIHR1dG9yaWFsIGJ5IFBsYXNpYSpdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9S0RPOHpmMmFmaGMpCnsubGlua3MtbGlzdH0KCiMjIFByb3BzCldoaWxlIGEgbWFwIGJlY29tZXMgdGVjaG5pY2FsbHkgcGxheWFibGUgb25jZSB0aGUgdGVycmFpbiBhbmQgcmVzb3VyY2VzIGFyZSBzZXQsIGl0IGlzIG5vdCB0cnVseSBjb21wbGV0ZSB1bnRpbCBpdCBpcyBwb3B1bGF0ZWQgd2l0aCBwcm9wcy4gUHJvcHMsIHN1Y2ggYXMgdHJlZXMgYW5kIHJvY2tzLCBwbGF5IGEgY3J1Y2lhbCByb2xlIGluIGJvdGggZW5oYW5jaW5nIHRoZSBtYXAncyBhZXN0aGV0aWNzIGFuZCBpbmZsdWVuY2luZyB0aGUgcGxheWVycycgc3RyYXRlZ2llcy4gTW9zdCBwcm9wcyBhcmUgcmVjbGFpbWFibGUsIG1lYW5pbmcgdGhleSBjYW4gYmUgZ2F0aGVyZWQgZm9yIHJlc291cmNlcywgdGhvdWdoIHNvbWUgZXhjZXB0aW9ucyBleGlzdC4KClN0cmF0ZWdpYyBwbGFjZW1lbnQgb2YgcHJvcHMgY2FuIGd1aWRlIHBsYXllcnMnIGRldmVsb3BtZW50IGFuZCBkZWNpc2lvbi1tYWtpbmcuIFJvY2tzIHdpdGggaGlnaCByZWNsYWltIHZhbHVlIGJlY29tZSB2YWx1YWJsZSB0YXJnZXRzIGZvciBleHBhbmRpbmcgZW5naW5lZXJzLCBhbmQgdGhlaXIgcG9zaXRpb25pbmcgY2FuIGluZmx1ZW5jZSB0aGUgcm91dGVzIHRha2VuIGJ5IGVuZ2luZWVycyBhbmQgZWFybHkgcmFpZGluZyB1bml0cy4gVHJlZXMsIG9uIHRoZSBvdGhlciBoYW5kLCBvZmZlciBhIHdlbGNvbWVkIHNvdXJjZSBvZiBlbmVyZ3ksIGhlbHBpbmcgcGxheWVycyBhdm9pZCBlbmVyZ3kgc2hvcnRhZ2VzIGlmIHRoZXkgaGF2ZW4ndCBidWlsdCBlbm91Z2ggcG93ZXIgZ2VuZXJhdG9ycy4KClByb3BzIGNvbWUgaW4gdmFyaW91cyBzdHlsZXMgYW5kIHRoZW1lcywgYW5kIGl0J3MgaW1wb3J0YW50IHRvIGNob29zZSBvbmVzIHRoYXQgbWF0Y2ggdGhlIHRlcnJhaW4ncyBvdmVyYWxsIGRlc2lnbi4gRm9yIGluc3RhbmNlLCBpZiB0aGUgbWFwIGRlcGljdHMgYSBkZXNlcnQgbGFuZHNjYXBlLCBvcHRpbmcgZm9yIHNhbmR5LWNvbG9yZWQgcm9ja3MgYW5kIGNhY3R1cyBwbGFudHMgd291bGQgYmUgYSBmaXR0aW5nIGNob2ljZS4gVGhvdWdodGZ1bGx5IGluY29ycG9yYXRpbmcgcHJvcHMgdGhhdCBoYXJtb25pemUgd2l0aCB0aGUgbWFwJ3MgdGhlbWUgd2lsbCBncmVhdGx5IGltcHJvdmUgdGhlIHF1YWxpdHkgb2YgeW91ciBtYXAuIFRoZSBwYWdlIG9uIHRoZSBGQUYgZWRpdG9yIGV4cGxhaW5zIFtob3cgcHJvcHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBtYXBdKGh0dHBzOi8vd2lraS5mYWZvcmV2ZXIuY29tL2VuL0RldmVsb3BtZW50L01hcHBpbmcvRkEtRm9yZXZlci1NYXAtRWRpdG9yI3Byb3BzKS4KCi0gW0NyZWF0aW5nIGEgbWFwOiBUcmVlcyBhbmQgcm9ja3MqUGFydCBvZiB0aGUgb2ZmaWNpYWwgdmlkZW8gdHV0b3JpYWwgc2VyaWVzIG9uIG1hcG1ha2luZypdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9Nm9EczFicllCXzAmbGlzdD1QTDBueHVJVUlqcEZ2TS1sVTNoNlJPdFdzb0NfaWtrYUFzJmluZGV4PTMpCnsubGlua3MtbGlzdH0KCiMjIERlY2FscwpTaW1pbGFyIHRvIHByb3BzLCBbPGltZyBhbGlnbj0icmlnaHQiIHNyYz0iL2ltYWdlcy9tYXBwaW5nL2x1bWluYXJ5bm9kZWNhbHMucG5nIiB3aWR0aD0iMjAlIj5dKC9pbWFnZXMvbWFwcGluZy9sdW1pbmFyeW5vZGVjYWxzLnBuZylkZWNhbHMgcGxheSBhIHNpZ25pZmljYW50IHJvbGUgaW4gZW5oYW5jaW5nIHRoZSBhZXN0aGV0aWNzIG9mIHlvdXIgbWFwLCBhbHRob3VnaCB0aGV5IGFyZSB0ZWNobmljYWxseSBvcHRpb25hbC4gRGVjYWxzIGFyZSBpbWFnZXMgdGhhdCBjYW4gYmUgZnJlZWx5IHBvc2l0aW9uZWQsIHNjYWxlZCwgYW5kIHJvdGF0ZWQgb24gdGhlIG1hcCwgY29udHJpYnV0aW5nIHRvIGl0cyB2aXN1YWwgYXBwZWFsLiBUaGVyZSBhcmUgdHdvIGNvbW1vbiB0eXBlcyBvZiBkZWNhbHM6IEFsYmVkbyBkZWNhbHMgYW5kIE5vcm1hbCBkZWNhbHMuCgpBbGJlZG8gZGVjYWxzIGFyZSBmdWxsLWNvbG9yIGltYWdlcyBhbmQgaW5jbHVkZSBpbWFnZXMgb2Ygc2FuZHkgYW5kIHJvY2t5IHBhdGNoZXMsIG1vc3MsIGFuZCBzb290eSBleHBsb3Npb25zLiBUaGV5IHNlcnZlIHZhcmlvdXMgcHVycG9zZXMsIHN1Y2ggYXMgZW5oYW5jaW5nIHRleHR1cmVzLCBjcmVhdGluZyB2aXN1YWwgY29udHJhc3QgaW4gc3BlY2lmaWMgYXJlYXMsIGFuZCBzdXBwb3J0aW5nIG90aGVyIG1hcCBlbGVtZW50cy4gQnkgc3RyYXRlZ2ljYWxseSBwbGFjaW5nIEFsYmVkbyBkZWNhbHMsIG1hcC1tYWtlcnMgY2FuIGRyYXcgYXR0ZW50aW9uIHRvIGNlcnRhaW4gZmVhdHVyZXMgYW5kIGFkZCBpbnRyaWNhdGUgZGV0YWlscyB0byB0aGUgdGVycmFpbi4KCk9uIHRoZSBvdGhlciBoYW5kLCBOb3JtYWwgZGVjYWxzIGFwcGVhciBhcyBvcmFuZ2UgcGF0dGVybmluZyBvbiBhIGdyZWVuIGJhY2tncm91bmQgYW5kIHV0aWxpemUgYSB0ZWNobmlxdWUgY2FsbGVkIGJ1bXAgbWFwcGluZy4gWzxpbWcgYWxpZ249InJpZ2h0IiBzcmM9Ii9pbWFnZXMvbWFwcGluZy9sdW1pbmFyeXdpdGhkZWNhbHMucG5nIiB3aWR0aD0iMjAlIj5dKC9pbWFnZXMvbWFwcGluZy9sdW1pbmFyeXdpdGhkZWNhbHMucG5nKVRoaXMgdGVjaG5pcXVlIGFsbG93cyB0aGVtIHRvIGluZmx1ZW5jZSBob3cgbGlnaHQgaW50ZXJhY3RzIHdpdGggdGhlIHRlcnJhaW4uIFRoZXkgY3JlYXRlIHRoZSBpbGx1c2lvbiBvZiB0ZXJyYWluIGRlZm9ybWF0aW9ucywgZXZlbiBpbiBhcmVhcyB3aGVyZSB0aGVyZSBhcmUgbm8gYWN0dWFsIGNoYW5nZXMgaW4gaGVpZ2h0LiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGFkZGluZyBpbnRyaWNhdGUgZGV0YWlscyB0byBhcmVhcyB3aXRoIGxpbWl0ZWQgcmVzb2x1dGlvbiBvbiB0aGUgaGVpZ2h0bWFwLCBtYWtpbmcgdGVycmFpbiBtb3JlIHZpc3VhbGx5IGFwcGVhbGluZyB3aXRob3V0IGFmZmVjdGluZyB1bml0IHBhdGhpbmcuIE5vcm1hbCBkZWNhbHMgYXJlIGVzcGVjaWFsbHkgYmVuZWZpY2lhbCBmb3IgaGlnaGxpZ2h0aW5nIHJhbXBzIGFuZCB1bmV2ZW4gdGVycmFpbiwgYWlkaW5nIHBsYXllcnMgaW4gaWRlbnRpZnlpbmcgY3JpdGljYWwgbGFuZHNjYXBlIGZlYXR1cmVzIGR1cmluZyBnYW1lcGxheS4KCk1vcmUgYWR2YW5jZWQgdGVjaG5pcXVlcyB1c2UgW2N1c3RvbSBkZWNhbHNdKCNDQSksIHNvbWUgb2Ygd2hpY2ggaW5jbHVkZSBkZWNhbHMgdGhhdCBhcmUgbWFkZSB0byBtYXRjaCB0aGUgZXhhY3QgdGVycmFpbiBvZiB0aGUgbWFwLiBTdWNoIG1hcC13aWRlIGRlY2FscyBjYW4gYmUgdXNlZCB0byBhZGQgc2hhZG93cywgd2VhdGhlcmluZywgYW5kIGNvbG91ciBjb3JyZWN0aW9uLiBUaGUgaW1hZ2VzIG9uIHRoZSByaWdodCBzaG93IHRoZSBlZmZlY3QgZGVjYWxzIGNhbiBhY2hpZXZlLCB3aXRoIHRoZSBmaXJzdCBpbWFnZSBzaG93aW5nIHRoZSBtYXAgd2l0aG91dCBhbnkgZGVjYWxzLCBhbmQgdGhlIHNlY29uZCBpbWFnZSBzaG93aW5nIHRoZSBtYXAgd2l0aCBhbGwgdGhlIGRlY2FscywgaW5jbHVkaW5nIGEgbWFwLXdpZGUgc2hhZG93IGRlY2FsLCBtYXAtd2lkZSBub3JtYWwgZGVjYWwsIGFuZCBtYXAtd2lkZSBhbGJlZG8gZGVjYWwuCgotIFtDcmVhdGluZyBhIG1hcDogRGVjYWxzIHB0LjEqUGFydCBvZiB0aGUgb2ZmaWNpYWwgdmlkZW8gdHV0b3JpYWwgc2VyaWVzIG9uIG1hcG1ha2luZypdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9WWhEeUNUZjhjeUkmbGlzdD1QTDBueHVJVUlqcEZ2TS1sVTNoNlJPdFdzb0NfaWtrYUFzJmluZGV4PTYpCi0gW0NyZWF0aW5nIGEgbWFwOiBEZWNhbHMgcHQuMipQYXJ0IG9mIHRoZSBvZmZpY2lhbCB2aWRlbyB0dXRvcmlhbCBzZXJpZXMgb24gbWFwbWFraW5nKl0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj12UkF2UUlQM05vSSZsaXN0PVBMMG54dUlVSWpwRnZNLWxVM2g2Uk90V3NvQ19pa2thQXMmaW5kZXg9NykKey5saW5rcy1saXN0fQoKCgojIyBVbml0cyBhbmQgd3JlY2tzClNpbWlsYXIgdG8gcHJvcHMsIHlvdSBjYW4gYnJpbmcgZXh0cmEgZGV0YWlsIGFuZCByZWNsYWltIHRvIHlvdXIgbWFwIGJ5IGluY2x1ZGluZyB1bml0cyBhbmQgd3JlY2tzLiBVbml0cyBwbGFjZWQgb24gdGhlIG1hcCBhcmUgZ2VuZXJhbGx5IHBsYWNlZCBhcyBlaXRoZXIgbmV1dHJhbCBvciBob3N0aWxlIGNpdmlsaWFucy4gTmV1dHJhbCBjaXZpbGlhbiBidWlsZGluZ3MgY2FuIGJlIGNhcHR1cmVkIG9yIHJlY2xhaW1lZCBieSBwbGF5ZXJzIHdpdGggbGl0dGxlIGVmZm9ydC4gSW4gY29udHJhc3QsIGFueSBvZmZlbnNpdmUgdW5pdCBvciBidWlsZGluZywgc3VjaCBhcyB0YW5rcyBvciBwb2ludCBkZWZmZW5jZSwgYmVsb25naW5nIHRvIGhvc3RpbGUgY2l2aWxpYW5zIHdpbGwgc2hvb3QgYWxsIHBsYXllcnMgdGhhdCBlbnRlciB0aGVpciByYW5nZS4gQnkgZGVmYXVsdCwgbm9uZSBvZiB0aGUgY2l2aWxpYW4gdW5pdHMgd2lsbCBtb3ZlLCBhbHRob3VnaCB0aGlzIGJlaGF2aW91ciBjYW4gYmUgbW9kaWZpZWQgYnkgc2NyaXB0cy4KClVuaXQgd3JlY2tzLCB1bmxpa2UgY2l2aWxpYW4gdW5pdHMgYW5kIGJ1aWxkaW5ncywgd2lsbCBub3Qgc3Bhd24gYXMgYW4gaW50YWN0IHVuaXQgYnV0IGFzIGl0cyByZWNsYWltYWJsZSB3cmVjay4gVGhlc2UgY2FuIGJlIHBsYWNlZCBvbiBtYXBzIHRvIGltcGx5IGVhcmxpZXIgYmF0dGxlcyBmb3VnaHQgb3IgdG8gc2ltdWxhdGUgYSBjcmFzaGVkIHRyYW5zcG9ydCwgZm9yIGV4YW1wbGUuIAoKSnVzdCBhcyB3aXRoIHByb3BzLCBpdCBpcyBpbXBvcnRhbnQgdG8gcGxhY2UgdW5pdHMgYW5kIHdyZWNrcyB3aXRoIGNhcmUuIFRoZSByZWNsYWltIHByb3ZpZGVkIGJ5IHRoZXNlIHVuaXRzIGNoYW5nZSBob3cgcGxheWVycyBhcHByb2FjaCB0aGUgbWFwLCBhbmQgaXQgaXMgZ2VuZXJhbGx5IGRpc2NvdXJhZ2VkIHRvIHBsYWNlIGxhcmdlIHBhdGNoZXMgb2YgcmVjbGFpbSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBtYXAsIGFzIHRoaXMgb2Z0ZW4gbGVhZHMgdG8gZXh0cmVtZWx5IHZvbGF0aWxlIGdhbWVwbGF5LiBBcyBhIGNvbnNlcXVlbmNlLCB1bml0cyBhbmQgd3JlY2tzIHNob3VsZCBiZSBwbGFjZWQgaW4gbW9kZXJhdGlvbiBhbmQgd2l0aCBjYXJlZnVsIGNvbnNpZGVyYXRpb24uCgotIFtDcmVhdGluZyBhIG1hcDogKFdyZWNrZWQpIENpdmlsaWFucypQYXJ0IG9mIHRoZSBvZmZpY2lhbCB2aWRlbyB0dXRvcmlhbCBzZXJpZXMgb24gbWFwbWFraW5nKl0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0xNnp1WjYwWEhiayZsaXN0PVBMMG54dUlVSWpwRnZNLWxVM2g2Uk90V3NvQ19pa2thQXMmaW5kZXg9MTIpCnsubGlua3MtbGlzdH0KCiMjIFRoZSBtYXAgdmF1bHQKVGhlIEZBRiBtYXAgdmF1bHQgaXMgdGhlIG9mZmljaWFsIGRhdGFiYXNlIGNvbnRhaW5pbmcgdGhlIGNvbW11bml0eS1jcmVhdGVkIG1hcHMsIG1ha2luZyBpdCBlYXN5IGZvciBhbnkgcGxheWVyIHRvIGZpbmQgYW5kIGRvd25sb2FkIG5ldyBtYXBzLiBPbmNlICh0aGUgZmlyc3QgdmVyc2lvbiBvZikgeW91ciBuZXcgbWFwIGlzIHJlYWR5IGZvciBwbGF5aW5nLCB5b3Ugc2hvdWxkIHN1Ym1pdCB5b3VyIG1hcCB0byB0aGUgdmF1bHQgc28gdGhhdCB5b3UgY2FuIGhvc3QgYSBsb2JieSB3aXRoIHlvdXIgbWFwLiBXaGlsZSB5b3UgY291bGQgaG9zdCBhIHByaXZhdGUgbG9iYnkgZm9yIHlvdXJzZWxmIGlmIHlvdSBkbyBub3Qgc2hhcmUgdGhlIG1hcCB0byB0aGUgdmF1bHQsIGZvciBvdGhlciBwbGF5ZXJzIHRvIGRvd25sb2FkIHlvdXIgbWFwIGFuZCBqb2luIHlvdXIgbG9iYnksIHRoZSBtYXAgbXVzdCBiZSB1cGxvYWRlZCB0byB0aGUgdmF1bHQuIAoKQXMgeW91IHdvcmsgb24geW91ciBtYXAsIHlvdSB3aWxsIGxpa2VseSBuZWVkIHRvIHRlc3QgaGFsZi1maW5pc2hlZCB2ZXJzaW9ucyBvZiB5b3VyIG1hcCBiZWZvcmUgeW91IGZlZWwgY29tZm9ydGFibGUgdXBsb2FkaW5nIHRoZSBmaW5pc2hlZCBwcm9kdWN0IHRvIHRoZSB2YXVsdC4gRm9yIHN1Y2ggdGVzdHMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgZm9yIHN1Y2ggdGVzdHMgeW91IGRvIG5vdCB1cGxvYWQgeW91ciBtYXAgdG8gdGhlIHZhdWx0LCBidXQgcmF0aGVyIFt0ZXN0IHRoZSBtYXAgd2l0aG91dCB1cGxvYWRpbmddKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9RVFiUF9tWEVSN00pLgoKQnkgdXBsb2FkaW5nIHRvIHRoZSB2YXVsdCwgeW91IGFncmVlIHRvIFt0aGUgdmF1bHQgZ3VpZGVsaW5lc10oL2VuL0RldmVsb3BtZW50L1ZhdWx0L0d1aWRlbGluZXMpIGFuZCBbdmF1bHQgcnVsZXNdKC9lbi9EZXZlbG9wbWVudC9WYXVsdC9SdWxlcykuIFVwb24gdXBsb2FkaW5nLCB5b3UgYXJlIGFza2VkIHdoZXRoZXIgeW91IHdpc2ggdG8gbWFyayB5b3VyIG1hcCBhcyBhIHJhbmtlZCBtYXAuIFJhbmtlZCBtYXBzIGltcGFjdCBwbGF5ZXJzJyBnbG9iYWwgcmF0aW5ncyB1cG9uIHBsYXlpbmcgbWF0Y2hlc+KAlHdpbm5pbmcgdGVhbXMgc2VlIHJhdGluZyBpbmNyZWFzZXMsIHdoaWxlIGxvc2luZyB0ZWFtcyBleHBlcmllbmNlIGRlY3JlYXNlcy4gSWYgeW91IHdpc2ggeW91ciBtYXAgdG8gYmUgbWFya2VkIGFzIHJhbmtlZCwgaXQgaXMgY3JpdGljYWwgdGhhdCB0aGUgbWFwIGlzIHN5bW1ldHJpY2FsLCBzbyBhcyBub3QgdG8gZ2l2ZSBhbnkgb25lIHRlYW0gYW4gdW5mYWlyIGFkdmFudGFnZS4KCk5vbmFkaGVyZW5jZSB0byB0aGUgdmF1bHQgcnVsZXMgaXMgYSBiYW5uYWJsZSBvZmZlbmNlLCBhbmQgYWx0aG91Z2ggdGhlIHJ1bGVzIGFyZSBmYWlybHkgc2VsZi1leHBsYW5hdG9yeSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgcmVhZCB0aGUgcnVsZXMgY2FyZWZ1bGx5LgoKSWYgeW91IHdpc2ggdG8gbWFrZSBjaGFuZ2VzIHRvIHlvdXIgbWFwIG9uY2UgaXQgaGFzIGJlZW4gdXBsb2FkZWQgdG8gdGhlIHZhdWx0LCBpdCBpcyBuZWNlc3NhcnkgdGhhdCB5b3UgY3JlYXRlIFthIG5ldyB2ZXJzaW9uXShodHRwczovL2ZvcnVtLmZhZm9yZXZlci5jb20vdG9waWMvNDU5L2Fib3V0LXRoZS12ZXJzaW9uaW5nLXN5c3RlbSkgb2YgeW91ciBtYXAuIFRoZSBvbGQgdmVyc2lvbiBvZiB5b3VyIG1hcCBzaG91bGQgcmVtYWluIG9uIHRoZSB2YXVsdCwgYXMgdGhpcyBpcyByZXF1aXJlZCB0byB3YXRjaCByZXBsYXlzLCBidXQgbWF5IGJlIGhpZGRlbi4KCi0gW01hcHRlc3Rpbmcgd2l0aG91dCB1cGxvYWRpbmcqQSB0dXRvcmlhbCB2aWRlbyBvbiBob3cgdG8gdGVzdCBhIG1hcCB3aXRob3V0IGhhdmluZyB0byB1cGxvYWQgaXQgdG8gdGhlIHZhdWx0Kl0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1FUWJQX21YRVI3TSkKLSBbQWJvdXQgdGhlIHZlcnNpb25pbmcgc3lzdGVtICpBIGZvcnVtIHBvc3QgYnkgSmlwIG9uIGhvdyB0byBtYWtlIGEgbmV3IHZlcnNpb24gb2YgeW91ciBtYXAqXShodHRwczovL2ZvcnVtLmZhZm9yZXZlci5jb20vdG9waWMvNDU5L2Fib3V0LXRoZS12ZXJzaW9uaW5nLXN5c3RlbSkKey5saW5rcy1saXN0fQoKIyBGdXJ0aGVyIEluZm9ybWF0aW9uCiMjIEluY3JlYXNpbmcgdGhlIHF1YWxpdHkgb2YgeW91ciBtYXAKV2hpbGUgdGhlIGRlZmluaXRpb24gb2YgYSBnb29kIG1hcCBjYW4gdmFyeSBiYXNlZCBvbiBpbmRpdmlkdWFsIHRhc3RlIGFuZCBwbGF5c3R5bGUsIHRoZXJlIGV4aXN0cyBhIGNvbnNlbnN1cyBvbiBjZXJ0YWluIGFzcGVjdHMgdGhhdCBkaXN0aW5ndWlzaCBncmVhdCBtYXBzIGZyb20gdGhlIG1lcmVseSBnb29kIG9uZXMuIFRocm91Z2hvdXQgdGhpcyBndWlkZSwgd2UgaGF2ZSBhbHJlYWR5IHRvdWNoZWQgdXBvbiBzb21lIG9mIHRoZXNlIHN0YW5kYXJkcyB3aGlsZSBkaXNjdXNzaW5nIHZhcmlvdXMgbWFwIGVsZW1lbnRzLiBIb3dldmVyLCBhZGRpdGlvbmFsIHR1dG9yaWFscyBhcmUgcHJlc2VudGVkIGhlcmUgdG8gb2ZmZXIgZnVydGhlciBpbnNpZ2h0cyBhbmQga25vd2xlZGdlLgoKU2hvdWxkIHlvdSBmaW5kIHlvdXJzZWxmIHNlZWtpbmcgY2xhcmlmaWNhdGlvbiBvciBhcmUgbG9va2luZyB0byBkaXNjdXNzIGRpZmZlcmVudCBtYXBwaW5nIGFzcGVjdHMsIHdlIGVuY291cmFnZSB5b3UgdG8gam9pbiB0aGUgb2ZmaWNpYWwgRkFGIGRpc2NvcmQgY29tbXVuaXR5LiBUaGVyZSwgeW91IGNhbiBpbnRlcmFjdCB3aXRoIG90aGVyIHBhc3Npb25hdGUgbWFwLW1ha2VycyBhbmQgZW50aHVzaWFzdHMsIHNoYXJpbmcgeW91ciB0aG91Z2h0cywgaWRlYXMsIGFuZCBxdWVzdGlvbnMgaW4gdGhlIE1hcHBpbmctZ2VuZXJhbCBjaGFubmVsLiBUaGlzIGNvbGxhYm9yYXRpdmUgc3BhY2Ugc2VydmVzIGFzIGFuIGludmFsdWFibGUgcmVzb3VyY2UsIHByb3ZpZGluZyBvcHBvcnR1bml0aWVzIHRvIGxlYXJuIGZyb20gZXhwZXJpZW5jZWQgbWFwLW1ha2VycywgZXhjaGFuZ2UgaWRlYXMsIGFuZCByZWZpbmUgeW91ciBtYXBwaW5nIHNraWxscy4KClJlbWVtYmVyIHRoYXQgbWFwLW1ha2luZyBpcyBhIGR5bmFtaWMgYW5kIGNyZWF0aXZlIHByb2Nlc3MsIGFuZCBjb250aW51b3VzIGxlYXJuaW5nIGFuZCBpbXByb3ZlbWVudCBhcmUgaW50ZWdyYWwgdG8gY3JhZnRpbmcgZXhjZXB0aW9uYWwgbWFwcy4gRW1icmFjZSB0aGUgY29tbXVuaXR5J3MgY29sbGVjdGl2ZSBrbm93bGVkZ2UsIGV4cGxvcmUgbmV3IHRlY2huaXF1ZXMsIGFuZCBleHBlcmltZW50IHdpdGggaW5ub3ZhdGl2ZSBpZGVhcy4gQnkgYWN0aXZlbHkgcGFydGljaXBhdGluZyBpbiB0aGUgRkFGIG1hcHBpbmcgY29tbXVuaXR5LCB5b3UgYXJlIGhlbHBpbmcgdG8ga2VlcCB0aGlzIG9sZCBnYW1lIHN0YXkgYWN0aXZlIGFuZCBpbnRlcmVzdGluZyBmb3IgdGhvdXNhbmRzIG9mIHBsYXllcnMgd29ybGR3aWRlLgoKLSBbV2hhdCBtYWtlcyBhIGJhZCBtYXA/KlZpZGVvIHR1dG9yaWFsIGV4cGxhaW5pbmcgZ3VpZGVsaW5lcyBmb3IgbWFwIGRlc2lnbiBieSBUaGVEdWVsaXN0Kl0oaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1QcUhCSmtxcWYzOCkKLSBbRm9ydW0gcG9zdCB8IE1ha2luZyBiYWQgbWFwcyBiZXR0ZXIqQSBsZW5ndGh5IGZvcnVtcG9zdCB3aXRoIGltYWdlcyBieSBCaWFzcypdKGh0dHBzOi8vZm9ydW1zLmZhZm9yZXZlci5jb20vdmlld3RvcGljLnBocD9mPTUzJnQ9MTg2NDcpCnsubGlua3MtbGlzdH0KCiMjIyBUaXBzCi0gU2VhcmNoaW5nIGZvciBjb25jZXB0IGFydCBhbmQgcmVmZXJlbmNlIGltYWdlcyBjb3VsZCBoZWxwIHdpdGggZ2V0dGluZyBpbnNwaXJhdGlvbiBmb3IgbmV3IG1hcHMuIFlvdSBjYW4gZmluZCBhIHNlbGVjdGlvbiBvZiBpbWFnZXMgW2hlcmVdKGh0dHBzOi8vZm9ydW0uZmFmb3JldmVyLmNvbS90b3BpYy82MzA0L3JlZmVyZW5jZS1hbmQtaW5zcGlyYXRpb24tdGhyZWFkKQotIENvbG9yIHRoZW9yeSBzaG91bGQgYmUgYXBwbGllZCB0byBtYWtlIG1hcHMgdmlzdWFsbHkgYXBwZWFsaW5nLgotIENvbG9yIGdyYWRpbmcgb2YgdGV4dHVyZXMgKGkuZS4gZWRpdGluZyB0aGVpciBodWUgaW4gYW4gaW1hZ2UgZWRpdG9yKSBzaG91bGQgYmUgdXNlZCB0byBjcmVhdGUgYSBjb2hlcmVudCBsb29rIG9mIHRoZSBtYXAgYW5kIHRvIG1ha2UgdGV4dHVyZXMgdmlzYWxseSBmaXQgaW50byB5b3VyIG1hcCB0aGF0IHlvdSBvdGhlcndpc2UgY291bGRuJ3QgdXNlLgotIFRoZSBjb2xvciByYW1wIGZvciB3YXRlciBjYW4gYmUgZWRpdGVkIGluIGFuIGltYWdlIGVkaXRvciBhcyB3ZWxsLgoKIyMjIENoZWNrbGlzdCBvZiBvZnRlbiBvdmVybG9va2VkIHNldHRpbmdzCi0gRGlkIHlvdSBhZGp1c3QgdGhlIGZvZyBzZXR0aW5ncz8KLSBEaWQgeW91IHVzZSB0ZXJyYWluIHR5cGVzPwotIERpZCB5b3UgcGxheSBhcm91bmQgd2l0aCB3YXRlciByYW1wcz8KLSBEaWQgeW91IGFkanVzdCB0aGUgc2t5Ym94PwotIERpZCB5b3Ugc2V0IGZpdHRpbmcgZW52aXJvbm1lbnQgbWFwcz8KLSBGb3IgdGhlIHdhdGVyIGFzIHdlbGw/Ci0gRGlkIHlvdSB0cnkgb3V0IGRpZmZlcmVudCB3YXZlIHRleHR1cmVzPwotIERpZCB5b3UgYWxpZ24gdGhlIHN1biBkaXJlY3Rpb24gaW4gdGhlIHdhdGVyIHNldHRpbmdzIHRvIGNyZWF0ZSBhIHByb3BlciBzdW4gcmVmbGVjdGlvbj8KLSBEaWQgeW91IHB1dCBhIHN1biBkZWNhbCBvciBvdGhlciBkZWNhbHMgaW4geW91ciBza3lib3g/CgojIyBVc2luZyBhIGRpZmZlcmVudCB0ZXJyYWluIHNoYWRlcgpGQUYgcHJvdmlkZXMgYWRkaXRpb25hbCB0ZXJyYWluIHNoYWRlcnMuIFRoZXNlIGFsdGVyIGhvdyB0aGUgZ2FtZSByZW5kZXJzIHRoZSBtYXAgYW5kIHByb3ZpZGUgb3Bwb3J0dW5pdHkgdG8gaW1wcm92ZSB0aGUgdmlzdWFsIGZpZGVsaXR5IG9mIHRoZSBtYXAuIEFzIHRoaXMgaXMgcHJldHR5IG5ldywgdGhlIHRvb2xzIGZvciBkZWFsaW5nIHdpdGggdGhlbSBhcmUgbm90IHJlYWxseSB0aGVyZSB5ZXQsIHNvIHRoZSBwcm9jZXNzIGlzIG5vdCBhcyBzdHJlYW1saW5lZCBhcyB0aGUgcmVzdCBvZiBtYXBtYWtpbmcuCiAgCiAgCiMjIyBVdGlsaXR5IHRleHR1cmUKQWxsIHRoZSBuZXcgc2hhZGVycyB1c2UgYSBuZXcgdXRpbGl0eSB0ZXh0dXJlIHRvIHByb3ZpZGUgY3VzdG9tIG5vcm1hbHMgYW5kIHRlcnJhaW4gc2hhZG93cy4gUHJldmlvdXNseSB0aGlzIGNvdWxkIGJlIGZha2VkIHdpdGggZGVjYWxzLCBidXQgdGhlIGRlY2FscyBjb3VsZCBzb21ldGltZXMgZmxpY2tlciBhbmQgaXQgd291bGQgbGVhZCB0byBkb3VibGUgc2hhZG93cyB3aGVuIHVuaXRzIGFyZSBzdGFuZGluZyBpbiB0aGUgdGVycmFpbiBzaGFkb3cuIFRoZSBuZXcgc2hhZGVycyByZXNvbHZlIHRoZXNlIHByb2JsZW1zIGJ5IHByb3Blcmx5IGluY29ycG9yYXRpbmcgdGhlIHRleHR1cmUgaW50byB0aGUgcmVuZGVyaW5nIHBpcGVsaW5lLiBUaGlzIGVsaW1pbmF0ZXMgZmxpY2tlcmluZyBhbmQgdW5pdHMgc3RhbmRpbmcgaW4gdGhlIHNoYWRvdyB3aWxsIG5vdCBjYXN0IGFuIGFkZGl0aW9uYWwgc2hhZG93LgpUaGUgbm9ybWFsIGNoYW5uZWxzIGNhbiBiZSB1c2VkIHRvIGFkZCBhZGRpdGlvbmFsIGRldGFpbHMgb3IgdG8ganVzdCBjb3JyZWN0IHRoZSBjYWxjdWxhdGlvbnMgdGhhdCB0aGUgZ2FtZSBkb2VzLiBUaGUgY2FsY3VsYXRpb25zIG9mIHRoZSBub3JtYWwgdmVjdG9yIGZvciB0aGUgdGVycmFpbiBieSB0aGUgZ2FtZSBhcmUgYSBiaXQgb2ZmLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBwcm92aWRlIHlvdXIgb3duLgpQcm92aWRpbmcgdGhlIHdhdGVyIGRlcHRoIHdpdGggYSB0ZXh0dXJlIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIHRlY2huaWNhbCBsaW1pdGF0aW9ucyB3aXRoIHRoZSBzaGFkZXIgY29kZSBvZiB0aGUgZ2FtZSwgYnV0IGl0IGFsc28gYWxsb3dzIHVzIHRvIHByb3ZpZGUgYSBoaWdoZXIgcmVzb2x1dGlvbiBvZiB0aGUgd2F0ZXIgZGVwdGggdGV4dHVyZSB0aGFuIHRoZSBnYW1lIHdvdWxkIGdlbmVyYXRlIGludGVybmFsbHkuClNoYWRvdyBhbmQgbm9ybWFsIG1hcHMgY2FuIGJlIHByb2R1Y2VkIHdpdGggdGhlIGhlbHAgb2Ygd29ybGQgbWFjaGluZSBvciBnYWVhLiBUaGUgbWFwIGdlbmVyYXRvciB3aWxsIHNvb24gYmUgYWJsZSB0byBnZW5lcmF0ZSB0aGUgdXRpbGl0eSB0ZXh0dXJlIGluIG9uZSBnby4KClRoZSB0ZXh0dXJlIGNoYW5uZWxzIGFyZSByZWFkIGxpa2UgdGhpczoKcmVkOiBub3JtYWxzIHgKZ3JlZW46IG5vcm1hbHMgegpibHVlOiB3YXRlciBkZXB0aAphbHBoYTogc2hhZG93CgpUaGUgbm9ybWFscyBpbiB4IGRpcmVjdGlvbiBzaG91bGQgbG9vayBsaWtlIGEgbGlnaHQgaXMgc2hpbmluZyBvbiB0aGUgbWFwIGZyb20gdGhlIHJpZ2h0IGhhbmQgc2lkZS4KVGhlIG5vcm1hbHMgaW4geiBkaXJlY3Rpb24gc2hvdWxkIGxvb2sgbGlrZSBhIGxpZ2h0IGlzIHNoaW5pbmcgb24gdGhlIG1hcCBmcm9tIHRoZSBib3R0b20uCklmIHRoZXNlIGRpcmVjdGlvbnMgYXJlIG5vdCBjb3JyZWN0LCB0aGVuIHRoZSBub3JtYWwgY2FsY3VsYXRpb25zIGluIHRoZSBnYW1lIHdpbGwgYmUgaW5jb3JyZWN0IGFuZCB5b3Ugd2lsbCBnZXQgdW5leHBlY3RlZCBsaWdodGluZyByZXN1bHRzLgpUaGUgd2F0ZXIgZGVwdGggaXMgYSBub3JtYWxpemVkIGRlcHRoLCB0aGlzIG1lYW5zIGl0IG5lZWRzIHRvIGJlIDAgYXQgYW5kIGFib3ZlIHRoZSB3YXRlciBzdXJmYWNlIGFuZCAxIGF0IHRoZSBhYnlzcyBkZXB0aCBhbmQgYmVsb3csIHdpdGggYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBmb3IgdGVycmFpbiBoZWlnaHRzIGJldHdlZW4gdGhlc2UgdHdvIGhlaWdodHMuClRoZSBzaGFkb3cgdGV4dHVyZSBuZWVkcyB0byBiZSAxIHdoZXJlIHRoZSBzdW4gcmVhY2hlcyBhbmQgMCB3aGVyZSBzaGFkb3cgaXMuIFRoZSByZXNvbHV0aW9uIG9mIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIGEgcG93ZXIgb2YgdHdvIGFuZCBzaG91bGQgc2Vuc2libHkgYmUgYXQgbGVhc3QgdGhlIG9ncmlkIHJlc29sdXRpb24gb2YgdGhlIG1hcCwgYnV0IGl0IGNhbiBiZSBoaWdoZXIuIEp1c3Qga2VlcCBpbiBtaW5kIHRoYXQgYW4gZXh0cmVtZWx5IGJpZyB0ZXh0dXJlIGFsc28gY29uc3VtZXMgYSBsb3Qgb2YgbWVtb3J5LgpUaGUgdGV4dHVyZSBuZWVkcyB0byBiZSBsb2FkZWQgaW4gdGhlIHVwcGVyIGFsYmVkbyB0ZXh0dXJlIHNsb3QuIFRoZSBlZGl0b3Igd2lsbCBzaG93IHRoZSB0ZXh0dXJlIGxpa2UgYW55IG90aGVyIHRleHR1cmUgYmVjYXVzZSB0aGUgZWRpdG9yIGRvZXNuJ3QgeWV0IGZlYXR1cmUgc3VwcG9ydCBmb3IgdGhpcy4gWW91IGNhbiBqdXN0IGhpZGUgdGhlIHRleHR1cmUgbGF5ZXIgaWYgeW91IGZpbmQgaXQgZGlzdHJhY3RpbmcuCgpUbyBlbmFibGUgcHJvcGVyIHVzYWdlIG9mIHRoaXMgdGV4dHVyZSB5b3UgbmVlZCB0byBzZXQgdGhlIHNjYWxlIG9mIHRoZSB1cHBlciBhbGJlZG8gdGV4dHVyZSB0byBhIHZhbHVlIGJpZ2dlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBtYXAgaW4gb2dyaWRzIChlLmcuID41MTMgZm9yIGEgMTB4MTAgbWFwKS4gQSB2YWx1ZSBvZiAxMDAwMCB3aWxsIHdvcmsgZm9yIGFueSBtYXAgc2l6ZS4KCiMjIyBNYXB3aWRlIGFsYmVkbyB0ZXh0dXJlClNvbWUgb2YgdGhlIG5ldyBzaGFkZXJzIHVzZSB0aGUgc3RyYXR1bSA3IGFsYmVkbyBzbG90IChsYXllciA4IGluIG96b25leCBlZGl0b3IpIGFzIGEgbWFwd2lkZSBhbGJlZG8gdGV4dHVyZS4gSXQgd29ya3Mgc2ltaWxhciB0byB0aGUgbWFjcm90ZXh0dXJlIGFzIGluIHRoZSBhbHBoYSBjaGFubmVsIGNvbnRyb2xzIHRoZSB0cmFuc3BhcmVuY3kgZGlyZWN0bHkuIEl0IGRvZXNuJ3QgcmVhY3QgdG8gdGhlIHNjYWxlIGFueW1vcmUgYW5kIGFsd2F5cyBwZXJmZWN0bHkgY292ZXJzIHRoZSB3aG9sZSBtYXAuCgojIyMgUm91Z2huZXNzIG1hcHMKU29tZSBzaGFkZXJzIGZlYXR1cmUgaW1wcm92ZWQgc3VuIHJlZmxlY3Rpb24gdGhhdCBjYW4gYmUgY29udHJvbGxlZCB3aXRoIHJvdWdobmVzcyBtYXBzLiBUaGlzIGlzIGFjaGlldmVkIGJ5IGltcGxlbWVudGluZyBwaHlzaWNhbGx5IGJhc2VkIHJlbmRlcmluZy4gVGhpcyBtZWFucyB5b3UgY2FuIHVzZSB0aGUgcm91Z2huZXNzIG1hcHMgdGhhdCB5b3UgY2FuIGZpbmQgd2hlbiB5b3Ugc2VhcmNoIG9ubGluZSBmb3IgUEJSIG1hdGVyaWFscy4gVGhlIHRlcnJhaW4gd2lsbCBub3cgcmVhY3QgdG8gbGlnaHQgaW4gYSBwaHlzaWNhbGx5IHBsYXVzaWJsZSB3YXksIGluIGNvbnRyYXN0IHRvIHRoZSBydWRpbWVudGFyeSBzcGVjdWxhciByZWZsZWN0aW9ucyB0aGF0IHRoZSBnYW1lIG9yaWdpbmFsbHkgZmVhdHVyZXMuClRvIHVzZSB0aGlzLCB5b3UgbmVlZCB0byBwcm92aWRlIGEgdGV4dHVyZSBhdGxhcyB3aXRoIHRoZSByb3VnaG5lc3MgbWFwcyBpbiB0aGUgbm9ybWFsIHRleHR1cmUgc2xvdCBvZiBsYXllciA4LiBUaGlzIHRleHR1cmUgYXRsYXMgY2FuIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdpdGggYSBtYXBnZW4gdG9vbC4KCgojIyMgQXZhaWxhYmxlIHNoYWRlcnMKCiMjIyMgVFRlcnJhaW4KCiMjIyMgVFRlcnJhaW5YUAoKIyMjIyBUZXJyYWluMzAxClRoZSBub3JtYWwgbWFwIHNjYWxlcyBhcmUgY29udHJvbGxlZCBieSB0aGUgYWxiZWRvIHNjYWxlcyB0byBlbnN1cmUgdGhhdCB0aGV5IHVzZSB0aGUgc2FtZSB2YWx1ZXMuClRoZSBsYXllciBtYXNrIG9mIGxheWVyIDggYWN0cyBhcyBhIHJvdWdobmVzcyBtdWx0aXBsaWVyIHdpdGggMC41IGFzIHRoZSBuZXV0cmFsIHZhbHVlLgpIZWlnaHQgcHJvY2Vzc2luZyBoYXBwZW5zIGF0IHR3byBzY2FsZXMsIHRoZSBhbGJlZG8gc2NhbGVzIGNvbnRyb2wgdGhlIG5lYXIgc2NhbGUgYW5kIHRoZSBub3JtYWwgc2NhbGVzIGNvbnRyb2wgdGhlIGZhciBzY2FsZS4KVGhleSBhbHNvIHVzZSB0aGUgbWFwd2lkZSBhbGJlZG8gdGV4dHVyZS4KCgojIyBDdXN0b20gYXNzZXRzIHsjQ0F9ClRoZSBnYW1lIHByb3ZpZGVzIHlvdSB3aXRoIGEgZGVjZW50bHkgbGFyZ2Ugc2VsZWN0aW9uIG9mIHRleHR1cmVzIHRvIHVzZSBpbiB5b3VyIG1hcHMuIEhvd2V2ZXIsIGlmIHlvdSB3YW50IHRvIGdpdmUgeW91ciBtYXAgYW4gdW5pcXVlIGxvb2ssIG9yIGlmIHlvdSBqdXN0IGNhbm5vdCBmaW5kIGEgdGV4dHVyZSB0aGF0IHdvcmtzIHdlbGwgZm9yIHlvdXIgbWFwLCB5b3UgbWF5IGNob29zZSB0byB1c2UgY3VzdG9tIHRleHR1cmVzLiBUaGVyZSBhcmUgbWFueSBiZWF1dGlmdWwgY3VzdG9tIHRleHR1cmVzIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgb25saW5lLCBhbmQgdGhleSBhcmUgb2Z0ZW4gYXZhaWxhYmxlIGluIGhpZ2hlciByZXNvbHV0aW9uIHRoYW4gdGhlIHN0b2NrIHRleHR1cmVzLgoKQ3VzdG9tIHRleHR1cmVzLCBhbmQgZGVjYWxzLCBuZWVkIHRvIGJlIGVuY29kZWQgdG8gYSAuRERTIGZpbGUgZm9ybWF0LCBzcGVjaWZpY2FsbHkgdGhlIChEWFQzKSBCQ1QyIGNvbXByZXNzaW9uIGZvcm1hdC4gU2V2ZXJhbCB0dXRvcmlhbHMgb24gdGhlIHRvcGljIGFyZSBhdmFpbGFibGUuCgotIFtDdXN0b20gdGV4dHVyZXMqVmlkZW8gdHV0b3JpYWwgb24gaG93IHRvIGFkZCBjdXN0b20gdGV4dHVyZXMgYnkgTW9yYXgqXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PV93WEswYVluejcwKQotIFtBYm91dCBkZWNhbHM6IEludHJvZHVjdGlvbipQdC4gMSBvZiB0aGUgZm9ydW0gcG9zdCBzZXJpZXMgb24gZGVjYWxzIGJ5IEppcCpdKGh0dHBzOi8vZm9ydW0uZmFmb3JldmVyLmNvbS90b3BpYy8yNC9hYm91dC1kZWNhbHMtaW50cm9kdWN0aW9uLXBhcnQtMSkKLSBbQWJvdXQgZGVjYWxzOiBDb252ZXJ0aW5nIG5vcm1hbCBtYXBzKlB0LiAyIG9mIHRoZSBmb3J1bSBwb3N0IHNlcmllcyBvbiBkZWNhbHMgYnkgSmlwKl0oaHR0cHM6Ly9mb3J1bS5mYWZvcmV2ZXIuY29tL3RvcGljLzI0NS9hYm91dC1kZWNhbHMtY29udmVydGluZy1ub3JtYWwtbWFwcykKLSBbQWJvdXQgZGVjYWxzOiBXb3JsZE1hY2hpbmUgdGVtcGxhdGVzKlB0LiAzIG9mIHRoZSBmb3J1bSBwb3N0IHNlcmllcyBvbiBkZWNhbHMgYnkgSmlwKl0oaHR0cHM6Ly9mb3J1bS5mYWZvcmV2ZXIuY29tL3RvcGljLzEwOTAvYWJvdXQtZGVjYWxzLXdvcmxkLW1hY2hpbmUtdGVtcGxhdGVzKQotIFtBYm91dCBkZWNhbHM6IEdlbmVyYXRpbmcgbWFwLXdpZGUgbm9ybWFsIHRleHR1cmUqUHQuIDQgb2YgdGhlIGZvcnVtIHBvc3Qgc2VyaWVzIG9uIGRlY2FscyBieSBKaXAqXShodHRwczovL2ZvcnVtLmZhZm9yZXZlci5jb20vdG9waWMvNzg1L2Fib3V0LWRlY2Fscy1nZW5lcmF0aW5nLWEtbWFwLXdpZGUtbm9ybWFsLXRleHR1cmUpCi0gW0Fib3V0IGRlY2FsczogR2VuZXJhdGluZyBhIG1hcC13aWRlIGxpZ2h0aW5nIHRleHR1cmUqUHQuIDUgb2YgdGhlIGZvcnVtIHBvc3Qgc2VyaWVzIG9uIGRlY2FscyBieSBKaXAqXShodHRwczovL2ZvcnVtLmZhZm9yZXZlci5jb20vdG9waWMvNzg2L2Fib3V0LWRlY2Fscy1nZW5lcmF0aW5nLWEtbWFwLXdpZGUtbGlnaHRpbmctdGV4dHVyZSkKey5saW5rcy1saXN0fQotIFtBYm91dCBjdXN0b20gZGVjYWxzIGFuZCBzdHJhdHVtcypBIGZvcnVtIHBvc3QgYnkgSmlwKl0oaHR0cHM6Ly9mb3J1bS5mYWZvcmV2ZXIuY29tL3RvcGljLzE5L2Fib3V0LWN1c3RvbS1kZWNhbHMtYW5kLXN0cmF0dW1zKQoKIyMgQWRhcHRpdmUgbWFwcGluZwpQcmlvciB0byB0aGUgaW50cm9kdWN0aW9uIG9mIGFkYXB0aXZlIG1hcHMsIGl0IHdhcyBhIGNvbW1vbiBwcmFjdGljZSB0byB1cGxvYWQgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgbWFwLCBlYWNoIG1vZGlmaWVkIHdpdGggc2xpZ2h0IHJlc291cmNlIHZhcmlhdGlvbnMgKGUuZy4sIENhbmlzIDR2NCwgQ2FuaXMgNXY1KS4gSG93ZXZlciwgd2l0aCB0aGUgYWR2ZW50IG9mIHRoZSBhZGFwdGl2ZSBtYXAgc2NyaXB0IGRldmVsb3BlZCBieSBDb29raWVOb29iIGFuZCBLZXlCbHVlICh3aXRoIGZ1cnRoZXIgbW9kaWZpY2F0aW9ucyBieSBzdmVubmlfYmFkYndvaSksIHRoaXMgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLiBBZGFwdGl2ZSBtYXBzIGVuYWJsZSB0aGUgY29uc29saWRhdGlvbiBvZiBzZXZlcmFsIHNpbWlsYXIgbWFwIHZlcnNpb25zIGludG8gYSBzaW5nbGUgbWFwLCBvZmZlcmluZyBhZHZhbmNlZCBtYXAgc2V0dGluZ3MgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBnYW1lIGxvYmJ5LiBTdWNoIHNldHRpbmdzIG1heSBhbGxvdyBwbGF5ZXJzIHRvIGFkanVzdCBtYXAgcmVzb3VyY2VzIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgcGxheWVycywgYXMgd2VsbCBhcyBhZGQgb3IgcmVtb3ZlIHJlc291cmNlcywgdW5pdHMsIGFuZCB3cmVja3MuIFR3byB0dXRvcmlhbHMsIFtvbmUgbGVnYWN5IHR1dG9yaWFsXSgvZW4vRGV2ZWxvcG1lbnQvTWFwcGluZy9BZGFwdGl2ZS1NYXBzKSBhbmQgW29uZSB1cGRhdGVkIHR1dG9yaWFsXSgvZW4vRGV2ZWxvcG1lbnQvTWFwcGluZy9BZGFwdGl2ZS1NYXBwaW5nLTIwMjEpIGFyZSBhdmFpbGFibGUuCgojIyBDcmVhdGluZyBtYXBzIGZvciB0aGUgbWF0Y2htYWtlciBwb29sClRoZSBbbWF0Y2htYWtlciBtYXAgcG9vbF0oL2VuL1BsYXkvQ2xpZW50L3RtbSkgY29uc2lzdHMgb2YgYSBzZWxlY3Rpb24gb2YgaGlnaCBxdWFsaXR5IG1hcHMgc2VsZWN0ZWQgYnkgdGhlIFttYXRjaG1ha2luZyB0ZWFtXSgvZW4vSW5mcmFzdHJ1Y3R1cmUvRkFGLVRlYW1zKS4gVG8gYmUgZWxpZ2FibGUgZm9yIGluY2x1c2lvbiBpbiB0aGUgbWFwIHBvb2wsIG1hcHMgaGF2ZSB0byBtZWV0IHNldmVyYWwgW3RlY2huaWNhbF0oL2VuL0RldmVsb3BtZW50L01hdGNobWFrZXIvbWF0Y2htYWtlci10ZWNobmljYWwtcmVxdWlyZW1lbnRzKSBhbmQgW3ByYWN0aWNhbF0oL2VuL0RldmVsb3BtZW50L01hdGNobWFrZXIvbWF0Y2htYWtlci1wcmFjdGljYWwtcmVxdWlyZW1lbnRzKSwgYXMgd2VsbCBhcyBxdWFsaXR5IHN0YW5kYXJkcy4gTWFwcyBzdWJtaXR0ZWQgZm9yIHJldmlldyBhcmUgcmV2aWV3ZWQgYWNjb3JkaW5nIHRvIGEgW3NlbWktYXV0b21hdGVkIHJldmlld2luZyBwcm9jZXNzXSgvZW4vRGV2ZWxvcG1lbnQvTWF0Y2htYWtlci9tYXRjaG1ha2VyLXJldmlldykuCgojIyBDYW1wYWlnbnMKRXhwZXJpZW5jZWQgbWFwcGVycyBtYXkgd2FudCB0byBhdHRlbXB0IGNyZWF0aW5nIGEgY2FtcGFpZ24uIENhbXBhaWducyBhcmUgY29vcGVyYXRpdmUgKENvb3ApIGdhbWVzIHdoZXJlIHVwIHRvIGZvdXIgcGxheWVycyBjYW4gcGxheSB0b2dldGhlciB0byBjb21wbGV0ZSBhIG1pc3Npb24gb3Igc3RvcnlsaW5lLiBVc2luZyB0aGUgRkFGIGxhdW5jaGVyLCBwbGF5ZXJzIGNhbiBwbGF5IHRoZSBvcmlnaW5hbCBjYW1wYWlnbnMgZnJvbSBTdXByZW1lIENvbW1hbmRlciBhbmQgU3VwcmVtZSBDb21tYW5kZXI6IEZvcmdlZCBBbGxpYW5jZSwgYXMgd2VsbCBhcyBuZXcgY29tbXVuaXR5LW1hZGUgQ29vcCBtYXBzLCB1c2luZyBGQUYncyBiYWxhbmNlZCBnYW1lcGxheS4KCkNvb3AgbWlzc2lvbnMgYXJlIHNjcmlwdGVkLCB3aXRoIGtleSBldmVudHMsIHN1Y2ggYXMgdW5sb2NraW5nIG5ldyByZWdpb25zIG9mIHRoZSBtYXAsIGhhdmluZyBiZWVuIHByZXBhcmVkIGluIGFkdmFuY2UgYnkgdGhlIGNhbXBhaWduIGRlc2lnbmVyLiBUaGlzIGFsbG93cyBjYW1wYWlnbiBkZXNpZ25lcnMgdG8gdGVsbCB0aGVpciBvd24gc3Rvcmllcywgd2l0aCB0aGVpciBvd24gYWV0aGVzdGljcy4gRGVzcGl0ZSBpdHMgc2VlbWluZ2x5IHN0cmFpZ2h0Zm9yd2FyZCBuYXR1cmUsIHRoZSBDb29wIGZlYXR1cmUgaGFzIGJlY29tZSBzZXJpb3VzbHkgcG9wdWxhciBhbW9uZyBwbGF5ZXJzLiBTaW1pbGFybHkgdG8gQUkgZ2FtZXMsIGNhbXBhaWducyBhcmUgdGhlIHBlcmZlY3QgZ2FtZSBtb2RlIHRvIHBsYXkgd2l0aCBzb21lIGZyaWVuZHMsIGFsb25nIHdpdGggcHJvdmlkaW5nIGEgdW5pcXVlIGNoYWxsZW5nZSBvdGhlcndpc2Ugbm90IHNlZW4gaW4gbm9ybWFsIHNraXJtaXNoLXR5cGUgZ2FtZXMuCgpIb3dldmVyLCBjcmVhdGluZyBjYW1wYWlnbnMgbWFwcyBpcyBzaWduaWZpY2FudGx5IG1vcmUgaW52b2x2ZWQgdGhhbiBjcmVhdGluZyBhIG5vcm1hbCBtYXAsIGFuZCByZXF1aXJlcyBhbiB1bmRlcnN0YW5kaW5nIG9mIFttaXNzaW9uIHNjcmlwdGlvbi5dKC9lbi9EZXZlbG9wbWVudC9NaXNzaW9ucy9NaXNzaW9uLVNjcmlwdGluZykuIFRvIHByb3ZpZGUgbmV3IGNhbXBhaWduIGRlc2lnbmVycyB3aXRoIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiB0byBnZXQgc3RhcnRlZCwgU3BlZWQyIGhhcyByZWxlYXNlZCBhIFt0dXRvcmlhbCBzZXJpZXNdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UExURURqempQbkdJckZxbXJqX3l2T0kyaWNVM2RFVl9TYykuIEZ1cnRoZXJtb3JlLCB0aGUgb2ZmaWNpYWwgRkFGIGRpc2NvcmQgaGFzIG1hZGUgYSBjaGFubmVsIGF2YWlsYWJsZSBmb3IgZGlzY3Vzc2luZyBjYW1wYWlnbiBkZXZlbG9wbWVudCwgd2hlcmUgeW91IG1heSBmaW5kIG1vcmUgaW5mb3JtYXRpb24uCgotIFtDb29wIG1pc3Npb24gbWFraW5nKkEgdmlkZW8gdHV0b3JpYWwgc2VyaWVzIGJ5IFNwZWVkMipdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3BsYXlsaXN0P2xpc3Q9UExURURqempQbkdJckZxbXJqX3l2T0kyaWNVM2RFVl9TYykKey5saW5rcy1saXN0fQoKIyMgVGhlIFNjZW5hcmlvIGZpbGUKVGhlIHNjZW5hcmlvIGZpbGUgY29udGFpbnMgLi4uIGFuZCBwcm92aWRlcyBpbmZvcm1hdGlvbiB0byB0aGUgZ2FtZSBvbiAuLi4KTWFudWFsIGVkaXRpbmcgb2YgdGhpcyBmaWxlIGlzIGdlbmVyYWxseSBub3QgcmVjb21tZW5kZWQsIGJ1dCBtYXkgYmUgbmVjZXNzYXJ5IGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4gW0luZm9ybWF0aW9uIG9uIGNoYW5nZXMgdG8gdGhlIHNjZW5hcmlvIGZpbGUgaXMgcHJvdmlkZWQgaGVyZS5dKC9lbi9EZXZlbG9wbWVudC9NYXBwaW5nL0Z1cnRoZXItY2hhbmdlcy10by10aGUtc2NlbmFyaW8tZmlsZSkKCiMgTWFwcGluZyBUb3VybmFtZW50cwpQZXJpb2RpY2FsbHksIHRoZSBGQUYgY29tbXVuaXR5IGNvbWVzIHRvZ2V0aGVyIHRvIG9yZ2FuaXplIG1hcHBpbmcgdG91cm5hbWVudHMgd2l0aCB0aGUgYWltIG9mIGZvc3RlcmluZyBjcmVhdGl2aXR5IGFuZCBpbnNwaXJpbmcgbWFwcGVycyB0byBwcm9kdWNlIGV4Y2VwdGlvbmFsIHdvcmtzLiBUaGVzZSB0b3VybmFtZW50cyBzZXJ2ZSBhcyBleGNpdGluZyBwbGF0Zm9ybXMgdGhhdCBjaGFsbGVuZ2UgbWFwLW1ha2VycyB0byBwdXNoIHRoZSBib3VuZGFyaWVzIG9mIHRoZWlyIHNraWxscyBhbmQgc2hvd2Nhc2UgdGhlaXIgaW5nZW51aXR5IGluIGNyYWZ0aW5nIHJlbWFya2FibGUgYW5kIGltbWVyc2l2ZSBtYXBzLiBEZXBlbmRpbmcgb24gdGhlIHRvdXJuYW1lbnQsIHBhcnRpY2lwYW50cyBtYXkgcHJlc2VudGVkIHdpdGggdW5pcXVlIGNoYWxsZW5nZXMgYW5kIHRoZW1lcywgZW5jb3VyYWdpbmcgdGhlbSB0byBleHBsb3JlIGlubm92YXRpdmUgY29uY2VwdHMgYW5kIHByb3ZpZGUgYW4gYXZlbnVlIGZvciByZWNvZ25pdGlvbiBhbmQgY2VsZWJyYXRpb24gb2Ygb3V0c3RhbmRpbmcgbWFwLW1ha2luZyBhY2hpZXZlbWVudHMsIGFzIHdlbGwgYXMgZW5jb3VyYWdlcyBjb2xsYWJvcmF0aW9uLCBrbm93bGVkZ2Ugc2hhcmluZywgYW5kIHRoZSBldm9sdXRpb24gb2YgbWFwLW1ha2luZyB0ZWNobmlxdWVzLiAKCkFzIHNvbWUgbWFwLW1ha2luZyBjb21wZXRpdGlvbnMgcGxhY2UgYSBzdHJvbmcgZW1waGFzaXMgb24gdGhvcm91Z2ggZG9jdW1lbnRhdGlvbiBvZiB0aGUgbWFwIGNyZWF0aW9uIHByb2Nlc3MgYW5kIGVuY291cmFnZSBwZWVyIHJldmlldywgc3R1ZHlpbmcgdGhlIHdvcmtzIG9mIGZlbGxvdyBtYXBwZXJzIGJlY29tZXMgYW4gaW52YWx1YWJsZSBtZWFucyBvZiBob25pbmcgb25lJ3Mgb3duIG1hcC1tYWtpbmcgc2tpbGxzLiBZb3UgbWF5IGZpbmQgYW4gb3ZlcnZpZXcgb2YgcmVjZW50IHRvdXJuYW1lbnRzIGJlbG93LgoKIyMgJ1ByaW5jZXNzIEJ1cmtlJyBtYXBwaW5nIHRvdXJuYW1lbnQKCiMjIExlZ2FjeSBmb3J1bSB0b3VybmFtZW50cwoKIyBPdGhlciByZXNvdXJjZXMKIyMgRGlzY29yZAojIyBDb21tdW5pdHktbWFkZSBBc3NldHMgYW5kIG90aGVyIHRvb2xzCkppcCdzIG1hcC13aWRlIGRlY2FsIHRlbXBsYXRlcwpLbHV0eidzIGJydXNoZXMKLSBbV29ybGQgSGVpZ2h0bWFwcGVyIHRvb2wqQW4gb25saW5lIHRvb2wgdG8gcmVuZGVyIGEgc2VjdGlvbiBvZiBlYXJ0aCBhcyBhIGhlaWdodG1hcCpdKGh0dHBzOi8vdGFuZ3JhbXMuZ2l0aHViLmlvL2hlaWdodG1hcHBlci8pCnsubGlua3MtbGlzdH0KIyMjIFByZXNldHMgZnJvbSBvZmZpY2lhbCBtYXBzCltTa3lib3hlcywgdGV4dHVyZSBsYXllcnMsIGxpZ2h0aW5nLCBhbmQgd2F0ZXIgcHJlc2V0c10oaHR0cHM6Ly9nb28uZ2wvb0E1WGNnKQp7LmxpbmtzLWxpc3R9CiMjIyBBZGRpdGlvbmFsIGJydXNoZXMKLSBbQWJvdXQgdGhlIE96b25leCBFZGl0b3I6IEFkZGluZyBjdXN0b20gYnJ1c2hlcyAqQSBmb3J1bSB0dXRvcmlhbCBvbiBjdXN0b20gYnJ1c2hlcyBieSBKaXAqXShodHRwczovL2ZvcnVtLmZhZm9yZXZlci5jb20vdG9waWMvMjc3L2Fib3V0LXdlYXRoZXItZ2VuZXJhdGluZy1jbG91ZHMpCnsubGlua3MtbGlzdH0KIyMgVmV0ZXJhbiBtYXBwZXIgd29ya2Zsb3dzIGFuZCBmb3J1bSB0aHJlYWRzCk1hbnkgb2YgdGhlIHZldGVyYW4gbWFwcGVycyBoYXZlIGNvbXBpbGVkIG1hcHMsIHJlc2VhcmNoIG5vdGVzLCBhbmQgY29tbWVudHMgb24gd29ya2Zsb3cgYW5kIG1hcCBkZXNpZ24gaW4gdmFyaW91cyBmb3J1bSB0aHJlYWRzLCBib3RoIG9uIHRoZSBvbGQgYW5kIG5ldyBmb3J1bS4gQXMgbXVjaCBjYW4gYmUgbGVhcm50IGZyb20gc3R1ZHlpbmcgaG93IG90aGVycyBhcHByb2FjaCBtYXAgbWFraW5nLCBsaW5rcyB0byB0aGVzZSBmb3J1bSB0aHJlYWRzIGFyZSBwcm92aWRlZCBoZXJlLgotIFtJbmRleExpYnJvcnVtJ3MgbWFwcyBhbmQgdHV0b3JpYWxzKkEgY29sbGVjdGlvbiBvZiBwb3N0cyBvbiBtYXBzLCB3b3JrZmxvd3MsIGFuZCBHYWVhIHR1dG9yaWFscypdKGh0dHBzOi8vZm9ydW0uZmFmb3JldmVyLmNvbS90b3BpYy82MDY2L2luZGV4LWxpYnJvcnVtLXMtbWFwcy1hc3NvcnRlZC1wcm9qZWN0cy1hbmQtZ2FlYS10dXRvcmlhbHMpCi0gW1N2ZW5uaV9iYWRid29pJ3MgbWFwcypBIGNvbGxlY3Rpb24gb2YgcG9zdHMgb24gbWFwcyBhbmQgd29ya2Zsb3dzKl0oaHR0cHM6Ly9mb3J1bXMuZmFmb3JldmVyLmNvbS92aWV3dG9waWMucGhwP2Y9NTMmdD0xNDk3NiNwMTUzMDA3KQotIFtNYWRNYXgncyBtYXBzIHBhZ2UqQSBjb2xsZWN0aW9uIG9mIHBvc3RzIG9uIG1hcHMgbWFkZSBieSBNYWRNYXgqXShodHRwczovL2ZvcnVtLmZhZm9yZXZlci5jb20vdG9waWMvNDE5Mi9tYWRtYXgtcy1tYXBzLXBhZ2UpCi0gW0ppcCdzIG1hcHMgYW5kIG90aGVycypBIGNvbGxlY3Rpb24gb2YgcG9zdHMgb24gbWFwcyBhbmQgb3RoZXIgcHJvamVjdCBieSBKaXAqXShodHRwczovL2ZvcnVtLmZhZm9yZXZlci5jb20vdG9waWMvNDk3L2ppcC1zLW1hcHMtYW5kLW90aGVycykKey5saW5rcy1saXN0fQoKIyMgTWFwcGluZyBndWlkZWxpbmVzIGZvciBjcmVhdGluZyBGQUYgdmVyc2lvbnMgb2YgZXhpc3RpbmcgbWFwcwpUb2RvCg==" checkout-date="2024-12-30T22:02:34.415Z" effective-permissions="eyJjb21tZW50cyI6eyJyZWFkIjpmYWxzZSwid3JpdGUiOmZhbHNlLCJtYW5hZ2UiOmZhbHNlfSwiaGlzdG9yeSI6eyJyZWFkIjp0cnVlfSwic291cmNlIjp7InJlYWQiOnRydWV9LCJwYWdlcyI6eyJyZWFkIjp0cnVlLCJ3cml0ZSI6dHJ1ZSwibWFuYWdlIjpmYWxzZSwiZGVsZXRlIjpmYWxzZSwic2NyaXB0IjpmYWxzZSwic3R5bGUiOmZhbHNlfSwic3lzdGVtIjp7Im1hbmFnZSI6ZmFsc2V9fQ=="></editor></div></body></html>